Skip to content

Commit 597e431

Browse files
committed
getting the vlanid from the /proc/net/vlan/<pif> file instead of the bridge name
1 parent aeb525c commit 597e431

File tree

4 files changed

+19
-29
lines changed

4 files changed

+19
-29
lines changed

plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1771,6 +1771,20 @@ private String matchPifFileInDirectory(final String bridgeName) {
17711771
return "";
17721772
}
17731773

1774+
public Integer getVlanIdForBridge(final String bridge) {
1775+
String pif = matchPifFileInDirectory(bridge);
1776+
final File vlanfile = new File("/proc/net/vlan/" + pif);
1777+
if (vlanfile.isFile()) {
1778+
String vlan = Script.runSimpleBashScript("awk '/VID:/ {print $3}' /proc/net/vlan/" + pif);
1779+
try {
1780+
return Integer.parseInt(vlan);
1781+
} catch (final NumberFormatException e) {
1782+
return null;
1783+
}
1784+
}
1785+
return null;
1786+
}
1787+
17741788
static String [] ifNamePatterns = {
17751789
"^eth",
17761790
"^bond",

plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtDomainXMLParser.java

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -240,12 +240,6 @@ public boolean parseDomainXML(String domXML) {
240240
} else if (type.equalsIgnoreCase("bridge")) {
241241
String bridge = getAttrValue("source", "bridge", nic);
242242
def.defBridgeNet(bridge, dev, mac, NicModel.valueOf(model.toUpperCase()), networkRateKBps);
243-
if (StringUtils.isNotBlank(bridge)) {
244-
Integer vlanId = extractVlanFromBridgeName(bridge);
245-
if (vlanId != null) {
246-
def.setVlanTag(vlanId);
247-
}
248-
}
249243
} else if (type.equalsIgnoreCase("ethernet")) {
250244
String scriptPath = getAttrValue("script", "path", nic);
251245
def.defEthernet(dev, mac, NicModel.valueOf(model.toUpperCase()), scriptPath, networkRateKBps);
@@ -573,22 +567,4 @@ private void extractCpuModeDef(final Element rootElement){
573567
}
574568
}
575569
}
576-
577-
private Integer extractVlanFromBridgeName(String bridge) {
578-
if (!bridge.startsWith("br")) {
579-
return null;
580-
}
581-
String[] splitByDash = bridge.split("-");
582-
if (splitByDash.length < 2) {
583-
return null;
584-
}
585-
try {
586-
Integer vlanId = Integer.parseInt(splitByDash[splitByDash.length - 1]);
587-
if (vlanId >=1 && vlanId <= 4094) {
588-
return vlanId;
589-
}
590-
} catch (NumberFormatException e) {
591-
}
592-
return null;
593-
}
594570
}

plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtGetUnmanagedInstancesCommandWrapper.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ private UnmanagedInstanceTO getUnmanagedInstance(LibvirtComputingResource libvir
134134
}
135135
instance.setPowerState(getPowerState(libvirtComputingResource.getVmState(conn,domain.getName())));
136136
instance.setMemory((int) LibvirtComputingResource.getDomainMemory(domain) / 1024);
137-
instance.setNics(getUnmanagedInstanceNics(parser.getInterfaces()));
137+
instance.setNics(getUnmanagedInstanceNics(libvirtComputingResource, parser.getInterfaces()));
138138
instance.setDisks(getUnmanagedInstanceDisks(parser.getDisks(),libvirtComputingResource, conn, domain.getName()));
139139
instance.setVncPassword(getFormattedVncPassword(parser.getVncPasswd()));
140140

@@ -165,7 +165,7 @@ private UnmanagedInstanceTO.PowerState getPowerState(VirtualMachine.PowerState v
165165
}
166166
}
167167

168-
private List<UnmanagedInstanceTO.Nic> getUnmanagedInstanceNics(List<LibvirtVMDef.InterfaceDef> interfaces) {
168+
private List<UnmanagedInstanceTO.Nic> getUnmanagedInstanceNics(LibvirtComputingResource libvirtComputingResource, List<LibvirtVMDef.InterfaceDef> interfaces) {
169169
final ArrayList<UnmanagedInstanceTO.Nic> nics = new ArrayList<>(interfaces.size());
170170
int counter = 0;
171171
for (LibvirtVMDef.InterfaceDef interfaceDef : interfaces) {
@@ -176,6 +176,9 @@ private List<UnmanagedInstanceTO.Nic> getUnmanagedInstanceNics(List<LibvirtVMDef
176176
nic.setNetwork(interfaceDef.getDevName());
177177
nic.setPciSlot(interfaceDef.getSlot().toString());
178178
nic.setVlan(interfaceDef.getVlanTag());
179+
if (nic.getVlan() == -1 && interfaceDef.getNetType() == LibvirtVMDef.InterfaceDef.GuestNetType.BRIDGE) {
180+
nic.setVlan(libvirtComputingResource.getVlanIdForBridge(interfaceDef.getBrName()));
181+
}
179182
nics.add(nic);
180183
}
181184
return nics;

plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtReplugNicCommandWrapperTest.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -252,9 +252,6 @@ public void testReplugNic() throws LibvirtException {
252252
+ "<inbound average='25600' peak='25600'/>\n"
253253
+ "<outbound average='25600' peak='25600'/>\n"
254254
+ "</bandwidth>\n"
255-
+ "<vlan trunk='no'>\n"
256-
+ "<tag id='234'/>\n"
257-
+ "</vlan>"
258255
+ "<link state='up'/>\n"
259256
+ "</interface>\n";
260257
final String expectedAttachXml =

0 commit comments

Comments
 (0)