aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--networking/udhcp/dhcpd.c18
1 files changed, 11 insertions, 7 deletions
diff --git a/networking/udhcp/dhcpd.c b/networking/udhcp/dhcpd.c
index ac77b511d..6fb48a19a 100644
--- a/networking/udhcp/dhcpd.c
+++ b/networking/udhcp/dhcpd.c
@@ -448,9 +448,9 @@ int udhcpd_main(int argc UNUSED_PARAM, char **argv)
448 /* Get SERVER_ID if present */ 448 /* Get SERVER_ID if present */
449 server_id_opt = udhcp_get_option(&packet, DHCP_SERVER_ID); 449 server_id_opt = udhcp_get_option(&packet, DHCP_SERVER_ID);
450 if (server_id_opt) { 450 if (server_id_opt) {
451 uint32_t server_id_net; 451 uint32_t server_id_network_order;
452 move_from_unaligned32(server_id_net, server_id_opt); 452 move_from_unaligned32(server_id_network_order, server_id_opt);
453 if (server_id_net != server_config.server_nip) { 453 if (server_id_network_order != server_config.server_nip) {
454 /* client talks to somebody else */ 454 /* client talks to somebody else */
455 log1("server ID doesn't match, ignoring"); 455 log1("server ID doesn't match, ignoring");
456 continue; 456 continue;
@@ -584,11 +584,15 @@ o DHCPREQUEST generated during REBINDING state:
584 send_ACK(&packet, lease->lease_nip); 584 send_ACK(&packet, lease->lease_nip);
585 break; 585 break;
586 } 586 }
587 if (server_id_opt) { 587 /* No lease for this MAC, or lease IP != requested IP */
588 /* client was talking specifically to us. 588
589 * "No, we don't have this IP for you". */ 589 if (server_id_opt /* client is in SELECTING state */
590 || requested_ip_opt /* client is in INIT-REBOOT state */
591 ) {
592 /* "No, we don't have this IP for you" */
590 send_NAK(&packet); 593 send_NAK(&packet);
591 } 594 } /* else: client is in RENEWING or REBINDING, do not answer */
595
592 break; 596 break;
593 597
594 case DHCPDECLINE: 598 case DHCPDECLINE: