From b942e0ac9a8aa39c7b80c330e93f3294ee0a8539 Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Tue, 25 Jun 2019 09:51:22 +0200 Subject: device: set IPv6 token only when necessary Setting the IPv6 token triggers a new router solicitation from kernel and so we should avoid when not strictly necessary. https://mail.gnome.org/archives/networkmanager-list/2019-May/msg00004.html https://gitlab.freedesktop.org/NetworkManager/NetworkManager/issues/179 --- src/devices/nm-device.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/devices/nm-device.c b/src/devices/nm-device.c index 334912b058..8fe3e5776f 100644 --- a/src/devices/nm-device.c +++ b/src/devices/nm-device.c @@ -7566,15 +7566,23 @@ ip_config_merge_and_apply (NMDevice *self, } if (!IS_IPv4) { + const NMPlatformLink *link; NMUtilsIPv6IfaceId iid; + NMPlatform *platform; + int ifindex; if ( commit && priv->ndisc_started && ip6_addr_gen_token && nm_utils_ipv6_interface_identifier_get_from_token (&iid, ip6_addr_gen_token)) { - nm_platform_link_set_ipv6_token (nm_device_get_platform (self), - nm_device_get_ip_ifindex (self), - iid); + platform = nm_device_get_platform (self); + ifindex = nm_device_get_ip_ifindex (self); + link = nm_platform_link_get (platform, ifindex); + + if (link && link->inet6_token.id == iid.id) + _LOGT (LOGD_DEVICE | LOGD_IP6, "token %s already set", ip6_addr_gen_token); + else + nm_platform_link_set_ipv6_token (platform, ifindex, iid); } } -- cgit v1.2.1