@Override public Boolean visitIpWildcardSetIpSpace(IpWildcardSetIpSpace ipWildcardSetIpSpace) { return ipWildcardSetIpSpace.getWhitelist().stream().allMatch(_ipWildcard::supersetOf); }
@Override public Void visitIpWildcardSetIpSpace(IpWildcardSetIpSpace ipWildcardSetIpSpace) { ipWildcardSetIpSpace.getWhitelist().forEach(this::assertIpWildcardIsPrefix); ipWildcardSetIpSpace.getBlacklist().forEach(this::assertIpWildcardIsPrefix); ipWildcardSetIpSpace.getWhitelist().stream().map(IpWildcard::toPrefix).forEach(_prefixes::add); ipWildcardSetIpSpace.getBlacklist().stream() .map(IpWildcard::toPrefix) .forEach(_notPrefixes::add); return null; }
@Override public Boolean visitIpWildcardSetIpSpace(IpWildcardSetIpSpace ipWildcardSetIpSpace) { return ipWildcardSetIpSpace.getBlacklist().stream().noneMatch(_ipWildcard::subsetOf) && ipWildcardSetIpSpace.getWhitelist().stream().anyMatch(_ipWildcard::intersects); }
@Override public Boolean visitIpWildcardSetIpSpace(IpWildcardSetIpSpace ipWildcardSetIpSpace) { /* Need to be careful not to give a false-negative here. We can return false only * if we're completely sure that ipWildcardSetIpSpace containsIp _ipWildcard. */ return ipWildcardSetIpSpace.getBlacklist().stream().anyMatch(_ipWildcard::subsetOf) || ipWildcardSetIpSpace.getWhitelist().stream().noneMatch(_ipWildcard::subsetOf); }
@Override public BDD visitIpWildcardSetIpSpace(IpWildcardSetIpSpace ipWildcardSetIpSpace) { BDD whitelist = _bddOps.or( ipWildcardSetIpSpace.getWhitelist().stream() .map(this::toBDD) .collect(Collectors.toList())); BDD blacklist = _bddOps.or( ipWildcardSetIpSpace.getBlacklist().stream() .map(this::toBDD) .collect(Collectors.toList())); return whitelist.and(blacklist.not()); }
@Override public BoolExpr visitIpWildcardSetIpSpace(IpWildcardSetIpSpace ipWildcardSetIpSpace) { BoolExpr whitelistExpr = _context.mkOr( ipWildcardSetIpSpace.getWhitelist().stream() .map(this::toBoolExpr) .toArray(BoolExpr[]::new)); BoolExpr blacklistExpr = _context.mkOr( ipWildcardSetIpSpace.getBlacklist().stream() .map(this::toBoolExpr) .toArray(BoolExpr[]::new)); return _context.mkAnd(whitelistExpr, _context.mkNot(blacklistExpr)); }
ipWildcardSetIpSpace.getWhitelist().stream() .filter( whitelistedIpWildcard ->
public static SortedSet<IpWildcard> asPositiveIpWildcards(IpSpace ipSpace) { // TODO use an IpSpace visitor if (ipSpace == null) { return null; } else if (ipSpace instanceof IpWildcardIpSpace) { return ImmutableSortedSet.of(((IpWildcardIpSpace) ipSpace).getIpWildcard()); } else if (ipSpace instanceof IpWildcardSetIpSpace) { return ((IpWildcardSetIpSpace) ipSpace).getWhitelist(); } else if (ipSpace instanceof UniverseIpSpace) { return ImmutableSortedSet.of(); } else { throw new BatfishException( String.format("Cannot represent as SortedSet<IpWildcard>: %s", ipSpace)); } }
public static SortedSet<IpWildcard> asNegativeIpWildcards(IpSpace ipSpace) { // TODO use an IpSpace visitor if (ipSpace == null) { return null; } else if (ipSpace instanceof IpWildcardIpSpace) { return ImmutableSortedSet.of(((IpWildcardIpSpace) ipSpace).getIpWildcard()); } else if (ipSpace instanceof IpWildcardSetIpSpace) { return ((IpWildcardSetIpSpace) ipSpace).getWhitelist(); } else if (ipSpace instanceof EmptyIpSpace) { return ImmutableSortedSet.of(); } else { throw new BatfishException( String.format("Cannot represent as SortedSet<IpWildcard>: %s", ipSpace)); } }
ipWildcardSetIpSpace.getWhitelist().stream() .map(refinedSpecializer::specialize) .filter(ipSpace -> ipSpace != EmptyIpSpace.INSTANCE)
@Override public BooleanExpr visitIpWildcardSetIpSpace(IpWildcardSetIpSpace ipWildcardSetIpSpace) { return matchAnyField( field -> { BooleanExpr matchBlacklist = HeaderSpaceMatchExpr.matchIpWildcards(ipWildcardSetIpSpace.getBlacklist(), field); BooleanExpr matchWhitelist = HeaderSpaceMatchExpr.matchIpWildcards(ipWildcardSetIpSpace.getWhitelist(), field); return new AndExpr(ImmutableList.of(new NotExpr(matchBlacklist), matchWhitelist)); }); }