diff options
| author | Roy Marples <roy@marples.name> | 2019-01-30 22:40:12 +0000 |
|---|---|---|
| committer | Roy Marples <roy@marples.name> | 2019-01-30 22:40:12 +0000 |
| commit | 2469690184fb77bf3777d782f495203f8245174e (patch) | |
| tree | 474240fa9586feebe4f0d0fd431e72786c81b286 /src/dhcpcd.c | |
| parent | 47c4c88b802379aa15675bb6cbb32e36a4386b09 (diff) | |
| download | dhcpcd-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.c | 20 |
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) { |
