device: fix recheck slave logic

Since commit a1de6810df ('device: don't ignore external slave removals')
we don't leave device_recheck_slave_status() on un-eslaving (that is
plink->master = 0) early enough.

This results in hooking of NM_MANAGER_DEVICE_IFINDEX_CHANGED even
when we're not actually waiting for any master device to come up,
accompanied by a messed up log entry:

  device[3fa7cfc200be4e84] (portXc): enslaved to unknown device 0 (??)

We also log nonsense when we see any device's link being removed:

  device[a9a4b65bde851bcf] (br0): ifindex: set ifindex 0 (old-l3cfg: 05c6a4409f84d9d2)
  device[45d34e95fb71cce0] (portXa): master br0 with ifindex 0 appeared

We don't do further damage afterwards, so this is purely a cosmetic
annoyance.
This commit is contained in:
Lubomir Rintel 2022-09-30 17:41:26 +02:00
parent a49aede4b8
commit bf60fd5acc

View file

@ -6573,27 +6573,30 @@ device_recheck_slave_status(NMDevice *self, const NMPlatformLink *plink)
NM_DEVICE_STATE_REASON_CONNECTION_ASSUMED);
}
if (master && NM_DEVICE_GET_CLASS(master)->attach_port) {
nm_device_master_add_slave(master, self, FALSE);
if (master) {
if (NM_DEVICE_GET_CLASS(master)->attach_port) {
nm_device_master_add_slave(master, self, FALSE);
} else {
_LOGD(LOGD_DEVICE,
"enslaved to non-master-type device %s; ignoring",
nm_device_get_iface(master));
}
goto out;
}
if (master) {
_LOGD(LOGD_DEVICE,
"enslaved to non-master-type device %s; ignoring",
nm_device_get_iface(master));
} else {
if (plink->master) {
_LOGD(LOGD_DEVICE,
"enslaved to unknown device %d (%s%s%s)",
plink->master,
NM_PRINT_FMT_QUOTED(plink_master, "\"", plink_master->name, "\"", "??"));
if (!priv->ifindex_changed_id) {
priv->ifindex_changed_id = g_signal_connect(nm_device_get_manager(self),
NM_MANAGER_DEVICE_IFINDEX_CHANGED,
G_CALLBACK(device_ifindex_changed_cb),
self);
}
}
if (!priv->ifindex_changed_id) {
priv->ifindex_changed_id = g_signal_connect(nm_device_get_manager(self),
NM_MANAGER_DEVICE_IFINDEX_CHANGED,
G_CALLBACK(device_ifindex_changed_cb),
self);
}
return;
out: