diff options
Diffstat (limited to 'src/devices/nm-device.c')
-rw-r--r-- | src/devices/nm-device.c | 12 |
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); |