This is an automated email from the ASF dual-hosted git repository.
Pearl1594 pushed a commit to branch support-multi-vlan-guestnet
in repository https://gitbox.apache.org/repos/asf/cloudstack.git
The following commit(s) were added to refs/heads/support-multi-vlan-guestnet by
this push:
new 0dcc9be4499 Remove stray default VLAN 1 membership when plugging VLAN
nics on libvirt<11 vlan_filtering hosts
0dcc9be4499 is described below
commit 0dcc9be44992e616d93cab4757df4c460422a850
Author: Pearl1594 <[email protected]>
AuthorDate: Mon Oct 19 10:23:02 2026 -0400
Remove stray default VLAN 1 membership when plugging VLAN nics on
libvirt<11 vlan_filtering hosts
---
.../hypervisor/kvm/resource/BridgeVifDriver.java | 4 +---
.../hypervisor/kvm/resource/BridgeVifDriverTest.java | 19 +++++++++++++++++++
2 files changed, 20 insertions(+), 3 deletions(-)
diff --git
a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/BridgeVifDriver.java
b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/BridgeVifDriver.java
index 7f235bf6a52..7fb4d622294 100644
---
a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/BridgeVifDriver.java
+++
b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/BridgeVifDriver.java
@@ -307,9 +307,7 @@ public class BridgeVifDriver extends VifDriverBase {
throw new InternalErrorException("Cannot apply manual VLAN trunk
membership: tap device name unknown for nic " + nic.getMac());
}
Integer primaryVlanTag = parseVlanTag(nic.getBroadcastUri(), "primary
network of nic " + nic.getMac());
- for (Integer vlanTag : collectTrunkVlanTags(nic)) {
- runBridgeVlanCommand("add", tapName, String.valueOf(vlanTag),
vlanTag.equals(primaryVlanTag));
- }
+ applyVlanTrunkMembershipDiff(tapName, collectTrunkVlanTags(nic),
primaryVlanTag);
}
protected void runBridgeVlanCommand(String operation, String dev, String
vid, boolean pvidUntagged) throws InternalErrorException {
diff --git
a/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/BridgeVifDriverTest.java
b/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/BridgeVifDriverTest.java
index e5e092d3aa0..b7a682f8a81 100644
---
a/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/BridgeVifDriverTest.java
+++
b/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/BridgeVifDriverTest.java
@@ -211,6 +211,7 @@ public class BridgeVifDriverTest {
nic.setTrunkVlan(false);
LibvirtVMDef.InterfaceDef intf = new LibvirtVMDef.InterfaceDef();
intf.setDevName("vnet5");
+
Mockito.doReturn(Collections.emptyMap()).when(driver).readCurrentVlanMembership("vnet5");
driver.ensureVlanTrunkMembership(intf, nic);
@@ -236,6 +237,7 @@ public class BridgeVifDriverTest {
NicTO nic = buildTrunkNic(100, Collections.singletonList(200));
LibvirtVMDef.InterfaceDef intf = new LibvirtVMDef.InterfaceDef();
intf.setDevName("vnet5");
+
Mockito.doReturn(Collections.emptyMap()).when(driver).readCurrentVlanMembership("vnet5");
driver.ensureVlanTrunkMembership(intf, nic);
@@ -243,6 +245,23 @@ public class BridgeVifDriverTest {
Mockito.verify(driver).runBridgeVlanCommand("add", "vnet5", "200",
false);
}
+ @Test
+ public void ensureVlanTrunkMembershipRemovesDefaultVlanOneOnOldLibvirt()
throws InternalErrorException {
+
Mockito.when(libvirtComputingResource.hostSupportsVlanTrunkXml()).thenReturn(false);
+ NicTO nic = buildTrunkNic(100, Collections.singletonList(200));
+ LibvirtVMDef.InterfaceDef intf = new LibvirtVMDef.InterfaceDef();
+ intf.setDevName("vnet5");
+ Map<Integer, Boolean> currentMembership = new HashMap<>();
+ currentMembership.put(1, true);
+
Mockito.doReturn(currentMembership).when(driver).readCurrentVlanMembership("vnet5");
+
+ driver.ensureVlanTrunkMembership(intf, nic);
+
+ Mockito.verify(driver).runBridgeVlanCommand("del", "vnet5", "1",
false);
+ Mockito.verify(driver).runBridgeVlanCommand("add", "vnet5", "100",
true);
+ Mockito.verify(driver).runBridgeVlanCommand("add", "vnet5", "200",
false);
+ }
+
@Test(expected = InternalErrorException.class)
public void ensureVlanTrunkMembershipFailsWhenTapNameUnknown() throws
InternalErrorException {
Mockito.when(libvirtComputingResource.hostSupportsVlanTrunkXml()).thenReturn(false);