diff options
author | Fernando Fernandez Mancera <ffmancera@riseup.net> | 2022-12-22 17:58:12 +0100 |
---|---|---|
committer | Fernando Fernandez Mancera <ffmancera@riseup.net> | 2022-12-23 16:47:29 +0100 |
commit | 8b27a2b09a3cbfe78480d85a7ca32d062ace6737 (patch) | |
tree | 43a444e61e01ef119b443d3aecb11f06796c6bb0 | |
parent | 737cb5d424e397901a5ad979907a084f770dd8d4 (diff) | |
download | NetworkManager-8b27a2b09a3cbfe78480d85a7ca32d062ace6737.tar.gz |
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.
-rw-r--r-- | src/core/nm-netns.c | 11 |
1 files 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 |