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

Reply via email to