This is an automated email from the ASF dual-hosted git repository.
rohit pushed a commit to branch 4.11
in repository https://gitbox.apache.org/repos/asf/cloudstack.git
The following commit(s) were added to refs/heads/4.11 by this push:
new 29b8a9d kvm: when untagged vxlan is used, use the default
guest/public bridge (#3037)
29b8a9d is described below
commit 29b8a9da48ee4abf73f5d28342b246e9983618a9
Author: Rohit Yadav <[email protected]>
AuthorDate: Wed Nov 28 22:22:30 2018 +0530
kvm: when untagged vxlan is used, use the default guest/public bridge
(#3037)
When vxlan://untagged is used for public (or guest) network, use the
default public/guest bridge device same as how vlan://untagged works.
Signed-off-by: Rohit Yadav <[email protected]>
---
.../hypervisor/kvm/resource/BridgeVifDriver.java | 19 ++++---
.../kvm/resource/BridgeVifDriverTest.java | 58 ++++++++++++++++++++++
2 files changed, 71 insertions(+), 6 deletions(-)
diff --git
a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/BridgeVifDriver.java
b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/BridgeVifDriver.java
index 11b22c4..bd410df 100644
---
a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/BridgeVifDriver.java
+++
b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/BridgeVifDriver.java
@@ -206,6 +206,15 @@ public class BridgeVifDriver extends VifDriverBase {
return fname.matches(commonPattern.toString());
}
+ protected boolean isBroadcastTypeVlanOrVxlan(final NicTO nic) {
+ return nic != null && (nic.getBroadcastType() ==
Networks.BroadcastDomainType.Vlan
+ || nic.getBroadcastType() ==
Networks.BroadcastDomainType.Vxlan);
+ }
+
+ protected boolean isValidProtocolAndVnetId(final String vNetId, final
String protocol) {
+ return vNetId != null && protocol != null &&
!vNetId.equalsIgnoreCase("untagged");
+ }
+
@Override
public LibvirtVMDef.InterfaceDef plug(NicTO nic, String guestOsType,
String nicAdapter) throws InternalErrorException, LibvirtException {
@@ -220,7 +229,7 @@ public class BridgeVifDriver extends VifDriverBase {
String vNetId = null;
String protocol = null;
- if (nic.getBroadcastType() == Networks.BroadcastDomainType.Vlan ||
nic.getBroadcastType() == Networks.BroadcastDomainType.Vxlan) {
+ if (isBroadcastTypeVlanOrVxlan(nic)) {
vNetId =
Networks.BroadcastDomainType.getValue(nic.getBroadcastUri());
protocol =
Networks.BroadcastDomainType.getSchemeValue(nic.getBroadcastUri()).scheme();
} else if (nic.getBroadcastType() ==
Networks.BroadcastDomainType.Lswitch) {
@@ -233,8 +242,7 @@ public class BridgeVifDriver extends VifDriverBase {
}
if (nic.getType() == Networks.TrafficType.Guest) {
- if ((nic.getBroadcastType() == Networks.BroadcastDomainType.Vlan)
&& (vNetId != null) && (protocol != null) &&
(!vNetId.equalsIgnoreCase("untagged")) ||
- (nic.getBroadcastType() ==
Networks.BroadcastDomainType.Vxlan)) {
+ if (isBroadcastTypeVlanOrVxlan(nic) &&
isValidProtocolAndVnetId(vNetId, protocol)) {
if (trafficLabel != null && !trafficLabel.isEmpty()) {
s_logger.debug("creating a vNet dev and bridge for
guest traffic per traffic label " + trafficLabel);
String brName = createVnetBr(vNetId, trafficLabel,
protocol);
@@ -257,8 +265,7 @@ public class BridgeVifDriver extends VifDriverBase {
createControlNetwork();
intf.defBridgeNet(_bridges.get("linklocal"), null, nic.getMac(),
getGuestNicModel(guestOsType, nicAdapter));
} else if (nic.getType() == Networks.TrafficType.Public) {
- if ((nic.getBroadcastType() == Networks.BroadcastDomainType.Vlan)
&& (vNetId != null) && (protocol != null) &&
(!vNetId.equalsIgnoreCase("untagged")) ||
- (nic.getBroadcastType() ==
Networks.BroadcastDomainType.Vxlan)) {
+ if (isBroadcastTypeVlanOrVxlan(nic) &&
isValidProtocolAndVnetId(vNetId, protocol)) {
if (trafficLabel != null && !trafficLabel.isEmpty()) {
s_logger.debug("creating a vNet dev and bridge for public
traffic per traffic label " + trafficLabel);
String brName = createVnetBr(vNetId, trafficLabel,
protocol);
@@ -276,7 +283,7 @@ public class BridgeVifDriver extends VifDriverBase {
String storageBrName = nic.getName() == null ?
_bridges.get("private") : nic.getName();
intf.defBridgeNet(storageBrName, null, nic.getMac(),
getGuestNicModel(guestOsType, nicAdapter));
}
- if (nic.getPxeDisable() == true) {
+ if (nic.getPxeDisable()) {
intf.setPxeDisable(true);
}
diff --git
a/plugins/hypervisors/kvm/test/com/cloud/hypervisor/kvm/resource/BridgeVifDriverTest.java
b/plugins/hypervisors/kvm/test/com/cloud/hypervisor/kvm/resource/BridgeVifDriverTest.java
new file mode 100644
index 0000000..ad0f92b
--- /dev/null
+++
b/plugins/hypervisors/kvm/test/com/cloud/hypervisor/kvm/resource/BridgeVifDriverTest.java
@@ -0,0 +1,58 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package com.cloud.hypervisor.kvm.resource;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+import com.cloud.agent.api.to.NicTO;
+import com.cloud.network.Networks;
+
+public class BridgeVifDriverTest {
+
+ private BridgeVifDriver driver;
+
+ @Before
+ public void setUp() throws Exception {
+ driver = new BridgeVifDriver();
+ }
+
+ @Test
+ public void isBroadcastTypeVlanOrVxlan() {
+ final NicTO nic = new NicTO();
+ nic.setBroadcastType(Networks.BroadcastDomainType.Native);
+ Assert.assertFalse(driver.isBroadcastTypeVlanOrVxlan(null));
+ Assert.assertFalse(driver.isBroadcastTypeVlanOrVxlan(nic));
+ // Test VLAN
+ nic.setBroadcastType(Networks.BroadcastDomainType.Vlan);
+ Assert.assertTrue(driver.isBroadcastTypeVlanOrVxlan(nic));
+ // Test VXLAN
+ nic.setBroadcastType(Networks.BroadcastDomainType.Vxlan);
+ Assert.assertTrue(driver.isBroadcastTypeVlanOrVxlan(nic));
+ }
+
+ @Test
+ public void isValidProtocolAndVnetId() {
+ Assert.assertFalse(driver.isValidProtocolAndVnetId(null, null));
+ Assert.assertFalse(driver.isValidProtocolAndVnetId("123", null));
+ Assert.assertFalse(driver.isValidProtocolAndVnetId(null, "vlan"));
+ Assert.assertFalse(driver.isValidProtocolAndVnetId("untagged",
"vxlan"));
+ Assert.assertTrue(driver.isValidProtocolAndVnetId("123", "vlan"));
+ Assert.assertTrue(driver.isValidProtocolAndVnetId("456", "vxlan"));
+ }
+}
\ No newline at end of file