diff --git a/debian/patches/networkd-do-not-drop-config-for-unmanaged-interfaces.patch b/debian/patches/networkd-do-not-drop-config-for-unmanaged-interfaces.patch new file mode 100644 index 000000000..bd8bcd5ea --- /dev/null +++ b/debian/patches/networkd-do-not-drop-config-for-unmanaged-interfaces.patch @@ -0,0 +1,32 @@ +From: =?utf-8?q?Mantas_Mikul=C4=97nas?= +Date: Wed, 24 Aug 2016 18:26:48 +0300 +Subject: networkd: do not drop config for unmanaged interfaces + +Flushing foreign configuration for unmanaged interfaces is outright +evil, especially when it's a regular occurence with Wi-Fi. + +Fixes: 3104883ddc24 "networkd: remove route if carrier is lost" +Ref: #3831 +--- + src/network/networkd-link.c | 8 +++++--- + 1 file changed, 5 insertions(+), 3 deletions(-) + +diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c +index 0eaa25e..2a8bdd0 100644 +--- a/src/network/networkd-link.c ++++ b/src/network/networkd-link.c +@@ -2897,9 +2897,11 @@ static int link_carrier_lost(Link *link) { + if (r < 0) + return r; + +- r = link_drop_foreign_config(link); +- if (r < 0) +- return r; ++ if (link->state != LINK_STATE_UNMANAGED) { ++ r = link_drop_foreign_config(link); ++ if (r < 0) ++ return r; ++ } + + r = link_handle_bound_by_list(link); + if (r < 0) diff --git a/debian/patches/networkd-remove-route-if-carrier-is-lost-3831.patch b/debian/patches/networkd-remove-route-if-carrier-is-lost-3831.patch new file mode 100644 index 000000000..860094dcc --- /dev/null +++ b/debian/patches/networkd-remove-route-if-carrier-is-lost-3831.patch @@ -0,0 +1,64 @@ +From: Susant Sahani +Date: Thu, 4 Aug 2016 19:26:39 +0530 +Subject: networkd: remove route if carrier is lost (#3831) + +Fixes #3669. +--- + src/network/networkd-link.c | 37 +++++++++++++++++++++++++++++++++++++ + 1 file changed, 37 insertions(+) + +diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c +index 82f5615..0eaa25e 100644 +--- a/src/network/networkd-link.c ++++ b/src/network/networkd-link.c +@@ -2318,6 +2318,35 @@ static int link_drop_foreign_config(Link *link) { + return 0; + } + ++static int link_drop_config(Link *link) { ++ Address *address; ++ Route *route; ++ Iterator i; ++ int r; ++ ++ SET_FOREACH(address, link->addresses, i) { ++ /* we consider IPv6LL addresses to be managed by the kernel */ ++ if (address->family == AF_INET6 && in_addr_is_link_local(AF_INET6, &address->in_addr) == 1) ++ continue; ++ ++ r = address_remove(address, link, link_address_remove_handler); ++ if (r < 0) ++ return r; ++ } ++ ++ SET_FOREACH(route, link->routes, i) { ++ /* do not touch routes managed by the kernel */ ++ if (route->protocol == RTPROT_KERNEL) ++ continue; ++ ++ r = route_remove(route, link, link_route_remove_handler); ++ if (r < 0) ++ return r; ++ } ++ ++ return 0; ++} ++ + static int link_update_lldp(Link *link) { + int r; + +@@ -2864,6 +2893,14 @@ static int link_carrier_lost(Link *link) { + return r; + } + ++ r = link_drop_config(link); ++ if (r < 0) ++ return r; ++ ++ r = link_drop_foreign_config(link); ++ if (r < 0) ++ return r; ++ + r = link_handle_bound_by_list(link); + if (r < 0) + return r; diff --git a/debian/patches/series b/debian/patches/series index 21c326051..9bf45b93f 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -13,6 +13,8 @@ nspawn-detect-SECCOMP-availability-skip-audit-filter-if-u.patch shared-recognize-DNS-names-with-more-than-one-trailing-do.patch networkd-limit-the-number-of-routes-to-the-kernel-limit-4.patch systemctl-consider-service-running-only-when-it-is-in-act.patch +networkd-remove-route-if-carrier-is-lost-3831.patch +networkd-do-not-drop-config-for-unmanaged-interfaces.patch debian/Use-Debian-specific-config-files.patch debian/don-t-try-to-start-autovt-units-when-not-running-wit.patch debian/Make-logind-hostnamed-localed-timedated-D-Bus-activa.patch