summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2019-04-10 13:08:23 +0200
committerThomas Haller <thaller@redhat.com>2019-04-13 18:17:16 +0200
commite18c92ee28825f9d67f6c7a32592d2d12b8c106c (patch)
treeba80e0743f77af71a908a74ad667a3b70e887168
parentdd9e646306b640bff3294dea3b56be1cc77a954e (diff)
downloadNetworkManager-e18c92ee28825f9d67f6c7a32592d2d12b8c106c.tar.gz
platform: add nmp_rules_manager_track_from_platform()
Track all the rules that are currenlty in platform.
-rw-r--r--src/platform/nmp-rules-manager.c34
-rw-r--r--src/platform/nmp-rules-manager.h6
2 files changed, 40 insertions, 0 deletions
diff --git a/src/platform/nmp-rules-manager.c b/src/platform/nmp-rules-manager.c
index 2ea159a0fb..33218b982c 100644
--- a/src/platform/nmp-rules-manager.c
+++ b/src/platform/nmp-rules-manager.c
@@ -546,6 +546,40 @@ nmp_rules_manager_sync (NMPRulesManager *self,
}
}
+void
+nmp_rules_manager_track_from_platform (NMPRulesManager *self,
+ NMPlatform *platform,
+ int addr_family,
+ gint32 tracking_priority,
+ gconstpointer user_tag)
+{
+ NMPLookup lookup;
+ const NMDedupMultiHeadEntry *head_entry;
+ NMDedupMultiIter iter;
+ const NMPObject *o;
+
+ g_return_if_fail (NMP_IS_RULES_MANAGER (self));
+
+ if (!platform)
+ platform = self->platform;
+ else
+ g_return_if_fail (NM_IS_PLATFORM (platform));
+
+ nm_assert (NM_IN_SET (addr_family, AF_UNSPEC, AF_INET, AF_INET6));
+
+ nmp_lookup_init_obj_type (&lookup, NMP_OBJECT_TYPE_ROUTING_RULE);
+ head_entry = nm_platform_lookup (platform, &lookup);
+ nmp_cache_iter_for_each (&iter, head_entry, &o) {
+ const NMPlatformRoutingRule *rr = NMP_OBJECT_CAST_ROUTING_RULE (o);
+
+ if ( addr_family != AF_UNSPEC
+ && rr->addr_family != addr_family)
+ continue;
+
+ nmp_rules_manager_track (self, rr, tracking_priority, user_tag);
+ }
+}
+
/*****************************************************************************/
void
diff --git a/src/platform/nmp-rules-manager.h b/src/platform/nmp-rules-manager.h
index 57dc267fb8..310c7971f2 100644
--- a/src/platform/nmp-rules-manager.h
+++ b/src/platform/nmp-rules-manager.h
@@ -42,6 +42,12 @@ void nmp_rules_manager_track_default (NMPRulesManager *self,
gint32 track_priority,
gconstpointer user_tag);
+void nmp_rules_manager_track_from_platform (NMPRulesManager *self,
+ NMPlatform *platform,
+ int addr_family,
+ gint32 tracking_priority,
+ gconstpointer user_tag);
+
void nmp_rules_manager_untrack (NMPRulesManager *self,
const NMPlatformRoutingRule *routing_rule,
gconstpointer user_tag);