Author: rwinston
Date: Mon Mar  8 08:53:34 2010
New Revision: 920235

URL: http://svn.apache.org/viewvc?rev=920235&view=rev
Log:
NET-305 fix

Modified:
    
commons/proper/net/branches/NET_2_0/src/main/java/org/apache/commons/net/util/SubnetUtils.java
    
commons/proper/net/branches/NET_2_0/src/test/java/org/apache/commons/net/SubnetUtilsTest.java

Modified: 
commons/proper/net/branches/NET_2_0/src/main/java/org/apache/commons/net/util/SubnetUtils.java
URL: 
http://svn.apache.org/viewvc/commons/proper/net/branches/NET_2_0/src/main/java/org/apache/commons/net/util/SubnetUtils.java?rev=920235&r1=920234&r2=920235&view=diff
==============================================================================
--- 
commons/proper/net/branches/NET_2_0/src/main/java/org/apache/commons/net/util/SubnetUtils.java
 (original)
+++ 
commons/proper/net/branches/NET_2_0/src/main/java/org/apache/commons/net/util/SubnetUtils.java
 Mon Mar  8 08:53:34 2010
@@ -38,6 +38,10 @@
     private int network = 0;
     private int broadcast = 0;
 
+    /** Whether the broadcast/network address are included in host count */
+    private boolean inclusiveHostCount = false;
+    
+    
     /**
      * Constructor that takes a CIDR-notation string, e.g. "192.168.0.1/16"
      * @param cidrNotation A CIDR-notation string, e.g. "192.168.0.1/16"
@@ -54,8 +58,29 @@
     public SubnetUtils(String address, String mask) {
         calculate(toCidrNotation(address, mask));
     }
+    
+    
+    /**
+     * Returns <code>true</code> if the return value of {...@link 
SubnetInfo#getAddressCount()}
+     * includes the network address and broadcast addresses.
+     * @return
+     */
+    public boolean isInclusiveHostCount() {
+               return inclusiveHostCount;
+       }
 
     /**
+     * Set to <code>true</code> if you want the return value of {...@link 
SubnetInfo#getAddressCount()}
+     * to include the network and broadcast addresses.
+     * @param inclusiveHostCount
+     */
+       public void setInclusiveHostCount(boolean inclusiveHostCount) {
+               this.inclusiveHostCount = inclusiveHostCount;
+       }
+
+
+
+       /**
      * Convenience container for subnet summary information.
      *
      */
@@ -66,8 +91,8 @@
         private int network()       { return network; }
         private int address()       { return address; }
         private int broadcast()     { return broadcast; }
-        private int low()           { return network() + 1; }
-        private int high()          { return broadcast() - 1; }
+        private int low()           { return network() + 
(isInclusiveHostCount() ? 0 : 1); }
+        private int high()          { return broadcast() - 
(isInclusiveHostCount() ? 0 : 1); }
 
         /**
          * Returns true if the parameter <code>address</code> is in the 
@@ -89,7 +114,7 @@
         public String getAddress()                  { return 
format(toArray(address())); }
         public String getLowAddress()               { return 
format(toArray(low())); }
         public String getHighAddress()              { return 
format(toArray(high())); }
-        public int getAddressCount()                { return (broadcast() - 
low()); }
+        public int getAddressCount()                { return (broadcast() - 
low() + (isInclusiveHostCount() ? 1 : 0)); }
 
         public int asInteger(String address)        { return 
toInteger(address); }
         
@@ -138,7 +163,7 @@
             address = matchAddress(matcher);
 
             /* Create a binary netmask from the number of bits specification 
/x */
-            int cidrPart = rangeCheck(Integer.parseInt(matcher.group(5)), -1, 
NBITS-1);
+            int cidrPart = rangeCheck(Integer.parseInt(matcher.group(5)), -1, 
NBITS);
             for (int j = 0; j < cidrPart; ++j) {
                 netmask |= (1 << 31-j);
             }

Modified: 
commons/proper/net/branches/NET_2_0/src/test/java/org/apache/commons/net/SubnetUtilsTest.java
URL: 
http://svn.apache.org/viewvc/commons/proper/net/branches/NET_2_0/src/test/java/org/apache/commons/net/SubnetUtilsTest.java?rev=920235&r1=920234&r2=920235&view=diff
==============================================================================
--- 
commons/proper/net/branches/NET_2_0/src/test/java/org/apache/commons/net/SubnetUtilsTest.java
 (original)
+++ 
commons/proper/net/branches/NET_2_0/src/test/java/org/apache/commons/net/SubnetUtilsTest.java
 Mon Mar  8 08:53:34 2010
@@ -68,4 +68,158 @@
        catch (IllegalArgumentException expected) {
        }
     }
