summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLubomir Rintel <lkundrak@v3.sk>2022-09-30 22:40:03 +0200
committerLubomir Rintel <lkundrak@v3.sk>2022-09-30 23:21:36 +0200
commitdc254f90e2b306700a0b81f7194e9b0438c62f4c (patch)
treeae0e8be53b6e1d6e49169e84a61abeedfe65e1ba
parent455dbfce6e2ccfae0f0a03d9df016e6a2eb0fe2a (diff)
downloadNetworkManager-lr/master-uuid.tar.gz
bond,bridge,team: use uuid for con.master when generating connectionlr/master-uuid
If we're generating a connection for an externally configured slave, refer the master by the UUID instead of the device name. This doesn't matter most of the time. However, on a checkpoint restore we need to make sure that a connection that is unambiguously the original master is up. Otherwise it could happen that a different connection was activated on the same master device and the slaves being restored don't agree on which master connection to bring up. I can't think of any thing that would rely on this but I've been wrong about more serious things before. Fixes-test: @libnm_snapshot_reattach_unmanaged_ports_to_bridge https://bugzilla.redhat.com/show_bug.cgi?id=2125615
-rw-r--r--src/core/devices/nm-device-bond.c9
-rw-r--r--src/core/devices/nm-device-bridge.c9
-rw-r--r--src/core/devices/team/nm-device-team.c9
3 files changed, 15 insertions, 12 deletions
diff --git a/src/core/devices/nm-device-bond.c b/src/core/devices/nm-device-bond.c
index dc5e1d5c7e..2c8d43872d 100644
--- a/src/core/devices/nm-device-bond.c
+++ b/src/core/devices/nm-device-bond.c
@@ -224,9 +224,10 @@ controller_update_port_connection(NMDevice *self,
GError **error)
{
NMSettingBondPort *s_port;
- int ifindex_port = nm_device_get_ifindex(port);
- uint queue_id = NM_BOND_PORT_QUEUE_ID_DEF;
- gs_free char *queue_id_str = NULL;
+ int ifindex_port = nm_device_get_ifindex(port);
+ NMConnection *applied_connection = nm_device_get_applied_connection(self);
+ uint queue_id = NM_BOND_PORT_QUEUE_ID_DEF;
+ gs_free char *queue_id_str = NULL;
g_return_val_if_fail(ifindex_port > 0, FALSE);
@@ -243,7 +244,7 @@ controller_update_port_connection(NMDevice *self,
g_object_set(nm_connection_get_setting_connection(connection),
NM_SETTING_CONNECTION_MASTER,
- nm_device_get_iface(self),
+ nm_connection_get_uuid(applied_connection),
NM_SETTING_CONNECTION_SLAVE_TYPE,
NM_SETTING_BOND_SETTING_NAME,
NULL);
diff --git a/src/core/devices/nm-device-bridge.c b/src/core/devices/nm-device-bridge.c
index 31cf361e8e..d8f1337058 100644
--- a/src/core/devices/nm-device-bridge.c
+++ b/src/core/devices/nm-device-bridge.c
@@ -679,9 +679,10 @@ master_update_slave_connection(NMDevice *device,
NMDeviceBridge *self = NM_DEVICE_BRIDGE(device);
NMSettingConnection *s_con;
NMSettingBridgePort *s_port;
- int ifindex_slave = nm_device_get_ifindex(slave);
- const char *iface = nm_device_get_iface(device);
- const Option *option;
+ int ifindex_slave = nm_device_get_ifindex(slave);
+ NMConnection *applied_connection = nm_device_get_applied_connection(device);
+
+ const Option *option;
g_return_val_if_fail(ifindex_slave > 0, FALSE);
@@ -717,7 +718,7 @@ master_update_slave_connection(NMDevice *device,
g_object_set(s_con,
NM_SETTING_CONNECTION_MASTER,
- iface,
+ nm_connection_get_uuid(applied_connection),
NM_SETTING_CONNECTION_SLAVE_TYPE,
NM_SETTING_BRIDGE_SETTING_NAME,
NULL);
diff --git a/src/core/devices/team/nm-device-team.c b/src/core/devices/team/nm-device-team.c
index d90b766bdb..49ce953df1 100644
--- a/src/core/devices/team/nm-device-team.c
+++ b/src/core/devices/team/nm-device-team.c
@@ -258,9 +258,10 @@ master_update_slave_connection(NMDevice *device,
gs_free_error GError *connect_error = NULL;
int err = 0;
struct teamdctl *tdc;
- const char *team_port_config = NULL;
- const char *iface = nm_device_get_iface(device);
- const char *iface_slave = nm_device_get_iface(slave);
+ const char *team_port_config = NULL;
+ const char *iface = nm_device_get_iface(device);
+ const char *iface_slave = nm_device_get_iface(slave);
+ NMConnection *applied_connection = nm_device_get_applied_connection(device);
tdc = _tdc_connect_new(self, iface, &connect_error);
if (!tdc) {
@@ -299,7 +300,7 @@ master_update_slave_connection(NMDevice *device,
g_object_set(nm_connection_get_setting_connection(connection),
NM_SETTING_CONNECTION_MASTER,
- iface,
+ nm_connection_get_uuid(applied_connection),
NM_SETTING_CONNECTION_SLAVE_TYPE,
NM_SETTING_TEAM_SETTING_NAME,
NULL);