summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBeniamino Galvani <bgalvani@redhat.com>2016-03-08 12:02:54 +0100
committerBeniamino Galvani <bgalvani@redhat.com>2016-03-09 09:48:44 +0100
commite80fc0566a68bb0802d4e525ca9d9bdc8c43000d (patch)
tree354bf937b2c5730bea1725cb015aee170dc1f616 /src
parenta939a665a1d4409a694d50f659bc8829cea0c038 (diff)
downloadNetworkManager-e80fc0566a68bb0802d4e525ca9d9bdc8c43000d.tar.gz
manager: fix assumption of child connections with autoconnect=no
During startup, when a link is detected (enp0s25 in the example below) we try to create also virtual devices (ipip1) on it through system_create_virtual_device(), however this realizes only devices for connections which can autoactivate. To support the assumption of child devices with autoconnect=no, we should take in consideration in retry_connections_for_parent_device() only connections for which the link does not exist, and let existing links be handled by platform_link_added(), which also realizes them. Reproducer: $ nmcli c add type ip-tunnel ifname ipip1 con-name ipip1+ autoconnect no \ mode ipip remote 172.25.16.1 dev enp0s25 ip4 1.2.3.4/31 $ nmcli c up ipip1+ $ systemctl restart NetworkManager Result: * before: ipip1+ is not assumed, ipip1 is not present in 'nmcli d' output * after: ipip1+ is assumed, ipip1 detected
Diffstat (limited to 'src')
-rw-r--r--src/nm-manager.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/nm-manager.c b/src/nm-manager.c
index 6d7f96ccbf..409079a3e4 100644
--- a/src/nm-manager.c
+++ b/src/nm-manager.c
@@ -1136,11 +1136,19 @@ retry_connections_for_parent_device (NMManager *self, NMDevice *device)
connections = nm_settings_get_connections (priv->settings);
for (iter = connections; iter; iter = g_slist_next (iter)) {
NMConnection *candidate = iter->data;
+ gs_free_error GError *error = NULL;
+ gs_free char *ifname = NULL;
NMDevice *parent;
parent = find_parent_device_for_connection (self, candidate, NULL);
- if (parent == device)
- connection_changed (priv->settings, candidate, self);
+ if (parent == device) {
+ /* Only try to activate devices that don't already exist */
+ ifname = nm_manager_get_connection_iface (self, candidate, &parent, &error);
+ if (ifname) {
+ if (!nm_platform_link_get_by_ifname (NM_PLATFORM_GET, ifname))
+ connection_changed (priv->settings, candidate, self);
+ }
+ }
}
g_slist_free (connections);