dhcpv4: offer a valid configuration with DHCP NAK
authorChristian Mehlis <christian@m3hlis.de>
Tue, 12 Aug 2014 12:25:33 +0000 (14:25 +0200)
committerChristian Mehlis <christian@m3hlis.de>
Tue, 12 Aug 2014 12:59:37 +0000 (14:59 +0200)
On network change the client requests a non valid
configuration. In this case we have to reply with
a DHCP NAK. But this NAK can include a valid
configuration like an ACK does.

With this change iDevices and Androids can finish
DHCP even with wrong configuration in first
REQUEST with two packets and without any additional
timeouts and round trips.

src/dhcpv4.c

index 2093ecd037b173df7b286f9e08983dae945a8266..0d7573011dba88379548ac4ab5bcfa223422b516 100644 (file)
@@ -334,7 +334,16 @@ static void handle_dhcpv4(void *addr, void *data, size_t len,
        } else if (reqmsg == DHCPV4_MSG_REQUEST && reqaddr.s_addr &&
                        reqaddr.s_addr != htonl(lease->addr)) {
                msg = DHCPV4_MSG_NAK;
-               lease = NULL;
+               /*
+                * DHCP client requested an IP which we can't offer to him. Probably the
+                * client changed the network. The reply type is set to DHCPV4_MSG_NAK,
+                * because the client should not use that IP.
+                *
+                * For modern devices we build an answer that includes a valid IP, like
+                * a DHCPV4_MSG_ACK. The client will use that IP and doesn't need to
+                * perform additional DHCP round trips.
+                *
+                */
        }
 
        if (reqmsg == DHCPV4_MSG_DECLINE || reqmsg == DHCPV4_MSG_RELEASE)