summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2023-11-14 11:56:30 +0100
committerThomas Haller <thaller@redhat.com>2023-11-16 13:07:53 +0100
commit587f5afb5a57ca19913deffdbe0862eea1beb973 (patch)
tree51a5e472273067982fe036dcbe6e9d588e5e5871
parent901a1b096bf0617d1bcca5eed6b7ecc82e8eb583 (diff)
all: differentiate NM_CLONED_MAC_IS_SPECIAL() for wired/wireless
Will be used next, when we support "stable-ssid" for "wifi.cloned-mac-address" property.
-rw-r--r--src/core/NetworkManagerUtils.c4
-rw-r--r--src/core/devices/nm-device.c2
-rw-r--r--src/libnm-core-aux-intern/nm-common-macros.h15
-rw-r--r--src/libnm-core-impl/nm-keyfile.c11
-rw-r--r--src/libnm-core-impl/nm-setting-wired.c2
-rw-r--r--src/libnm-core-impl/nm-setting-wireless.c2
-rw-r--r--src/libnmc-setting/nm-meta-setting-desc.c10
-rw-r--r--src/libnmc-setting/nm-meta-setting-desc.h3
-rw-r--r--src/nmcli/gen-metadata-nm-settings-nmcli.c21
-rw-r--r--src/nmtui/nmt-mac-entry.c8
-rw-r--r--src/nmtui/nmt-mac-entry.h3
-rw-r--r--src/nmtui/nmt-page-bond.c2
-rw-r--r--src/nmtui/nmt-page-ethernet.c2
-rw-r--r--src/nmtui/nmt-page-vlan.c2
-rw-r--r--src/nmtui/nmt-page-wifi.c2
15 files changed, 59 insertions, 30 deletions
diff --git a/src/core/NetworkManagerUtils.c b/src/core/NetworkManagerUtils.c
index 7b6a20ab42..84379cdf95 100644
--- a/src/core/NetworkManagerUtils.c
+++ b/src/core/NetworkManagerUtils.c
@@ -670,9 +670,9 @@ check_connection_cloned_mac_address(NMConnection *orig,
cand_mac = nm_setting_wired_get_cloned_mac_address(s_wired_cand);
/* special cloned mac address entries are accepted. */
- if (NM_CLONED_MAC_IS_SPECIAL(orig_mac))
+ if (NM_CLONED_MAC_IS_SPECIAL(orig_mac, FALSE))
orig_mac = NULL;
- if (NM_CLONED_MAC_IS_SPECIAL(cand_mac))
+ if (NM_CLONED_MAC_IS_SPECIAL(cand_mac, FALSE))
cand_mac = NULL;
if (!orig_mac || !cand_mac) {
diff --git a/src/core/devices/nm-device.c b/src/core/devices/nm-device.c
index 1edfaebf84..317a44a4f6 100644
--- a/src/core/devices/nm-device.c
+++ b/src/core/devices/nm-device.c
@@ -2352,7 +2352,7 @@ _prop_get_x_cloned_mac_address(NMDevice *self, NMConnection *connection, gboolea
if (v == NM_SETTING_MAC_RANDOMIZATION_ALWAYS)
addr = NM_CLONED_MAC_RANDOM;
}
- } else if (NM_CLONED_MAC_IS_SPECIAL(a) || nm_utils_hwaddr_valid(a, ETH_ALEN))
+ } else if (NM_CLONED_MAC_IS_SPECIAL(a, is_wifi) || nm_utils_hwaddr_valid(a, ETH_ALEN))
addr = a;
}
diff --git a/src/libnm-core-aux-intern/nm-common-macros.h b/src/libnm-core-aux-intern/nm-common-macros.h
index c452b7d3cb..155c585aef 100644
--- a/src/libnm-core-aux-intern/nm-common-macros.h
+++ b/src/libnm-core-aux-intern/nm-common-macros.h
@@ -40,13 +40,16 @@
#define NM_CLONED_MAC_STABLE "stable"
static inline gboolean
-NM_CLONED_MAC_IS_SPECIAL(const char *str)
+NM_CLONED_MAC_IS_SPECIAL(const char *str, gboolean is_wifi)
{
- return NM_IN_STRSET(str,
- NM_CLONED_MAC_PRESERVE,
- NM_CLONED_MAC_PERMANENT,
- NM_CLONED_MAC_RANDOM,
- NM_CLONED_MAC_STABLE);
+ if (NM_IN_STRSET(str,
+ NM_CLONED_MAC_PRESERVE,
+ NM_CLONED_MAC_PERMANENT,
+ NM_CLONED_MAC_RANDOM,
+ NM_CLONED_MAC_STABLE))
+ return TRUE;
+
+ return FALSE;
}
#define NM_IAID_MAC "mac"
diff --git a/src/libnm-core-impl/nm-keyfile.c b/src/libnm-core-impl/nm-keyfile.c
index 82581d9fea..078ea5d766 100644
--- a/src/libnm-core-impl/nm-keyfile.c
+++ b/src/libnm-core-impl/nm-keyfile.c
@@ -1219,9 +1219,14 @@ mac_address_parser(KeyfileReaderInfo *info,
tmp_string = nm_keyfile_plugin_kf_get_string(info->keyfile, setting_name, key, NULL);
- if (cloned_mac_addr && NM_CLONED_MAC_IS_SPECIAL(tmp_string)) {
- mac_str = tmp_string;
- goto out;
+ if (cloned_mac_addr) {
+ gboolean is_wifi;
+
+ is_wifi = NM_IS_SETTING_WIRELESS(setting);
+ if (NM_CLONED_MAC_IS_SPECIAL(tmp_string, is_wifi)) {
+ mac_str = tmp_string;
+ goto out;
+ }
}
if (tmp_string && nm_utils_hwaddr_aton(tmp_string, addr_bin, addr_len))
diff --git a/src/libnm-core-impl/nm-setting-wired.c b/src/libnm-core-impl/nm-setting-wired.c
index 5476d983b4..82c3840ffa 100644
--- a/src/libnm-core-impl/nm-setting-wired.c
+++ b/src/libnm-core-impl/nm-setting-wired.c
@@ -891,7 +891,7 @@ verify(NMSetting *setting, NMConnection *connection, GError **error)
}
}
- if (priv->cloned_mac_address && !NM_CLONED_MAC_IS_SPECIAL(priv->cloned_mac_address)
+ if (priv->cloned_mac_address && !NM_CLONED_MAC_IS_SPECIAL(priv->cloned_mac_address, FALSE)
&& !nm_utils_hwaddr_valid(priv->cloned_mac_address, ETH_ALEN)) {
g_set_error(error,
NM_CONNECTION_ERROR,
diff --git a/src/libnm-core-impl/nm-setting-wireless.c b/src/libnm-core-impl/nm-setting-wireless.c
index 14b7e874a8..cdf77ad7aa 100644
--- a/src/libnm-core-impl/nm-setting-wireless.c
+++ b/src/libnm-core-impl/nm-setting-wireless.c
@@ -963,7 +963,7 @@ verify(NMSetting *setting, NMConnection *connection, GError **error)
return FALSE;
}
- if (priv->cloned_mac_address && !NM_CLONED_MAC_IS_SPECIAL(priv->cloned_mac_address)
+ if (priv->cloned_mac_address && !NM_CLONED_MAC_IS_SPECIAL(priv->cloned_mac_address, TRUE)
&& !nm_utils_hwaddr_valid(priv->cloned_mac_address, ETH_ALEN)) {
g_set_error_literal(error,
NM_CONNECTION_ERROR,
diff --git a/src/libnmc-setting/nm-meta-setting-desc.c b/src/libnmc-setting/nm-meta-setting-desc.c
index 2e9593f81e..650c54fa9f 100644
--- a/src/libnmc-setting/nm-meta-setting-desc.c
+++ b/src/libnmc-setting/nm-meta-setting-desc.c
@@ -1557,7 +1557,11 @@ _set_fcn_gobject_mac(ARGS_SET_FCN)
} else {
valid =
nm_utils_hwaddr_valid(value, ETH_ALEN)
- || (mode == NM_META_PROPERTY_TYPE_MAC_MODE_CLONED && NM_CLONED_MAC_IS_SPECIAL(value));
+ || (NM_IN_SET(mode,
+ NM_META_PROPERTY_TYPE_MAC_MODE_CLONED_ETHERNET,
+ NM_META_PROPERTY_TYPE_MAC_MODE_CLONED_WIFI)
+ && NM_CLONED_MAC_IS_SPECIAL(value,
+ mode == NM_META_PROPERTY_TYPE_MAC_MODE_CLONED_WIFI));
}
if (!valid) {
@@ -7937,7 +7941,7 @@ static const NMMetaPropertyInfo *const property_infos_WIRED[] = {
.prompt = N_("Cloned MAC [none]"),
.property_type = &_pt_gobject_mac,
.property_typ_data = DEFINE_PROPERTY_TYP_DATA_SUBTYPE (mac,
- .mode = NM_META_PROPERTY_TYPE_MAC_MODE_CLONED,
+ .mode = NM_META_PROPERTY_TYPE_MAC_MODE_CLONED_ETHERNET,
),
),
PROPERTY_INFO_WITH_DESC (NM_SETTING_WIRED_GENERATE_MAC_ADDRESS_MASK,
@@ -8118,7 +8122,7 @@ static const NMMetaPropertyInfo *const property_infos_WIRELESS[] = {
.prompt = N_("Cloned MAC [none]"),
.property_type = &_pt_gobject_mac,
.property_typ_data = DEFINE_PROPERTY_TYP_DATA_SUBTYPE (mac,
- .mode = NM_META_PROPERTY_TYPE_MAC_MODE_CLONED,
+ .mode = NM_META_PROPERTY_TYPE_MAC_MODE_CLONED_WIFI,
),
),
PROPERTY_INFO_WITH_DESC (NM_SETTING_WIRELESS_GENERATE_MAC_ADDRESS_MASK,
diff --git a/src/libnmc-setting/nm-meta-setting-desc.h b/src/libnmc-setting/nm-meta-setting-desc.h
index 94a689457c..f8e36b0e0a 100644
--- a/src/libnmc-setting/nm-meta-setting-desc.h
+++ b/src/libnmc-setting/nm-meta-setting-desc.h
@@ -178,7 +178,8 @@ typedef enum {
typedef enum {
NM_META_PROPERTY_TYPE_MAC_MODE_DEFAULT,
- NM_META_PROPERTY_TYPE_MAC_MODE_CLONED,
+ NM_META_PROPERTY_TYPE_MAC_MODE_CLONED_ETHERNET,
+ NM_META_PROPERTY_TYPE_MAC_MODE_CLONED_WIFI,
NM_META_PROPERTY_TYPE_MAC_MODE_INFINIBAND,
NM_META_PROPERTY_TYPE_MAC_MODE_WPAN,
} NMMetaPropertyTypeMacMode;
diff --git a/src/nmcli/gen-metadata-nm-settings-nmcli.c b/src/nmcli/gen-metadata-nm-settings-nmcli.c
index 874bc6ddb6..c52e6b3d74 100644
--- a/src/nmcli/gen-metadata-nm-settings-nmcli.c
+++ b/src/nmcli/gen-metadata-nm-settings-nmcli.c
@@ -5,6 +5,7 @@
#include "libnmc-setting/nm-meta-setting-desc.h"
#include "libnmc-setting/nm-meta-setting-base.h"
#include "libnm-glib-aux/nm-enum-utils.h"
+#include "libnm-core-aux-intern/nm-common-macros.h"
#include "nm-core-enum-types.h"
#include <stdarg.h>
#include <stdlib.h>
@@ -87,7 +88,8 @@ get_mac_format(const NMMetaPropertyInfo *prop_info)
if (prop_typ_data) {
switch (prop_typ_data->subtype.mac.mode) {
case NM_META_PROPERTY_TYPE_MAC_MODE_DEFAULT:
- case NM_META_PROPERTY_TYPE_MAC_MODE_CLONED:
+ case NM_META_PROPERTY_TYPE_MAC_MODE_CLONED_ETHERNET:
+ case NM_META_PROPERTY_TYPE_MAC_MODE_CLONED_WIFI:
break;
case NM_META_PROPERTY_TYPE_MAC_MODE_INFINIBAND:
return g_strdup("Infiniband MAC address");
@@ -471,9 +473,20 @@ get_property_special_values(const NMMetaPropertyInfo *prop_info)
append_int_special_values(prop_info, special_values);
break;
case NM_META_PROPERTY_TYPE_FORMAT_MAC:
- if (prop_typ_data
- && prop_typ_data->subtype.mac.mode == NM_META_PROPERTY_TYPE_MAC_MODE_CLONED)
- append_vals(special_values, "preserve", "permanent", "random", "stable");
+ if (prop_typ_data) {
+ switch (prop_typ_data->subtype.mac.mode) {
+ case NM_META_PROPERTY_TYPE_MAC_MODE_CLONED_ETHERNET:
+ case NM_META_PROPERTY_TYPE_MAC_MODE_CLONED_WIFI:
+ append_vals(special_values,
+ NM_CLONED_MAC_PRESERVE,
+ NM_CLONED_MAC_PERMANENT,
+ NM_CLONED_MAC_RANDOM,
+ NM_CLONED_MAC_STABLE);
+ break;
+ default:
+ break;
+ }
+ }
break;
case NM_META_PROPERTY_TYPE_FORMAT_MTU:
g_ptr_array_add(special_values, g_strdup("auto"));
diff --git a/src/nmtui/nmt-mac-entry.c b/src/nmtui/nmt-mac-entry.c
index 11ceecf9e9..6cecf0e9d8 100644
--- a/src/nmtui/nmt-mac-entry.c
+++ b/src/nmtui/nmt-mac-entry.c
@@ -90,8 +90,10 @@ mac_validator(NmtNewtEntry *entry, const char *text, gpointer user_data)
if (!*text)
return TRUE;
- if (priv->entry_type == NMT_MAC_ENTRY_TYPE_CLONED) {
- if (NM_CLONED_MAC_IS_SPECIAL(text))
+ if (NM_IN_SET(priv->entry_type,
+ NMT_MAC_ENTRY_TYPE_CLONED_ETHERNET,
+ NMT_MAC_ENTRY_TYPE_CLONED_WIFI)) {
+ if (NM_CLONED_MAC_IS_SPECIAL(text, priv->entry_type == NMT_MAC_ENTRY_TYPE_CLONED_WIFI))
return TRUE;
}
@@ -237,7 +239,7 @@ nmt_mac_entry_class_init(NmtMacEntryClass *entry_class)
"",
"",
NMT_MAC_ENTRY_TYPE_MAC,
- NMT_MAC_ENTRY_TYPE_CLONED,
+ NMT_MAC_ENTRY_TYPE_CLONED_WIFI,
NMT_MAC_ENTRY_TYPE_MAC,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
}
diff --git a/src/nmtui/nmt-mac-entry.h b/src/nmtui/nmt-mac-entry.h
index 6b5b289685..c5acd35a98 100644
--- a/src/nmtui/nmt-mac-entry.h
+++ b/src/nmtui/nmt-mac-entry.h
@@ -11,7 +11,8 @@
typedef enum {
NMT_MAC_ENTRY_TYPE_MAC,
- NMT_MAC_ENTRY_TYPE_CLONED,
+ NMT_MAC_ENTRY_TYPE_CLONED_ETHERNET,
+ NMT_MAC_ENTRY_TYPE_CLONED_WIFI,
} NmtMacEntryType;
#define NMT_TYPE_MAC_ENTRY (nmt_mac_entry_get_type())
diff --git a/src/nmtui/nmt-page-bond.c b/src/nmtui/nmt-page-bond.c
index 5a64590cdd..c748315035 100644
--- a/src/nmtui/nmt-page-bond.c
+++ b/src/nmtui/nmt-page-bond.c
@@ -395,7 +395,7 @@ nmt_page_bond_constructed(GObject *object)
nmt_editor_grid_append(grid, _("ARP targets"), widget, NULL);
priv->arp_ip_target = NMT_ADDRESS_LIST(widget);
- widget = nmt_mac_entry_new(40, ETH_ALEN, NMT_MAC_ENTRY_TYPE_CLONED);
+ widget = nmt_mac_entry_new(40, ETH_ALEN, NMT_MAC_ENTRY_TYPE_CLONED_ETHERNET);
g_object_bind_property(s_wired,
NM_SETTING_WIRED_CLONED_MAC_ADDRESS,
widget,
diff --git a/src/nmtui/nmt-page-ethernet.c b/src/nmtui/nmt-page-ethernet.c
index 77abbb405e..652a2603e7 100644
--- a/src/nmtui/nmt-page-ethernet.c
+++ b/src/nmtui/nmt-page-ethernet.c
@@ -107,7 +107,7 @@ nmt_page_ethernet_constructed(GObject *object)
section = nmt_editor_section_new(_("ETHERNET"), NULL, FALSE);
grid = nmt_editor_section_get_body(section);
- widget = nmt_mac_entry_new(40, ETH_ALEN, NMT_MAC_ENTRY_TYPE_CLONED);
+ widget = nmt_mac_entry_new(40, ETH_ALEN, NMT_MAC_ENTRY_TYPE_CLONED_ETHERNET);
g_object_bind_property(s_wired,
NM_SETTING_WIRED_CLONED_MAC_ADDRESS,
widget,
diff --git a/src/nmtui/nmt-page-vlan.c b/src/nmtui/nmt-page-vlan.c
index 1956d3d64a..238dbafb5b 100644
--- a/src/nmtui/nmt-page-vlan.c
+++ b/src/nmtui/nmt-page-vlan.c
@@ -83,7 +83,7 @@ nmt_page_vlan_constructed(GObject *object)
nmt_editor_grid_append(grid, NULL, nmt_newt_separator_new(), NULL);
- widget = nmt_mac_entry_new(40, ETH_ALEN, NMT_MAC_ENTRY_TYPE_CLONED);
+ widget = nmt_mac_entry_new(40, ETH_ALEN, NMT_MAC_ENTRY_TYPE_CLONED_ETHERNET);
g_object_bind_property(s_wired,
NM_SETTING_WIRED_CLONED_MAC_ADDRESS,
widget,
diff --git a/src/nmtui/nmt-page-wifi.c b/src/nmtui/nmt-page-wifi.c
index 55feaee256..9767597b95 100644
--- a/src/nmtui/nmt-page-wifi.c
+++ b/src/nmtui/nmt-page-wifi.c
@@ -378,7 +378,7 @@ nmt_page_wifi_constructed(GObject *object)
G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
nmt_editor_grid_append(grid, _("BSSID"), widget, NULL);
- widget = nmt_mac_entry_new(40, ETH_ALEN, NMT_MAC_ENTRY_TYPE_CLONED);
+ widget = nmt_mac_entry_new(40, ETH_ALEN, NMT_MAC_ENTRY_TYPE_CLONED_WIFI);
g_object_bind_property(s_wireless,
NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS,
widget,