device: restore IPv6 addresses when the link comes up

When the link goes down the kernel removes IPv6 addresses from the
interface. In update_ext_ip_config() we detect that addresses were
removed externally and drop them from various internal
configurations. Don't do that if the link is down so that those
addresses will be restored again on link up.

(cherry picked from commit 505d2adbc2)
This commit is contained in:
Beniamino Galvani 2019-03-08 18:26:30 +01:00
parent e096742809
commit 97de744afd

View file

@ -12784,17 +12784,17 @@ update_ext_ip_config (NMDevice *self, int addr_family, gboolean intersect_config
* by the user. */
if (priv->con_ip_config_6) {
nm_ip6_config_intersect (priv->con_ip_config_6, priv->ext_ip_config_6,
TRUE,
is_up,
is_up,
default_route_metric_penalty_get (self, AF_INET6));
}
intersect_ext_config (self, &priv->ac_ip6_config, TRUE, is_up);
intersect_ext_config (self, &priv->dhcp6.ip6_config, TRUE, is_up);
intersect_ext_config (self, &priv->dev2_ip_config_6, TRUE, is_up);
intersect_ext_config (self, &priv->ac_ip6_config, is_up, is_up);
intersect_ext_config (self, &priv->dhcp6.ip6_config, is_up, is_up);
intersect_ext_config (self, &priv->dev2_ip_config_6, is_up, is_up);
for (iter = priv->vpn_configs_6; iter; iter = iter->next)
nm_ip6_config_intersect (iter->data, priv->ext_ip_config_6, TRUE, is_up, 0);
nm_ip6_config_intersect (iter->data, priv->ext_ip_config_6, is_up, is_up, 0);
if ( priv->ipv6ll_has
&& !nm_ip6_config_lookup_address (priv->ext_ip_config_6, &priv->ipv6ll_addr))