[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())