diff options
author | Thomas Haller <thaller@redhat.com> | 2017-12-13 15:10:11 +0100 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2017-12-27 09:18:54 +0100 |
commit | 00c1e560f9a3bdf6cfe8fee44365ce04fbf0eb55 (patch) | |
tree | 946e737b32b91addbbd9f93c3dc52b44cc709c9e | |
parent | 02a26de6f81400212e425385dd34f8c6d4a68813 (diff) | |
download | NetworkManager-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.c | 34 | ||||
-rw-r--r-- | src/NetworkManagerUtils.h | 4 |
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__ */ |