+    
+    public void testCidrAddresses() {
+       SubnetUtils utils = new SubnetUtils("192.168.0.1/8");
+       utils.setInclusiveHostCount(true);
+       SubnetInfo info = utils.getInfo();
+       assertEquals("255.0.0.0",info.getNetmask());
+       assertEquals(16777216, info.getAddressCount());
+
+       utils = new SubnetUtils("192.168.0.1/9");
+       utils.setInclusiveHostCount(true);
+       info = utils.getInfo();
+       assertEquals("255.128.0.0",info.getNetmask());
+       assertEquals(8388608, info.getAddressCount());
+
+       utils = new SubnetUtils("192.168.0.1/10");
+       utils.setInclusiveHostCount(true);
+       info = utils.getInfo();
+       assertEquals("255.192.0.0",info.getNetmask());
+       assertEquals(4194304, info.getAddressCount());
+
+       utils = new SubnetUtils("192.168.0.1/11");
+       utils.setInclusiveHostCount(true);
+       info = utils.getInfo();
+       assertEquals("255.224.0.0",info.getNetmask());
+       assertEquals(2097152, info.getAddressCount());
+
+       utils = new SubnetUtils("192.168.0.1/12");
+       utils.setInclusiveHostCount(true);
+       info = utils.getInfo();
+       assertEquals("255.240.0.0",info.getNetmask());
+       assertEquals(1048576, info.getAddressCount());
+
+       utils = new SubnetUtils("192.168.0.1/13");
+       utils.setInclusiveHostCount(true);
+       info = utils.getInfo();
+       assertEquals("255.248.0.0",info.getNetmask());
+       assertEquals(524288, info.getAddressCount());
+
+       utils = new SubnetUtils("192.168.0.1/14");
+       utils.setInclusiveHostCount(true);
+       info = utils.getInfo();
+       assertEquals("255.252.0.0",info.getNetmask());
+       assertEquals(262144, info.getAddressCount());
+
+       utils = new SubnetUtils("192.168.0.1/15");
+       utils.setInclusiveHostCount(true);
+       info = utils.getInfo();
+       assertEquals("255.254.0.0",info.getNetmask());
+       assertEquals(131072, info.getAddressCount());
+
+       utils = new SubnetUtils("192.168.0.1/16");
+       utils.setInclusiveHostCount(true);
+       info = utils.getInfo();
+       assertEquals("255.255.0.0",info.getNetmask());
+       assertEquals(65536, info.getAddressCount());
+
+       utils = new SubnetUtils("192.168.0.1/17");
+       utils.setInclusiveHostCount(true);
+       info = utils.getInfo();
+       assertEquals("255.255.128.0",info.getNetmask());
+       assertEquals(32768, info.getAddressCount());
+
+       utils = new SubnetUtils("192.168.0.1/18");
+       utils.setInclusiveHostCount(true);
+       info = utils.getInfo();
+       assertEquals("255.255.192.0",info.getNetmask());
+       assertEquals(16384, info.getAddressCount());
+
+       utils = new SubnetUtils("192.168.0.1/19");
+       utils.setInclusiveHostCount(true);
+       info = utils.getInfo();
+       assertEquals("255.255.224.0",info.getNetmask());
+       assertEquals(8192, info.getAddressCount());
+
+       utils = new SubnetUtils("192.168.0.1/20");
+       utils.setInclusiveHostCount(true);
+       info = utils.getInfo();
+       assertEquals("255.255.240.0",info.getNetmask());
+       assertEquals(4096, info.getAddressCount());
+
+       utils = new SubnetUtils("192.168.0.1/21");
+       utils.setInclusiveHostCount(true);
+       info = utils.getInfo();
+       assertEquals("255.255.248.0",info.getNetmask());
+       assertEquals(2048, info.getAddressCount());
+
+       utils = new SubnetUtils("192.168.0.1/22");
+       utils.setInclusiveHostCount(true);
+       info = utils.getInfo();
+       assertEquals("255.255.252.0",info.getNetmask());
+       assertEquals(1024, info.getAddressCount());
+
+       utils = new SubnetUtils("192.168.0.1/23");
+       utils.setInclusiveHostCount(true);
+       info = utils.getInfo();
+       assertEquals("255.255.254.0",info.getNetmask());
+       assertEquals(512, info.getAddressCount());
+
+       utils = new SubnetUtils("192.168.0.1/24");
+       utils.setInclusiveHostCount(true);
+       info = utils.getInfo();
+       assertEquals("255.255.255.0",info.getNetmask());
+       assertEquals(256, info.getAddressCount());
+
+       utils = new SubnetUtils("192.168.0.1/25");
+       utils.setInclusiveHostCount(true);
+       info = utils.getInfo();
+       assertEquals("255.255.255.128",info.getNetmask());
+       assertEquals(128, info.getAddressCount());
+
+       utils = new SubnetUtils("192.168.0.1/26");
+       utils.setInclusiveHostCount(true);
+       info = utils.getInfo();
+       assertEquals("255.255.255.192",info.getNetmask());
+       assertEquals(64, info.getAddressCount());
+
+       utils = new SubnetUtils("192.168.0.1/27");
+       utils.setInclusiveHostCount(true);
+       info = utils.getInfo();
+       assertEquals("255.255.255.224",info.getNetmask());
+       assertEquals(32, info.getAddressCount());
+
+       utils = new SubnetUtils("192.168.0.1/28");
+       utils.setInclusiveHostCount(true);
+       info = utils.getInfo();
+       assertEquals("255.255.255.240",info.getNetmask());
+       assertEquals(16, info.getAddressCount());
+
+       utils = new SubnetUtils("192.168.0.1/29");
+       utils.setInclusiveHostCount(true);
+       info = utils.getInfo();
+       assertEquals("255.255.255.248",info.getNetmask());
+       assertEquals(8, info.getAddressCount());
+
+       utils = new SubnetUtils("192.168.0.1/30");
+       utils.setInclusiveHostCount(true);
+       info = utils.getInfo();
+       assertEquals("255.255.255.252",info.getNetmask());
+       assertEquals(4, info.getAddressCount());
+
+       utils = new SubnetUtils("192.168.0.1/31");
+       utils.setInclusiveHostCount(true);
+       info = utils.getInfo();
+       assertEquals("255.255.255.254",info.getNetmask());
+       assertEquals(2, info.getAddressCount());
+
+       utils = new SubnetUtils("192.168.0.1/32");
+       utils.setInclusiveHostCount(true);
+       info = utils.getInfo();
+       assertEquals("255.255.255.255",info.getNetmask());
+       assertEquals(1, info.getAddressCount());
+
+
+    }
 }


Reply via email to