From 8b27a2b09a3cbfe78480d85a7ca32d062ace6737 Mon Sep 17 00:00:00 2001 From: Fernando Fernandez Mancera Date: Thu, 22 Dec 2022 17:58:12 +0100 Subject: [PATCH] nm-netns: mark the ECMP route as needs_update when registering If an L3Cfg try to register an ECMP route that we are tracking we must mark it as needs_update because it means it could be dropped from kernel. When merging them if the merged route didn't change we should commit the route anyway because we know it needed update. --- src/core/nm-netns.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/core/nm-netns.c b/src/core/nm-netns.c index 0b775ce268..c17adf6c74 100644 --- a/src/core/nm-netns.c +++ b/src/core/nm-netns.c @@ -209,7 +209,10 @@ _ecmp_track_init_merged_obj(EcmpTrackEcmpid *track_ecmpid, const NMPObject **out out: nm_assert(obj_new); if (nmp_object_equal(track_ecmpid->merged_obj, obj_new)) - return FALSE; + /* the objects are equal but the update was needed, for example if the + * routes were removed from kernel but not from our tracking + * dictionaries and therefore we tried to register them again. */ + return TRUE; if (track_ecmpid->merged_obj) *out_obj_del = g_steal_pointer(&track_ecmpid->merged_obj); @@ -614,8 +617,10 @@ nm_netns_ip_route_ecmp_register(NMNetns *self, NML3Cfg *l3cfg, const NMPObject * _LOGT( "ecmp-route: track %s", nmp_object_to_string(track_obj->obj, NMP_OBJECT_TO_STRING_PUBLIC, sbuf, sizeof(sbuf))); - } else - track_obj->dirty = FALSE; + } else { + track_obj->dirty = FALSE; + track_obj->parent_track_ecmpid->needs_update = TRUE; + } } void