diff options
author | Thomas Haller <thaller@redhat.com> | 2023-06-12 16:34:40 +0200 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2023-06-14 11:15:46 +0200 |
commit | 2b09512481d6553631d6c9f43d84e9accaa3ebe1 (patch) | |
tree | 309108a4109815352c8d48ff73425d35ecbc1003 | |
parent | 13690f445aff140b44c4c7f83ae5eb78e3f547fb (diff) |
core: add nm_config_data_get_ignore_carrier_for_port() helper
Will be used later.
-rw-r--r-- | src/core/nm-config-data.c | 54 | ||||
-rw-r--r-- | src/core/nm-config-data.h | 4 |
2 files changed, 58 insertions, 0 deletions
diff --git a/src/core/nm-config-data.c b/src/core/nm-config-data.c index 2fa49ae7aa..fe21308005 100644 --- a/src/core/nm-config-data.c +++ b/src/core/nm-config-data.c @@ -130,6 +130,12 @@ G_DEFINE_TYPE(NMConfigData, nm_config_data, G_TYPE_OBJECT) static const char * _match_section_info_get_str(const MatchSectionInfo *m, GKeyFile *keyfile, const char *property); +static const char *_config_data_get_device_config(const NMConfigData *self, + const char *property, + const NMMatchSpecDeviceData *match_data, + NMDevice *device, + gboolean *has_match); + /*****************************************************************************/ const char * @@ -366,6 +372,54 @@ nm_config_data_get_iwd_config_path(const NMConfigData *self) } gboolean +nm_config_data_get_ignore_carrier_for_port(const NMConfigData *self, + const char *master, + const char *slave_type) +{ + const char *value; + gboolean has_match; + int m; + NMMatchSpecDeviceData match_data; + + g_return_val_if_fail(NM_IS_CONFIG_DATA(self), FALSE); + + if (!master || !slave_type) + goto out_default; + + if (!nm_utils_ifname_valid_kernel(master, NULL)) + goto out_default; + + match_data = (NMMatchSpecDeviceData){ + .interface_name = master, + .device_type = slave_type, + }; + + value = _config_data_get_device_config(self, + NM_CONFIG_KEYFILE_KEY_DEVICE_IGNORE_CARRIER, + &match_data, + NULL, + &has_match); + if (has_match) + m = nm_config_parse_boolean(value, -1); + else { + NMMatchSpecMatchType x; + + x = nm_match_spec_device(NM_CONFIG_DATA_GET_PRIVATE(self)->ignore_carrier, &match_data); + m = nm_match_spec_match_type_to_bool(x, -1); + } + + if (NM_IN_SET(m, TRUE, FALSE)) + return m; + +out_default: + /* if ignore-carrier is not explicitly or detected for the master, then we assume it's + * enabled. This is in line with nm_config_data_get_ignore_carrier_by_device(), where + * ignore-carrier is enabled based on nm_device_ignore_carrier_by_default(). + */ + return TRUE; +} + +gboolean nm_config_data_get_ignore_carrier_by_device(const NMConfigData *self, NMDevice *device) { const char *value; diff --git a/src/core/nm-config-data.h b/src/core/nm-config-data.h index acc968d69a..9e7a50fc24 100644 --- a/src/core/nm-config-data.h +++ b/src/core/nm-config-data.h @@ -185,6 +185,10 @@ const char *nm_config_data_get_dns_mode(const NMConfigData *self); const char *nm_config_data_get_rc_manager(const NMConfigData *self); gboolean nm_config_data_get_systemd_resolved(const NMConfigData *self); +gboolean nm_config_data_get_ignore_carrier_for_port(const NMConfigData *self, + const char *master, + const char *slave_type); + gboolean nm_config_data_get_ignore_carrier_by_device(const NMConfigData *self, NMDevice *device); gboolean nm_config_data_get_assume_ipv6ll_only(const NMConfigData *self, NMDevice *device); int nm_config_data_get_sriov_num_vfs(const NMConfigData *self, NMDevice *device); |