summaryrefslogtreecommitdiff
path: root/src/nm-l3-config-data.c
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2020-07-29 08:39:12 +0200
committerThomas Haller <thaller@redhat.com>2020-07-30 14:59:42 +0200
commitca8e3952d985d40ceb321efb091a5282faa82608 (patch)
tree509bafb584c2284955135cc5808c9cb84f9215c8 /src/nm-l3-config-data.c
parent86fa78737a3dc52c4a8912e4f213deb7396453a8 (diff)
downloadNetworkManager-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.c50
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)
{