summaryrefslogtreecommitdiff
path: root/src/devices/nm-device.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/nm-device.c')
-rw-r--r--src/devices/nm-device.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/src/devices/nm-device.c b/src/devices/nm-device.c
index 890427f70d..494e90772a 100644
--- a/src/devices/nm-device.c
+++ b/src/devices/nm-device.c
@@ -388,9 +388,6 @@ static void _set_state_full (NMDevice *self,
NMDeviceStateReason reason,
gboolean quitting);
-static void nm_device_update_hw_address (NMDevice *self);
-static void nm_device_update_initial_hw_address (NMDevice *self);
-
/***********************************************************/
#define QUEUED_PREFIX "queued state change to "
@@ -8862,19 +8859,24 @@ nm_device_get_hw_address (NMDevice *self)
return priv->hw_addr_len ? priv->hw_addr : NULL;
}
-static void
+void
nm_device_update_hw_address (NMDevice *self)
{
NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
int ifindex = nm_device_get_ifindex (self);
const guint8 *hwaddr;
gsize hwaddrlen = 0;
+ static const guint8 zero_hwaddr[ETH_ALEN];
if (ifindex <= 0)
return;
hwaddr = nm_platform_link_get_address (NM_PLATFORM_GET, ifindex, &hwaddrlen);
+ if ( priv->type == NM_DEVICE_TYPE_ETHERNET
+ && nm_utils_hwaddr_matches (hwaddr, hwaddrlen, zero_hwaddr, sizeof (zero_hwaddr)))
+ hwaddrlen = 0;
+
if (hwaddrlen) {
if (!priv->hw_addr || !nm_utils_hwaddr_matches (priv->hw_addr, -1, hwaddr, hwaddrlen)) {
g_free (priv->hw_addr);
@@ -8895,7 +8897,7 @@ nm_device_update_hw_address (NMDevice *self)
priv->hw_addr_len = hwaddrlen;
}
-static void
+void
nm_device_update_initial_hw_address (NMDevice *self)
{
NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);