@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)); }
.filter( whitelistedIpWildcard -> ipWildcardSetIpSpace.getBlacklist().stream() .noneMatch(whitelistedIpWildcard::subsetOf)) .collect(Collectors.toSet()); ipWildcardSetIpSpace.getBlacklist().stream() .filter( blacklistedIpWildcard -> {
@Override public IpSpace visitIpWildcardSetIpSpace(IpWildcardSetIpSpace ipWildcardSetIpSpace) { Set<IpSpace> blacklistIpSpace = ipWildcardSetIpSpace.getBlacklist().stream() .map(this::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)); }); }