public Route6FilterLine(LineAction action, Prefix6 prefix, SubRange lengthRange) { _action = action; _ipWildcard = new Ip6Wildcard(prefix); _lengthRange = lengthRange; }
private static boolean wildcardsContain(Collection<Ip6Wildcard> wildcards, Ip6 ip) { for (Ip6Wildcard wildcard : wildcards) { if (wildcard.contains(ip)) { return true; } } return false; }
@Override public boolean equals(Object o) { if (o == this) { return true; } else if (!(o instanceof Ip6Wildcard)) { return false; } Ip6Wildcard other = (Ip6Wildcard) o; if (other.getFirst().equals(this.getFirst()) && other.getSecond().equals(this.getSecond())) { return true; } else { return false; } }
/** Convert a standard IPv6 access list line to a route filter list line */ private static Route6FilterLine toRoute6FilterLine(StandardIpv6AccessListLine fromLine) { LineAction action = fromLine.getAction(); Prefix6 prefix = fromLine.getIpWildcard().toPrefix(); return new Route6FilterLine( action, new Ip6Wildcard(prefix), new SubRange(prefix.getPrefixLength(), Prefix6.MAX_PREFIX_LENGTH)); }
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); }
@Override public boolean equals(Object obj) { if (this == obj) { return true; } else if (!(obj instanceof Route6FilterLine)) { return false; } Route6FilterLine other = (Route6FilterLine) obj; return _action == other._action && _lengthRange.equals(other._lengthRange) && _ipWildcard.equals(other._ipWildcard); }
@Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + _action.ordinal(); result = prime * result + _lengthRange.hashCode(); result = prime * result + _ipWildcard.hashCode(); return result; }
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)); }
public Route6FilterLine(LineAction action, Prefix6Range prefixRange) { this(action, new Ip6Wildcard(prefixRange.getPrefix6()), prefixRange.getLengthRange()); }
private boolean newPermits(Prefix6 prefix) { boolean accept = false; for (Route6FilterLine line : _lines) { if (line.getIpWildcard().contains(prefix.getAddress())) { int prefixLength = prefix.getPrefixLength(); SubRange range = line.getLengthRange(); if (prefixLength >= range.getStart() && prefixLength <= range.getEnd()) { accept = line.getAction() == LineAction.PERMIT; break; } } } if (accept) { _permittedCache.get().add(prefix); } else { _deniedCache.get().add(prefix); } return accept; }
@Override public void exitStandard_ipv6_access_list_tail(Standard_ipv6_access_list_tailContext ctx) { LineAction action = toLineAction(ctx.ala); Ip6 srcIp = getIp(ctx.ipr); Ip6 srcWildcard = getWildcard(ctx.ipr); Set<Integer> dscps = new TreeSet<>(); Set<Integer> ecns = new TreeSet<>(); for (Standard_access_list_additional_featureContext feature : ctx.features) { if (feature.DSCP() != null) { int dscpType = toDscpType(feature.dscp_type()); dscps.add(dscpType); } else if (feature.ECN() != null) { int ecn = toInteger(feature.ecn); ecns.add(ecn); } } String name; if (ctx.num != null) { name = ctx.num.getText(); } else { name = getFullText(ctx).trim(); } StandardIpv6AccessListLine line = new StandardIpv6AccessListLine( name, action, new Ip6Wildcard(srcIp, srcWildcard), dscps, ecns); _currentStandardIpv6Acl.addLine(line); }
@Override public void applyTo(Route6FilterList rfl) { int prefixLength = _prefix6.getPrefixLength(); org.batfish.datamodel.Route6FilterLine line = new org.batfish.datamodel.Route6FilterLine( LineAction.PERMIT, new Ip6Wildcard( new Prefix6(_prefix6.getAddress(), prefixLength).getAddress(), _addressMask), new SubRange(prefixLength, prefixLength)); rfl.addLine(line); }
@Before public void setup() { _rfAddressMask = new Route6FilterList( "test-route6-filter-mask", ImmutableList.of( new Route6FilterLine( LineAction.PERMIT, new Ip6Wildcard( "2001:db8:1234:2345:3456:4567:5678:6789;0:ffff:0:0:0:ffff:ffff:ffff"), new SubRange(64, 64)))); _rfPrefixMoreSpecific = new Route6FilterList( "test-route6-filter-prefix", ImmutableList.of( new Route6FilterLine( LineAction.PERMIT, new Ip6Wildcard( "2001:db8:1234:2345:3456:4567:5678:6789;0:0:0:0:ffff:ffff:ffff:ffff"), new SubRange(65, 70)))); _rfPrefixExact = new Route6FilterList( "test-route6-filter-prefix", ImmutableList.of( new Route6FilterLine( LineAction.PERMIT, new Ip6Wildcard( "2001:db8:1234:2345:3456:4567:5678:6789;0:0:0:0:ffff:ffff:ffff:ffff"), new SubRange(64, 64)))); }
action, protocol, new Ip6Wildcard(srcIp, srcWildcard), srcAddressGroup, new Ip6Wildcard(dstIp, dstWildcard), dstAddressGroup, srcPortRanges,