diff options
author | Jiří Klimeš <jklimes@redhat.com> | 2015-06-24 09:42:58 +0000 |
---|---|---|
committer | Jiří Klimeš <jklimes@redhat.com> | 2015-06-24 15:07:18 +0200 |
commit | 0a00eb67dd6d5805298e97d06c9270ed312a0e19 (patch) | |
tree | 168f5613a063a502e12dfa1d4a51c2aa32e6b736 | |
parent | b77fba39395c9ca9d32052531e7fb9c178e55255 (diff) | |
download | NetworkManager-0a00eb67dd6d5805298e97d06c9270ed312a0e19.tar.gz |
device: split ensure_ipx_config() into IPv4 and IPv6 (bgo #751430)
Without that we can remove addresses from con-ip6-config due to external
changes *before* it is applied and thus manual IPv6 addresses are not applied
together with ipv6.method=auto.
Testcase:
$ nmcli con add type ether con-name AAA ifname eth0 autoconnect no
$ nmcli con mod AAA ipv4.addresses 1.1.1.1/24 ipv6.addresses 99::99/64
$ nmcli con up AAA
Fixes:Beaker:NetworkManager_Test37_run_once_new_connection
Fixes:Beaker:NetworkManager_Test84_ipv6_addresses_no_when_static_switch_asked
https://bugzilla.gnome.org/show_bug.cgi?id=751430
-rw-r--r-- | src/devices/nm-device.c | 36 |
1 files changed, 26 insertions, 10 deletions
diff --git a/src/devices/nm-device.c b/src/devices/nm-device.c index c8356c53c1..8c8ebc40ee 100644 --- a/src/devices/nm-device.c +++ b/src/devices/nm-device.c @@ -3135,14 +3135,12 @@ _device_get_default_route_from_platform (NMDevice *self, int addr_family, NMPlat /*********************************************/ static void -ensure_con_ipx_config (NMDevice *self) +ensure_con_ip4_config (NMDevice *self) { NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self); int ip_ifindex = nm_device_get_ip_ifindex (self); NMConnection *connection; - g_assert (!!priv->con_ip4_config == !!priv->con_ip6_config); - if (priv->con_ip4_config) return; @@ -3151,20 +3149,38 @@ ensure_con_ipx_config (NMDevice *self) return; priv->con_ip4_config = nm_ip4_config_new (ip_ifindex); - priv->con_ip6_config = nm_ip6_config_new (ip_ifindex); - nm_ip4_config_merge_setting (priv->con_ip4_config, nm_connection_get_setting_ip4_config (connection), nm_device_get_ip4_route_metric (self)); - nm_ip6_config_merge_setting (priv->con_ip6_config, - nm_connection_get_setting_ip6_config (connection), - nm_device_get_ip6_route_metric (self)); if (nm_device_uses_assumed_connection (self)) { /* For assumed connections ignore all addresses and routes. */ nm_ip4_config_reset_addresses (priv->con_ip4_config); nm_ip4_config_reset_routes (priv->con_ip4_config); + } +} + +static void +ensure_con_ip6_config (NMDevice *self) +{ + NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self); + int ip_ifindex = nm_device_get_ip_ifindex (self); + NMConnection *connection; + if (priv->con_ip6_config) + return; + + connection = nm_device_get_connection (self); + if (!connection) + return; + + priv->con_ip6_config = nm_ip6_config_new (ip_ifindex); + nm_ip6_config_merge_setting (priv->con_ip6_config, + nm_connection_get_setting_ip6_config (connection), + nm_device_get_ip6_route_metric (self)); + + if (nm_device_uses_assumed_connection (self)) { + /* For assumed connections ignore all addresses and routes. */ nm_ip6_config_reset_addresses (priv->con_ip6_config); nm_ip6_config_reset_routes (priv->con_ip6_config); } @@ -3223,7 +3239,7 @@ ip4_config_merge_and_apply (NMDevice *self, composite = nm_ip4_config_new (nm_device_get_ip_ifindex (self)); if (commit) - ensure_con_ipx_config (self); + ensure_con_ip4_config (self); if (priv->dev_ip4_config) nm_ip4_config_merge (composite, priv->dev_ip4_config); @@ -3818,7 +3834,7 @@ ip6_config_merge_and_apply (NMDevice *self, composite = nm_ip6_config_new (nm_device_get_ip_ifindex (self)); if (commit) - ensure_con_ipx_config (self); + ensure_con_ip6_config (self); g_assert (composite); /* Merge all the IP configs into the composite config */ |