}
public static DottedQuad extractIpv4AddressMask(final Ipv4Prefix ipv4Prefix) {
- Iterator<String> addressParts = PREFIX_SPLITTER.split(ipv4Prefix.getValue()).iterator();
- addressParts.next();
- Integer cidrMask = 0;
- if (addressParts.hasNext()) {
- cidrMask = Integer.parseInt(addressParts.next());
- }
- long maskBits = 0;
- maskBits = 0xffffffff << IPV4_ADDRESS_LENGTH - cidrMask;
- String mask = String.format("%d.%d.%d.%d", (maskBits & 0x0000000000ff000000L) >> 24,
- (maskBits & 0x0000000000ff0000) >> 16, (maskBits & 0x0000000000ff00) >> 8, maskBits & 0xff);
- DottedQuad netMask = new DottedQuad(mask);
- return netMask;
+ final String value = ipv4Prefix.getValue();
+ final int cidrMask = Integer.parseInt(value.substring(value.indexOf('/') + 1));
+ if (cidrMask == IPV4_ADDRESS_LENGTH) {
+ return DEFAULT_ARBITRARY_BITMASK;
+ }
+
+ final long maskBits = 0xffffffff << IPV4_ADDRESS_LENGTH - cidrMask;
+ return new DottedQuad(new StringBuilder(15)
+ .append((maskBits & 0x0000000000ff000000L) >> 24).append('.')
+ .append((maskBits & 0x0000000000ff0000) >> 16).append('.')
+ .append((maskBits & 0x0000000000ff00) >> 8).append('.')
+ .append(maskBits & 0xff).toString());
}
@Nullable
@Test
public void extractIpv4AddressMaskTest() {
- DottedQuad dottedQuad;
- dottedQuad = IpConversionUtil.extractIpv4AddressMask(new Ipv4Prefix("1.1.1.1/24"));
- Assert.assertEquals(dottedQuad.getValue(),"255.255.255.0");
+ assertAddressMask("128.0.0.0", 1);
+ assertAddressMask("255.0.0.0", 8);
+ assertAddressMask("255.128.0.0", 9);
+ assertAddressMask("255.255.0.0", 16);
+ assertAddressMask("255.255.128.0", 17);
+ assertAddressMask("255.255.255.0", 24);
+ assertAddressMask("255.255.255.128", 25);
+ assertAddressMask("255.255.255.254", 31);
+ assertAddressMask("255.255.255.255", 32);
+ }
+
+ private static void assertAddressMask(final String expected, final int prefix) {
+ Assert.assertEquals(expected,
+ IpConversionUtil.extractIpv4AddressMask(new Ipv4Prefix("1.1.1.1/" + prefix)).getValue());
}
@Test