mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-01-07 16:00:21 +01:00
device: synchronize IPv6 configuration in stage3 (take 2)
Most of the IPv6 methods require a non-tentative link local address configured on the interface; we look at priv->ip6_config to determine if such address exist. If the configuration is out-of-sync, we may proceed with configuration when the link-local address does not exist or is still tentative, especially because we toggle the "disable_ipv6" sysctl parameter just before, which clears all IPv6 addresses on the interface. Ensure that priv->ext_ip6_config_captured is up-to-date before continuing with the IPv6 configuration, and use it to determine whether suitable addresses are present. Fixes test: @ipv6_set_ra_announced_mtu Fixes:8f4caab601(cherry picked from commit0461da2690)
This commit is contained in:
parent
98b4b4754e
commit
a65e102472
1 changed files with 15 additions and 3 deletions
|
|
@ -6832,7 +6832,8 @@ linklocal6_complete (NMDevice *self)
|
|||
const char *method;
|
||||
|
||||
g_assert (priv->linklocal6_timeout_id);
|
||||
g_assert (nm_ip6_config_get_address_first_nontentative (priv->ip6_config, TRUE));
|
||||
g_assert (priv->ext_ip6_config_captured);
|
||||
g_assert (nm_ip6_config_get_address_first_nontentative (priv->ext_ip6_config_captured, TRUE));
|
||||
|
||||
linklocal6_cleanup (self);
|
||||
|
||||
|
|
@ -6956,8 +6957,8 @@ linklocal6_start (NMDevice *self)
|
|||
|
||||
linklocal6_cleanup (self);
|
||||
|
||||
if ( priv->ip6_config
|
||||
&& nm_ip6_config_get_address_first_nontentative (priv->ip6_config, TRUE))
|
||||
if ( priv->ext_ip6_config_captured
|
||||
&& nm_ip6_config_get_address_first_nontentative (priv->ext_ip6_config_captured, TRUE))
|
||||
return NM_ACT_STAGE_RETURN_SUCCESS;
|
||||
|
||||
connection = nm_device_get_applied_connection (self);
|
||||
|
|
@ -7718,6 +7719,17 @@ act_stage3_ip6_config_start (NMDevice *self,
|
|||
/* Re-enable IPv6 on the interface */
|
||||
set_disable_ipv6 (self, "0");
|
||||
|
||||
/* Synchronize external IPv6 configuration with kernel, since
|
||||
* linklocal6_start() uses the information there to determine if we can
|
||||
* proceed with the selected method (SLAAC, DHCP, link-local).
|
||||
*/
|
||||
nm_platform_process_events (nm_device_get_platform (self));
|
||||
g_clear_object (&priv->ext_ip6_config_captured);
|
||||
priv->ext_ip6_config_captured = nm_ip6_config_capture (nm_device_get_platform (self),
|
||||
nm_device_get_ifindex (self),
|
||||
FALSE,
|
||||
NM_SETTING_IP6_CONFIG_PRIVACY_UNKNOWN);
|
||||
|
||||
ip6_privacy = _ip6_privacy_get (self);
|
||||
|
||||
if ( strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_AUTO) == 0
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue