/** * Returns a {@code String} listing the {@link PrefixRange}s contained in this {@link * PrefixSpace}. * * @return {@code String} representation of this {@link PrefixSpace} */ @Override public String toString() { return getPrefixRanges().toString(); } }
@Override public int hashCode() { return getPrefixRanges().hashCode(); }
@Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } if (getClass() != obj.getClass()) { return false; } return getPrefixRanges().equals(((PrefixSpace) obj).getPrefixRanges()); }
/** * Returns a new {@link PrefixSpace} containing all {@link Prefix}es shared between this {@link * PrefixSpace} and the one given. * * @param intersectSpace {@link PrefixSpace} with which to find intersecting {@link Prefix}es * @return A new {@link PrefixSpace} containing all shared {@link Prefix}es */ public PrefixSpace intersection(PrefixSpace intersectSpace) { PrefixSpace newSpace = new PrefixSpace(); Set<PrefixRange> intersectRanges = intersectSpace.getPrefixRanges(); for (PrefixRange intersectRange : intersectRanges) { if (containsPrefixRange(intersectRange)) { newSpace.addPrefixRange(intersectRange); } } return newSpace; }
@Test public void getPrefixRangesTest() { assertThat("No ranges yet", _ps.getPrefixRanges().isEmpty(), equalTo(true)); _ps.addPrefixRange(PrefixRange.fromString("10.10.10.0/20:18-21")); Set<PrefixRange> ranges = _ps.getPrefixRanges(); assertThat(ranges.contains(PrefixRange.fromString("10.10.0.0/18")), equalTo(true)); assertThat(ranges.contains(PrefixRange.fromString("10.10.0.0/19")), equalTo(true)); assertThat(ranges.contains(PrefixRange.fromString("10.10.10.0/20:18-21")), equalTo(true)); assertThat(ranges.size(), equalTo(3)); _ps.addPrefixRange((PrefixRange.fromString("10.10.10.0/20:20-22"))); ranges = _ps.getPrefixRanges(); assertThat(ranges.contains(PrefixRange.fromString("10.10.10.0/20:20-22")), equalTo(true)); }
@Test public void addPrefixTest() { Prefix prefix = Prefix.parse("100.0.0.0/32"); _ps.addPrefix(prefix); assertThat(_ps.getPrefixRanges().size(), equalTo(1)); assertThat(_ps.containsPrefix(prefix), equalTo(true)); }
assertThat(space.getPrefixRanges(), equalTo(ImmutableSet.of(ten8to15))); assertThat(space.getPrefixRanges(), equalTo(ImmutableSet.of(ten8to16))); space.addPrefixRange(ten8to16); assertThat(space.getPrefixRanges(), equalTo(ImmutableSet.of(ten8to16))); assertThat(space.getPrefixRanges(), equalTo(ImmutableSet.of(ten8to16, ten9to17))); assertThat(space.getPrefixRanges(), equalTo(ImmutableSet.of(one9to9, ten8to16, ten9to17))); space.getPrefixRanges(), equalTo(ImmutableSet.of(one9to9, ten8to16, ten9to17, eleven9to9))); assertThat(space.getPrefixRanges(), equalTo(ImmutableSet.of(all)));
private BDD matchPrefixSet( TransferParam<BDDRoute> p, Configuration conf, PrefixSetExpr e, BDDRoute other) { if (e instanceof ExplicitPrefixSet) { ExplicitPrefixSet x = (ExplicitPrefixSet) e; Set<PrefixRange> ranges = x.getPrefixSpace().getPrefixRanges(); if (ranges.isEmpty()) { p.debug("empty"); return factory.one(); } BDD acc = factory.zero(); for (PrefixRange range : ranges) { p.debug("Prefix Range: " + range); if (!PrefixUtils.isContainedBy(range.getPrefix(), _ignoredNetworks)) { acc = acc.or(isRelevantFor(other, range)); } } return acc; } else if (e instanceof NamedPrefixSet) { NamedPrefixSet x = (NamedPrefixSet) e; p.debug("Named: " + x.getName()); String name = x.getName(); RouteFilterList fl = conf.getRouteFilterLists().get(name); return matchFilterList(p, fl, other); } else { throw new BatfishException("TODO: match prefix set: " + e); } }
if (e instanceof ExplicitPrefixSet) { ExplicitPrefixSet eps = (ExplicitPrefixSet) e; Set<PrefixRange> ranges = eps.getPrefixSpace().getPrefixRanges(); for (PrefixRange r : ranges) { acc.add(r.getPrefix());
ExplicitPrefixSet x = (ExplicitPrefixSet) e; Set<PrefixRange> ranges = x.getPrefixSpace().getPrefixRanges(); if (ranges.isEmpty()) { return result.setReturnValue(_enc.mkTrue());
@Test public void intersectionAndOverlapsTest() { PrefixSpace other = new PrefixSpace(); assertThat("empty spaces don't intersect", _ps.intersection(other).isEmpty(), equalTo(true)); assertThat("no overlap for empty spaces", _ps.overlaps(other), equalTo(false)); _ps.addPrefixRange(PrefixRange.fromString("10.10.10.0/20:18-21")); assertThat("no intersection for one empty", _ps.intersection(other).isEmpty(), equalTo(true)); assertThat("no overlap for one empty", _ps.overlaps(other), equalTo(false)); other.addPrefixRange(PrefixRange.fromString("10.10.10.0/16:14-16")); assertThat("no intersection", _ps.intersection(other).isEmpty(), equalTo(true)); assertThat("no overlap", _ps.overlaps(other), equalTo(false)); other.addPrefixRange(PrefixRange.fromString("10.10.10.0/20:18-20")); PrefixSpace intersection = _ps.intersection(other); assertThat( "now intersect for length 18", intersection.containsPrefix(Prefix.parse("10.10.0.0/18")), equalTo(true)); assertThat( "now intersect for length 19", intersection.containsPrefix(Prefix.parse("10.10.0.0/19")), equalTo(true)); assertThat( "now intersect for range 18-20", intersection.containsPrefixRange(PrefixRange.fromString("10.10.0.0/20:18-20")), equalTo(true)); assertThat("don't intersect anywhere else", intersection.getPrefixRanges().size(), equalTo(3)); assertThat("has overlap", _ps.overlaps(other), equalTo(true)); }