summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJiří Klimeš <jklimes@redhat.com>2015-06-24 09:42:58 +0000
committerJiří Klimeš <jklimes@redhat.com>2015-06-24 15:07:18 +0200
commit0a00eb67dd6d5805298e97d06c9270ed312a0e19 (patch)
tree168f5613a063a502e12dfa1d4a51c2aa32e6b736
parentb77fba39395c9ca9d32052531e7fb9c178e55255 (diff)
downloadNetworkManager-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.c36
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 */