Quellcode durchsuchen

dhcpv6: Joining multicast group offloaded to dhcp library

This has been offloaded to the DHCP library in
https://github.com/insomniacslk/dhcp/pull/278

Signed-off-by: Andrea Barberio <insomniac@slackware.it>
Andrea Barberio vor 6 Jahren
Ursprung
Commit
3fc2408960
3 geänderte Dateien mit 16 neuen und 18 gelöschten Zeilen
  1. 2 2
      cmds/coredhcp/config.yml.example
  2. 13 1
      config/config.go
  3. 1 15
      coredhcp.go

+ 2 - 2
cmds/coredhcp/config.yml.example

@@ -1,10 +1,10 @@
 server6:
-    listen: '[ff02::1:2]:547'
     interface: "eth0"
+    #listen: 'your-unicast-address:547'
     plugins:
         - server_id: LL 00:de:ad:be:ef:00
         - file: "leases.txt"
-        # - dns: 8.8.8.8 8.8.4.4 2001:4860:4860::8888 2001:4860:4860::8844
+        # - dns: 2001:4860:4860::8888 2001:4860:4860::8844
 
 server4:
     listen: '0.0.0.0:67'

+ 13 - 1
config/config.go

@@ -7,6 +7,8 @@ import (
 	"strings"
 
 	"github.com/coredhcp/coredhcp/logger"
+	"github.com/insomniacslk/dhcp/dhcpv4"
+	"github.com/insomniacslk/dhcp/dhcpv6"
 	"github.com/spf13/cast"
 	"github.com/spf13/viper"
 )
@@ -126,7 +128,17 @@ func (c *Config) getListenAddress(ver protocolVersion) (*net.UDPAddr, error) {
 	}
 	addr := c.v.GetString(fmt.Sprintf("server%d.listen", ver))
 	if addr == "" {
-		return nil, ConfigErrorFromString("dhcpv%d: missing `server%d.listen` directive", ver, ver)
+		// return default listener
+		if ver == protocolV6 {
+			return &net.UDPAddr{
+				IP:   net.IPv6unspecified,
+				Port: dhcpv6.DefaultServerPort,
+			}, nil
+		}
+		return &net.UDPAddr{
+			IP:   net.IPv4zero,
+			Port: dhcpv4.ServerPort,
+		}, nil
 	}
 	ipStr, portStr, err := net.SplitHostPort(addr)
 	if err != nil {

+ 1 - 15
coredhcp.go

@@ -191,21 +191,7 @@ func (s *Server) Start() error {
 	// listen
 	if s.Config.Server6 != nil {
 		log.Printf("Starting DHCPv6 listener on %v", s.Config.Server6.Listener)
-		listener := s.Config.Server6.Listener
-		ifname := s.Config.Server6.Interface
-		opts := make([]server6.ServerOpt, 0)
-		if listener.IP.IsMulticast() {
-			iface, err := net.InterfaceByName(ifname)
-			if err != nil {
-				return err
-			}
-			conn, err := net.ListenMulticastUDP("udp6", iface, listener)
-			if err != nil {
-				return err
-			}
-			opts = append(opts, server6.WithConn(conn))
-		}
-		s.Server6, err = server6.NewServer(s.Config.Server6.Listener, s.MainHandler6, opts...)
+		s.Server6, err = server6.NewServer(s.Config.Server6.Interface, s.Config.Server6.Listener, s.MainHandler6)
 		if err != nil {
 			return err
 		}