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"));
     }
 }

Reply via email to