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 NatPool() { _fromAddress = Prefix.ZERO.getStartIp(); _toAddress = Prefix.ZERO.getEndIp(); }
/** * Parse a {@link Prefix} from a string. * * @throws IllegalArgumentException if the string does not represent a prefix in canonical form. */ public static @Nonnull Prefix strict(String prefixStr) { Prefix prefix = parse(prefixStr); checkArgument(prefix.toString().equals(prefixStr), "Non-canonical prefix: %s", prefixStr); return prefix; }
@Test public void testComputeInterfaceHostSubnetIpsWithPrefixLength31() { Configuration c1 = _cb.build(); Map<String, Configuration> configs = ImmutableMap.of(c1.getHostname(), c1); Vrf vrf1 = _vb.setOwner(c1).build(); Prefix prefix = Prefix.parse("1.0.0.1/31"); Interface i1 = _ib.setOwner(c1) .setVrf(vrf1) .setAddress(new InterfaceAddress(prefix.getStartIp(), prefix.getPrefixLength())) .build(); Map<String, Map<String, Map<String, IpSpace>>> interfaceHostSubnetIps = computeInterfaceHostSubnetIps(configs); assertThat( interfaceHostSubnetIps, hasEntry( equalTo(c1.getHostname()), hasEntry( equalTo(vrf1.getName()), hasEntry(equalTo(i1.getName()), containsIp(prefix.getStartIp()))))); assertThat( interfaceHostSubnetIps, hasEntry( equalTo(c1.getHostname()), hasEntry( equalTo(vrf1.getName()), hasEntry(equalTo(i1.getName()), containsIp(prefix.getEndIp()))))); }
/** * Returns an {@link IpSpace} that contains this prefix except for the network and broadcast * addresses, if applicable. Following RFC 3021, the entire {@code /31} is treated as host IP * space. A prefix of length {@code /32} is preserved, though may be a degenerate case. */ public IpSpace toHostIpSpace() { if (_prefixLength >= Prefix.MAX_PREFIX_LENGTH - 1) { return toIpSpace(); } return AclIpSpace.builder() .thenRejecting(getStartIp().toIpSpace()) .thenRejecting(getEndIp().toIpSpace()) .thenPermitting(toIpSpace()) .build(); }
public boolean containsPathFromPrefix(Prefix prefix) { int prefixLength = prefix.getPrefixLength(); long bits = prefix.getStartIp().asLong(); return _root.containsPathFromPrefix(bits, prefixLength, 0); }
@Test public void testComputeIpsAssignedToThisInterface() { Configuration config = _cb.build(); Map<String, Configuration> configs = ImmutableMap.of(config.getHostname(), config); _ib.setOwner(config); InterfaceAddress primary = new InterfaceAddress(P1.getStartIp(), P1.getPrefixLength()); InterfaceAddress secondary = new InterfaceAddress(P2.getStartIp(), P2.getPrefixLength()); Interface i = _ib.setAddresses(primary, secondary).build(); _interfaceOwnedIps = TopologyUtil.computeInterfaceOwnedIps(configs, false); ForwardingAnalysisImpl forwardingAnalysisImpl = initForwardingAnalysisImpl(); IpSpace result = forwardingAnalysisImpl.computeIpsAssignedToThisInterface(i); assertThat(result, containsIp(P1.getStartIp())); assertThat(result, containsIp(P2.getStartIp())); assertThat(result, not(containsIp(P2.getEndIp()))); }
@Override public void exitPoplt_network(Poplt_networkContext ctx) { Prefix prefix = Prefix.parse(ctx.network.getText()); _currentPrefixList.getPrefixes().add(prefix); }
@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 Prefix getNeighborPrefix() { return Prefix.create(_ip, Prefix.MAX_PREFIX_LENGTH); }
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 equals(Object o) { if (o == this) { return true; } else if (!(o instanceof BgpAggregateIpv4Network)) { return false; } BgpAggregateIpv4Network rhs = (BgpAggregateIpv4Network) o; return _prefix.equals(rhs._prefix); }
@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; } }
@Override public String toString() { return _prefix.toString(); }
@Override public int natCompare(CiscoIosNat o) { if (!(o instanceof CiscoIosStaticNat)) { return 0; } CiscoIosStaticNat other = (CiscoIosStaticNat) o; return Integer.compare(_localNetwork.getPrefixLength(), other._localNetwork.getPrefixLength()); }
@Override public IpSpace toIpSpace() { return _subnet.toIpSpace(); } }
@Override public Ip getEnd() { return _subnet.getEndIp(); }
/** * 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); } }