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:
Thomas Haller 2016-05-20 09:41:40 +02:00
parent 224937f5dd
commit fa5230e255
8 changed files with 72 additions and 40 deletions

View file

@ -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

View file

@ -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);
}
/******************************************************************/

View file

@ -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);

View file

@ -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;
}

View file

@ -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);
}
/******************************************************************/

View file

@ -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;
}

View file

@ -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)
{

View file

@ -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) {