summaryrefslogtreecommitdiffstats
path: root/src/dhcpcd.c
diff options
context:
space:
mode:
authorRoy Marples <roy@marples.name>2019-01-30 22:40:12 +0000
committerRoy Marples <roy@marples.name>2019-01-30 22:40:12 +0000
commit2469690184fb77bf3777d782f495203f8245174e (patch)
tree474240fa9586feebe4f0d0fd431e72786c81b286 /src/dhcpcd.c
parent47c4c88b802379aa15675bb6cbb32e36a4386b09 (diff)
downloaddhcpcd-2469690184fb77bf3777d782f495203f8245174e.tar.xz
link: introduce LINK_DOWN_IFFUP
Set this state so when we preserve config on carrier loss. This allows us to remove config if the interface is then brought down.
Diffstat (limited to 'src/dhcpcd.c')
-rw-r--r--src/dhcpcd.c20
1 files changed, 13 insertions, 7 deletions
diff --git a/src/dhcpcd.c b/src/dhcpcd.c
index 72bfe5e7..a2cd04e2 100644
--- a/src/dhcpcd.c
+++ b/src/dhcpcd.c
@@ -755,24 +755,30 @@ dhcpcd_handlecarrier(struct dhcpcd_ctx *ctx, int carrier, unsigned int flags,
if (ifp->carrier != LINK_DOWN) {
if (ifp->carrier == LINK_UP)
loginfox("%s: carrier lost", ifp->name);
- ifp->carrier = LINK_DOWN;
+#ifdef NOCARRIER_PRESERVE_IP
+ if (ifp->flags & IFF_UP)
+ ifp->carrier = LINK_DOWN_IFFUP;
+ else
+#endif
+ ifp->carrier = LINK_DOWN;
script_runreason(ifp, "NOCARRIER");
#ifdef NOCARRIER_PRESERVE_IP
+ if (ifp->flags & IFF_UP) {
#ifdef ARP
- arp_drop(ifp);
+ arp_drop(ifp);
#endif
#ifdef INET
- dhcp_abort(ifp);
+ dhcp_abort(ifp);
#endif
#ifdef INET6
- ipv6nd_expire(ifp, 0);
+ ipv6nd_expire(ifp, 0);
#endif
#ifdef DHCP6
- dhcp6_abort(ifp);
+ dhcp6_abort(ifp);
#endif
-#else
- dhcpcd_drop(ifp, 0);
+ } else
#endif
+ dhcpcd_drop(ifp, 0);
}
} else if (carrier == LINK_UP && ifp->flags & IFF_UP) {
if (ifp->carrier != LINK_UP) {