summaryrefslogtreecommitdiffstats
path: root/src/dhcpcd.c
diff options
context:
space:
mode:
authorRoy Marples <roy@marples.name>2019-01-17 11:44:08 +0000
committerRoy Marples <roy@marples.name>2019-01-17 11:44:08 +0000
commit28a9b91a3667af48a45ff0cf91d4aed0cc9daf85 (patch)
treee5788f700d5a6aaeb89661e0786c5e70c9d82a86 /src/dhcpcd.c
parent63fac97fee20c076650225c0ebeaafe9aadb1c90 (diff)
downloaddhcpcd-28a9b91a3667af48a45ff0cf91d4aed0cc9daf85.tar.xz
IPv4LL: Preserve address when carrier drops
Apple Conformance testing now requires this. However, if associated SSID changes on wireless networks, any remembered address is reset.
Diffstat (limited to 'src/dhcpcd.c')
-rw-r--r--src/dhcpcd.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/dhcpcd.c b/src/dhcpcd.c
index 6c46820b..616a2ee0 100644
--- a/src/dhcpcd.c
+++ b/src/dhcpcd.c
@@ -759,12 +759,16 @@ dhcpcd_handlecarrier(struct dhcpcd_ctx *ctx, int carrier, unsigned int flags,
#endif
memcpy(ossid, ifp->ssid, ifp->ssid_len);
if_getssid(ifp);
-#ifdef NOCARRIER_PRESERVE_IP
+
/* If we changed SSID network, drop leases */
if (ifp->ssid_len != olen ||
memcmp(ifp->ssid, ossid, ifp->ssid_len))
+ {
+#ifdef NOCARRIER_PRESERVE_IP
dhcpcd_drop(ifp, 0);
#endif
+ ipv4ll_reset(ifp);
+ }
}
dhcpcd_initstate(ifp, 0);
script_runreason(ifp, "CARRIER");