mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-01-05 03:20:18 +01:00
device: refactor setting HW address via nm_device_set_hw_addr()
This brings no real change in behavior, except getting rid of the logging domain argument.
This commit is contained in:
parent
224937f5dd
commit
fa5230e255
8 changed files with 72 additions and 40 deletions
|
|
@ -824,7 +824,7 @@ act_stage1_prepare (NMDevice *dev, NMDeviceStateReason *reason)
|
|||
s_wired = (NMSettingWired *) nm_device_get_applied_setting (dev, NM_TYPE_SETTING_WIRED);
|
||||
if (s_wired)
|
||||
cloned_mac = nm_setting_wired_get_cloned_mac_address (s_wired);
|
||||
nm_device_set_hw_addr (dev, cloned_mac, "set", LOGD_ETHER);
|
||||
nm_device_hw_addr_set (dev, cloned_mac);
|
||||
|
||||
/* If we're re-activating a PPPoE connection a short while after
|
||||
* a previous PPPoE connection was torn down, wait a bit to allow the
|
||||
|
|
@ -1364,9 +1364,7 @@ deactivate (NMDevice *device)
|
|||
if (nm_device_get_applied_setting (device, NM_TYPE_SETTING_PPPOE))
|
||||
NM_DEVICE_ETHERNET_GET_PRIVATE (device)->last_pppoe_time = nm_utils_get_monotonic_timestamp_s ();
|
||||
|
||||
/* Reset MAC address back to initial address */
|
||||
if (nm_device_get_initial_hw_address (device))
|
||||
nm_device_set_hw_addr (device, nm_device_get_initial_hw_address (device), "reset", LOGD_ETHER);
|
||||
nm_device_hw_addr_reset (device);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
|
|
|
|||
|
|
@ -516,7 +516,7 @@ act_stage1_prepare (NMDevice *dev, NMDeviceStateReason *reason)
|
|||
s_wired = (NMSettingWired *) nm_device_get_applied_setting (dev, NM_TYPE_SETTING_WIRED);
|
||||
if (s_wired)
|
||||
cloned_mac = nm_setting_wired_get_cloned_mac_address (s_wired);
|
||||
nm_device_set_hw_addr (dev, cloned_mac, "set", LOGD_HW);
|
||||
nm_device_hw_addr_set (dev, cloned_mac);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
|
@ -550,11 +550,7 @@ realize_start_notify (NMDevice *device, const NMPlatformLink *plink)
|
|||
static void
|
||||
deactivate (NMDevice *device)
|
||||
{
|
||||
/* Reset MAC address back to initial address */
|
||||
if (nm_device_get_initial_hw_address (device)) {
|
||||
nm_device_set_hw_addr (device, nm_device_get_initial_hw_address (device),
|
||||
"reset", LOGD_DEVICE);
|
||||
}
|
||||
nm_device_hw_addr_reset (device);
|
||||
}
|
||||
|
||||
/******************************************************************/
|
||||
|
|
|
|||
|
|
@ -56,8 +56,8 @@ gboolean nm_device_bring_up (NMDevice *self, gboolean wait, gboolean *no_firmwar
|
|||
|
||||
void nm_device_take_down (NMDevice *self, gboolean block);
|
||||
|
||||
gboolean nm_device_set_hw_addr (NMDevice *device, const char *addr,
|
||||
const char *detail, guint64 hw_log_domain);
|
||||
gboolean nm_device_hw_addr_set (NMDevice *device, const char *addr);
|
||||
gboolean nm_device_hw_addr_reset (NMDevice *device);
|
||||
|
||||
void nm_device_set_firmware_missing (NMDevice *self, gboolean missing);
|
||||
|
||||
|
|
|
|||
|
|
@ -308,7 +308,7 @@ act_stage1_prepare (NMDevice *device, NMDeviceStateReason *reason)
|
|||
s_wired = (NMSettingWired *) nm_device_get_applied_setting (device, NM_TYPE_SETTING_WIRED);
|
||||
if (s_wired)
|
||||
cloned_mac = nm_setting_wired_get_cloned_mac_address (s_wired);
|
||||
nm_device_set_hw_addr (device, cloned_mac, "set", LOGD_DEVICE);
|
||||
nm_device_hw_addr_set (device, cloned_mac);
|
||||
|
||||
return NM_ACT_STAGE_RETURN_SUCCESS;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -114,7 +114,7 @@ parent_hwaddr_maybe_changed (NMDevice *parent,
|
|||
_LOGD (LOGD_VLAN, "parent hardware address changed to %s%s%s",
|
||||
NM_PRINT_FMT_QUOTE_STRING (new_mac));
|
||||
if (new_mac) {
|
||||
nm_device_set_hw_addr (self, new_mac, "set", LOGD_VLAN);
|
||||
nm_device_hw_addr_set (self, new_mac);
|
||||
/* When changing the hw address the interface is taken down,
|
||||
* removing the IPv6 configuration; reapply it.
|
||||
*/
|
||||
|
|
@ -563,7 +563,7 @@ act_stage1_prepare (NMDevice *dev, NMDeviceStateReason *reason)
|
|||
s_wired = (NMSettingWired *) nm_device_get_applied_setting (dev, NM_TYPE_SETTING_WIRED);
|
||||
if (s_wired)
|
||||
cloned_mac = nm_setting_wired_get_cloned_mac_address (s_wired);
|
||||
nm_device_set_hw_addr (dev, cloned_mac, "set", LOGD_VLAN);
|
||||
nm_device_hw_addr_set (dev, cloned_mac);
|
||||
|
||||
/* Change MAC address to parent's one if needed */
|
||||
if (priv->parent)
|
||||
|
|
@ -620,9 +620,7 @@ ip4_config_pre_commit (NMDevice *device, NMIP4Config *config)
|
|||
static void
|
||||
deactivate (NMDevice *device)
|
||||
{
|
||||
/* Reset MAC address back to initial address */
|
||||
if (nm_device_get_initial_hw_address (device))
|
||||
nm_device_set_hw_addr (device, nm_device_get_initial_hw_address (device), "reset", LOGD_VLAN);
|
||||
nm_device_hw_addr_reset (device);
|
||||
}
|
||||
|
||||
/******************************************************************/
|
||||
|
|
|
|||
|
|
@ -524,7 +524,7 @@ act_stage1_prepare (NMDevice *device, NMDeviceStateReason *reason)
|
|||
s_wired = (NMSettingWired *) nm_device_get_applied_setting (device, NM_TYPE_SETTING_WIRED);
|
||||
if (s_wired)
|
||||
cloned_mac = nm_setting_wired_get_cloned_mac_address (s_wired);
|
||||
nm_device_set_hw_addr (device, cloned_mac, "set", LOGD_DEVICE);
|
||||
nm_device_hw_addr_set (device, cloned_mac);
|
||||
|
||||
return NM_ACT_STAGE_RETURN_SUCCESS;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11406,49 +11406,58 @@ nm_device_update_initial_hw_address (NMDevice *self)
|
|||
}
|
||||
}
|
||||
|
||||
gboolean
|
||||
nm_device_set_hw_addr (NMDevice *self, const char *addr,
|
||||
const char *detail, guint64 hw_log_domain)
|
||||
static gboolean
|
||||
_hw_addr_set (NMDevice *self,
|
||||
const char *addr,
|
||||
const char *detail)
|
||||
{
|
||||
NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
|
||||
NMDevicePrivate *priv;
|
||||
gboolean success = FALSE;
|
||||
const char *cur_addr = nm_device_get_hw_address (self);
|
||||
const char *cur_addr;
|
||||
guint8 addr_bytes[NM_UTILS_HWADDR_LEN_MAX];
|
||||
guint hw_addr_len;
|
||||
|
||||
/* Fall back to the permanent address */
|
||||
if (!addr)
|
||||
addr = priv->perm_hw_addr;
|
||||
if (!addr)
|
||||
return FALSE;
|
||||
nm_assert (NM_IS_DEVICE (self));
|
||||
nm_assert (addr);
|
||||
nm_assert (detail);
|
||||
|
||||
priv = NM_DEVICE_GET_PRIVATE (self);
|
||||
|
||||
cur_addr = nm_device_get_hw_address (self);
|
||||
|
||||
/* Do nothing if current MAC is same */
|
||||
if (cur_addr && nm_utils_hwaddr_matches (cur_addr, -1, addr, -1)) {
|
||||
_LOGD (LOGD_DEVICE | hw_log_domain, "no MAC address change needed");
|
||||
_LOGD (LOGD_DEVICE, "no MAC address change needed");
|
||||
return TRUE;
|
||||
}
|
||||
if (!nm_utils_hwaddr_aton (addr, addr_bytes, priv->hw_addr_len)) {
|
||||
_LOGW (LOGD_DEVICE | hw_log_domain, "invalid MAC address %s", addr);
|
||||
|
||||
hw_addr_len = priv->hw_addr_len;
|
||||
if (!hw_addr_len)
|
||||
hw_addr_len = _nm_utils_hwaddr_length (addr);
|
||||
if ( !hw_addr_len
|
||||
|| !nm_utils_hwaddr_aton (addr, addr_bytes, hw_addr_len)) {
|
||||
_LOGW (LOGD_DEVICE, "invalid MAC address %s", addr);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* Can't change MAC address while device is up */
|
||||
nm_device_take_down (self, FALSE);
|
||||
|
||||
success = nm_platform_link_set_address (NM_PLATFORM_GET, nm_device_get_ip_ifindex (self), addr_bytes, priv->hw_addr_len);
|
||||
success = nm_platform_link_set_address (NM_PLATFORM_GET, nm_device_get_ip_ifindex (self), addr_bytes, hw_addr_len);
|
||||
if (success) {
|
||||
/* MAC address succesfully changed; update the current MAC to match */
|
||||
nm_device_update_hw_address (self);
|
||||
cur_addr = nm_device_get_hw_address (self);
|
||||
if (cur_addr && nm_utils_hwaddr_matches (cur_addr, -1, addr, -1)) {
|
||||
_LOGI (LOGD_DEVICE | hw_log_domain, "%s MAC address to %s",
|
||||
_LOGI (LOGD_DEVICE, "%s MAC address to %s",
|
||||
detail, addr);
|
||||
} else {
|
||||
_LOGW (LOGD_DEVICE | hw_log_domain,
|
||||
_LOGW (LOGD_DEVICE,
|
||||
"new MAC address %s not successfully set", addr);
|
||||
success = FALSE;
|
||||
}
|
||||
} else {
|
||||
_LOGW (LOGD_DEVICE | hw_log_domain, "failed to %s MAC address to %s",
|
||||
_LOGW (LOGD_DEVICE, "failed to %s MAC address to %s",
|
||||
detail, addr);
|
||||
}
|
||||
nm_device_bring_up (self, TRUE, NULL);
|
||||
|
|
@ -11456,6 +11465,39 @@ nm_device_set_hw_addr (NMDevice *self, const char *addr,
|
|||
return success;
|
||||
}
|
||||
|
||||
gboolean
|
||||
nm_device_hw_addr_set (NMDevice *self, const char *addr)
|
||||
{
|
||||
NMDevicePrivate *priv;
|
||||
|
||||
g_return_val_if_fail (NM_IS_DEVICE (self), FALSE);
|
||||
|
||||
priv = NM_DEVICE_GET_PRIVATE (self);
|
||||
|
||||
if (!addr) {
|
||||
addr = priv->perm_hw_addr;
|
||||
if (!addr)
|
||||
return FALSE;
|
||||
}
|
||||
return _hw_addr_set (self, addr, "set");
|
||||
}
|
||||
|
||||
gboolean
|
||||
nm_device_hw_addr_reset (NMDevice *self)
|
||||
{
|
||||
NMDevicePrivate *priv;
|
||||
const char *addr;
|
||||
|
||||
g_return_val_if_fail (NM_IS_DEVICE (self), FALSE);
|
||||
|
||||
priv = NM_DEVICE_GET_PRIVATE (self);
|
||||
|
||||
addr = priv->initial_hw_addr;
|
||||
if (!addr)
|
||||
return FALSE;
|
||||
return _hw_addr_set (self, addr, "reset");
|
||||
}
|
||||
|
||||
const char *
|
||||
nm_device_get_permanent_hw_address (NMDevice *self)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -491,9 +491,7 @@ deactivate (NMDevice *device)
|
|||
/* Clear any critical protocol notification in the Wi-Fi stack */
|
||||
nm_platform_wifi_indicate_addressing_running (NM_PLATFORM_GET, ifindex, FALSE);
|
||||
|
||||
/* Reset MAC address back to initial address */
|
||||
if (nm_device_get_initial_hw_address (device))
|
||||
nm_device_set_hw_addr (device, nm_device_get_initial_hw_address (device), "reset", LOGD_WIFI);
|
||||
nm_device_hw_addr_reset (device);
|
||||
|
||||
/* Ensure we're in infrastructure mode after deactivation; some devices
|
||||
* (usually older ones) don't scan well in adhoc mode.
|
||||
|
|
@ -2328,7 +2326,7 @@ act_stage1_prepare (NMDevice *device, NMDeviceStateReason *reason)
|
|||
|
||||
/* Set spoof MAC to the interface */
|
||||
cloned_mac = nm_setting_wireless_get_cloned_mac_address (s_wireless);
|
||||
nm_device_set_hw_addr (device, cloned_mac, "set", LOGD_WIFI);
|
||||
nm_device_hw_addr_set (device, cloned_mac);
|
||||
|
||||
/* AP mode never uses a specific object or existing scanned AP */
|
||||
if (priv->mode != NM_802_11_MODE_AP) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue