/** * Returns the first ip in the prefix that is not a subnet address. When the prefix is /32 or /31, * returns the getStartIp(), otherwise, returns the ip after getStartIp(). */ public Ip getFirstHostIp() { if (_prefixLength >= Prefix.MAX_PREFIX_LENGTH - 1) { return getStartIp(); } else { Ip subnetIp = getStartIp(); return Ip.create(subnetIp.asLong() + 1); } }
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); }
Ip computeInstancesIfaceIp() { Long generatedIp = _cidrBlock.getStartIp().asLong() + 1L; _allocatedIps.add(generatedIp); _lastGeneratedIp = generatedIp; return Ip.create(generatedIp); }
@Override public boolean matches(Prefix prefix, Environment environment) { return _prefixTrie.containsPathFromPrefix(prefix) || _prefixTrie.containsIp(prefix.getStartIp()); } }
public boolean containsPathFromPrefix(Prefix prefix) { int prefixLength = prefix.getPrefixLength(); long bits = prefix.getStartIp().asLong(); return _root.containsPathFromPrefix(bits, prefixLength, 0); }
private Prefix extendPrefixWith(Prefix p, boolean val) { int length = p.getPrefixLength(); assert (length < Prefix.MAX_PREFIX_LENGTH); Ip ip = p.getStartIp(); long l = ip.asLong(); long lnew = l; if (val) { long delta = (long) Math.pow(2, 32 - length - 1); lnew = l + delta; } return Prefix.create(Ip.create(lnew), length + 1); }
public void addPrefix(Prefix prefix) { int prefixLength = prefix.getPrefixLength(); long bits = prefix.getStartIp().asLong(); _root.addPrefix(prefix, bits, prefixLength, 0); }
public static boolean overlap(Prefix p1, Prefix p2) { long l1 = p1.getStartIp().asLong(); long l2 = p2.getStartIp().asLong(); long u1 = p1.getEndIp().asLong(); long u2 = p2.getEndIp().asLong(); return (l1 >= l2 && l1 <= u2) || (u1 <= u2 && u1 >= l2) || (u2 >= l1 && u2 <= u1) || (l2 >= l1 && l2 <= u1); }
BoolExpr isRelevantFor(Prefix p, BitVecExpr be) { long pfx = p.getStartIp().asLong(); return firstBitsEqual(be, pfx, p.getPrefixLength()); }
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; }
/** * 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, new IpWildcard( Prefix.create(_prefix.getStartIp(), prefixLength).getStartIp(), _addressMask), new SubRange(prefixLength, prefixLength)); rfl.addLine(line); }
public boolean containsPrefixRange(PrefixRange prefixRange) { Prefix prefix = prefixRange.getPrefix(); int prefixLength = prefix.getPrefixLength(); BitSet bits = getAddressBits(prefix.getStartIp()); return _root.containsPrefixRange(prefixRange, bits, prefixLength, 0); }
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; }
public Subnet(JSONObject jObj) throws JSONException { _cidrBlock = Prefix.parse(jObj.getString(JSON_KEY_CIDR_BLOCK)); _subnetId = jObj.getString(JSON_KEY_SUBNET_ID); _vpcId = jObj.getString(JSON_KEY_VPC_ID); // skipping (startIp+1) as it is used as the default gateway for instances in this subnet _lastGeneratedIp = _cidrBlock.getStartIp().asLong() + 1; }
@Override public Boolean visitShiftIpAddressIntoSubnet(ShiftIpAddressIntoSubnet step) { IpField field = step.getIpField(); Ip oldValue = get(field); Prefix targetSubnet = step.getSubnet(); Prefix currentSubnetPrefix = Prefix.create(oldValue, targetSubnet.getPrefixLength()); long offset = oldValue.asLong() - currentSubnetPrefix.getStartIp().asLong(); Ip newValue = Ip.create(targetSubnet.getStartIp().asLong() + offset); return set(step.getType(), field, oldValue, newValue); } }
@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; }
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(); }
@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)); }