diff options
author | Thomas Haller <thaller@redhat.com> | 2020-07-29 08:39:12 +0200 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2020-07-30 14:59:42 +0200 |
commit | ca8e3952d985d40ceb321efb091a5282faa82608 (patch) | |
tree | 509bafb584c2284955135cc5808c9cb84f9215c8 /src/nm-l3-config-data.c | |
parent | 86fa78737a3dc52c4a8912e4f213deb7396453a8 (diff) | |
download | NetworkManager-ca8e3952d985d40ceb321efb091a5282faa82608.tar.gz |
l3cfg: track externally removed addresses/routesth/l3cfg-3
We want to allow the user to externally remove IP addresses
and routes, and NetworkManager not re-adding them until a full reapply
happens. For that, we need to keep track of IP addresses that were
present, but no longer are.
Diffstat (limited to 'src/nm-l3-config-data.c')
-rw-r--r-- | src/nm-l3-config-data.c | 50 |
1 files changed, 37 insertions, 13 deletions
diff --git a/src/nm-l3-config-data.c b/src/nm-l3-config-data.c index 20bc8c17a1..9ddf5be028 100644 --- a/src/nm-l3-config-data.c +++ b/src/nm-l3-config-data.c @@ -528,36 +528,60 @@ nm_l3_config_data_lookup_route (const NML3ConfigData *self, nmp_object_stackinit (&obj_stack, NMP_OBJECT_TYPE_IP_ROUTE (IS_IPv4), needle)); } -const NMDedupMultiHeadEntry * -nm_l3_config_data_lookup_objs (const NML3ConfigData *self, NMPObjectType obj_type) +const NMDedupMultiIdxType * +nm_l3_config_data_lookup_index (const NML3ConfigData *self, NMPObjectType obj_type) { - const DedupMultiIdxType *idx; - nm_assert (_NM_IS_L3_CONFIG_DATA (self, TRUE)); switch (obj_type) { case NMP_OBJECT_TYPE_IP4_ADDRESS: - idx = &self->idx_addresses_4; - break; + return &self->idx_addresses_4.parent; case NMP_OBJECT_TYPE_IP6_ADDRESS: - idx = &self->idx_addresses_6; - break; + return &self->idx_addresses_6.parent; case NMP_OBJECT_TYPE_IP4_ROUTE: - idx = &self->idx_routes_4; - break; + return &self->idx_routes_4.parent; case NMP_OBJECT_TYPE_IP6_ROUTE: - idx = &self->idx_routes_6; - break; + return &self->idx_routes_6.parent; default: nm_assert_not_reached (); return NULL; } +} + +const NMDedupMultiHeadEntry * +nm_l3_config_data_lookup_objs (const NML3ConfigData *self, NMPObjectType obj_type) +{ + return nm_dedup_multi_index_lookup_head (self->multi_idx, + nm_l3_config_data_lookup_index (self, obj_type), + NULL); +} + +const NMDedupMultiEntry * +nm_l3_config_data_lookup_obj (const NML3ConfigData *self, + const NMPObject *obj) +{ + const NMDedupMultiIdxType *idx; + + nm_assert (_NM_IS_L3_CONFIG_DATA (self, TRUE)); + + idx = nm_l3_config_data_lookup_index (self, + NMP_OBJECT_GET_TYPE (obj)); - return nm_dedup_multi_index_lookup_head (self->multi_idx, &idx->parent, NULL); + return nm_dedup_multi_index_lookup_obj (self->multi_idx, + idx, + obj); } /*****************************************************************************/ +NMDedupMultiIndex * +nm_l3_config_data_get_multi_idx (const NML3ConfigData *self) +{ + nm_assert (_NM_IS_L3_CONFIG_DATA (self, TRUE)); + + return self->multi_idx; +} + int nm_l3_config_data_get_ifindex (const NML3ConfigData *self) { |