mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager
synced 2024-10-14 20:18:39 +00:00
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.
This commit is contained in:
parent
901a1b096b
commit
587f5afb5a
|
@ -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) {
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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,
|
||||
if (NM_IN_STRSET(str,
|
||||
NM_CLONED_MAC_PRESERVE,
|
||||
NM_CLONED_MAC_PERMANENT,
|
||||
NM_CLONED_MAC_RANDOM,
|
||||
NM_CLONED_MAC_STABLE);
|
||||
NM_CLONED_MAC_STABLE))
|
||||
return TRUE;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
#define NM_IAID_MAC "mac"
|
||||
|
|
|
@ -1219,10 +1219,15 @@ 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)) {
|
||||
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))
|
||||
goto good_addr_bin;
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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"));
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
|
|
|
@ -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())
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Reference in a new issue