aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDenis Kenzior <denkenz@gmail.com>2022-09-26 22:42:35 -0500
committerDenis Kenzior <denkenz@gmail.com>2022-09-26 22:42:35 -0500
commit39c7dd519f31d6142e3fdc2ebdf08458d04f4753 (patch)
tree09d13116ab9936ae3ac3ad624fb1d9cd739db98c
parentd9b7c9bd17ba7639a8d1f02102180b92aa86c710 (diff)
dhcp: Send LEASE_EXPIRED in case RENEW gets NAKed
In case the DHCP server NAKs our request, dhcp_client would always send a NO_LEASE event. However, this could result in addresses not being cleaned up properly. In case a RENEW or a REBIND request was NAKed, send a LEASE_EXPIRED event instead.
-rw-r--r--ell/dhcp.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/ell/dhcp.c b/ell/dhcp.c
index afd5c34f..9b401722 100644
--- a/ell/dhcp.c
+++ b/ell/dhcp.c
@@ -820,6 +820,7 @@ static void dhcp_client_rx_message(const void *data, size_t len, void *userdata,
const void *v;
int r, e;
struct in_addr ia;
+ enum l_dhcp_client_event event = L_DHCP_CLIENT_EVENT_LEASE_EXPIRED;
CLIENT_DEBUG("");
@@ -874,6 +875,8 @@ static void dhcp_client_rx_message(const void *data, size_t len, void *userdata,
dhcp_client_handle_offer(client, message, len);
return;
}
+
+ event = L_DHCP_CLIENT_EVENT_NO_LEASE;
/* Fall through */
case DHCP_STATE_RENEWING:
case DHCP_STATE_REBINDING:
@@ -882,8 +885,7 @@ static void dhcp_client_rx_message(const void *data, size_t len, void *userdata,
CLIENT_INFO("Received NAK, Stopping...");
l_dhcp_client_stop(client);
- dhcp_client_event_notify(client,
- L_DHCP_CLIENT_EVENT_NO_LEASE);
+ dhcp_client_event_notify(client, event);
return;
}