Bläddra i källkod

Moved redis plugin to coredhcp/plugins

We are going to store non-core plugins in a separate repo

Signed-off-by: Andrea Barberio <insomniac@slackware.it>
Andrea Barberio 6 år sedan
förälder
incheckning
a10583e456
4 ändrade filer med 4 tillägg och 156 borttagningar
  1. 1 1
      cmds/coredhcp/main.go
  2. 1 0
      go.mod
  3. 2 0
      go.sum
  4. 0 155
      plugins/redis/plugin.go

+ 1 - 1
cmds/coredhcp/main.go

@@ -16,9 +16,9 @@ import (
 	_ "github.com/coredhcp/coredhcp/plugins/lease_time"
 	_ "github.com/coredhcp/coredhcp/plugins/netmask"
 	_ "github.com/coredhcp/coredhcp/plugins/range"
-	_ "github.com/coredhcp/coredhcp/plugins/redis"
 	_ "github.com/coredhcp/coredhcp/plugins/router"
 	_ "github.com/coredhcp/coredhcp/plugins/server_id"
+	_ "github.com/coredhcp/plugins/redis"
 	"github.com/sirupsen/logrus"
 )
 

+ 1 - 0
go.mod

@@ -4,6 +4,7 @@ go 1.12
 
 require (
 	github.com/chappjc/logrus-prefix v0.0.0-20180227015900-3a1d64819adb
+	github.com/coredhcp/plugins v0.0.0-20191121175107-a201c0b24a48
 	github.com/gomodule/redigo v2.0.0+incompatible
 	github.com/hugelgupf/socketpair v0.0.0-20190730060125-05d35a94e714 // indirect
 	github.com/insomniacslk/dhcp v0.0.0-20191112140002-c05874014012

+ 2 - 0
go.sum

@@ -11,6 +11,8 @@ github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghf
 github.com/chappjc/logrus-prefix v0.0.0-20180227015900-3a1d64819adb h1:aZTKxMminKeQWHtzJBbV8TttfTxzdJ+7iEJFE6FmUzg=
 github.com/chappjc/logrus-prefix v0.0.0-20180227015900-3a1d64819adb/go.mod h1:xzXc1S/L+64uglB3pw54o8kqyM6KFYpTeC9Q6+qZIu8=
 github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
+github.com/coredhcp/plugins v0.0.0-20191121175107-a201c0b24a48 h1:xY6m+9mE7ndS+oe2YPVZhcKMXa46Wl+kd41RCNK94is=
+github.com/coredhcp/plugins v0.0.0-20191121175107-a201c0b24a48/go.mod h1:hJF/oFJEhbRGGTlpw/34hdLrKVR2rhafe1g+qwez4H8=
 github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
 github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
 github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=

+ 0 - 155
plugins/redis/plugin.go

@@ -1,155 +0,0 @@
-// Copyright 2018-present the CoreDHCP Authors. All rights reserved
-// This source code is licensed under the MIT license found in the
-// LICENSE file in the root directory of this source tree.
-
-package redisplugin
-
-import (
-	"errors"
-	"fmt"
-	"net"
-	"strings"
-	"time"
-
-	"github.com/coredhcp/coredhcp/handler"
-	"github.com/coredhcp/coredhcp/logger"
-	"github.com/coredhcp/coredhcp/plugins"
-	"github.com/gomodule/redigo/redis"
-	"github.com/insomniacslk/dhcp/dhcpv4"
-	"github.com/insomniacslk/dhcp/dhcpv6"
-)
-
-// various global variables
-var (
-	log  = logger.GetLogger("plugins/redis")
-	pool *redis.Pool
-)
-
-func init() {
-	plugins.RegisterPlugin("redis", setupRedis6, setupRedis4)
-}
-
-// Handler6 handles DHCPv6 packets for the redis plugin
-func Handler6(req, resp dhcpv6.DHCPv6) (dhcpv6.DHCPv6, bool) {
-	// TODO add IPv6 support
-	return nil, true
-}
-
-// Handler4 handles DHCPv4 packets for the redis plugin
-func Handler4(req, resp *dhcpv4.DHCPv4) (*dhcpv4.DHCPv4, bool) {
-	// Get redis connection from pool
-	conn := pool.Get()
-
-	// defer redis connection close so we don't leak connections
-	defer conn.Close()
-
-	// Get all options for a MAC
-	options, err := redis.StringMap(conn.Do("HGETALL", "mac:"+req.ClientHWAddr.String()))
-
-	// Handle redis error
-	if err != nil {
-		log.Printf("Redis error: %s...dropping request", err)
-		return nil, true
-	}
-
-	// Handle no hash found
-	if len(options) == 0 {
-		log.Printf("MAC %s not found...dropping request", req.ClientHWAddr.String())
-		return nil, true
-	}
-
-	// Handle no ipv4 field
-	if options["ipv4"] == "" {
-		log.Printf("MAC %s has no ipv4 field...dropping request", req.ClientHWAddr.String())
-		return nil, true
-	}
-
-	// Loop through options returned and assign as needed
-	for option, value := range options {
-		switch option {
-		case "ipv4":
-			ipaddr, ipnet, err := net.ParseCIDR(value)
-			if err != nil {
-				log.Printf("MAC %s malformed IP %s error: %s...dropping request", req.ClientHWAddr.String(), value, err)
-				return nil, true
-			}
-			resp.YourIPAddr = ipaddr
-			resp.Options.Update(dhcpv4.OptSubnetMask(ipnet.Mask))
-			log.Printf("MAC %s assigned IPv4 address %s", req.ClientHWAddr.String(), value)
-
-		case "router":
-			router := net.ParseIP(value)
-			if router.To4() == nil {
-				log.Printf("MAC %s Invalid router option: %s...option skipped", req.ClientHWAddr.String(), value)
-				break
-			}
-			resp.Options.Update(dhcpv4.OptRouter(router))
-
-		case "dns":
-			var dnsServers4 []net.IP
-			servers := strings.Split(value, ",")
-			for _, server := range servers {
-				DNSServer := net.ParseIP(server)
-				if DNSServer.To4() == nil {
-					log.Printf("MAC %s Invalid dns server: %s...dropping request", req.ClientHWAddr.String(), server)
-					return nil, true
-				}
-				dnsServers4 = append(dnsServers4, DNSServer)
-			}
-			if req.IsOptionRequested(dhcpv4.OptionDomainNameServer) {
-				resp.Options.Update(dhcpv4.OptDNS(dnsServers4...))
-			}
-
-		case "leaseTime":
-			lt, err := time.ParseDuration(value)
-			if err != nil {
-				log.Printf("MAC %s invalid lease time %s...option skipped", req.ClientHWAddr.String(), value)
-				break
-			}
-			// Set lease time
-			resp.Options.Update(dhcpv4.OptIPAddressLeaseTime(lt))
-
-		default:
-			log.Printf("MAC %s found un-handled option %s...option skipped", req.ClientHWAddr.String(), option)
-		}
-	}
-
-	return resp, false
-}
-
-func setupRedis6(args ...string) (handler.Handler6, error) {
-	// TODO setup function for IPv6
-	log.Warning("not implemented for IPv6")
-	return Handler6, nil
-}
-
-func setupRedis4(args ...string) (handler.Handler4, error) {
-	_, h4, err := setupRedis(false, args...)
-	return h4, err
-}
-
-func setupRedis(v6 bool, args ...string) (handler.Handler6, handler.Handler4, error) {
-	if len(args) < 1 {
-		return nil, nil, fmt.Errorf("invalid number of arguments, want: 1 (redis server:port), got: %d", len(args))
-	}
-	if args[0] == "" {
-		return nil, nil, errors.New("Redis server can't be empty")
-	}
-
-	if v6 {
-		log.Printf("Using redis server %s for DHCPv6 static leases", args[0])
-	} else {
-		log.Printf("Using redis server %s for DHCPv4 static leases", args[0])
-	}
-
-	// Initialize Redis Pool
-	pool = &redis.Pool{
-		MaxIdle:     10,
-		IdleTimeout: 240 * time.Second,
-		Dial: func() (redis.Conn, error) {
-			return redis.Dial("tcp", args[0])
-		},
-	}
-
-	return Handler6, Handler4, nil
-}