.build(); IpSpace ipsRoutedOutI1 = IpWildcardSetIpSpace.builder().including(new IpWildcard(P1), new IpWildcard(P3)).build(); IpSpace ipsRoutedOutI2 = IpWildcardSetIpSpace.builder().including(new IpWildcard(P2)).build(); Map<String, Configuration> configurations = ImmutableMap.of(c1.getHostname(), c1, c2.getHostname(), c2);
Interface i3 = _ib.setAddress(null).setProxyArp(true).build(); IpSpace ipsRoutedOutI1 = IpWildcardSetIpSpace.builder().including(new IpWildcard(P1), new IpWildcard(P3)).build(); IpSpace ipsRoutedOutI2 = IpWildcardSetIpSpace.builder().including(new IpWildcard(P2)).build(); IpSpace ipsRoutedOutI3 = EmptyIpSpace.INSTANCE; Map<String, Interface> interfaces =
@Test public void testIpSpace() { IpWildcardSetIpSpace any = IpWildcardSetIpSpace.builder().including(IpWildcard.ANY).build(); IpWildcardSetIpSpace justMax = IpWildcardSetIpSpace.builder().including(new IpWildcard(Ip.MAX)).build(); IpWildcardSetIpSpace anyExceptMax = IpWildcardSetIpSpace.builder() .including(IpWildcard.ANY) .excluding(new IpWildcard(Ip.MAX)) .build(); IpWildcardSetIpSpace none1 = IpWildcardSetIpSpace.builder().build(); IpWildcardSetIpSpace none2 = IpWildcardSetIpSpace.builder().including(IpWildcard.ANY).excluding(IpWildcard.ANY).build(); IpWildcardSetIpSpace someButNotMax = IpWildcardSetIpSpace.builder().including(new IpWildcard("1.2.3.4")).build();
@Test public void testVisitIpWildcardSetIpSpace() { assertThat( SIMPLIFIER.simplify(IpWildcardSetIpSpace.builder().build()), equalTo(EmptyIpSpace.INSTANCE)); assertThat( SIMPLIFIER.simplify( IpWildcardSetIpSpace.builder().excluding(new IpWildcard("1.2.3.0/24")).build()), equalTo(EmptyIpSpace.INSTANCE)); SIMPLIFIER.simplify(IpWildcardSetIpSpace.builder().including(IpWildcard.ANY).build()), equalTo(UniverseIpSpace.INSTANCE)); assertThat( SIMPLIFIER.simplify( IpWildcardSetIpSpace.builder() .including(IpWildcard.ANY) .excluding(IpWildcard.ANY) .build()), equalTo(EmptyIpSpace.INSTANCE)); .including(new IpWildcard("1.2.1.0/24"), new IpWildcard("2.2.2.2")) .excluding(new IpWildcard("1.2.0.0/16")) .build(); IpSpace simplifiedIpSpace = new IpWildcard("2.2.2.2").toIpSpace(); assertThat(SIMPLIFIER.simplify(ipSpace), equalTo(simplifiedIpSpace)); .including(new IpWildcard("2.2.2.2")) .excluding(new IpWildcard("1.0.0.0/8")) .build(); assertThat(SIMPLIFIER.simplify(ipSpace), equalTo(simplifiedIpSpace));
/** Convert address book into corresponding IpSpaces */ private Map<String, IpSpace> toIpSpaces(String bookName, AddressBook book) { Map<String, IpSpace> ipSpaces = new TreeMap<>(); book.getEntries() .forEach( (n, entry) -> { String entryName = bookName + "~" + n; // If this address book references other entries, add them to an AclIpSpace if (!entry.getEntries().isEmpty()) { AclIpSpace.Builder aclIpSpaceBuilder = AclIpSpace.builder(); entry .getEntries() .keySet() .forEach( name -> { String subEntryName = bookName + "~" + name; aclIpSpaceBuilder.thenPermitting(new IpSpaceReference(subEntryName)); }); ipSpaces.put(entryName, aclIpSpaceBuilder.build()); } else { ipSpaces.put( entryName, IpWildcardSetIpSpace.builder().including(entry.getIpWildcards(_w)).build()); } }); return ipSpaces; }
@Override public void visitNodeAccept(NodeAccept.State nodeAccept) { // PostInForMe _input .getIpsByNodeVrf() .forEach( (hostname, nodeVrfIps) -> nodeVrfIps.forEach( (vrf, ips) -> _rules.add( new BasicRuleStatement( new IpSpaceMatchExpr( IpWildcardSetIpSpace.builder() .including( ips.stream() .map(IpWildcard::new) .collect(ImmutableSet.toImmutableSet())) .build(), _input.getNamedIpSpaces().get(hostname), Field.DST_IP) .getExpr(), new PostInVrf(hostname, vrf), new NodeAccept(hostname))))); }
@Override public void visitPreOutVrf(PreOutVrf.State preOut) { // PostInNotMine _input .getIpsByNodeVrf() .forEach( (hostname, ipsByVrf) -> ipsByVrf.forEach( (vrf, ips) -> { BooleanExpr ipForeignToCurrentNode = new NotExpr( new IpSpaceMatchExpr( IpWildcardSetIpSpace.builder() .including( ips.stream() .map(IpWildcard::new) .collect(ImmutableSet.toImmutableSet())) .build(), _input.getNamedIpSpaces().get(hostname), Field.DST_IP) .getExpr()); _rules.add( new BasicRuleStatement( ipForeignToCurrentNode, new PostInVrf(hostname, vrf), new PreOutVrf(hostname, vrf))); })); }
void addMatchingIps(ImmutableMap.Builder<Prefix, IpSpace> builder) { if (_left != null) { _left.addMatchingIps(builder); } if (_right != null) { _right.addMatchingIps(builder); } if (hasForwardingRoute()) { IpWildcardSetIpSpace.Builder matchingIps = IpWildcardSetIpSpace.builder(); if (_left != null) { _left.excludeRoutableIps(matchingIps); } if (_right != null) { _right.excludeRoutableIps(matchingIps); } matchingIps.including(new IpWildcard(_prefix)); builder.put(_prefix, matchingIps.build()); } }
@Test public void testVisitIpWildcardSetIpSpace() { IpSpace ipSpace = IpWildcardSetIpSpace.builder() .including(new IpWildcard("1.0.0.0:1.0.1.0")) .excluding(new IpWildcard("2.0.0.0:0.1.0.1")) .build(); IpSpaceDescriber describerWithMetadata = new IpSpaceDescriber( new AclTracer( _flow, null, ImmutableMap.of(), ImmutableMap.of(TEST_NAME, ipSpace), ImmutableMap.of(TEST_NAME, TEST_METADATA))); assertThat(ipSpace.accept(_describerNoNamesNorMetadata), equalTo(ipSpace.toString())); assertThat(ipSpace.accept(describerWithMetadata), equalTo(TEST_METADATA_DESCRIPTION)); }
@Test public void resolveIpSpaceTest() { String prefix = "3.3.3.3/24"; SpecifiersQuestion questionWithIp = new SpecifiersQuestion(QueryType.LOCATION); questionWithIp.setIpSpaceSpecifierInput(prefix); // both interfacelocations should be mapped to 3.3.3.3/24 assertThat( resolveIpSpace(questionWithIp, _context).getRows().getData(), equalTo( ImmutableMultiset.of( Row.of( COL_IP_SPACE, IpWildcardSetIpSpace.builder() .including(new IpWildcard(prefix)) .build() .toString())))); }
@Test public void testConstantWildcardSetIpSpaceSpecifierFactory() { assertThat( load(ConstantWildcardSetIpSpaceSpecifierFactory.NAME), Matchers.instanceOf(ConstantWildcardSetIpSpaceSpecifierFactory.class)); assertThat( new ConstantWildcardSetIpSpaceSpecifierFactory() .buildIpSpaceSpecifier("1.2.3.0/24 - 1.2.3.4"), equalTo( new ConstantIpSpaceSpecifier( IpWildcardSetIpSpace.builder() .including(new IpWildcard("1.2.3.0/24")) .excluding(new IpWildcard("1.2.3.4")) .build()))); } }
@Test public void testDestinationIpSpaceSpecification() { SpecifiersReachabilityQuestion question = SpecifiersReachabilityQuestion.builder() .setHeaderConstraints( PacketHeaderConstraints.builder().setDstIp("1.2.3.0/24 - 1.2.3.4").build()) .build(); assertThat( question.getReachabilityParameters().getDestinationIpSpaceSpecifier(), equalTo( new ConstantIpSpaceSpecifier( IpWildcardSetIpSpace.builder() .including(new IpWildcard("1.2.3.0/24")) .excluding(new IpWildcard("1.2.3.4")) .build()))); }
@Test public void testParse() { assertThat( parse("1.2.3.4"), equalTo( new ConstantIpSpaceSpecifier( IpWildcardSetIpSpace.builder().including(new IpWildcard("1.2.3.4")).build()))); assertThat( parse("ref.addressgroup(foo,bar)"), equalTo(new ReferenceAddressGroupIpSpaceSpecifier("foo", "bar"))); assertThat( parse("ofLocation(foo)"), equalTo(new LocationIpSpaceSpecifier(FlexibleLocationSpecifierFactory.parse("foo")))); } }