summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2017-12-13 15:10:11 +0100
committerThomas Haller <thaller@redhat.com>2017-12-27 09:18:54 +0100
commit00c1e560f9a3bdf6cfe8fee44365ce04fbf0eb55 (patch)
tree946e737b32b91addbbd9f93c3dc52b44cc709c9e
parent02a26de6f81400212e425385dd34f8c6d4a68813 (diff)
downloadNetworkManager-00c1e560f9a3bdf6cfe8fee44365ce04fbf0eb55.tar.gz
core: add nm_match_spec_device_by_pllink()
Add a variant of nm_device_spec_match_list() that looks up the match paramters from a platform link instance. Usually, we have a NMDevice instance that we use for matching. However, at some places (like inside the device factory's create_device() method), we might not have a NMDevice instance to get the match paramters. Add an alternative form, that gets the match paramters from a platform link instance. The code is placed inside src/NetworkManagerUtils.c, because src/nm-core-utils.c is supposed to be independent of platform.
-rw-r--r--src/NetworkManagerUtils.c34
-rw-r--r--src/NetworkManagerUtils.h4
2 files changed, 38 insertions, 0 deletions
diff --git a/src/NetworkManagerUtils.c b/src/NetworkManagerUtils.c
index 89bd357f07..a24d7bc1b2 100644
--- a/src/NetworkManagerUtils.c
+++ b/src/NetworkManagerUtils.c
@@ -935,3 +935,37 @@ nm_utils_g_value_set_object_path_array (GValue *value,
}
/*****************************************************************************/
+
+int
+nm_match_spec_device_by_pllink (const NMPlatformLink *pllink,
+ const GSList *specs,
+ int no_match_value)
+{
+ NMMatchSpecMatchType m;
+
+ /* we can only match by certain properties that are available on the
+ * platform link (and even @pllink might be missing.
+ *
+ * It's still useful because of specs like "*" and "except:interface-name:eth0",
+ * which match even in that case. */
+ m = nm_match_spec_device (specs,
+ pllink ? pllink->name : NULL,
+ NULL,
+ pllink ? pllink->driver : NULL,
+ NULL,
+ NULL,
+ NULL);
+
+ switch (m) {
+ case NM_MATCH_SPEC_MATCH:
+ return TRUE;
+ case NM_MATCH_SPEC_NEG_MATCH:
+ return FALSE;
+ case NM_MATCH_SPEC_NO_MATCH:
+ return no_match_value;
+ }
+ nm_assert_not_reached ();
+ return no_match_value;
+}
+
+
diff --git a/src/NetworkManagerUtils.h b/src/NetworkManagerUtils.h
index e5f28b2729..989ae9405c 100644
--- a/src/NetworkManagerUtils.h
+++ b/src/NetworkManagerUtils.h
@@ -64,6 +64,10 @@ void nm_utils_g_value_set_object_path_array (GValue *value,
NMUtilsObjectFunc filter_func,
gpointer user_data);
+int nm_match_spec_device_by_pllink (const NMPlatformLink *pllink,
+ const GSList *specs,
+ int no_match_value);
+
/*****************************************************************************/
#endif /* __NETWORKMANAGER_UTILS_H__ */