public boolean contains(Ip6 ip6) { BigInteger start = getNetworkAddress().asBigInteger(); BigInteger end = getEndAddress().asBigInteger(); BigInteger ipAsLong = ip6.asBigInteger(); return start.compareTo(ipAsLong) <= 0 && ipAsLong.compareTo(end) <= 0; }
public boolean isPrefix() { BigInteger w = _second.asBigInteger(); BigInteger wp = w.add(BigInteger.ONE); int numTrailingZeros = wp.getLowestSetBit(); BigInteger check = BigInteger.ONE.shiftLeft(numTrailingZeros); return wp.equals(check); }
private static BitSet getAddressBits(Ip6 address) { int numBytes = NUM_BITS / 8; BigInteger addressAsBigInteger = address.asBigInteger(); byte[] addressAsByteArray = addressAsBigInteger.toByteArray(); byte[] addressAs128BitByteArray = Arrays.copyOfRange(addressAsByteArray, 0, numBytes); ByteBuffer b = ByteBuffer.allocate(numBytes); b.order(ByteOrder.LITTLE_ENDIAN); b.put(addressAs128BitByteArray); BitSet bitsWithHighestMostSignificant = BitSet.valueOf(b.array()); BitSet bits = new BitSet(NUM_BITS); for (int i = NUM_BITS - 1, j = 0; i >= 0; i--, j++) { bits.set(j, bitsWithHighestMostSignificant.get(i)); } return bits; }
public boolean contains(Ip6 ip) { BigInteger wildcardIpAsBigInteger = getIp().asBigInteger(); BigInteger wildcardMask = getWildcard().asBigInteger(); BigInteger ipAsBigInteger = ip.asBigInteger(); BigInteger maskedIpAsBigInteger = ipAsBigInteger.or(wildcardMask); BigInteger maskedWildcard = wildcardIpAsBigInteger.or(wildcardMask); return maskedIpAsBigInteger.equals(maskedWildcard); }
public Ip6 getEndAddress() { return new Ip6(getNetworkEnd(_address.asBigInteger(), _prefixLength)); }
public boolean includesPrefix6(Prefix6 argPrefix6) { Prefix6 prefix6 = getPrefix6(); SubRange lengthRange = getLengthRange(); int prefixLength = prefix6.getPrefixLength(); int minPrefixLength = lengthRange.getStart(); int maxPrefixLength = lengthRange.getEnd(); int argPrefixLength = argPrefix6.getPrefixLength(); if (minPrefixLength > argPrefixLength || maxPrefixLength < argPrefixLength) { return false; } BigInteger maskedPrefixAsBigInteger = prefix6.getAddress().getNetworkAddress(prefixLength).asBigInteger(); BigInteger argMaskedPrefixAsBigInteger = argPrefix6.getAddress().getNetworkAddress(prefixLength).asBigInteger(); return maskedPrefixAsBigInteger.equals(argMaskedPrefixAsBigInteger); }
public boolean includesPrefix6Range(Prefix6Range argPrefixRange) { Prefix6 prefix6 = getPrefix6(); SubRange lengthRange = getLengthRange(); int prefixLength = prefix6.getPrefixLength(); BigInteger maskedPrefixAsBigInteger = prefix6.getAddress().getNetworkAddress(prefixLength).asBigInteger(); Prefix6 argPrefix = argPrefixRange.getPrefix6(); SubRange argLengthRange = argPrefixRange.getLengthRange(); BigInteger argMaskedPrefixAsBigInteger = argPrefix.getAddress().getNetworkAddress(prefixLength).asBigInteger(); return maskedPrefixAsBigInteger.equals(argMaskedPrefixAsBigInteger) && lengthRange.getStart() <= argLengthRange.getStart() && lengthRange.getEnd() >= argLengthRange.getEnd(); }
private static Route6FilterLine toRoute6FilterLine(ExtendedIpv6AccessListLine fromLine) { LineAction action = fromLine.getAction(); Ip6 ip = fromLine.getSourceIpWildcard().getIp(); BigInteger minSubnet = fromLine.getDestinationIpWildcard().getIp().asBigInteger(); BigInteger maxSubnet = minSubnet.or(fromLine.getDestinationIpWildcard().getWildcard().asBigInteger()); int minPrefixLength = fromLine.getDestinationIpWildcard().getIp().numSubnetBits(); int maxPrefixLength = new Ip6(maxSubnet).numSubnetBits(); int statedPrefixLength = fromLine.getSourceIpWildcard().getWildcard().inverted().numSubnetBits(); int prefixLength = Math.min(statedPrefixLength, minPrefixLength); Prefix6 prefix = new Prefix6(ip, prefixLength); return new Route6FilterLine(action, prefix, new SubRange(minPrefixLength, maxPrefixLength)); }