@Override public IpSpace toIpSpace() { return _subnet.toIpSpace(); } }
public static MatchHeaderSpace matchDst(Prefix prefix) { return matchDst(prefix.toIpSpace()); }
@Override public Void visitNatRuleMatchDstAddr(NatRuleMatchDstAddr natRuleMatchDstAddr) { _headerSpace.setDstIps(natRuleMatchDstAddr.getPrefix().toIpSpace()); return null; }
@Override public Void visitNatRuleMatchSrcAddr(NatRuleMatchSrcAddr natRuleMatchSrcAddr) { _headerSpace.setSrcIps(natRuleMatchSrcAddr.getPrefix().toIpSpace()); return null; }
public static MatchHeaderSpace matchSrcPrefix(String prefix) { return matchSrc(Prefix.parse(prefix).toIpSpace()); }
private static MatchHeaderSpace matchField(Prefix prefix, IpField field) { switch (field) { case DESTINATION: return new MatchHeaderSpace(HeaderSpace.builder().setDstIps(prefix.toIpSpace()).build()); case SOURCE: return new MatchHeaderSpace(HeaderSpace.builder().setSrcIps(prefix.toIpSpace()).build()); default: throw new BatfishException("Invalid field"); } }
@Test public void testVisitPrefix() { assertThat( SIMPLIFIER.simplify(Prefix.parse("0.0.0.0/0").toIpSpace()), equalTo(UniverseIpSpace.INSTANCE)); }
@Test public void testPrefixIpSpace() { IpSpace ipSpace = Prefix.parse("255.0.0.0/8").toIpSpace(); BDD bdd = ipSpace.accept(_ipSpaceToBdd); assertThat(bdd, equalTo(_bddOps.and(Arrays.asList(_ipAddrBdd.getBitvec()).subList(0, 8)))); }
@Test public void testPrefixIpSpace_andMoreSpecific() { IpSpace ipSpace1 = Prefix.parse("255.0.0.0/8").toIpSpace(); IpSpace ipSpace2 = Prefix.parse("255.255.0.0/16").toIpSpace(); BDD bdd1 = ipSpace1.accept(_ipSpaceToBdd); BDD bdd2 = ipSpace2.accept(_ipSpaceToBdd); assertThat(_bddOps.and(bdd1, bdd2), equalTo(bdd2)); }
@Test public void testPrefixIpSpace_orMoreSpecific() { IpSpace ipSpace1 = Prefix.parse("255.0.0.0/8").toIpSpace(); IpSpace ipSpace2 = Prefix.parse("255.255.0.0/16").toIpSpace(); BDD bdd1 = ipSpace1.accept(_ipSpaceToBdd); BDD bdd2 = ipSpace2.accept(_ipSpaceToBdd); assertThat(_bddOps.or(bdd1, bdd2), equalTo(bdd1)); }
@Test public void testPrefixIpSpace_andNonOverlapping() { IpSpace ipSpace1 = Prefix.parse("0.0.0.0/8").toIpSpace(); IpSpace ipSpace2 = Prefix.parse("1.0.0.0/8").toIpSpace(); BDD bdd1 = ipSpace1.accept(_ipSpaceToBdd); BDD bdd2 = ipSpace2.accept(_ipSpaceToBdd); assertThat(_bddOps.and(bdd1, bdd2), equalTo(_factory.zero())); }
@Test public void testPrefixIpSpace_orNonOverlapping() { IpSpace ipSpace1 = Prefix.parse("0.0.0.0/8").toIpSpace(); IpSpace ipSpace2 = Prefix.parse("1.0.0.0/8").toIpSpace(); BDD bdd1 = ipSpace1.accept(_ipSpaceToBdd); BDD bdd2 = ipSpace2.accept(_ipSpaceToBdd); assertThat( _bddOps.or(bdd1, bdd2), equalTo( _bddOps.and( Arrays.asList(_ipAddrBdd.getBitvec()).subList(0, 7).stream() .map(BDD::not) .collect(ImmutableList.toImmutableList())))); }
@Test public void testVisitPrefixIpSpace() { IpSpace ipSpace = Prefix.parse("1.0.0.0/24").toIpSpace(); 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("1.0.0.0/24")); assertThat(ipSpace.accept(describerWithMetadata), equalTo(TEST_METADATA_DESCRIPTION)); }
@Test public void testDontSpecializeToUniverse() { IpSpace ipSpace = Prefix.parse("1.0.0.0/8").toIpSpace(); Ip ip = Ip.parse("1.1.1.1"); IpSpaceSpecializer specializer = new BDDIpSpaceSpecializer(_toBdd.toBDD(ip), ImmutableMap.of(), _toBdd, false); assertThat(specializer.specialize(ipSpace), equalTo(ipSpace)); } }
@Test public void testSpecializeToUniverse() { IpSpace ipSpace = Prefix.parse("1.0.0.0/8").toIpSpace(); Ip ip = Ip.parse("1.1.1.1"); IpSpaceSpecializer specializer = new BDDIpSpaceSpecializer(_toBdd.toBDD(ip), ImmutableMap.of(), _toBdd, true); assertThat(specializer.specialize(ipSpace), equalTo(UniverseIpSpace.INSTANCE)); }
@Test public void testStopWhenEmpty() { AclIpSpace space = AclIpSpace.builder() .thenPermitting(Prefix.parse("1.2.3.4/32").toIpSpace()) .thenRejecting(UniverseIpSpace.INSTANCE) .thenPermitting(Prefix.parse("2.0.0.0/8").toIpSpace()) .build(); AclIpSpace expected = AclIpSpace.builder() .thenPermitting(Prefix.parse("1.2.3.4/32").toIpSpace()) .thenRejecting(UniverseIpSpace.INSTANCE) .build(); assertThat(space, equalTo(expected)); } }
@Test public void testSpecializeIpIpSpace() { IpSpace ipSpace = Ip.parse("1.2.3.4").toIpSpace(); assertThat(specializer(ipSpace).visit(ipSpace), equalTo(UniverseIpSpace.INSTANCE)); assertThat( specializer(Prefix.parse("1.2.3.0/24").toIpSpace()).visit(ipSpace), equalTo(ipSpace)); assertThat( specializer(Ip.parse("1.2.3.3").toIpSpace()).visit(ipSpace), equalTo(EmptyIpSpace.INSTANCE)); }
@Test public void testSpecializeIpWildcardIpSpace() { IpSpace ipSpace = new IpWildcard(Ip.parse("255.0.255.0"), Ip.parse("0.255.0.255")).toIpSpace(); assertThat(specializer(ipSpace).visit(ipSpace), equalTo(UniverseIpSpace.INSTANCE)); assertThat( specializer(Prefix.parse("255.0.0.0/8").toIpSpace()).visit(ipSpace), equalTo(ipSpace)); assertThat( specializer(Ip.parse("1.2.3.4").toIpSpace()).visit(ipSpace), equalTo(EmptyIpSpace.INSTANCE)); }
@Test public void testIpWildcard_prefix() { IpSpace ipWildcardIpSpace = new IpWildcard(Ip.parse("123.0.0.0"), Ip.parse("0.255.255.255")).toIpSpace(); IpSpace prefixIpSpace = Prefix.parse("123.0.0.0/8").toIpSpace(); BDD bdd1 = ipWildcardIpSpace.accept(_ipSpaceToBdd); BDD bdd2 = prefixIpSpace.accept(_ipSpaceToBdd); assertThat(bdd1, equalTo(bdd2)); }
@Override public void exitSa_ip_netmask(Sa_ip_netmaskContext ctx) { if (_currentAddressObject == null) { return; } if (ctx.IP_ADDRESS() != null) { _currentAddressObject.setIpSpace(Ip.parse(ctx.IP_ADDRESS().getText()).toIpSpace()); } else if (ctx.IP_PREFIX() != null) { _currentAddressObject.setIpSpace(Prefix.parse(ctx.IP_PREFIX().getText()).toIpSpace()); } else { _w.redFlag("Cannot understand what follows 'ip-netmask' in " + getFullText(ctx)); } }