This is an automated email from the ASF dual-hosted git repository. gabriel pushed a commit to branch cloud0-cidr-412 in repository https://gitbox.apache.org/repos/asf/cloudstack.git
commit c6359f229c004013247bedef162480e8aa3307ac Author: Wido den Hollander <w...@widodh.nl> AuthorDate: Tue Jul 16 14:26:00 2019 +0200 Resolved merge conflict. --- .../hypervisor/kvm/resource/BridgeVifDriver.java | 27 +- .../hypervisor/kvm/resource/IvsVifDriver.java | 296 --------------------- .../hypervisor/kvm/resource/OvsVifDriver.java | 24 +- .../main/java/com/cloud/utils/net/NetUtils.java | 4 + .../java/com/cloud/utils/net/NetUtilsTest.java | 1 + 5 files changed, 32 insertions(+), 320 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 8466514..007a545 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 @@ -29,18 +29,16 @@ import java.util.regex.Pattern; import javax.naming.ConfigurationException; import com.cloud.utils.StringUtils; -import org.apache.commons.net.util.SubnetUtils; +import com.cloud.utils.net.NetUtils; +import com.cloud.utils.script.OutputInterpreter; +import com.google.common.base.Strings; import org.apache.log4j.Logger; import org.libvirt.LibvirtException; -import com.google.common.base.Strings; - import com.cloud.agent.api.to.NicTO; import com.cloud.exception.InternalErrorException; import com.cloud.network.Networks; import com.cloud.utils.NumbersUtil; -import com.cloud.utils.net.NetUtils; -import com.cloud.utils.script.OutputInterpreter; import com.cloud.utils.script.Script; public class BridgeVifDriver extends VifDriverBase { @@ -51,11 +49,8 @@ public class BridgeVifDriver extends VifDriverBase { private final Object _vnetBridgeMonitor = new Object(); private String _modifyVlanPath; private String _modifyVxlanPath; - private String _controlCidr = NetUtils.getLinkLocalCIDR(); - private String _linkLocalGateway; - private String _linkLocalNetmask; - private String _linkLocalAddress; private String bridgeNameSchema; + private String _controlCidr = NetUtils.getLinkLocalCIDR(); private Long libvirtVersion; @Override @@ -80,10 +75,6 @@ public class BridgeVifDriver extends VifDriverBase { _controlCidr = controlCidr; } - _linkLocalGateway = NetUtils.getLinkLocalGatewayFromCIDR(_controlCidr); - _linkLocalNetmask = NetUtils.getLinkLocalNetmaskFromCIDR(_controlCidr); - _linkLocalAddress = _linkLocalGateway + "/" + _linkLocalNetmask; - String value = (String)params.get("scripts.timeout"); _timeout = NumbersUtil.parseInt(value, 30 * 60) * 1000; @@ -418,9 +409,10 @@ public class BridgeVifDriver extends VifDriverBase { } } } + if (!foundLinkLocalBr) { - Script.runSimpleBashScript("ip address add " + _linkLocalAddress + " dev " + linkLocalBr + ";" + "ip route add " + _controlCidr + " dev " + linkLocalBr + " src " + - _linkLocalGateway); + Script.runSimpleBashScript("ip address add " + NetUtils.getLinkLocalAddressFromCIDR(_controlCidr) + " dev " + linkLocalBr); + Script.runSimpleBashScript("ip route add " + _controlCidr + " dev " + linkLocalBr + " src " + NetUtils.getLinkLocalGatewayFromCIDR(_controlCidr)); } } @@ -428,11 +420,12 @@ public class BridgeVifDriver extends VifDriverBase { createControlNetwork(_bridges.get("linklocal")); } - @Override public void createControlNetwork(String privBrName) { deleteExistingLinkLocalRouteTable(privBrName); if (!isExistingBridge(privBrName)) { - Script.runSimpleBashScript("brctl addbr " + privBrName + "; ip link set " + privBrName + " up; ip address add " + _linkLocalAddress + " dev " + privBrName, _timeout); + Script.runSimpleBashScript("ip link add name " + privBrName + " type bridge"); + Script.runSimpleBashScript("ip link set " + privBrName + " up"); + Script.runSimpleBashScript("ip address add " + NetUtils.getLinkLocalAddressFromCIDR(_controlCidr) + " dev " + privBrName); } } diff --git a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/IvsVifDriver.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/IvsVifDriver.java deleted file mode 100644 index 4ba0114..0000000 --- a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/IvsVifDriver.java +++ /dev/null @@ -1,296 +0,0 @@ -/* - * 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 java.io.File; -import java.util.Map; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import javax.naming.ConfigurationException; - -import org.apache.log4j.Logger; -import org.libvirt.LibvirtException; - -import com.cloud.agent.api.to.NicTO; -import com.cloud.exception.InternalErrorException; -import com.cloud.hypervisor.kvm.resource.LibvirtVMDef.InterfaceDef; -import com.cloud.network.Networks; -import com.cloud.utils.NumbersUtil; -import com.cloud.utils.net.NetUtils; -import com.cloud.utils.script.OutputInterpreter; -import com.cloud.utils.script.Script; - -public class IvsVifDriver extends VifDriverBase { - private static final Logger s_logger = Logger.getLogger(IvsVifDriver.class); - private int _timeout; - - private final Object _vnetBridgeMonitor = new Object(); - private String _modifyVlanPath; - private String _modifyVxlanPath; - private String _ivsIfUpPath; - private Long libvirtVersion; - - @Override - public void configure(Map<String, Object> params) throws ConfigurationException { - super.configure(params); - String networkScriptsDir = (String)params.get("network.scripts.dir"); - if (networkScriptsDir == null) { - networkScriptsDir = "scripts/vm/network/vnet"; - } - String utilScriptsDir = "scripts/util/"; - - String value = (String)params.get("scripts.timeout"); - _timeout = NumbersUtil.parseInt(value, 30 * 60) * 1000; - - _modifyVlanPath = Script.findScript(networkScriptsDir, "modifyvlan.sh"); - if (_modifyVlanPath == null) { - throw new ConfigurationException("Unable to find modifyvlan.sh"); - } - _modifyVxlanPath = Script.findScript(networkScriptsDir, "modifyvxlan.sh"); - if (_modifyVxlanPath == null) { - throw new ConfigurationException("Unable to find modifyvxlan.sh"); - } - _ivsIfUpPath = Script.findScript(utilScriptsDir, "qemu-ivs-ifup"); - - libvirtVersion = (Long) params.get("libvirtVersion"); - if (libvirtVersion == null) { - libvirtVersion = 0L; - } - } - - @Override - public InterfaceDef plug(NicTO nic, String guestOsType, String nicAdapter, Map<String, String> extraConfig) throws InternalErrorException, LibvirtException { - LibvirtVMDef.InterfaceDef intf = new LibvirtVMDef.InterfaceDef(); - - String vNetId = null; - String protocol = null; - if (nic.getBroadcastType() == Networks.BroadcastDomainType.Vlan || nic.getBroadcastType() == Networks.BroadcastDomainType.Vxlan) { - vNetId = Networks.BroadcastDomainType.getValue(nic.getBroadcastUri()); - protocol = Networks.BroadcastDomainType.getSchemeValue(nic.getBroadcastUri()).scheme(); - } - - String vlanId = null; - String logicalSwitchUuid = null; - if (nic.getBroadcastType() == Networks.BroadcastDomainType.Vlan) { - vlanId = Networks.BroadcastDomainType.getValue(nic.getBroadcastUri()); - } else if (nic.getBroadcastType() == Networks.BroadcastDomainType.Lswitch) { - logicalSwitchUuid = Networks.BroadcastDomainType.getValue(nic.getBroadcastUri()); - } else if (nic.getBroadcastType() == Networks.BroadcastDomainType.Pvlan) { - // TODO consider moving some of this functionality from NetUtils to Networks.... - vlanId = NetUtils.getPrimaryPvlanFromUri(nic.getBroadcastUri()); - } - String trafficLabel = nic.getName(); - Integer networkRateKBps = (nic.getNetworkRateMbps() != null && nic.getNetworkRateMbps().intValue() != -1) ? nic.getNetworkRateMbps().intValue() * 128 : 0; - if (nic.getType() == Networks.TrafficType.Guest) { - if ((nic.getBroadcastType() == Networks.BroadcastDomainType.Vlan || nic.getBroadcastType() == Networks.BroadcastDomainType.Pvlan) && - !vlanId.equalsIgnoreCase("untagged")) { - if (trafficLabel != null && !trafficLabel.isEmpty()) { - s_logger.debug("creating a vlan dev and bridge for guest traffic per traffic label " + trafficLabel); - intf.defEthernet("ivsnet-" + nic.getUuid().substring(0, 5), nic.getMac(), getGuestNicModel(guestOsType, nicAdapter), _ivsIfUpPath, networkRateKBps); - } else { - throw new InternalErrorException("no traffic label "); - } - } - } else if (nic.getType() == Networks.TrafficType.Control) { - /* Make sure the network is still there */ - 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 (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); - intf.defBridgeNet(brName, null, nic.getMac(), getGuestNicModel(guestOsType, nicAdapter), networkRateKBps); - } else { - String brName = createVnetBr(vNetId, "public", protocol); - intf.defBridgeNet(brName, null, nic.getMac(), getGuestNicModel(guestOsType, nicAdapter), networkRateKBps); - } - } else { - intf.defBridgeNet(_bridges.get("public"), null, nic.getMac(), getGuestNicModel(guestOsType, nicAdapter), networkRateKBps); - } - } else if (nic.getType() == Networks.TrafficType.Management) { - intf.defBridgeNet(_bridges.get("private"), null, nic.getMac(), getGuestNicModel(guestOsType, nicAdapter)); - } else if (nic.getType() == Networks.TrafficType.Storage) { - String storageBrName = nic.getName() == null ? _bridges.get("private") : nic.getName(); - intf.defBridgeNet(storageBrName, null, nic.getMac(), getGuestNicModel(guestOsType, nicAdapter)); - } - if (nic.getPxeDisable() == true) { - intf.setPxeDisable(true); - } - return intf; - } - - @Override - public void unplug(InterfaceDef iface) { - } - - @Override - public void attach(LibvirtVMDef.InterfaceDef iface) { - Script.runSimpleBashScript("/usr/sbin/ivs-ctl add-port " + iface.getDevName()); - } - - @Override - public void detach(LibvirtVMDef.InterfaceDef iface) { - Script.runSimpleBashScript("/usr/sbin/ivs-ctl del-port " + iface.getDevName()); - } - - - private void createControlNetwork() throws LibvirtException { - createControlNetwork(_bridges.get("linklocal")); - } - - private String createVnetBr(String vNetId, String pifKey, String protocol) throws InternalErrorException { - String nic = _pifs.get(pifKey); - if (nic == null) { - // if not found in bridge map, maybe traffic label refers to pif already? - File pif = new File("/sys/class/net/" + pifKey); - if (pif.isDirectory()) { - nic = pifKey; - } - } - String brName = ""; - brName = generateVnetBrName(nic, vNetId); - createVnet(vNetId, nic, brName, protocol); - return brName; - } - - private String generateVnetBrName(String pifName, String vnetId) { - return "br" + pifName + "-" + vnetId; - } - - private void createVnet(String vnetId, String pif, String brName, String protocol) throws InternalErrorException { - synchronized (_vnetBridgeMonitor) { - String script = _modifyVlanPath; - if (protocol.equals(Networks.BroadcastDomainType.Vxlan.scheme())) { - script = _modifyVxlanPath; - } - final Script command = new Script(script, _timeout, s_logger); - command.add("-v", vnetId); - command.add("-p", pif); - command.add("-b", brName); - command.add("-o", "add"); - - final String result = command.execute(); - if (result != null) { - throw new InternalErrorException("Failed to create vnet " + vnetId + ": " + result); - } - } - } - - private void deleteVnetBr(String brName) { - synchronized (_vnetBridgeMonitor) { - String cmdout = Script.runSimpleBashScript("ls /sys/class/net/" + brName); - if (cmdout == null) - // Bridge does not exist - return; - cmdout = Script.runSimpleBashScript("ls /sys/class/net/" + brName + "/brif | tr '\n' ' '"); - if (cmdout != null && cmdout.contains("vnet")) { - // Active VM remains on that bridge - return; - } - - Pattern oldStyleBrNameRegex = Pattern.compile("^cloudVirBr(\\d+)$"); - Pattern brNameRegex = Pattern.compile("^br(\\S+)-(\\d+)$"); - Matcher oldStyleBrNameMatcher = oldStyleBrNameRegex.matcher(brName); - Matcher brNameMatcher = brNameRegex.matcher(brName); - - String pName = null; - String vNetId = null; - if (oldStyleBrNameMatcher.find()) { - // Actually modifyvlan.sh doesn't require pif name when deleting its bridge so far. - pName = "undefined"; - vNetId = oldStyleBrNameMatcher.group(1); - } else if (brNameMatcher.find()) { - if (brNameMatcher.group(1) != null || !brNameMatcher.group(1).isEmpty()) { - pName = brNameMatcher.group(1); - } else { - pName = "undefined"; - } - vNetId = brNameMatcher.group(2); - } - - if (vNetId == null || vNetId.isEmpty()) { - s_logger.debug("unable to get a vNet ID from name " + brName); - return; - } - - String scriptPath = null; - if (cmdout != null && cmdout.contains("vxlan")) { - scriptPath = _modifyVxlanPath; - } else { - scriptPath = _modifyVlanPath; - } - - final Script command = new Script(scriptPath, _timeout, s_logger); - command.add("-o", "delete"); - command.add("-v", vNetId); - command.add("-p", pName); - command.add("-b", brName); - - final String result = command.execute(); - if (result != null) { - s_logger.debug("Delete bridge " + brName + " failed: " + result); - } - } - } - - private void deleteExitingLinkLocalRouteTable(String linkLocalBr) { - Script command = new Script("/bin/bash", _timeout); - command.add("-c"); - command.add("ip route | grep " + NetUtils.getLinkLocalCIDR()); - OutputInterpreter.AllLinesParser parser = new OutputInterpreter.AllLinesParser(); - String result = command.execute(parser); - boolean foundLinkLocalBr = false; - if (result == null && parser.getLines() != null) { - String[] lines = parser.getLines().split("\\n"); - for (String line : lines) { - String[] tokens = line.split(" "); - if (!tokens[2].equalsIgnoreCase(linkLocalBr)) { - Script.runSimpleBashScript("ip route del " + NetUtils.getLinkLocalCIDR()); - } else { - foundLinkLocalBr = true; - } - } - } - if (!foundLinkLocalBr) { - Script.runSimpleBashScript("ip address add 169.254.0.1/16 dev " + linkLocalBr + ";" + "ip route add " + NetUtils.getLinkLocalCIDR() + " dev " + linkLocalBr + " src " + - NetUtils.getLinkLocalGateway()); - } - } - - @Override - public void createControlNetwork(String privBrName) { - deleteExitingLinkLocalRouteTable(privBrName); - if (!isBridgeExists(privBrName)) { - Script.runSimpleBashScript("brctl addbr " + privBrName + "; ip link set " + privBrName + " up; ip address add 169.254.0.1/16 dev " + privBrName, _timeout); - } - } - - private boolean isBridgeExists(String bridgeName) { - File f = new File("/sys/devices/virtual/net/" + bridgeName); - if (f.exists()) { - return true; - } else { - return false; - } - } -} diff --git a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/OvsVifDriver.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/OvsVifDriver.java index ea4fd4a..b4932b0 100644 --- a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/OvsVifDriver.java +++ b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/OvsVifDriver.java @@ -41,8 +41,9 @@ import com.cloud.utils.script.Script; public class OvsVifDriver extends VifDriverBase { private static final Logger s_logger = Logger.getLogger(OvsVifDriver.class); private int _timeout; - protected static final String DPDK_PORT_PREFIX = "csdpdk-"; + private String _controlCidr = NetUtils.getLinkLocalCIDR(); + private DpdkDriver dpdkDriver; @Override public void configure(Map<String, Object> params) throws ConfigurationException { @@ -55,6 +56,16 @@ public class OvsVifDriver extends VifDriverBase { networkScriptsDir = "scripts/vm/network/vnet"; } + String dpdk = (String) params.get("openvswitch.dpdk.enabled"); + if (StringUtils.isNotBlank(dpdk) && Boolean.parseBoolean(dpdk)) { + dpdkDriver = new DpdkDriverImpl(); + } + + String controlCidr = (String)params.get("control.cidr"); + if (com.cloud.utils.StringUtils.isNotBlank(controlCidr)) { + _controlCidr = controlCidr; + } + String value = (String)params.get("scripts.timeout"); _timeout = NumbersUtil.parseInt(value, 30 * 60) * 1000; } @@ -243,7 +254,7 @@ public class OvsVifDriver extends VifDriverBase { private void deleteExitingLinkLocalRouteTable(String linkLocalBr) { Script command = new Script("/bin/bash", _timeout); command.add("-c"); - command.add("ip route | grep " + NetUtils.getLinkLocalCIDR()); + command.add("ip route | grep " + _controlCidr); OutputInterpreter.AllLinesParser parser = new OutputInterpreter.AllLinesParser(); String result = command.execute(parser); boolean foundLinkLocalBr = false; @@ -252,23 +263,22 @@ public class OvsVifDriver extends VifDriverBase { for (String line : lines) { String[] tokens = line.split(" "); if (!tokens[2].equalsIgnoreCase(linkLocalBr)) { - Script.runSimpleBashScript("ip route del " + NetUtils.getLinkLocalCIDR()); + Script.runSimpleBashScript("ip route del " + _controlCidr); } else { foundLinkLocalBr = true; } } } if (!foundLinkLocalBr) { - Script.runSimpleBashScript("ip address add 169.254.0.1/16 dev " + linkLocalBr + ";" + "ip route add " + NetUtils.getLinkLocalCIDR() + " dev " + linkLocalBr + " src " + - NetUtils.getLinkLocalGateway()); + Script.runSimpleBashScript("ip address add " + NetUtils.getLinkLocalAddressFromCIDR(_controlCidr) + " dev " + linkLocalBr + ";" + "ip route add " + _controlCidr + " dev " + linkLocalBr + " src " + + NetUtils.getLinkLocalGatewayFromCIDR(_controlCidr)); } } - @Override public void createControlNetwork(String privBrName) { deleteExitingLinkLocalRouteTable(privBrName); if (!isExistingBridge(privBrName)) { - Script.runSimpleBashScript("ovs-vsctl add-br " + privBrName + "; ip link set " + privBrName + " up; ip address add 169.254.0.1/16 dev " + privBrName, _timeout); + Script.runSimpleBashScript("ovs-vsctl add-br " + privBrName + "; ip link set " + privBrName + " up; ip address add " + NetUtils.getLinkLocalAddressFromCIDR(_controlCidr) + " dev " + privBrName, _timeout); } } diff --git a/utils/src/main/java/com/cloud/utils/net/NetUtils.java b/utils/src/main/java/com/cloud/utils/net/NetUtils.java index 653e446..8f096e0 100644 --- a/utils/src/main/java/com/cloud/utils/net/NetUtils.java +++ b/utils/src/main/java/com/cloud/utils/net/NetUtils.java @@ -977,6 +977,10 @@ public class NetUtils { return subnetUtils.getInfo().getNetmask(); } + public static String getLinkLocalAddressFromCIDR(final String cidr) { + return getLinkLocalGatewayFromCIDR(cidr) + "/" + getLinkLocalNetmaskFromCIDR(cidr); + } + public static String[] getLinkLocalIPRange(final String cidr) { final SubnetUtils subnetUtils = new SubnetUtils(cidr); final String[] addresses = subnetUtils.getInfo().getAllAddresses(); diff --git a/utils/src/test/java/com/cloud/utils/net/NetUtilsTest.java b/utils/src/test/java/com/cloud/utils/net/NetUtilsTest.java index afb0b6d..cb9a228 100644 --- a/utils/src/test/java/com/cloud/utils/net/NetUtilsTest.java +++ b/utils/src/test/java/com/cloud/utils/net/NetUtilsTest.java @@ -718,6 +718,7 @@ public class NetUtilsTest { assertEquals("169.254.0.0/16", cidr); assertEquals("169.254.0.1", NetUtils.getLinkLocalGatewayFromCIDR(cidr)); assertEquals("255.255.0.0", NetUtils.getLinkLocalNetmaskFromCIDR(cidr)); + assertEquals("169.254.0.1/255.255.0.0", NetUtils.getLinkLocalAddressFromCIDR(cidr)); String[] range = NetUtils.getLinkLocalIPRange("169.254.0.0/16"); assertEquals("169.254.0.2", range[0]);