public Flow.Builder getFlowFromAssignment(BDD satAssignment) { checkArgument(isAssignment(satAssignment)); Flow.Builder fb = Flow.builder(); fb.setDstIp(Ip.create(_dstIp.satAssignmentToLong(satAssignment))); fb.setSrcIp(Ip.create(_srcIp.satAssignmentToLong(satAssignment))); fb.setDstPort(_dstPort.satAssignmentToLong(satAssignment).intValue()); fb.setSrcPort(_srcPort.satAssignmentToLong(satAssignment).intValue()); fb.setIpProtocol( IpProtocol.fromNumber(_ipProtocol.satAssignmentToLong(satAssignment).intValue())); fb.setIcmpCode(_icmpCode.satAssignmentToLong(satAssignment).intValue()); fb.setIcmpType(_icmpType.satAssignmentToLong(satAssignment).intValue()); fb.setTcpFlagsAck(_tcpAck.and(satAssignment).isZero() ? 0 : 1); fb.setTcpFlagsCwr(_tcpCwr.and(satAssignment).isZero() ? 0 : 1); fb.setTcpFlagsEce(_tcpEce.and(satAssignment).isZero() ? 0 : 1); fb.setTcpFlagsFin(_tcpFin.and(satAssignment).isZero() ? 0 : 1); fb.setTcpFlagsPsh(_tcpPsh.and(satAssignment).isZero() ? 0 : 1); fb.setTcpFlagsRst(_tcpRst.and(satAssignment).isZero() ? 0 : 1); fb.setTcpFlagsSyn(_tcpSyn.and(satAssignment).isZero() ? 0 : 1); fb.setTcpFlagsUrg(_tcpUrg.and(satAssignment).isZero() ? 0 : 1); fb.setDscp(_dscp.satAssignmentToLong(satAssignment).intValue()); fb.setEcn(_ecn.satAssignmentToLong(satAssignment).intValue()); fb.setFragmentOffset(_fragmentOffset.satAssignmentToLong(satAssignment).intValue()); fb.setState(FlowState.fromNum(_state.satAssignmentToLong(satAssignment).intValue())); return fb; }
@Test public void testMatchFlow() { TcpFlags flags = TcpFlags.builder().setUrg(true).setRst(true).build(); TcpFlagsMatchConditions conditions = TcpFlagsMatchConditions.builder().setTcpFlags(flags).setUseUrg(true).build(); assertThat( conditions.match(Flow.builder().setTcpFlagsUrg(1).setIngressNode("n").setTag("t").build()), equalTo(true)); assertThat( conditions.match(Flow.builder().setTcpFlagsUrg(0).setIngressNode("n").setTag("t").build()), equalTo(false)); }
@Test public void testMatchFlowIgnoreFields() { TcpFlags flags = TcpFlags.builder().setUrg(true).setRst(true).build(); // All fields ignored by default TcpFlagsMatchConditions conditions = TcpFlagsMatchConditions.builder().setTcpFlags(flags).build(); assertThat( conditions.match(Flow.builder().setTcpFlagsUrg(1).setIngressNode("n").setTag("t").build()), equalTo(true)); // Fields that do not match, but are ignored do not break match conditions = TcpFlagsMatchConditions.builder() .setTcpFlags(flags) .setUseUrg(false) .setUseRst(true) .build(); assertThat( conditions.match( Flow.builder() .setTcpFlagsUrg(0) .setTcpFlagsRst(1) .setIngressNode("n") .setTag("t") .build()), equalTo(true)); }
b.setTcpFlagsCwr(tcpFlagsCwr); b.setTcpFlagsEce(tcpFlagsEce); b.setTcpFlagsUrg(tcpFlagsUrg); b.setTcpFlagsAck(tcpFlagsAck); b.setTcpFlagsPsh(tcpFlagsPsh);