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.