[netstack] Add 'End' option to DHCP options
Terminate DHCP options with a single 0xff byte, as per RFC2132.
Change-Id: I8d321cfdb37cc86975dc52984de01479e889ea3c
diff --git a/dhcp/client.go b/dhcp/client.go
index c40c3e0..46b6e78 100644
--- a/dhcp/client.go
+++ b/dhcp/client.go
@@ -171,7 +171,7 @@
copy(clientID[1:], c.linkAddr)
discOpts = append(discOpts, option{optClientID, clientID})
}
- h := make(header, headerBaseSize+discOpts.len())
+ h := make(header, headerBaseSize+discOpts.len()+1)
h.init()
h.setOp(opRequest)
copy(h.xidbytes(), xid[:])
diff --git a/dhcp/dhcp.go b/dhcp/dhcp.go
index de0f65f..af1dae7 100644
--- a/dhcp/dhcp.go
+++ b/dhcp/dhcp.go
@@ -160,6 +160,8 @@
copy(h[i+2:i+2+len(opt.body)], opt.body)
i += 2 + len(opt.body)
}
+ h[i] = 255 // End option
+ i++
for ; i < len(h); i++ {
h[i] = 0
}
diff --git a/dhcp/server.go b/dhcp/server.go
index 56a1d33..7ac66d5 100644
--- a/dhcp/server.go
+++ b/dhcp/server.go
@@ -269,7 +269,7 @@
// DHCPOFFER
opts = options{{optDHCPMsgType, []byte{byte(dhcpOFFER)}}}
opts = append(opts, s.cfgopts...)
- h := make(header, headerBaseSize+opts.len())
+ h := make(header, headerBaseSize+opts.len()+1)
h.init()
h.setOp(opReply)
copy(h.xidbytes(), hreq.xidbytes())
@@ -285,7 +285,7 @@
{optDHCPMsgType, []byte{byte(dhcpNAK)}},
{optDHCPServer, []byte(s.cfg.ServerAddress)},
})
- h := make(header, headerBaseSize+opts.len())
+ h := make(header, headerBaseSize+opts.len()+1)
h.init()
h.setOp(opReply)
copy(h.xidbytes(), hreq.xidbytes())
@@ -335,7 +335,7 @@
// DHCPACK
opts = []option{{optDHCPMsgType, []byte{byte(dhcpACK)}}}
opts = append(opts, s.cfgopts...)
- h := make(header, headerBaseSize+opts.len())
+ h := make(header, headerBaseSize+opts.len()+1)
h.init()
h.setOp(opReply)
copy(h.xidbytes(), hreq.xidbytes())