From 8d9e033ecd39e82a2dcc2500f75d92cf3c023da3 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Fri, 15 Apr 2016 20:53:15 +0200 Subject: [PATCH] platform: ensure refetching routes when link goes down It's not enough to consider IF_LOWER_UP flag. Instead, the important flag is actually IF_UP. Actually, I suspect that IF_LOWER_UP is not needed. But for now leave it, in order not to break something. (cherry picked from commit 02e84ba1e8a98de20e4ef718d5069f64ca5398a0) (cherry picked from commit 11bfe8a88146b4ad8f05d2ea3c01f6e5b901c8dc) --- src/platform/nm-linux-platform.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/platform/nm-linux-platform.c b/src/platform/nm-linux-platform.c index 4e45e0a164..0043fc6d8b 100644 --- a/src/platform/nm-linux-platform.c +++ b/src/platform/nm-linux-platform.c @@ -1887,9 +1887,14 @@ cache_pre_hook (NMPCache *cache, const NMPObject *old, const NMPObject *new, NMP if ( ops_type == NMP_CACHE_OPS_UPDATED && old && new /* <-- nonsensical, make coverity happy */ && old->_link.netlink.is_in_netlink - && NM_FLAGS_HAS (old->link.flags, IFF_LOWER_UP) && new->_link.netlink.is_in_netlink - && !NM_FLAGS_HAS (new->link.flags, IFF_LOWER_UP)) { + && ( ( NM_FLAGS_HAS (old->link.flags, IFF_UP) + && !NM_FLAGS_HAS (new->link.flags, IFF_UP)) + || ( NM_FLAGS_HAS (old->link.flags, IFF_LOWER_UP) + && !NM_FLAGS_HAS (new->link.flags, IFF_LOWER_UP)))) { + /* FIXME: I suspect that IFF_LOWER_UP must not be considered, and I + * think kernel does send RTM_DELROUTE events for IPv6 routes, so + * we might not need to refresh IPv6 routes. */ delayed_action_schedule (platform, DELAYED_ACTION_TYPE_REFRESH_ALL_IP4_ROUTES | DELAYED_ACTION_TYPE_REFRESH_ALL_IP6_ROUTES,