diff --git a/src/platform/nm-linux-platform.c b/src/platform/nm-linux-platform.c index 6d64e12885..54cedbda54 100644 --- a/src/platform/nm-linux-platform.c +++ b/src/platform/nm-linux-platform.c @@ -964,6 +964,15 @@ init_link (NMPlatform *platform, NMPlatformLink *info, struct rtnl_link *rtnllin } } +#if HAVE_LIBNL_INET6_ADDR_GEN_MODE + if (_support_user_ipv6ll_get ()) { + guint8 mode = 0; + + if (rtnl_link_inet6_get_addr_gen_mode (rtnllink, &mode) == 0) + info->inet6_addr_gen_mode_inv = ~mode; + } +#endif + udev_device = g_hash_table_lookup (priv->udev_devices, GINT_TO_POINTER (info->ifindex)); if (udev_device) { info->driver = nmp_utils_udev_get_driver (udev_device); diff --git a/src/platform/nm-platform.c b/src/platform/nm-platform.c index 6bb1351567..5433d5c7e2 100644 --- a/src/platform/nm-platform.c +++ b/src/platform/nm-platform.c @@ -2991,6 +2991,7 @@ nm_platform_link_cmp (const NMPlatformLink *a, const NMPlatformLink *b) _CMP_FIELD (a, b, mtu); _CMP_FIELD_BOOL (a, b, initialized); _CMP_FIELD (a, b, addr.len); + _CMP_FIELD (a, b, inet6_addr_gen_mode_inv); _CMP_FIELD_STR_INTERNED (a, b, kind); _CMP_FIELD_STR0 (a, b, udi); _CMP_FIELD_STR_INTERNED (a, b, driver); diff --git a/src/platform/nm-platform.h b/src/platform/nm-platform.h index 1d941a556b..66f24dad65 100644 --- a/src/platform/nm-platform.h +++ b/src/platform/nm-platform.h @@ -107,6 +107,11 @@ struct _NMPlatformLink { guint8 len; } addr; + /* The bitwise inverse of rtnl_link_inet6_get_addr_gen_mode(). It is inverse + * to have a default of 0 -- meaning: unspecified. That way, a struct + * initialized with memset(0) has and unset value.*/ + guint8 inet6_addr_gen_mode_inv; + /* rtnl_link_vlan_get_id(), IFLA_VLAN_ID */ guint16 vlan_id;