import java.util.Arrays;
import java.util.Iterator;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IetfInetUtil;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Prefix;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Address;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Prefix;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DottedQuad;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import com.google.common.base.Preconditions;
import com.google.common.base.Splitter;
import com.google.common.base.Strings;
import com.google.common.collect.Iterators;
import com.google.common.net.InetAddresses;
import com.google.common.primitives.UnsignedBytes;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DottedQuad;
/**
}
public static DottedQuad createArbitraryBitMask(final byte [] bytemask) {
- DottedQuad dottedQuad = new DottedQuad(DEFAULT_ARBITRARY_BIT_MASK);
- try {
- dottedQuad = new DottedQuad(InetAddress.getByAddress(bytemask).getHostAddress());
- } catch (UnknownHostException e) {
- LOG.error("Failed to create the dottedQuad notation for the given mask ", e);
+ DottedQuad dottedQuad = null;
+ if (bytemask == null ) {
+ dottedQuad = new DottedQuad(DEFAULT_ARBITRARY_BIT_MASK);
+ } else {
+ try {
+ dottedQuad = new DottedQuad(InetAddress.getByAddress(bytemask).getHostAddress());
+ } catch (UnknownHostException e) {
+ LOG.error("Failed to create the dottedQuad notation for the given mask ", e);
+ }
}
return dottedQuad;
}
return IetfInetUtil.INSTANCE.ipv6AddressFrom(ipv6Prefix);
}
+ public static Ipv4Address extractIpv4Address(final Ipv4Prefix ipv4Prefix) {
+ Iterator<String> addressParts = PREFIX_SPLITTER.split(ipv4Prefix.getValue()).iterator();
+ return new Ipv4Address(addressParts.next());
+ }
+
+ 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;
+ }
+
public static Integer extractIpv6Prefix(final Ipv6Prefix ipv6Prefix) {
return IetfInetUtil.INSTANCE.splitIpv6Prefix(ipv6Prefix).getValue();
}
public static final byte[] convertArbitraryMaskToByteArray(DottedQuad mask) {
String maskValue;
- if (mask != null && mask.getValue() != null){
+ if (mask != null && mask.getValue() != null) {
maskValue = mask.getValue();
- }
- else {
+ } else {
maskValue = DEFAULT_ARBITRARY_BIT_MASK;
}
InetAddress maskInIpFormat = null;
public static boolean isArbitraryBitMask(byte[] byteMask) {
if (byteMask == null) {
return false;
- }
- else {
+ } else {
ArrayList<Integer> integerMaskArrayList = new ArrayList<Integer>();
String maskInBits;
// converting byte array to bits
maskInBits = new BigInteger(1, byteMask).toString(2);
ArrayList<String> stringMaskArrayList = new ArrayList<String>(Arrays.asList(maskInBits.split("(?!^)")));
- for(String string:stringMaskArrayList){
+ for (String string:stringMaskArrayList) {
integerMaskArrayList.add(Integer.parseInt(string));
}
return checkArbitraryBitMask(integerMaskArrayList);
private static boolean checkArbitraryBitMask(ArrayList<Integer> arrayList) {
// checks 0*1* case - Leading zeros in arrayList are truncated
- if(arrayList.size()>0 && arrayList.size()<32) {
+ if (arrayList.size()>0 && arrayList.size()<IPV4_ADDRESS_LENGTH) {
return true;
- }
- //checks 1*0*1 case
- else {
- for(int i=0; i<arrayList.size()-1;i++) {
- if(arrayList.get(i) ==0 && arrayList.get(i+1) == 1) {
+ } else {
+ //checks 1*0*1 case
+ for (int i=0; i<arrayList.size()-1;i++) {
+ if (arrayList.get(i) ==0 && arrayList.get(i+1) == 1) {
return true;
}
}