Merge pull request #21 from mehlis/fix-nak-by-doing-valid-reply
authorsbyx <steven@midlink.org>
Tue, 12 Aug 2014 13:05:17 +0000 (15:05 +0200)
committersbyx <steven@midlink.org>
Tue, 12 Aug 2014 13:05:17 +0000 (15:05 +0200)
dhcpv4: offer a valid configuration with DHCP NAK

1  2 
src/dhcpv4.c

diff --combined src/dhcpv4.c
@@@ -334,7 -334,16 +334,16 @@@ static void handle_dhcpv4(void *addr, v
        } 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)
                                        len, search_buf);
        }
  
 -      dhcpv4_put(&reply, &cookie, DHCPV4_OPT_ROUTER, 4, &ifaddr.sin_addr);
 -
 +      if (iface->dhcpv4_router_cnt == 0)
 +              dhcpv4_put(&reply, &cookie, DHCPV4_OPT_ROUTER, 4, &ifaddr.sin_addr);
 +      else
 +              dhcpv4_put(&reply, &cookie, DHCPV4_OPT_ROUTER,
 +                              4 * iface->dhcpv4_router_cnt, iface->dhcpv4_router);
  
  
        if (iface->dhcpv4_dns_cnt == 0)