Bläddra i källkod

plugin/file: Use an iaid from request in response

Signed-off-by: Anatole Denis <anatole@unverle.fr>
Anatole Denis 5 år sedan
förälder
incheckning
1549302e6c
1 ändrade filer med 13 tillägg och 2 borttagningar
  1. 13 2
      plugins/file/plugin.go

+ 13 - 2
plugins/file/plugin.go

@@ -127,6 +127,17 @@ func LoadDHCPv6Records(filename string) (map[string]net.IP, error) {
 
 // Handler6 handles DHCPv6 packets for the file plugin
 func Handler6(req, resp dhcpv6.DHCPv6) (dhcpv6.DHCPv6, bool) {
+	m, err := req.GetInnerMessage()
+	if err != nil {
+		log.Errorf("BUG: could not decapsulate: %v", err)
+		return nil, true
+	}
+
+	if m.Options.OneIANA() == nil {
+		log.Debug("No address requested")
+		return resp, false
+	}
+
 	mac, err := dhcpv6.ExtractMAC(req)
 	if err != nil {
 		log.Warningf("Could not find client MAC, passing")
@@ -140,9 +151,9 @@ func Handler6(req, resp dhcpv6.DHCPv6) (dhcpv6.DHCPv6, bool) {
 		return resp, false
 	}
 	log.Debugf("found IP address %s for MAC %s", ipaddr, mac.String())
+
 	resp.AddOption(&dhcpv6.OptIANA{
-		// FIXME copy this field from the client, reject/drop if missing
-		IaId: [4]byte{0xaa, 0xbb, 0xcc, 0xdd},
+		IaId: m.Options.OneIANA().IaId,
 		Options: dhcpv6.IdentityOptions{Options: []dhcpv6.Option{
 			&dhcpv6.OptIAAddress{
 				IPv6Addr:          ipaddr,