[systemd-devel] [PATCH 05/11] libsystemd-dhcp: Fix receiving of other message when expecting Ack

Patrik Flykt patrik.flykt at linux.intel.com
Fri Dec 20 07:16:14 PST 2013


When a DHCP Nak is received, return a DHCP_EVENT_NO_LEASE event. If
some other DHCP message is received or an error happens when parsing
options, return -ENOMSG in order to ignore the packet. There may be
more than one server serving the same subnet, each server will send
its Offer to the client.
---
 src/libsystemd-dhcp/dhcp-client.c |    9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/src/libsystemd-dhcp/dhcp-client.c b/src/libsystemd-dhcp/dhcp-client.c
index 18a6e3c..7dc1546 100644
--- a/src/libsystemd-dhcp/dhcp-client.c
+++ b/src/libsystemd-dhcp/dhcp-client.c
@@ -731,8 +731,15 @@ static int client_receive_ack(sd_dhcp_client *client, DHCPPacket *offer,
         len = len - DHCP_IP_UDP_SIZE;
         r = dhcp_option_parse(&offer->dhcp, len, client_parse_offer, lease);
 
-        if (r != DHCP_ACK)
+        if (r == DHCP_NAK) {
+                r = DHCP_EVENT_NO_LEASE;
                 goto error;
+        }
+
+        if (r != DHCP_ACK) {
+                r = -ENOMSG;
+                goto error;
+        }
 
         lease->address = offer->dhcp.yiaddr;
 
-- 
1.7.10.4



More information about the systemd-devel mailing list