From bf79fbd6780fd38ca29c12a137951c8729379767 Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Tue, 8 Jul 2025 15:09:25 +0200 Subject: [PATCH 1/2] bridge: fix reapplying port VLANs If the bridge default-pvid is zero, it means that the default PVID is disabled. That is, the bridge PVID is not propagated to ports. Currently NM tries to merge the existing bridge VLANs on the port with the default PVID from the bridge, even when the PVID is zero. This causes an error when setting the new VLAN list in the kernel, because it rejects VLAN zero. Skip the merge of the default PVID when zero. Fixes: c5d1e35f993e ('device: support reapplying bridge-port VLANs') --- src/core/devices/nm-device-bridge.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/core/devices/nm-device-bridge.c b/src/core/devices/nm-device-bridge.c index 7c34fde07..45cdd83f0 100644 --- a/src/core/devices/nm-device-bridge.c +++ b/src/core/devices/nm-device-bridge.c @@ -735,6 +735,11 @@ merge_bridge_vlan_default_pvid(NMPlatformBridgeVlan *vlans, guint *num_vlans, gu gboolean has_pvid = FALSE; guint i; + if (default_pvid == 0) { + /* default_pvid=0 means that the default PVID is disabled. No need to merge it. */ + return vlans; + } + for (i = 0; i < *num_vlans; i++) { if (vlans[i].pvid) { has_pvid = TRUE; From 261fa8db336e0571479567e2bda10dbf5d171b0a Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Tue, 8 Jul 2025 17:16:25 +0200 Subject: [PATCH 2/2] device: accept changes to the bond-port.vlans during reapply Commit c5d1e35f993e ('device: support reapplying bridge-port VLANs') didn't update can_reapply_change() to accept the "bridge-port.vlans" property during a reapply. So, it was only possible to change the bridge port VLANs by updating the "bridge.vlan-default-pvid" property and doing a reapply. Fix that. Fixes: c5d1e35f993e ('device: support reapplying bridge-port VLANs') --- src/core/devices/nm-device.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/core/devices/nm-device.c b/src/core/devices/nm-device.c index 9e0a53cd3..c30d01814 100644 --- a/src/core/devices/nm-device.c +++ b/src/core/devices/nm-device.c @@ -14050,6 +14050,13 @@ can_reapply_change(NMDevice *self, goto out_fail; } + if (nm_streq(setting_name, NM_SETTING_BRIDGE_PORT_SETTING_NAME)) { + return nm_device_hash_check_invalid_keys(diffs, + NM_SETTING_BRIDGE_PORT_SETTING_NAME, + error, + NM_SETTING_BRIDGE_PORT_VLANS); + } + if (nm_streq(setting_name, NM_SETTING_SRIOV_SETTING_NAME)) { return nm_device_hash_check_invalid_keys(diffs, NM_SETTING_SRIOV_SETTING_NAME,