mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager
synced 2024-10-03 06:45:26 +00:00
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
This commit is contained in:
parent
a939a665a1
commit
e80fc0566a
|
@ -1136,11 +1136,19 @@ retry_connections_for_parent_device (NMManager *self, NMDevice *device)
|
||||||
connections = nm_settings_get_connections (priv->settings);
|
connections = nm_settings_get_connections (priv->settings);
|
||||||
for (iter = connections; iter; iter = g_slist_next (iter)) {
|
for (iter = connections; iter; iter = g_slist_next (iter)) {
|
||||||
NMConnection *candidate = iter->data;
|
NMConnection *candidate = iter->data;
|
||||||
|
gs_free_error GError *error = NULL;
|
||||||
|
gs_free char *ifname = NULL;
|
||||||
NMDevice *parent;
|
NMDevice *parent;
|
||||||
|
|
||||||
parent = find_parent_device_for_connection (self, candidate, NULL);
|
parent = find_parent_device_for_connection (self, candidate, NULL);
|
||||||
if (parent == device)
|
if (parent == device) {
|
||||||
connection_changed (priv->settings, candidate, self);
|
/* 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);
|
g_slist_free (connections);
|
||||||
|
|
Loading…
Reference in a new issue