public void setPrefix(Prefix prefix) { _prefix = prefix; _ge = Math.max(_ge, _prefix.getPrefixLength()); _le = Math.max(_ge, _le); } }
void addPrefix(Prefix prefix, String device) { int prefixLength = prefix.getPrefixLength(); long bits = prefix.getStartIp().asLong(); Set<String> devices = new HashSet<>(); devices.add(device); _root.addPrefix(prefix, devices, bits, prefixLength, 0); } }
/** Retrieve an immutable copy of the routes currently available for the given prefix. */ @Nonnull Set<R> getRoutes(Prefix p) { RibTreeNode<R> node = findRouteNode(p.getStartIp().asLong(), p.getPrefixLength(), 0); if (node == null) { return ImmutableSet.of(); } return ImmutableSet.copyOf(node._routes); }
public PrefixRange(Prefix prefix, SubRange lengthRange) { // Canonicalize the prefix by dropping extra bits in the address that are longer than any // relevant length. int realPrefixLength = Math.min(prefix.getPrefixLength(), lengthRange.getEnd()); Ip realPrefixAddress = prefix.getStartIp().getNetworkAddress(realPrefixLength); this._prefix = Prefix.create(realPrefixAddress, prefix.getPrefixLength()); this._lengthRange = lengthRange; }
public SubRange getLengthRange() { if (_prefix.getPrefixLength() <= _ge && _ge <= _le) { return new SubRange(_ge, _le); } else { throw new BatfishException("Invalid length range restriction"); } }
@Override @JsonValue public String toString() { int prefixLength = _prefix.getPrefixLength(); int low = _lengthRange.getStart(); int high = _lengthRange.getEnd(); if (prefixLength == low && prefixLength == high) { return _prefix.toString(); } else { return _prefix + ":" + low + "-" + high; } }
private static EraseAndSet shiftIpIntoPrefix(BDDInteger var, Prefix prefix) { int len = prefix.getPrefixLength(); BDD erase = Arrays.stream(var.getBitvec()).limit(len).reduce(var.getFactory().one(), BDD::and); BDD setValue = new IpSpaceToBDD(var).toBDD(prefix); return new EraseAndSet(erase, setValue); }
/** 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)); }
/** 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)); }
public void addPrefix(Prefix prefix) { int prefixLength = prefix.getPrefixLength(); long bits = prefix.getStartIp().asLong(); _root.addPrefix(prefix, bits, prefixLength, 0); }
/** * Check if the route is present in the RIB * * @param route route to find * @return true if the route exists in the RIB */ boolean containsRoute(R route) { Prefix prefix = route.getNetwork(); int prefixLength = prefix.getPrefixLength(); long bits = prefix.getStartIp().asLong(); return _root.containsRoute(route, bits, prefixLength); }
@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, _maxPrefixLength)); rfl.addLine(line); }
@Override public void applyTo(RouteFilterList rfl) { int prefixLength = _prefix.getPrefixLength(); if (prefixLength >= 32) { throw new BatfishException("Route filter prefix length cannot be 'longer' than 32"); } org.batfish.datamodel.RouteFilterLine line = new org.batfish.datamodel.RouteFilterLine( LineAction.PERMIT, PrefixRange.moreSpecificThan(_prefix)); rfl.addLine(line); }
@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(RouteFilterList rfl) { int prefixLength = _prefix.getPrefixLength(); org.batfish.datamodel.RouteFilterLine line = new org.batfish.datamodel.RouteFilterLine( LineAction.PERMIT, _prefix, new SubRange(prefixLength, prefixLength)); rfl.addLine(line); }
RibDelta<R> clearRoutes(Prefix prefix) { long bits = prefix.getStartIp().asLong(); RibTreeNode<R> node = findRouteNode(bits, prefix.getPrefixLength(), 0); if (node == null) { return null; } RibDelta<R> delta = RibDelta.<R>builder().remove(node._routes, REPLACE).build(); node._routes.clear(); return delta; }
@Override public Result evaluate(Environment environment) { AbstractRoute route = environment.getOriginalRoute(); Prefix network = route.getNetwork(); int classSize = network.getStartIp().getClassNetworkSize(); Result ret = new Result(); ret.setBooleanValue(classSize == network.getPrefixLength()); return ret; }
@Test public void testCanonicalization() { Prefix p = Prefix.parse("255.255.255.255/15"); assertThat(p.getStartIp(), equalTo(Ip.parse("255.254.0.0"))); assertThat(p.getPrefixLength(), equalTo(15)); }
@Override public void applyTo(RouteFilterList rfl) { int prefixLength = _prefix.getPrefixLength(); org.batfish.datamodel.RouteFilterLine line = new org.batfish.datamodel.RouteFilterLine( LineAction.PERMIT, new IpWildcard( Prefix.create(_prefix.getStartIp(), prefixLength).getStartIp(), _addressMask), new SubRange(prefixLength, prefixLength)); rfl.addLine(line); }
public boolean includesPrefixRange(PrefixRange argPrefixRange) { Prefix prefix = getPrefix(); SubRange lengthRange = getLengthRange(); int prefixLength = prefix.getPrefixLength(); long maskedPrefixAsLong = prefix.getStartIp().getNetworkAddress(prefixLength).asLong(); Prefix argPrefix = argPrefixRange.getPrefix(); SubRange argLengthRange = argPrefixRange.getLengthRange(); long argMaskedPrefixAsLong = argPrefix.getStartIp().getNetworkAddress(prefixLength).asLong(); return maskedPrefixAsLong == argMaskedPrefixAsLong && lengthRange.getStart() <= argLengthRange.getStart() && lengthRange.getEnd() >= argLengthRange.getEnd(); }