@JsonCreator private static RouteFilterList create( @JsonProperty(PROP_NAME) @Nullable String name, @JsonProperty(PROP_LINES) @Nullable List<RouteFilterLine> lines) { return new RouteFilterList(name, firstNonNull(lines, ImmutableList.of())); }
@Override public void applyTo( HeaderSpace.Builder headerSpaceBuilder, JuniperConfiguration jc, Warnings w, Configuration c) { PrefixList pl = jc.getMasterLogicalSystem().getPrefixLists().get(_name); if (pl != null) { if (pl.getIpv6()) { return; } RouteFilterList prefixList = c.getRouteFilterLists().get(_name); // if referenced prefix list is empty, it should not match anything if (prefixList.getLines().isEmpty()) { headerSpaceBuilder.addSrcOrDstIp(EmptyIpSpace.INSTANCE); return; } headerSpaceBuilder.addSrcOrDstIp( AclIpSpace.union( prefixList.getMatchingIps().stream() .map(IpWildcard::toIpSpace) .collect(ImmutableList.toImmutableList()))); } else { w.redFlag("Reference to undefined prefix-list: \"" + _name + "\""); } } }
@Override protected boolean matchesSafely(RouteFilterList item, Description mismatchDescription) { if (!item.permits(_prefix)) { return true; } mismatchDescription.appendText(String.format("does not reject prefix '%s'", _prefix)); return false; } }
private RouteFilterList toRouteFilterList(PrefixList prefixList) { String name = prefixList.getName(); RouteFilterList newList = new RouteFilterList(name); List<RouteFilterLine> newLines = prefixList.getRules().values().stream() .map(l -> new RouteFilterLine(l.getAction(), l.getPrefix(), l.getLengthRange())) .collect(ImmutableList.toImmutableList()); newList.setLines(newLines); return newList; }
new RouteFilterList("~MATCH_SUPPRESSED_SUMMARY_ONLY:" + vrfName + "~"); prefixesToSuppress.forEachRemaining( p -> matchLonger.addLine( new RouteFilterLine(LineAction.PERMIT, PrefixRange.moreSpecificThan(p)))); c.getRouteFilterLists().put(matchLonger.getName(), matchLonger); DestinationNetwork.instance(), new NamedPrefixSet(matchLonger.getName())), ImmutableList.of(Statements.Suppress.toStaticStatement()), ImmutableList.of());
@Override public BooleanExpr toBooleanExpr(JuniperConfiguration jc, Configuration c, Warnings warnings) { PrefixList pl = jc.getMasterLogicalSystem().getPrefixLists().get(_prefixList); if (pl != null) { if (pl.getIpv6()) { return BooleanExprs.FALSE; } RouteFilterList rf = c.getRouteFilterLists().get(_prefixList); String orLongerListName = "~" + _prefixList + "~ORLONGER~"; RouteFilterList orLongerList = c.getRouteFilterLists().get(orLongerListName); if (orLongerList == null) { orLongerList = new RouteFilterList(orLongerListName); for (RouteFilterLine line : rf.getLines()) { Prefix prefix = line.getIpWildcard().toPrefix(); LineAction action = line.getAction(); SubRange orLongerLineRange = new SubRange(line.getLengthRange().getStart(), Prefix.MAX_PREFIX_LENGTH); RouteFilterLine orLongerLine = new RouteFilterLine(action, prefix, orLongerLineRange); orLongerList.addLine(orLongerLine); c.getRouteFilterLists().put(orLongerListName, orLongerList); } } return new MatchPrefixSet( DestinationNetwork.instance(), new NamedPrefixSet(orLongerListName)); } else { warnings.redFlag("Reference to undefined prefix-list: \"" + _prefixList + "\""); return BooleanExprs.FALSE; } } }
MatchPrefixSet isContributingRoute = new MatchPrefixSet(DestinationNetwork.instance(), new NamedPrefixSet(rflName)); RouteFilterList rfList = new RouteFilterList(rflName); rfList.addLine( new org.batfish.datamodel.RouteFilterLine( LineAction.PERMIT,
@Override protected List<RouteFilterLine> featureValueOf(RouteFilterList actual) { return actual.getLines(); } }
@Override public void applyTo(RouteFilterList rfl) { org.batfish.datamodel.RouteFilterLine line = new org.batfish.datamodel.RouteFilterLine( LineAction.PERMIT, _prefix, new SubRange(_minPrefixLength, _maxPrefixLength)); rfl.addLine(line); }
? Math.min(Prefix.MAX_PREFIX_LENGTH, prefixLength + 1) : prefixLength; summaryFilter.addLine( new org.batfish.datamodel.RouteFilterLine( LineAction.DENY, new SubRange(filterMinPrefixLength, Prefix.MAX_PREFIX_LENGTH))); summaryFilter.addLine( new org.batfish.datamodel.RouteFilterLine( LineAction.PERMIT, new IpWildcard(Prefix.ZERO), new SubRange(0, Prefix.MAX_PREFIX_LENGTH))); newAreaBuilder.setSummaryFilter(summaryFilter.getName()); return newAreaBuilder;
/** Check if a given prefix is permitted by this filter list. */ public boolean permits(Prefix prefix) { if (_deniedCache.get().contains(prefix)) { return false; } else if (_permittedCache.get().contains(prefix)) { return true; } return evaluatePrefix(prefix); }
public RouteFilterListsDiff( NavigableMap<String, RouteFilterList> before, NavigableMap<String, RouteFilterList> after) { super(before.keySet(), after.keySet()); for (String name : super.common()) { if (before.get(name).equals(after.get(name))) { _identical.add(name); } else { _diff.add(name); genDiffInfo(before, after, name); } } }
c.getRouteFilterLists().put(newRouteFilterList.getName(), newRouteFilterList); if (isAclUsedForRouting(saList.getName())) { RouteFilterList rfList = CiscoConversions.toRouteFilterList(saList); c.getRouteFilterLists().put(rfList.getName(), rfList); if (isAclUsedForRouting(eaList.getName())) { RouteFilterList rfList = CiscoConversions.toRouteFilterList(eaList); c.getRouteFilterLists().put(rfList.getName(), rfList);
RouteFilterList longerList = c.getRouteFilterLists().get(longerListName); if (longerList == null) { longerList = new RouteFilterList(longerListName); for (RouteFilterLine line : rf.getLines()) { Prefix prefix = line.getIpWildcard().toPrefix(); LineAction action = line.getAction(); longerList.addLine(orLongerLine); c.getRouteFilterLists().put(longerListName, longerList);
new MatchPrefixSet(DestinationNetwork.instance(), new NamedPrefixSet(rflName)); routingPolicyConditional.setGuard(isContributingRoute); RouteFilterList rfList = new RouteFilterList(rflName); rfList.addLine( new org.batfish.datamodel.RouteFilterLine( LineAction.PERMIT, prefix, new SubRange(prefixLength + 1, Prefix.MAX_PREFIX_LENGTH)));
private void genDiffInfo( NavigableMap<String, RouteFilterList> before, NavigableMap<String, RouteFilterList> after, String name) { Set<String> beforeNames = new TreeSet<>(); Set<String> afterNames = new TreeSet<>(); ConfigDiffElement di = new ConfigDiffElement(beforeNames, afterNames); List<RouteFilterLine> beforeLines = before.get(name).getLines(); List<RouteFilterLine> afterLines = after.get(name).getLines(); for (RouteFilterLine line : beforeLines) { String compactLine = line.toCompactString(); if (afterLines.contains(line)) { di._identical.add(compactLine); } else { di._inBeforeOnly.add(compactLine); } } for (RouteFilterLine line : afterLines) { if (!beforeLines.contains(line)) { di._inAfterOnly.add(line.toCompactString()); } } _diffInfo.put(name, di); } }
static RouteFilterList toRouteFilterList(PrefixList list) { RouteFilterList newRouteFilterList = new RouteFilterList(list.getName()); List<RouteFilterLine> newLines = list.getLines().stream() .map( l -> new RouteFilterLine( l.getAction(), new IpWildcard(l.getPrefix()), l.getLengthRange())) .collect(ImmutableList.toImmutableList()); newRouteFilterList.setLines(newLines); return newRouteFilterList; }
@Override public void applyTo(RouteFilterList rfl) { int prefixLength = _prefix.getPrefixLength(); org.batfish.datamodel.RouteFilterLine line = new org.batfish.datamodel.RouteFilterLine( LineAction.PERMIT, _prefix, new SubRange(prefixLength, Prefix.MAX_PREFIX_LENGTH)); rfl.addLine(line); }
@Override public void applyTo( HeaderSpace.Builder headerSpaceBuilder, JuniperConfiguration jc, Warnings w, Configuration c) { PrefixList pl = jc.getMasterLogicalSystem().getPrefixLists().get(_name); if (pl != null) { if (pl.getIpv6()) { return; } RouteFilterList destinationPrefixList = c.getRouteFilterLists().get(_name); // if referenced prefix list is empty, it should not match anything if (destinationPrefixList.getLines().isEmpty()) { headerSpaceBuilder.addNotDstIp(EmptyIpSpace.INSTANCE); return; } headerSpaceBuilder.addNotDstIp( AclIpSpace.union( destinationPrefixList.getMatchingIps().stream() .map(IpWildcard::toIpSpace) .collect(ImmutableList.toImmutableList()))); } else { w.redFlag("Reference to undefined destination prefix-list: \"" + _name + "\""); } } }
String name = e.getKey(); PrefixList pl = e.getValue(); RouteFilterList rfl = new RouteFilterList(name); for (Prefix prefix : pl.getPrefixes()) { int prefixLength = prefix.getPrefixLength(); new org.batfish.datamodel.RouteFilterLine( LineAction.PERMIT, prefix, new SubRange(prefixLength, prefixLength)); rfl.addLine(line); RouteFilter rf = e.getValue(); if (rf.getIpv4()) { RouteFilterList rfl = new RouteFilterList(name); for (RouteFilterLine line : rf.getLines()) { if (line.getThens().size() == 0) {