From: Christian Mehlis Date: Tue, 12 Aug 2014 12:25:33 +0000 (+0200) Subject: dhcpv4: offer a valid configuration with DHCP NAK X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=428908569b8da45613891e21736c587894e0c449;p=oweals%2Fodhcpd.git dhcpv4: offer a valid configuration with DHCP NAK 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. --- diff --git a/src/dhcpv4.c b/src/dhcpv4.c index 2093ecd..0d75730 100644 --- a/src/dhcpv4.c +++ b/src/dhcpv4.c @@ -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)