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);
|
cand_mac = nm_setting_wired_get_cloned_mac_address(s_wired_cand);
|
||||||
|
|
||||||
/* special cloned mac address entries are accepted. */
|
/* 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;
|
orig_mac = NULL;
|
||||||
if (NM_CLONED_MAC_IS_SPECIAL(cand_mac))
|
if (NM_CLONED_MAC_IS_SPECIAL(cand_mac, FALSE))
|
||||||
cand_mac = NULL;
|
cand_mac = NULL;
|
||||||
|
|
||||||
if (!orig_mac || !cand_mac) {
|
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)
|
if (v == NM_SETTING_MAC_RANDOMIZATION_ALWAYS)
|
||||||
addr = NM_CLONED_MAC_RANDOM;
|
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;
|
addr = a;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -40,13 +40,16 @@
|
||||||
#define NM_CLONED_MAC_STABLE "stable"
|
#define NM_CLONED_MAC_STABLE "stable"
|
||||||
|
|
||||||
static inline gboolean
|
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_PRESERVE,
|
||||||
NM_CLONED_MAC_PERMANENT,
|
NM_CLONED_MAC_PERMANENT,
|
||||||
NM_CLONED_MAC_RANDOM,
|
NM_CLONED_MAC_RANDOM,
|
||||||
NM_CLONED_MAC_STABLE);
|
NM_CLONED_MAC_STABLE))
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define NM_IAID_MAC "mac"
|
#define NM_IAID_MAC "mac"
|
||||||
|
|
|
@ -1219,9 +1219,14 @@ mac_address_parser(KeyfileReaderInfo *info,
|
||||||
|
|
||||||
tmp_string = nm_keyfile_plugin_kf_get_string(info->keyfile, setting_name, key, NULL);
|
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) {
|
||||||
mac_str = tmp_string;
|
gboolean is_wifi;
|
||||||
goto out;
|
|
||||||
|
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))
|
if (tmp_string && nm_utils_hwaddr_aton(tmp_string, addr_bin, addr_len))
|
||||||
|
|
|
@ -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)) {
|
&& !nm_utils_hwaddr_valid(priv->cloned_mac_address, ETH_ALEN)) {
|
||||||
g_set_error(error,
|
g_set_error(error,
|
||||||
NM_CONNECTION_ERROR,
|
NM_CONNECTION_ERROR,
|
||||||
|
|
|
@ -963,7 +963,7 @@ verify(NMSetting *setting, NMConnection *connection, GError **error)
|
||||||
return FALSE;
|
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)) {
|
&& !nm_utils_hwaddr_valid(priv->cloned_mac_address, ETH_ALEN)) {
|
||||||
g_set_error_literal(error,
|
g_set_error_literal(error,
|
||||||
NM_CONNECTION_ERROR,
|
NM_CONNECTION_ERROR,
|
||||||
|
|
|
@ -1557,7 +1557,11 @@ _set_fcn_gobject_mac(ARGS_SET_FCN)
|
||||||
} else {
|
} else {
|
||||||
valid =
|
valid =
|
||||||
nm_utils_hwaddr_valid(value, ETH_ALEN)
|
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) {
|
if (!valid) {
|
||||||
|
@ -7937,7 +7941,7 @@ static const NMMetaPropertyInfo *const property_infos_WIRED[] = {
|
||||||
.prompt = N_("Cloned MAC [none]"),
|
.prompt = N_("Cloned MAC [none]"),
|
||||||
.property_type = &_pt_gobject_mac,
|
.property_type = &_pt_gobject_mac,
|
||||||
.property_typ_data = DEFINE_PROPERTY_TYP_DATA_SUBTYPE (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,
|
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]"),
|
.prompt = N_("Cloned MAC [none]"),
|
||||||
.property_type = &_pt_gobject_mac,
|
.property_type = &_pt_gobject_mac,
|
||||||
.property_typ_data = DEFINE_PROPERTY_TYP_DATA_SUBTYPE (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,
|
PROPERTY_INFO_WITH_DESC (NM_SETTING_WIRELESS_GENERATE_MAC_ADDRESS_MASK,
|
||||||
|
|
|
@ -178,7 +178,8 @@ typedef enum {
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
NM_META_PROPERTY_TYPE_MAC_MODE_DEFAULT,
|
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_INFINIBAND,
|
||||||
NM_META_PROPERTY_TYPE_MAC_MODE_WPAN,
|
NM_META_PROPERTY_TYPE_MAC_MODE_WPAN,
|
||||||
} NMMetaPropertyTypeMacMode;
|
} NMMetaPropertyTypeMacMode;
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
#include "libnmc-setting/nm-meta-setting-desc.h"
|
#include "libnmc-setting/nm-meta-setting-desc.h"
|
||||||
#include "libnmc-setting/nm-meta-setting-base.h"
|
#include "libnmc-setting/nm-meta-setting-base.h"
|
||||||
#include "libnm-glib-aux/nm-enum-utils.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 "nm-core-enum-types.h"
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
@ -87,7 +88,8 @@ get_mac_format(const NMMetaPropertyInfo *prop_info)
|
||||||
if (prop_typ_data) {
|
if (prop_typ_data) {
|
||||||
switch (prop_typ_data->subtype.mac.mode) {
|
switch (prop_typ_data->subtype.mac.mode) {
|
||||||
case NM_META_PROPERTY_TYPE_MAC_MODE_DEFAULT:
|
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;
|
break;
|
||||||
case NM_META_PROPERTY_TYPE_MAC_MODE_INFINIBAND:
|
case NM_META_PROPERTY_TYPE_MAC_MODE_INFINIBAND:
|
||||||
return g_strdup("Infiniband MAC address");
|
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);
|
append_int_special_values(prop_info, special_values);
|
||||||
break;
|
break;
|
||||||
case NM_META_PROPERTY_TYPE_FORMAT_MAC:
|
case NM_META_PROPERTY_TYPE_FORMAT_MAC:
|
||||||
if (prop_typ_data
|
if (prop_typ_data) {
|
||||||
&& prop_typ_data->subtype.mac.mode == NM_META_PROPERTY_TYPE_MAC_MODE_CLONED)
|
switch (prop_typ_data->subtype.mac.mode) {
|
||||||
append_vals(special_values, "preserve", "permanent", "random", "stable");
|
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;
|
break;
|
||||||
case NM_META_PROPERTY_TYPE_FORMAT_MTU:
|
case NM_META_PROPERTY_TYPE_FORMAT_MTU:
|
||||||
g_ptr_array_add(special_values, g_strdup("auto"));
|
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)
|
if (!*text)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
if (priv->entry_type == NMT_MAC_ENTRY_TYPE_CLONED) {
|
if (NM_IN_SET(priv->entry_type,
|
||||||
if (NM_CLONED_MAC_IS_SPECIAL(text))
|
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;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -237,7 +239,7 @@ nmt_mac_entry_class_init(NmtMacEntryClass *entry_class)
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
NMT_MAC_ENTRY_TYPE_MAC,
|
NMT_MAC_ENTRY_TYPE_MAC,
|
||||||
NMT_MAC_ENTRY_TYPE_CLONED,
|
NMT_MAC_ENTRY_TYPE_CLONED_WIFI,
|
||||||
NMT_MAC_ENTRY_TYPE_MAC,
|
NMT_MAC_ENTRY_TYPE_MAC,
|
||||||
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
|
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,7 +11,8 @@
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
NMT_MAC_ENTRY_TYPE_MAC,
|
NMT_MAC_ENTRY_TYPE_MAC,
|
||||||
NMT_MAC_ENTRY_TYPE_CLONED,
|
NMT_MAC_ENTRY_TYPE_CLONED_ETHERNET,
|
||||||
|
NMT_MAC_ENTRY_TYPE_CLONED_WIFI,
|
||||||
} NmtMacEntryType;
|
} NmtMacEntryType;
|
||||||
|
|
||||||
#define NMT_TYPE_MAC_ENTRY (nmt_mac_entry_get_type())
|
#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);
|
nmt_editor_grid_append(grid, _("ARP targets"), widget, NULL);
|
||||||
priv->arp_ip_target = NMT_ADDRESS_LIST(widget);
|
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,
|
g_object_bind_property(s_wired,
|
||||||
NM_SETTING_WIRED_CLONED_MAC_ADDRESS,
|
NM_SETTING_WIRED_CLONED_MAC_ADDRESS,
|
||||||
widget,
|
widget,
|
||||||
|
|
|
@ -107,7 +107,7 @@ nmt_page_ethernet_constructed(GObject *object)
|
||||||
section = nmt_editor_section_new(_("ETHERNET"), NULL, FALSE);
|
section = nmt_editor_section_new(_("ETHERNET"), NULL, FALSE);
|
||||||
grid = nmt_editor_section_get_body(section);
|
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,
|
g_object_bind_property(s_wired,
|
||||||
NM_SETTING_WIRED_CLONED_MAC_ADDRESS,
|
NM_SETTING_WIRED_CLONED_MAC_ADDRESS,
|
||||||
widget,
|
widget,
|
||||||
|
|
|
@ -83,7 +83,7 @@ nmt_page_vlan_constructed(GObject *object)
|
||||||
|
|
||||||
nmt_editor_grid_append(grid, NULL, nmt_newt_separator_new(), NULL);
|
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,
|
g_object_bind_property(s_wired,
|
||||||
NM_SETTING_WIRED_CLONED_MAC_ADDRESS,
|
NM_SETTING_WIRED_CLONED_MAC_ADDRESS,
|
||||||
widget,
|
widget,
|
||||||
|
|
|
@ -378,7 +378,7 @@ nmt_page_wifi_constructed(GObject *object)
|
||||||
G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
|
G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
|
||||||
nmt_editor_grid_append(grid, _("BSSID"), widget, NULL);
|
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,
|
g_object_bind_property(s_wireless,
|
||||||
NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS,
|
NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS,
|
||||||
widget,
|
widget,
|
||||||
|
|
Loading…
Reference in a new issue