@Override public Prefix6 getNeighborPrefix6() { return new Prefix6(_ip6, Prefix6.MAX_PREFIX_LENGTH); } }
public Ip6Wildcard(Ip6 ip) { this(new Prefix6(ip, Prefix6.MAX_PREFIX_LENGTH)); }
private static Prefix6 prefix6FromStr(String str) { Prefix6 prefix6; String[] mainParts = str.split(";"); int numMainParts = mainParts.length; if (numMainParts < 1 || numMainParts > 2) { throw new BatfishException("Invalid Prefix6Range string: '" + str + "'"); } else { prefix6 = new Prefix6(mainParts[0]); return prefix6; } }
public Prefix6 getNetworkPrefix() { return new Prefix6(getNetworkAddress(), _prefixLength); }
private static Ip6 getIp(Access_list_ip6_rangeContext ctx) { if (ctx.ip != null) { return toIp6(ctx.ip); } else if (ctx.ipv6_prefix != null) { return new Prefix6(ctx.ipv6_prefix.getText()).getAddress(); } else { return Ip6.ZERO; } }
@Override public Prefix6 evaluate(Environment env) { Ip6 ip6 = _ip6.evaluate(env); int prefixLength = _prefixLength.evaluate(env); return new Prefix6(ip6, prefixLength); }
public Prefix6 toPrefix() { if (isPrefix()) { return new Prefix6(_first, _second.inverted()); } else { throw new BatfishException("Invalid wildcard format for conversion to prefix: " + _second); } }
@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); }
@Test public void testRfPrefixMoreSpecific() { Prefix6 acceptedPrefix1 = new Prefix6("2001:db8:1234:2345:5353:8373:8728:1239/66"); Prefix6 deniedPrefix1 = new Prefix6("2001:db8:4567:2345:5353:8373:8728:1239/66"); // matching prefix but is less specific Prefix6 deniedPrefix2 = new Prefix6("2001:db8:1234:2345:5353:8373:8728:1239/62"); assertThat(_rfPrefixMoreSpecific, permits(acceptedPrefix1)); assertThat(_rfPrefixMoreSpecific, rejects(deniedPrefix1)); assertThat(_rfPrefixMoreSpecific, rejects(deniedPrefix2)); }
@Test public void testRfAddressMask() { Prefix6 acceptedPrefix1 = new Prefix6("2001:db9:1234:2345:3456:8373:8728:1239/64"); Prefix6 deniedPrefix1 = new Prefix6("2002:db8:2346:2347:5353:4567:5678:6789/64"); Prefix6 deniedPrefix2 = new Prefix6("2001:db8:1234:2345:3456:4567:5678:6789/66"); assertThat(_rfAddressMask, permits(acceptedPrefix1)); assertThat(_rfAddressMask, rejects(deniedPrefix1)); assertThat(_rfAddressMask, rejects(deniedPrefix2)); }
private static SubRange lengthRangeFromStr(String str) { Prefix6 prefix6; String[] mainParts = str.split(";"); int numMainParts = mainParts.length; if (numMainParts < 1 || numMainParts > 2) { throw new BatfishException("Invalid Prefix6Range string: '" + str + "'"); } else { prefix6 = new Prefix6(mainParts[0]); if (mainParts.length == 1) { int prefix6Length = prefix6.getPrefixLength(); return new SubRange(prefix6Length, prefix6Length); } else { return new SubRange(mainParts[1]); } } }
@Test public void testRfPrefixExact() { Prefix6 acceptedPrefix1 = new Prefix6("2001:db8:1234:2345:5353:8373:8728:1239/64"); // matching prefix with non-equal prefix length Prefix6 deniedPrefix1 = new Prefix6("2001:db8:1234:2345:5353:8373:8728:1239/65"); assertThat(_rfPrefixExact, permits(acceptedPrefix1)); assertThat(_rfPrefixExact, rejects(deniedPrefix1)); } }
@Override public void enterRbnx_af_aggregate_address(Rbnx_af_aggregate_addressContext ctx) { if (ctx.prefix != null) { Prefix prefix = Prefix.parse(ctx.prefix.getText()); _currentBgpNxVrfAddressFamilyAggregateNetwork = _currentBgpNxVrfAddressFamily.getOrCreateAggregateNetwork(prefix); } else if (ctx.network != null && ctx.subnet != null) { Prefix prefix = Prefix.create(toIp(ctx.network), toIp(ctx.subnet)); _currentBgpNxVrfAddressFamilyAggregateNetwork = _currentBgpNxVrfAddressFamily.getOrCreateAggregateNetwork(prefix); } else if (ctx.prefix6 != null) { Prefix6 prefix = new Prefix6(ctx.prefix6.getText()); _currentBgpNxVrfAddressFamilyAggregateNetwork = _currentBgpNxVrfAddressFamily.getOrCreateAggregateNetwork(prefix); } }
@Override public void exitNetwork6_bgp_tail(Network6_bgp_tailContext ctx) { Prefix6 prefix6 = new Prefix6(ctx.prefix.getText()); String map = null; Integer mapLine = null; if (ctx.mapname != null) { map = ctx.mapname.getText(); mapLine = ctx.mapname.getStart().getLine(); _configuration.referenceStructure( ROUTE_MAP, map, BGP_NETWORK6_ORIGINATION_ROUTE_MAP, mapLine); } BgpProcess proc = currentVrf().getBgpProcess(); BgpNetwork6 bgpNetwork6 = new BgpNetwork6(map, mapLine); proc.getIpv6Networks().put(prefix6, bgpNetwork6); }
private Ip6 getWildcard(Access_list_ip6_rangeContext ctx) { if (ctx.wildcard != null) { return toIp6(ctx.wildcard); } else if (ctx.ANY() != null || ctx.ANY6() != null || ctx.address_group != null) { return Ip6.MAX; } else if (ctx.HOST() != null) { return Ip6.ZERO; } else if (ctx.ipv6_prefix != null) { return new Prefix6(ctx.ipv6_prefix.getText()).getPrefixWildcard(); } else if (ctx.ip != null) { // basically same as host return Ip6.ZERO; } else { throw convError(Ip.class, ctx); } }
@Override public void exitRbnx_af_network(Rbnx_af_networkContext ctx) { String mapname = ""; if (ctx.mapname != null) { mapname = ctx.mapname.getText(); _configuration.referenceStructure( ROUTE_MAP, mapname, BGP_ROUTE_MAP_OTHER, ctx.getStart().getLine()); } if (ctx.prefix != null) { Prefix prefix = Prefix.parse(ctx.prefix.getText()); _currentBgpNxVrfAddressFamily.addIpNetwork(prefix, mapname); } else if (ctx.address != null && ctx.mask != null) { Prefix prefix = Prefix.create(toIp(ctx.address), toIp(ctx.mask)); _currentBgpNxVrfAddressFamily.addIpNetwork(prefix, mapname); } else if (ctx.prefix6 != null) { Prefix6 prefix = new Prefix6(ctx.prefix6.getText()); _currentBgpNxVrfAddressFamily.addIpv6Network(prefix, mapname); } }
@Override public void applyTo(Route6FilterList rfl) { int low = _prefix6.getPrefixLength(); int high = _throughPrefix6.getPrefixLength(); for (int i = low; i <= high; i++) { Ip6 currentNetworkAddress = _throughPrefix6.getAddress().getNetworkAddress(i); Prefix6 currentPrefix6 = new Prefix6(currentNetworkAddress, i); org.batfish.datamodel.Route6FilterLine line = new org.batfish.datamodel.Route6FilterLine( LineAction.PERMIT, currentPrefix6, new SubRange(i, i)); rfl.addLine(line); } }
@Override public void enterPopsf_route_filter(Popsf_route_filterContext ctx) { _currentRouteFilter = _termRouteFilters.get(_currentPsTerm); if (_currentRouteFilter == null) { String rfName = _currentPolicyStatement.getName() + ":" + _currentPsTerm.getName(); _currentRouteFilter = new RouteFilter(); _termRouteFilters.put(_currentPsTerm, _currentRouteFilter); _currentLogicalSystem.getRouteFilters().put(rfName, _currentRouteFilter); PsFromRouteFilter from = new PsFromRouteFilter(rfName); _currentPsTerm.getFroms().addFromRouteFilter(from); } if (ctx.IP_PREFIX() != null) { _currentRouteFilterPrefix = Prefix.parse(ctx.IP_PREFIX().getText()); _currentRouteFilter.setIpv4(true); } else if (ctx.IPV6_PREFIX() != null) { _currentRoute6FilterPrefix = new Prefix6(ctx.IPV6_PREFIX().getText()); _currentRouteFilter.setIpv6(true); } }
@Override public void enterPopsfrf_through(Popsfrf_throughContext ctx) { if (_currentRouteFilterPrefix != null) { // ipv4 Prefix throughPrefix = Prefix.parse(ctx.IP_PREFIX().getText()); Route4FilterLine line = new Route4FilterLineThrough(_currentRouteFilterPrefix, throughPrefix); _currentRouteFilterLine = _currentRouteFilter.insertLine(line, Route4FilterLine.class); } else if (_currentRoute6FilterPrefix != null) { // ipv6 Prefix6 throughPrefix6 = new Prefix6(ctx.IPV6_PREFIX().getText()); Route6FilterLine line = new Route6FilterLineThrough(_currentRoute6FilterPrefix, throughPrefix6); _currentRoute6FilterLine = _currentRouteFilter.insertLine(line, Route6FilterLine.class); } }
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)); }