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 2c730de2ad23ae124f8bad634ee1ba3e83e5999c Author: Wido den Hollander <w...@widodh.nl> AuthorDate: Mon Jul 15 15:44:05 2019 +0200 Have the control cidr being honered by the mgmt server when creating a network Signed-off-by: Wido den Hollander <w...@widodh.nl> --- .../hypervisor/kvm/resource/BridgeVifDriver.java | 37 ++++++++-------------- .../kvm/resource/BridgeVifDriverTest.java | 5 --- .../configuration/ConfigurationManagerImpl.java | 16 +--------- .../com/cloud/network/guru/ControlNetworkGuru.java | 6 ++-- .../com/cloud/server/ConfigurationServerImpl.java | 8 ++--- .../main/java/com/cloud/test/IPRangeConfig.java | 2 +- .../main/java/com/cloud/utils/net/NetUtils.java | 18 ++++------- .../java/com/cloud/utils/net/NetUtilsTest.java | 12 ++++++- 8 files changed, 38 insertions(+), 66 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 0aef2c5..dc29594 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,6 +29,7 @@ import java.util.regex.Pattern; import javax.naming.ConfigurationException; import com.cloud.utils.StringUtils; +import org.apache.commons.net.util.SubnetUtils; import org.apache.log4j.Logger; import org.libvirt.LibvirtException; @@ -50,10 +51,10 @@ public class BridgeVifDriver extends VifDriverBase { private final Object _vnetBridgeMonitor = new Object(); private String _modifyVlanPath; private String _modifyVxlanPath; - private String _linkLocalCidr = "169.254.0.0/16"; - private String _linkLocalAddress = "169.254.0.1/16"; + private String _controlCidr = NetUtils.getLinkLocalCIDR(); private String _linkLocalGateway = NetUtils.getLinkLocalGateway(); private String _linkLocalNetmask = NetUtils.getLinkLocalNetMask(); + private String _linkLocalAddress = _linkLocalGateway + "/" + _linkLocalNetmask; private String bridgeNameSchema; private Long libvirtVersion; @@ -74,25 +75,15 @@ public class BridgeVifDriver extends VifDriverBase { bridgeNameSchema = (String)params.get("network.bridge.name.schema"); - String linkLocalCidr = (String)params.get("network.linklocal.cidr"); - if (StringUtils.isNotBlank(linkLocalCidr)) { - _linkLocalCidr = linkLocalCidr; + String controlCidr = (String)params.get("control.cidr"); + if (StringUtils.isNotBlank(controlCidr)) { + _controlCidr = controlCidr; } - String linkLocalAddress = (String)params.get("network.linklocal.address"); - if (StringUtils.isNotBlank(linkLocalAddress)) { - _linkLocalAddress = linkLocalAddress; - } - - String linkLocalGateway = (String)params.get("network.linklocal.gateway"); - if (StringUtils.isNotBlank(linkLocalGateway)) { - _linkLocalGateway = linkLocalGateway; - } - - String linkLocalNetmask = (String)params.get("network.linklocal.netmask"); - if (StringUtils.isNotBlank(linkLocalNetmask)) { - _linkLocalNetmask = _linkLocalNetmask; - } + SubnetUtils subnetUtils = new SubnetUtils(_controlCidr); + _linkLocalGateway = subnetUtils.getInfo().getLowAddress(); + _linkLocalNetmask = subnetUtils.getInfo().getNetmask(); + _linkLocalAddress = _linkLocalGateway + "/" + _linkLocalNetmask; String value = (String)params.get("scripts.timeout"); _timeout = NumbersUtil.parseInt(value, 30 * 60) * 1000; @@ -409,7 +400,7 @@ public class BridgeVifDriver extends VifDriverBase { private void deleteExistingLinkLocalRouteTable(String linkLocalBr) { Script command = new Script("/bin/bash", _timeout); command.add("-c"); - command.add("ip route | grep " + _linkLocalCidr); + command.add("ip route | grep " + _controlCidr); OutputInterpreter.AllLinesParser parser = new OutputInterpreter.AllLinesParser(); String result = command.execute(parser); boolean foundLinkLocalBr = false; @@ -422,15 +413,15 @@ public class BridgeVifDriver extends VifDriverBase { } final String device = tokens[2]; if (!Strings.isNullOrEmpty(device) && !device.equalsIgnoreCase(linkLocalBr)) { - Script.runSimpleBashScript("ip route del " + _linkLocalCidr + " dev " + tokens[2]); + Script.runSimpleBashScript("ip route del " + _controlCidr + " dev " + tokens[2]); } else { foundLinkLocalBr = true; } } } if (!foundLinkLocalBr) { - Script.runSimpleBashScript("ip address add " + _linkLocalAddress + " dev " + linkLocalBr + ";" + "ip route add " + _linkLocalCidr + " dev " + linkLocalBr + " src " + - _linkLocalGateway; + Script.runSimpleBashScript("ip address add " + _linkLocalAddress + " dev " + linkLocalBr + ";" + "ip route add " + _controlCidr + " dev " + linkLocalBr + " src " + + _linkLocalGateway); } } 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 ac45102..e23e471 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 @@ -56,9 +56,4 @@ public class BridgeVifDriverTest { Assert.assertTrue(driver.isValidProtocolAndVnetId("456", "vxlan")); } - @Test - public void testVxNetBridgeName() { - Assert.assertEquals("brvx-500", driver.generateVxnetBrName(null, 500)); - Assert.assertEquals("brvx-10000", driver.generateVxnetBrName(null, 10000)); - } } \ No newline at end of file diff --git a/server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java b/server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java index 30f2f7c..3d03737 100755 --- a/server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java +++ b/server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java @@ -1596,7 +1596,7 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati _zoneDao.addPrivateIpAddress(zoneId, pod.getId(), startIp, endIpFinal, false, null); } - final String[] linkLocalIpRanges = getLinkLocalIPRange(); + final String[] linkLocalIpRanges = NetUtils.getLinkLocalIPRange(_configDao.getValue(Config.ControlCidr.key())); if (linkLocalIpRanges != null) { _zoneDao.addLinkLocalIpAddress(zoneId, pod.getId(), linkLocalIpRanges[0], linkLocalIpRanges[1]); } @@ -4166,20 +4166,6 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati } } - private String[] getLinkLocalIPRange() { - final String ipNums = _configDao.getValue("linkLocalIp.nums"); - final int nums = Integer.parseInt(ipNums); - if (nums > 16 || nums <= 0) { - throw new InvalidParameterValueException("The linkLocalIp.nums: " + nums + "is wrong, should be 1~16"); - } - /* local link ip address starts from 169.254.0.2 - 169.254.(nums) */ - final String[] ipRanges = NetUtils.getLinkLocalIPRange(nums); - if (ipRanges == null) { - throw new InvalidParameterValueException("The linkLocalIp.nums: " + nums + "may be wrong, should be 1~16"); - } - return ipRanges; - } - @Override @ActionEvent(eventType = EventTypes.EVENT_VLAN_IP_RANGE_DELETE, eventDescription = "deleting vlan ip range", async = false) public boolean deleteVlanIpRange(final DeleteVlanIpRangeCmd cmd) { diff --git a/server/src/main/java/com/cloud/network/guru/ControlNetworkGuru.java b/server/src/main/java/com/cloud/network/guru/ControlNetworkGuru.java index 87afb9f..2b441d4 100644 --- a/server/src/main/java/com/cloud/network/guru/ControlNetworkGuru.java +++ b/server/src/main/java/com/cloud/network/guru/ControlNetworkGuru.java @@ -162,9 +162,9 @@ public class ControlNetworkGuru extends PodBasedNetworkGuru implements NetworkGu } nic.setIPv4Address(ip); nic.setMacAddress(NetUtils.long2Mac(NetUtils.ip2Long(ip) | (14l << 40))); - nic.setIPv4Netmask("255.255.0.0"); + nic.setIPv4Netmask(NetUtils.cidr2Netmask(_cidr)); nic.setFormat(AddressFormat.Ip4); - nic.setIPv4Gateway(NetUtils.getLinkLocalGateway()); + nic.setIPv4Gateway(_gateway); } @Override @@ -223,7 +223,7 @@ public class ControlNetworkGuru extends PodBasedNetworkGuru implements NetworkGu _cidr = dbParams.get(Config.ControlCidr.toString()); if (_cidr == null) { - _cidr = "169.254.0.0/16"; + _cidr = NetUtils.getLinkLocalCIDR(); } _gateway = dbParams.get(Config.ControlGateway.toString()); diff --git a/server/src/main/java/com/cloud/server/ConfigurationServerImpl.java b/server/src/main/java/com/cloud/server/ConfigurationServerImpl.java index 1ad36b9..4b83a8e 100644 --- a/server/src/main/java/com/cloud/server/ConfigurationServerImpl.java +++ b/server/src/main/java/com/cloud/server/ConfigurationServerImpl.java @@ -911,12 +911,8 @@ public class ConfigurationServerImpl extends ManagerBase implements Configuratio throw new InvalidParameterValueException("The linkLocalIp.nums: " + nums + "is wrong, should be 1~16"); } /* local link ip address starts from 169.254.0.2 - 169.254.(nums) */ - String[] linkLocalIpRanges = NetUtils.getLinkLocalIPRange(nums); - if (linkLocalIpRanges == null) { - throw new InvalidParameterValueException("The linkLocalIp.nums: " + nums + "may be wrong, should be 1~16"); - } else { - _zoneDao.addLinkLocalIpAddress(zoneId, pod.getId(), linkLocalIpRanges[0], linkLocalIpRanges[1]); - } + String[] linkLocalIpRanges = NetUtils.getLinkLocalIPRange(_configDao.getValue(Config.ControlCidr.key())); + _zoneDao.addLinkLocalIpAddress(zoneId, pod.getId(), linkLocalIpRanges[0], linkLocalIpRanges[1]); } }); } catch (Exception e) { diff --git a/server/src/main/java/com/cloud/test/IPRangeConfig.java b/server/src/main/java/com/cloud/test/IPRangeConfig.java index 020c828..f359891 100644 --- a/server/src/main/java/com/cloud/test/IPRangeConfig.java +++ b/server/src/main/java/com/cloud/test/IPRangeConfig.java @@ -436,7 +436,7 @@ public class IPRangeConfig { problemIPs = savePrivateIPRange(txn, startIPLong, endIPLong, podId, zoneId); } - String[] linkLocalIps = NetUtils.getLinkLocalIPRange(10); + String[] linkLocalIps = NetUtils.getLinkLocalIPRange("169.254.0.0/16"); long startLinkLocalIp = NetUtils.ip2Long(linkLocalIps[0]); long endLinkLocalIp = NetUtils.ip2Long(linkLocalIps[1]); 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 dce6c25..e9d15e2 100644 --- a/utils/src/main/java/com/cloud/utils/net/NetUtils.java +++ b/utils/src/main/java/com/cloud/utils/net/NetUtils.java @@ -967,19 +967,13 @@ public class NetUtils { return "169.254.0.0/16"; } - public static String[] getLinkLocalIPRange(final int size) { - if (size > 16 || size <= 0) { - return null; - } - /* reserve gateway */ - final String[] range = getIpRangeFromCidr(getLinkLocalGateway(), MAX_CIDR - size); + public static String[] getLinkLocalIPRange(final String cidr) { + final SubnetUtils subnetUtils = new SubnetUtils(cidr); + final String[] addresses = subnetUtils.getInfo().getAllAddresses(); + final String[] range = new String[2]; + range[0] = addresses[1]; + range[1] = subnetUtils.getInfo().getHighAddress(); - if (range[0].equalsIgnoreCase(getLinkLocalGateway())) { - /* remove the gateway */ - long ip = ip2Long(range[0]); - ip += 1; - range[0] = long2Ip(ip); - } return range; } 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 1496462..4d20df72 100644 --- a/utils/src/test/java/com/cloud/utils/net/NetUtilsTest.java +++ b/utils/src/test/java/com/cloud/utils/net/NetUtilsTest.java @@ -712,8 +712,18 @@ public class NetUtilsTest { @Test public void testLinkLocal() { - assertEquals("255.255.255.0", NetUtils.getLinkLocalNetMask()); + assertEquals("255.255.0.0", NetUtils.getLinkLocalNetMask()); assertEquals("169.254.0.1", NetUtils.getLinkLocalGateway()); assertEquals("169.254.0.0/16", NetUtils.getLinkLocalCIDR()); + + String[] range = NetUtils.getLinkLocalIPRange("169.254.0.0/16"); + assertEquals("169.254.0.2", range[0]); + assertEquals("169.254.255.254", range[1]); + } + + @Test + public void testCidrNetmask() { + assertEquals("255.255.255.0", NetUtils.cidr2Netmask("192.168.0.0/24")); + assertEquals("255.255.0.0", NetUtils.cidr2Netmask("169.254.0.0/16")); } }