/** Returns a {@link PrefixRange} that represents all more specific prefixes. */ public static PrefixRange moreSpecificThan(Prefix prefix) { return new PrefixRange( prefix, new SubRange(prefix.getPrefixLength() + 1, Prefix.MAX_PREFIX_LENGTH)); }
/** Returns a {@link PrefixRange} that contains exactly the specified {@link Prefix}. */ public static PrefixRange fromPrefix(Prefix prefix) { int prefixLength = prefix.getPrefixLength(); return new PrefixRange(prefix, new SubRange(prefixLength, prefixLength)); }
@JsonCreator public static PrefixRange fromString(String prefixRangeStr) { String[] parts = prefixRangeStr.split(":"); if (parts.length == 1) { return fromPrefix(Prefix.parse(parts[0])); } else if (parts.length == 2) { return new PrefixRange(Prefix.parse(parts[0]), new SubRange(parts[1])); } else { throw new BatfishException("Invalid PrefixRange string: '" + prefixRangeStr + "'"); } }
private BoolExpr matchFilterList(RouteFilterList x, SymbolicRoute other) { BoolExpr acc = _enc.mkFalse(); List<RouteFilterLine> lines = new ArrayList<>(x.getLines()); Collections.reverse(lines); for (RouteFilterLine line : lines) { if (!line.getIpWildcard().isPrefix()) { throw new BatfishException("non-prefix IpWildcards are unsupported"); } Prefix p = line.getIpWildcard().toPrefix(); SubRange r = line.getLengthRange(); PrefixRange range = new PrefixRange(p, r); BoolExpr matches = _enc.isRelevantFor(other.getPrefixLength(), range); BoolExpr action = _enc.mkBool(line.getAction() == LineAction.PERMIT); acc = _enc.mkIf(matches, action, acc); } return acc; }
private BDD matchFilterList(TransferParam<BDDRoute> p, RouteFilterList x, BDDRoute other) { BDD acc = factory.zero(); List<RouteFilterLine> lines = new ArrayList<>(x.getLines()); Collections.reverse(lines); for (RouteFilterLine line : lines) { if (!line.getIpWildcard().isPrefix()) { throw new BatfishException("non-prefix IpWildcards are unsupported"); } Prefix pfx = line.getIpWildcard().toPrefix(); if (!PrefixUtils.isContainedBy(pfx, _ignoredNetworks)) { SubRange r = line.getLengthRange(); PrefixRange range = new PrefixRange(pfx, r); p.debug("Prefix Range: " + range); p.debug("Action: " + line.getAction()); BDD matches = isRelevantFor(other, range); BDD action = mkBDD(line.getAction() == LineAction.PERMIT); acc = ite(matches, action, acc); } } return acc; }
prefixSpace.addPrefixRange(new PrefixRange(prefix, new SubRange(lower, upper))); } else { prefix6Space.addPrefix6Range(new Prefix6Range(prefix6, new SubRange(lower, upper)));