public Ip6 getEndAddress() { return new Ip6(getNetworkEnd(_address.asBigInteger(), _prefixLength)); }
public Ip6 getNetworkAddress() { return _address.getNetworkAddress(_prefixLength); }
public static Ip6 numSubnetBitsToSubnetMask(int numBits) { BigInteger mask = numSubnetBitsToSubnetBigInteger(numBits); return new Ip6(mask); }
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)); }
private static Ip6 parseMask(String str) { if (str.contains(";")) { String[] parts = str.split(";"); if (parts.length != 2) { throw new BatfishException("Invalid Ip6Wildcard string: '" + str + "'"); } else { return new Ip6(parts[1]); } } else if (str.contains("/")) { String[] parts = str.split("/"); if (parts.length != 2) { throw new BatfishException("Invalid Ip6Wildcard string: '" + str + "'"); } else { int prefixLength = Integer.parseInt(parts[1]); return Ip6.numSubnetBitsToSubnetMask(prefixLength).inverted(); } } else { return Ip6.ZERO; } }
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); }
private static Ip6 toIp6(Token t) { return new Ip6(t.getText()); }
@Override public boolean equals(Object o) { if (o == this) { return true; } else if (!(o instanceof Prefix6)) { return false; } Prefix6 rhs = (Prefix6) o; return _address.equals(rhs._address) && _prefixLength == rhs._prefixLength; }
@Override public void exitPopsfrf_address_mask(Popsfrf_address_maskContext ctx) { if (_currentRouteFilterPrefix != null) { // ipv4 if (ctx.IP_ADDRESS() != null) { Route4FilterLine line = new Route4FilterLineAddressMask( _currentRouteFilterPrefix, Ip.parse(ctx.IP_ADDRESS().getText()).inverted()); _currentRouteFilterLine = _currentRouteFilter.insertLine(line, Route4FilterLine.class); } else { _w.redFlag( String.format( "Route filter mask does not match version for prefix %s", _currentRouteFilterPrefix)); } } else if (_currentRoute6FilterPrefix != null) { // ipv6 if (ctx.IPV6_ADDRESS() != null) { Route6FilterLine line = new Route6FilterLineAddressMask( _currentRoute6FilterPrefix, new Ip6(ctx.IPV6_ADDRESS().getText()).inverted()); _currentRoute6FilterLine = _currentRouteFilter.insertLine(line, Route6FilterLine.class); } else { _w.redFlag( String.format( "Route filter mask does not match version for prefix %s", _currentRouteFilterPrefix)); } } }
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; }
@Override public String getName() { return _ip6.toString(); }
public Prefix6(Ip6 address, Ip6 mask) { if (address == null) { throw new BatfishException("Cannot create prefix6 with null network"); } if (mask == null) { throw new BatfishException("Cannot create prefix6 with null mask"); } _address = address; _prefixLength = mask.numSubnetBits(); }
public Prefix6 toPrefix() { if (isPrefix()) { return new Prefix6(_first, _second.inverted()); } else { throw new BatfishException("Invalid wildcard format for conversion to prefix: " + _second); } }
public Prefix6 getLongestPrefixMatch(Ip6 address6) { BitSet address6Bits = address6.getAddressBits(); return _root.getLongestPrefixMatch(address6, address6Bits, 0); } }
@Override public int compareTo(Prefix6 rhs) { int ret = _address.compareTo(rhs._address); if (ret != 0) { return ret; } return Integer.compare(_prefixLength, rhs._prefixLength); }
@Override @JsonValue public String toString() { return asIpv6AddressString(_ip6); }
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(); }
public Ip6 getPrefixWildcard() { int numWildcardBits = MAX_PREFIX_LENGTH - _prefixLength; BigInteger wildcardBigInteger = numWildcardBitsToWildcardBigInteger(numWildcardBits); return new Ip6(wildcardBigInteger); }
@Override public boolean equals(Object o) { if (this == o) { return true; } else if (!(o instanceof Route6FilterLineAddressMask)) { return false; } Route6FilterLineAddressMask rhs = (Route6FilterLineAddressMask) o; return _prefix6.equals(rhs._prefix6) && _addressMask.equals(rhs._addressMask); }