Signed-off-by: Daniele Di Proietto <diproiet...@vmware.com> --- tests/learn.at | 175 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 175 insertions(+)
diff --git a/tests/learn.at b/tests/learn.at index 3f6fb5a7e..f91a662ad 100644 --- a/tests/learn.at +++ b/tests/learn.at @@ -626,3 +626,178 @@ NXST_FLOW reply: ]) OVS_VSWITCHD_STOP AT_CLEANUP + +AT_SETUP([learning action - limit]) +OVS_VSWITCHD_START +AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg]) +add_of_ports br0 1 2 +AT_DATA([flows.txt], [dnl +table=0 in_port=1 actions=learn(table=1,dl_dst=dl_src,cookie=0x1,limit=1),2 +]) +AT_CHECK([ovs-ofctl add-flows br0 flows.txt]) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:01,dst=50:54:00:00:00:ff),eth_type(0x1234)']) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:02,dst=50:54:00:00:00:ff),eth_type(0x1234)']) + +OVS_WAIT_UNTIL([ovs-ofctl dump-ports br0 2 | grep -o 'tx pkts=2' >/dev/null]) + +AT_CHECK([ovs-ofctl dump-flows br0 table=1 | ofctl_strip | sort], [0], [dnl + cookie=0x1, table=1, dl_dst=50:54:00:00:00:01 actions=drop +NXST_FLOW reply: +]) + +dnl Delete the learned flow +AT_CHECK([ovs-ofctl del-flows br0 table=1]) + +AT_CHECK([ovs-ofctl dump-flows br0 table=1 | ofctl_strip | sort], [0], [dnl +NXST_FLOW reply: +]) + +ovs-appctl revalidator/wait + +AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:02,dst=50:54:00:00:00:ff),eth_type(0x1234)']) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:01,dst=50:54:00:00:00:ff),eth_type(0x1234)']) + +OVS_WAIT_UNTIL([ovs-ofctl dump-ports br0 2 | grep -o 'tx pkts=4' >/dev/null]) + +AT_CHECK([ovs-ofctl dump-flows br0 table=1 | ofctl_strip | sort], [0], [dnl + cookie=0x1, table=1, dl_dst=50:54:00:00:00:02 actions=drop +NXST_FLOW reply: +]) + +OVS_VSWITCHD_STOP +AT_CLEANUP + +AT_SETUP([learning action - limit result_dst]) +OVS_VSWITCHD_START +AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg]) +add_of_ports br0 1 +AT_DATA([flows.txt], [dnl +table=0 in_port=1 actions=learn(table=1,dl_dst=dl_src,cookie=0x1,limit=1,result_dst=reg0[[0]]),controller +]) +AT_CHECK([ovs-ofctl add-flows br0 flows.txt]) + +AT_CAPTURE_FILE([ofctl_monitor.log]) +AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl -P nxt_packet_in --detach --no-chdir --pidfile 2> ofctl_monitor.log]) + +AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:01,dst=50:54:00:00:00:ff),eth_type(0x1234)']) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:02,dst=50:54:00:00:00:ff),eth_type(0x1234)']) + +OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 4]) +OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit]) + +AT_CHECK([cat ofctl_monitor.log], [0], [dnl +NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=14 reg0=0x1,in_port=1 (via action) data_len=14 (unbuffered) +vlan_tci=0x0000,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:ff,dl_type=0x1234 +NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=14 in_port=1 (via action) data_len=14 (unbuffered) +vlan_tci=0x0000,dl_src=50:54:00:00:00:02,dl_dst=50:54:00:00:00:ff,dl_type=0x1234 +]) + +AT_CHECK([ovs-ofctl dump-flows br0 table=1 | ofctl_strip | sort], [0], [dnl + cookie=0x1, table=1, dl_dst=50:54:00:00:00:01 actions=drop +NXST_FLOW reply: +]) + +OVS_VSWITCHD_STOP +AT_CLEANUP + +AT_SETUP([learning action - different limits]) +OVS_VSWITCHD_START +AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg]) +add_of_ports br0 1 2 3 +AT_DATA([flows.txt], [dnl +table=0 in_port=1 udp,actions=learn(table=11,dl_type=0x0800,nw_proto=17,udp_src=udp_dst,limit=1,result_dst=reg0[[0]]),resubmit(,1) +table=0 in_port=2 udp,actions=learn(table=12,dl_type=0x0800,nw_proto=17,udp_src=udp_dst,limit=10,result_dst=reg0[[0]]),resubmit(,1) +table=0 in_port=3 udp,actions=learn(table=13,dl_type=0x0800,nw_proto=17,udp_src=udp_dst,limit=20,result_dst=reg0[[0]]),resubmit(,1) +dnl +dnl These flows simply counts the packets that executed a successful learn action: +dnl +table=1 cookie=1,reg0=1,in_port=1 actions=drop +table=1 cookie=2,reg0=1,in_port=2 actions=drop +table=1 cookie=3,reg0=1,in_port=3 actions=drop +dnl +dnl These flows simply counts the packets that didn't execute a successful learn action: +dnl +table=1 cookie=1,reg0=0,in_port=1 actions=drop +table=1 cookie=2,reg0=0,in_port=2 actions=drop +table=1 cookie=3,reg0=0,in_port=3 actions=drop +]) +AT_CHECK([ovs-ofctl add-flows br0 flows.txt]) + +for i in `seq 1001 1030`; do + ovs-appctl netdev-dummy/receive p1 "in_port(1),eth(src=50:54:00:00:00:01,dst=50:54:00:00:00:ff),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=17,tos=0,ttl=64,frag=no),udp(src=1,dst=$i)" + ovs-appctl netdev-dummy/receive p2 "in_port(2),eth(src=50:54:00:00:00:01,dst=50:54:00:00:00:ff),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=17,tos=0,ttl=64,frag=no),udp(src=1,dst=$i)" + ovs-appctl netdev-dummy/receive p3 "in_port(3),eth(src=50:54:00:00:00:01,dst=50:54:00:00:00:ff),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=17,tos=0,ttl=64,frag=no),udp(src=1,dst=$i)" +done + +dnl Check successful counters: +AT_CHECK([ovs-ofctl dump-flows br0 table=1,reg0=1 | ofctl_strip | sort], [0], [dnl + cookie=0x1, table=1, n_packets=1, n_bytes=42, reg0=0x1,in_port=1 actions=drop + cookie=0x2, table=1, n_packets=10, n_bytes=420, reg0=0x1,in_port=2 actions=drop + cookie=0x3, table=1, n_packets=20, n_bytes=840, reg0=0x1,in_port=3 actions=drop +NXST_FLOW reply: +]) + +dnl Check failed counters: +AT_CHECK([ovs-ofctl dump-flows br0 table=1,reg0=0 | ofctl_strip | sort], [0], [dnl + cookie=0x1, table=1, n_packets=29, n_bytes=1218, reg0=0,in_port=1 actions=drop + cookie=0x2, table=1, n_packets=20, n_bytes=840, reg0=0,in_port=2 actions=drop + cookie=0x3, table=1, n_packets=10, n_bytes=420, reg0=0,in_port=3 actions=drop +NXST_FLOW reply: +]) + +dnl Check learned flows: + +AT_CHECK([ovs-ofctl dump-flows br0 table=13 | ofctl_strip | sort], [0], [dnl + table=13, udp,tp_src=1001 actions=drop + table=13, udp,tp_src=1002 actions=drop + table=13, udp,tp_src=1003 actions=drop + table=13, udp,tp_src=1004 actions=drop + table=13, udp,tp_src=1005 actions=drop + table=13, udp,tp_src=1006 actions=drop + table=13, udp,tp_src=1007 actions=drop + table=13, udp,tp_src=1008 actions=drop + table=13, udp,tp_src=1009 actions=drop + table=13, udp,tp_src=1010 actions=drop + table=13, udp,tp_src=1011 actions=drop + table=13, udp,tp_src=1012 actions=drop + table=13, udp,tp_src=1013 actions=drop + table=13, udp,tp_src=1014 actions=drop + table=13, udp,tp_src=1015 actions=drop + table=13, udp,tp_src=1016 actions=drop + table=13, udp,tp_src=1017 actions=drop + table=13, udp,tp_src=1018 actions=drop + table=13, udp,tp_src=1019 actions=drop + table=13, udp,tp_src=1020 actions=drop +NXST_FLOW reply: +]) + +AT_CHECK([ovs-ofctl dump-flows br0 table=12 | ofctl_strip | sort], [0], [dnl + table=12, udp,tp_src=1001 actions=drop + table=12, udp,tp_src=1002 actions=drop + table=12, udp,tp_src=1003 actions=drop + table=12, udp,tp_src=1004 actions=drop + table=12, udp,tp_src=1005 actions=drop + table=12, udp,tp_src=1006 actions=drop + table=12, udp,tp_src=1007 actions=drop + table=12, udp,tp_src=1008 actions=drop + table=12, udp,tp_src=1009 actions=drop + table=12, udp,tp_src=1010 actions=drop +NXST_FLOW reply: +]) + +AT_CHECK([ovs-ofctl dump-flows br0 table=11 | ofctl_strip | sort], [0], [dnl + table=11, udp,tp_src=1001 actions=drop +NXST_FLOW reply: +]) + +AT_CHECK([ovs-vsctl del-br br0]) + +ovs-appctl time/warp 500 +ovs-appctl time/warp 500 +ovs-appctl time/warp 500 +ovs-appctl time/warp 500 + +AT_CHECK([ovs-vsctl add-br br1 -- set b br1 datapath_type=dummy]) + +OVS_VSWITCHD_STOP +AT_CLEANUP -- 2.11.0 _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev