From: Justin Cinkelj <justin.cink...@xlab.si>
Committer: Nadav Har'El <n...@scylladb.com>
Branch: master

DHCP - additional refinements

From RFC 2131, page 30-31
o DHCPREQUEST generated during SELECTING state:
  Client inserts the address of the selected server in 'server
  identifier', 'ciaddr' MUST be zero, 'requested IP address MUST be
  filled in with the yiaddr value from the chosen DHCPOFFER.

o DHCPREQUEST generated during RENEWING state:
  'server identifier' MUST NOT be filled in, 'requested IP address'
  option MUST NOT be filled in, 'ciaddr' MUST be filled in with
  client's IP address.

I understand "'server identifier'/'requested IP address' MUST NOT be filled in"
as instruction to not include those two DHCP OPTIONS into RENEWING/REBINDING
DHCPREQUEST. So I tried to add additional change, as an attempt to be more RFC compliant. After that change, code still works - well, at least against dnsmasq.

Waldek Kozaczuk tested against InfoBlox and in AWS and it works.

Message-Id: <1436431666.124738710.1490222473623.javamail.zim...@zimbra.xlab.si>

---
diff --git a/core/dhcp.cc b/core/dhcp.cc
--- a/core/dhcp.cc
+++ b/core/dhcp.cc
@@ -253,12 +253,16 @@ namespace dhcp {
         ip::address_v4::bytes_type dhcp_server_ip = sip.to_bytes();
         ip::address_v4::bytes_type requested_ip = yip.to_bytes();
options = add_option(options, DHCP_OPTION_MESSAGE_TYPE, 1, DHCP_MT_REQUEST); - options = add_option(options, DHCP_OPTION_DHCP_SERVER, 4, (u8*)&dhcp_server_ip);
+        if(request_packet_type == DHCP_REQUEST_SELECTING) {
+ options = add_option(options, DHCP_OPTION_DHCP_SERVER, 4, (u8*)&dhcp_server_ip);
+        }
         char hostname[256];
         if (0 == gethostname(hostname, sizeof(hostname))) {
options = add_option(options, DHCP_OPTION_HOSTNAME, strlen(hostname), (u8*)hostname);
         }
- options = add_option(options, DHCP_OPTION_REQUESTED_ADDRESS, 4, (u8*)&requested_ip);
+        if(request_packet_type == DHCP_REQUEST_SELECTING) {
+ options = add_option(options, DHCP_OPTION_REQUESTED_ADDRESS, 4, (u8*)&requested_ip);
+        }
         options = add_option(options, DHCP_OPTION_PARAMETER_REQUEST_LIST,
             sizeof(requested_options), requested_options);
         *options++ = DHCP_OPTION_END;

--
You received this message because you are subscribed to the Google Groups "OSv 
Development" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to osv-dev+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to