@Override @Nonnull public AclLineMatchExpr toAclLineMatchExpr(Map<String, ObjectGroup> objectGroups) { return new MatchHeaderSpace( HeaderSpace.builder() .setDscps(_dscps) .setDstPorts(_dstPortRanges) .setEcns(_ecns) .setIcmpCodes( _icmpCode != null ? ImmutableSet.of(new SubRange(_icmpCode)) : ImmutableSet.of()) .setIcmpTypes( _icmpType != null ? ImmutableSet.of(new SubRange(_icmpType)) : ImmutableSet.of()) .setIpProtocols( _protocol != IpProtocol.IP ? ImmutableSet.of(_protocol) : ImmutableSet.of()) .setSrcPorts(_srcPortRanges) .setStates(_states) .setTcpFlags(_tcpFlags) .build()); }
/** * Convert packet header constraints to a {@link HeaderSpace.Builder} * * <p><b>Does not resolve/set source and destination IPs</b> */ public static HeaderSpace.Builder toHeaderSpaceBuilder(PacketHeaderConstraints phc) { // Note: headerspace builder does not accept nulls, so we have to convert nulls to empty sets HeaderSpace.Builder builder = HeaderSpace.builder() .setIpProtocols(firstNonNull(phc.resolveIpProtocols(), ImmutableSortedSet.of())) .setSrcPorts(extractSubranges(phc.getSrcPorts())) .setDstPorts(extractSubranges(phc.resolveDstPorts())) .setIcmpCodes(extractSubranges(phc.getIcmpCodes())) .setIcmpTypes(extractSubranges(phc.getIcmpTypes())) .setDstProtocols(firstNonNull(phc.getApplications(), ImmutableSortedSet.of())) .setFragmentOffsets(extractSubranges(phc.getFragmentOffsets())) .setPacketLengths(extractSubranges(phc.getPacketLengths())) .setTcpFlags(firstNonNull(phc.getTcpFlags(), ImmutableSet.of())) .setStates(firstNonNull(phc.getFlowStates(), ImmutableSortedSet.of())); if (phc.getDscps() != null) { builder.setDscps(phc.getDscps().enumerate()); } if (phc.getEcns() != null) { builder.setEcns(ImmutableSortedSet.copyOf(phc.getEcns().enumerate())); } return builder; }
@Test public void test_state() { HeaderSpace headerSpace = HeaderSpace.builder() .setStates(ImmutableSet.of(FlowState.fromNum(0), FlowState.fromNum(1))) .build(); BDD bdd = _toBDD.toBDD(headerSpace); BDDInteger state = _pkt.getState(); BDD stateBDD = state.value(0).or(state.value(1)); assertThat(bdd, equalTo(stateBDD)); }
.setSrcPorts(_srcPorts) .setSrcProtocols(_srcProtocols) .setStates(_states) .setTcpFlags(_tcpFlags);