From 8ea3f77a3bd5330edf213c1f2bf97f5bfe497f63 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Mon, 12 Jun 2023 12:32:46 +0200 Subject: [PATCH] core: add nm_match_spec_device_data_init_from_platform() helper (cherry picked from commit ccaecf7f3e7693721b85690ced808925884b689e) --- src/core/NetworkManagerUtils.c | 47 +++++++++++++++++++++++----------- src/core/NetworkManagerUtils.h | 6 +++++ 2 files changed, 38 insertions(+), 15 deletions(-) diff --git a/src/core/NetworkManagerUtils.c b/src/core/NetworkManagerUtils.c index ad67671104..db9f8199db 100644 --- a/src/core/NetworkManagerUtils.c +++ b/src/core/NetworkManagerUtils.c @@ -936,6 +936,32 @@ nm_match_spec_device_data_init_from_device(struct _NMMatchSpecDeviceData *out_da return out_data; } +const NMMatchSpecDeviceData * +nm_match_spec_device_data_init_from_platform(NMMatchSpecDeviceData *out_data, + const NMPlatformLink *pllink, + const char *match_device_type, + const char *match_dhcp_plugin) +{ + nm_assert(out_data); + + /* 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. */ + + *out_data = (NMMatchSpecDeviceData){ + .interface_name = pllink ? pllink->name : NULL, + .device_type = match_device_type, + .driver = pllink ? pllink->driver : NULL, + .driver_version = NULL, + .hwaddr = NULL, + .s390_subchannels = NULL, + .dhcp_plugin = match_dhcp_plugin, + }; + return out_data; +} + /*****************************************************************************/ int @@ -945,23 +971,14 @@ nm_match_spec_device_by_pllink(const NMPlatformLink *pllink, const GSList *specs, int no_match_value) { - NMMatchSpecMatchType m; + NMMatchSpecMatchType m; + NMMatchSpecDeviceData data; - /* 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, - &((const NMMatchSpecDeviceData){ - .interface_name = pllink ? pllink->name : NULL, - .device_type = match_device_type, - .driver = pllink ? pllink->driver : NULL, - .driver_version = NULL, - .hwaddr = NULL, - .s390_subchannels = NULL, - .dhcp_plugin = match_dhcp_plugin, - })); + nm_match_spec_device_data_init_from_platform(&data, + pllink, + match_device_type, + match_dhcp_plugin)); return nm_match_spec_match_type_to_bool(m, no_match_value); } diff --git a/src/core/NetworkManagerUtils.h b/src/core/NetworkManagerUtils.h index d7144aeb52..0f596445b9 100644 --- a/src/core/NetworkManagerUtils.h +++ b/src/core/NetworkManagerUtils.h @@ -97,6 +97,12 @@ const struct _NMMatchSpecDeviceData * nm_match_spec_device_data_init_from_device(struct _NMMatchSpecDeviceData *out_data, NMDevice *device); +const struct _NMMatchSpecDeviceData * +nm_match_spec_device_data_init_from_platform(struct _NMMatchSpecDeviceData *out_data, + const NMPlatformLink *pllink, + const char *match_device_type, + const char *match_dhcp_plugin); + int nm_match_spec_device_by_pllink(const NMPlatformLink *pllink, const char *match_device_type, const char *match_dhcp_plugin,