Signed-off-by: Simon Horman <ho...@verge.net.au> --- v3 * Rebased
v2 * Rebased * Remove spurious use of diff-flows * Consistently use a space in "OpenFlow 1.4" --- tests/ofproto.at | 461 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 461 insertions(+) diff --git a/tests/ofproto.at b/tests/ofproto.at index c6c090b..e175e7b 100644 --- a/tests/ofproto.at +++ b/tests/ofproto.at @@ -2455,6 +2455,467 @@ NXT_FLOW_MONITOR_RESUMED: OVS_VSWITCHD_STOP AT_CLEANUP +AT_SETUP([ofproto - flow monitoring (OpenFlow 1.4)]) +AT_KEYWORDS([monitor]) +OVS_VSWITCHD_START + +ovs-ofctl -O OpenFlow14 add-flow br0 in_port=0,dl_vlan=123,actions=output:1 + +# Start a monitor watching the flow table and check the initial reply. +ovs-ofctl -O OpenFlow14 monitor br0 watch: --detach --no-chdir --pidfile >monitor.log 2>&1 +AT_CAPTURE_FILE([monitor.log]) +ovs-appctl -t ovs-ofctl ofctl/barrier +AT_CHECK([sed 's/ (xid=0x[[1-9a-fA-F]][[0-9a-fA-F]]*)//' monitor.log], [0], + [OFPST_FLOW_MONITOR reply (OF1.4): + event=INITIAL table=0 cookie=0 in_port=0,dl_vlan=123 actions=output:1 +OFPT_BARRIER_REPLY (OF1.4): +]) + +# Add, delete, and modify some flows and check the updates. +ovs-appctl -t ovs-ofctl ofctl/set-output-file monitor.log +ovs-ofctl -O OpenFlow14 add-flow br0 in_port=0,dl_vlan=124,actions=output:2 +ovs-ofctl -O OpenFlow14 add-flow br0 in_port=0,dl_vlan=123,actions=output:5 +ovs-ofctl -O OpenFlow14 add-flow br0 in_port=0,dl_vlan=123,dl_vlan_pcp=0,actions=output:6 +ovs-ofctl -O OpenFlow14 add-flow br0 in_port=0,dl_vlan=123,dl_vlan_pcp=1,actions=output:7 +ovs-ofctl -O OpenFlow14 add-flow br0 in_port=0,dl_vlan=123,actions=output:8 +ovs-ofctl -O OpenFlow14 add-flow br0 in_port=0,dl_vlan=65535,dl_vlan_pcp=0,actions=output:9 +ovs-ofctl -O OpenFlow14 add-flow br0 in_port=0,dl_vlan=65535,dl_vlan_pcp=1,actions=output:10 +ovs-ofctl -O OpenFlow14 add-flow br0 in_port=0,dl_vlan=65535,actions=output:11 +ovs-ofctl -O OpenFlow14 add-flow br0 in_port=0,dl_vlan=8191,dl_vlan_pcp=0,actions=output:12 +ovs-ofctl -O OpenFlow14 add-flow br0 in_port=0,dl_vlan=8191,dl_vlan_pcp=1,actions=output:13 +ovs-ofctl -O OpenFlow14 add-flow br0 in_port=0,dl_vlan=8191,actions=output:14 +ovs-ofctl -O OpenFlow14 add-flow br0 in_port=0,dl_vlan=0,dl_vlan_pcp=0,actions=output:15 +ovs-ofctl -O OpenFlow14 add-flow br0 in_port=0,dl_vlan=0,dl_vlan_pcp=1,actions=output:16 +ovs-ofctl -O OpenFlow14 add-flow br0 in_port=0,dl_vlan=0,actions=output:17 +ovs-ofctl -O OpenFlow14 add-flow br0 in_port=0,dl_vlan=0,dl_vlan_pcp=0,actions=output:18 +ovs-ofctl -O OpenFlow14 add-flow br0 in_port=0,dl_vlan=0,dl_vlan_pcp=1,actions=output:19 +ovs-ofctl -O OpenFlow14 add-flow br0 in_port=0,dl_vlan=0,actions=output:20 +ovs-ofctl -O OpenFlow14 add-flow br0 in_port=0,dl_vlan_pcp=0,actions=output:21 +ovs-ofctl -O OpenFlow14 add-flow br0 in_port=0,dl_vlan_pcp=1,actions=output:22 +ovs-ofctl -O OpenFlow14 add-flow br0 in_port=0,actions=output:23 +ovs-ofctl -O OpenFlow14 mod-flows br0 dl_vlan=123,actions=output:3 +ovs-ofctl -O OpenFlow14 del-flows br0 dl_vlan=123 +ovs-ofctl -O OpenFlow14 del-flows br0 +ovs-appctl -t ovs-ofctl ofctl/barrier +AT_CHECK([sed 's/ (xid=0x[[1-9a-fA-F]][[0-9a-fA-F]]*)//' monitor.log | multiline_sort], [0], +[OFPST_FLOW_MONITOR reply (OF1.4) (xid=0x0): + event=ADDED table=0 cookie=0 in_port=0,dl_vlan=124 actions=output:2 +OFPST_FLOW_MONITOR reply (OF1.4) (xid=0x0): + event=ADDED table=0 cookie=0 in_port=0,dl_vlan=123 actions=output:5 +OFPST_FLOW_MONITOR reply (OF1.4) (xid=0x0): + event=ADDED table=0 cookie=0 in_port=0,dl_vlan=123,dl_vlan_pcp=0 actions=output:6 +OFPST_FLOW_MONITOR reply (OF1.4) (xid=0x0): + event=ADDED table=0 cookie=0 in_port=0,dl_vlan=123,dl_vlan_pcp=1 actions=output:7 +OFPST_FLOW_MONITOR reply (OF1.4) (xid=0x0): + event=ADDED table=0 cookie=0 in_port=0,dl_vlan=123 actions=output:8 +OFPST_FLOW_MONITOR reply (OF1.4) (xid=0x0): + event=ADDED table=0 cookie=0 in_port=0,dl_vlan=0,dl_vlan_pcp=0 actions=output:9 +OFPST_FLOW_MONITOR reply (OF1.4) (xid=0x0): + event=ADDED table=0 cookie=0 in_port=0,dl_vlan=0,dl_vlan_pcp=1 actions=output:10 +OFPST_FLOW_MONITOR reply (OF1.4) (xid=0x0): + event=ADDED table=0 cookie=0 in_port=0,vlan_tci=0x0000/0x1fff actions=output:11 +OFPST_FLOW_MONITOR reply (OF1.4) (xid=0x0): + event=ADDED table=0 cookie=0 in_port=0,dl_vlan=4095,dl_vlan_pcp=0 actions=output:12 +OFPST_FLOW_MONITOR reply (OF1.4) (xid=0x0): + event=ADDED table=0 cookie=0 in_port=0,dl_vlan=4095,dl_vlan_pcp=1 actions=output:13 +OFPST_FLOW_MONITOR reply (OF1.4) (xid=0x0): + event=ADDED table=0 cookie=0 in_port=0,dl_vlan=4095 actions=output:14 +OFPST_FLOW_MONITOR reply (OF1.4) (xid=0x0): + event=ADDED table=0 cookie=0 in_port=0,dl_vlan=0,dl_vlan_pcp=0 actions=output:15 +OFPST_FLOW_MONITOR reply (OF1.4) (xid=0x0): + event=ADDED table=0 cookie=0 in_port=0,dl_vlan=0,dl_vlan_pcp=1 actions=output:16 +OFPST_FLOW_MONITOR reply (OF1.4) (xid=0x0): + event=ADDED table=0 cookie=0 in_port=0,dl_vlan=0 actions=output:17 +OFPST_FLOW_MONITOR reply (OF1.4) (xid=0x0): + event=ADDED table=0 cookie=0 in_port=0,dl_vlan=0,dl_vlan_pcp=0 actions=output:18 +OFPST_FLOW_MONITOR reply (OF1.4) (xid=0x0): + event=ADDED table=0 cookie=0 in_port=0,dl_vlan=0,dl_vlan_pcp=1 actions=output:19 +OFPST_FLOW_MONITOR reply (OF1.4) (xid=0x0): + event=ADDED table=0 cookie=0 in_port=0,dl_vlan=0 actions=output:20 +OFPST_FLOW_MONITOR reply (OF1.4) (xid=0x0): + event=ADDED table=0 cookie=0 in_port=0,dl_vlan_pcp=0 actions=output:21 +OFPST_FLOW_MONITOR reply (OF1.4) (xid=0x0): + event=ADDED table=0 cookie=0 in_port=0,dl_vlan_pcp=1 actions=output:22 +OFPST_FLOW_MONITOR reply (OF1.4) (xid=0x0): + event=ADDED table=0 cookie=0 in_port=0 actions=output:23 +OFPST_FLOW_MONITOR reply (OF1.4) (xid=0x0): + event=MODIFIED table=0 cookie=0 in_port=0,dl_vlan=123 actions=output:3 + event=MODIFIED table=0 cookie=0 in_port=0,dl_vlan=123,dl_vlan_pcp=0 actions=output:3 + event=MODIFIED table=0 cookie=0 in_port=0,dl_vlan=123,dl_vlan_pcp=1 actions=output:3 +OFPST_FLOW_MONITOR reply (OF1.4) (xid=0x0): + event=REMOVED reason=delete table=0 cookie=0 in_port=0,dl_vlan=123 actions=output:3 + event=REMOVED reason=delete table=0 cookie=0 in_port=0,dl_vlan=123,dl_vlan_pcp=0 actions=output:3 + event=REMOVED reason=delete table=0 cookie=0 in_port=0,dl_vlan=123,dl_vlan_pcp=1 actions=output:3 +OFPST_FLOW_MONITOR reply (OF1.4) (xid=0x0): + event=REMOVED reason=delete table=0 cookie=0 in_port=0 actions=output:23 + event=REMOVED reason=delete table=0 cookie=0 in_port=0,dl_vlan=0 actions=output:20 + event=REMOVED reason=delete table=0 cookie=0 in_port=0,dl_vlan=0,dl_vlan_pcp=0 actions=output:18 + event=REMOVED reason=delete table=0 cookie=0 in_port=0,dl_vlan=0,dl_vlan_pcp=1 actions=output:19 + event=REMOVED reason=delete table=0 cookie=0 in_port=0,dl_vlan=124 actions=output:2 + event=REMOVED reason=delete table=0 cookie=0 in_port=0,dl_vlan=4095 actions=output:14 + event=REMOVED reason=delete table=0 cookie=0 in_port=0,dl_vlan=4095,dl_vlan_pcp=0 actions=output:12 + event=REMOVED reason=delete table=0 cookie=0 in_port=0,dl_vlan=4095,dl_vlan_pcp=1 actions=output:13 + event=REMOVED reason=delete table=0 cookie=0 in_port=0,dl_vlan_pcp=0 actions=output:21 + event=REMOVED reason=delete table=0 cookie=0 in_port=0,dl_vlan_pcp=1 actions=output:22 + event=REMOVED reason=delete table=0 cookie=0 in_port=0,vlan_tci=0x0000/0x1fff actions=output:11 +OFPT_BARRIER_REPLY (OF1.4): +]) + +# Check that our own changes are reported as full updates. +ovs-appctl -t ovs-ofctl ofctl/set-output-file monitor.log +ovs-ofctl -O OpenFlow14 add-flow br0 in_port=1,actions=output:2 +ovs-ofctl -O OpenFlow14 add-flow br0 in_port=2,actions=output:1 +ovs-appctl -t ovs-ofctl ofctl/barrier +AT_CHECK([ovs-appctl -t ovs-ofctl ofctl/send "\ +05 0e 00 38 12 34 56 78 00 00 00 00 00 00 00 00 \ +00 00 00 00 00 00 00 00 00 03 00 00 00 00 00 00 \ +ff ff ff ff ff ff ff ff ff ff ff ff 00 00 00 00 \ +00 01 00 04 00 00 00 00 \ +"], [0], [sent +]) +ovs-appctl -t ovs-ofctl ofctl/barrier +AT_CHECK([ovs-ofctl -O OpenFlow14 dump-flows br0 | ofctl_strip], [0], +[OFPST_FLOW reply (OF1.4): +]) +AT_CHECK([sed 's/ (xid=0x[[1-9a-fA-F]][[0-9a-fA-F]]*)//' monitor.log | multiline_sort], [0], +[OFPST_FLOW_MONITOR reply (OF1.4) (xid=0x0): + event=ADDED table=0 cookie=0 in_port=1 actions=output:2 +OFPST_FLOW_MONITOR reply (OF1.4) (xid=0x0): + event=ADDED table=0 cookie=0 in_port=2 actions=output:1 +OFPT_BARRIER_REPLY (OF1.4): +send: OFPT_FLOW_MOD (OF1.4): DEL priority=0 actions=drop +OFPST_FLOW_MONITOR reply (OF1.4) (xid=0x0): + event=REMOVED reason=delete table=0 cookie=0 in_port=1 actions=output:2 + event=REMOVED reason=delete table=0 cookie=0 in_port=2 actions=output:1 +OFPT_BARRIER_REPLY (OF1.4): +]) + +ovs-appctl -t ovs-ofctl exit +OVS_VSWITCHD_STOP +AT_CLEANUP + +AT_SETUP([ofproto - flow monitoring with out_port (OpenFlow 1.4)]) +AT_KEYWORDS([monitor]) +OVS_VSWITCHD_START + +AT_DATA([flows.txt], [dnl +in_port=0,dl_vlan=121,actions=output:1 +in_port=0,dl_vlan=122,actions=output:1 +in_port=0,dl_vlan=123,actions=output:2 +]) +AT_CHECK([ovs-ofctl -O OpenFlow14 -vwarn add-flows br0 flows.txt]) + +# Start a monitor watching the flow table and check the initial reply. +ovs-ofctl -O OpenFlow14 monitor br0 watch:out_port=2 --detach --no-chdir --pidfile >monitor.log 2>&1 +AT_CAPTURE_FILE([monitor.log]) +ovs-appctl -t ovs-ofctl ofctl/barrier +AT_CHECK([sed 's/ (xid=0x[[1-9a-fA-F]][[0-9a-fA-F]]*)//' monitor.log], [0], + [OFPST_FLOW_MONITOR reply (OF1.4): + event=INITIAL table=0 cookie=0 in_port=0,dl_vlan=123 actions=output:2 +OFPT_BARRIER_REPLY (OF1.4): +]) + +ovs-appctl -t ovs-ofctl ofctl/set-output-file monitor.log + +# Add, modify flows and check the updates. +ovs-ofctl -O OpenFlow14 mod-flows br0 dl_vlan=121,actions=drop +ovs-ofctl -O OpenFlow14 mod-flows br0 dl_vlan=122,actions=output:1,output:2 +ovs-appctl -t ovs-ofctl ofctl/barrier + +ovs-ofctl -O OpenFlow14 mod-flows br0 dl_vlan=123,actions=output:1,output:2 +ovs-appctl -t ovs-ofctl ofctl/barrier + +ovs-ofctl -O OpenFlow14 mod-flows br0 dl_vlan=122,actions=output:1 +ovs-appctl -t ovs-ofctl ofctl/barrier +ovs-ofctl -O OpenFlow14 mod-flows br0 dl_vlan=123,actions=output:2 +ovs-appctl -t ovs-ofctl ofctl/barrier + +AT_CHECK([sed 's/ (xid=0x[[1-9a-fA-F]][[0-9a-fA-F]]*)//' monitor.log], [0], +[OFPST_FLOW_MONITOR reply (OF1.4) (xid=0x0): + event=MODIFIED table=0 cookie=0 in_port=0,dl_vlan=122 actions=output:1,output:2 +OFPT_BARRIER_REPLY (OF1.4): +OFPST_FLOW_MONITOR reply (OF1.4) (xid=0x0): + event=MODIFIED table=0 cookie=0 in_port=0,dl_vlan=123 actions=output:1,output:2 +OFPT_BARRIER_REPLY (OF1.4): +OFPST_FLOW_MONITOR reply (OF1.4) (xid=0x0): + event=MODIFIED table=0 cookie=0 in_port=0,dl_vlan=122 actions=output:1 +OFPT_BARRIER_REPLY (OF1.4): +OFPST_FLOW_MONITOR reply (OF1.4) (xid=0x0): + event=MODIFIED table=0 cookie=0 in_port=0,dl_vlan=123 actions=output:2 +OFPT_BARRIER_REPLY (OF1.4): +]) + +ovs-appctl -t ovs-ofctl exit +OVS_VSWITCHD_STOP +AT_CLEANUP + +AT_SETUP([ofproto - flow monitoring with out_group (OpenFlow 1.4)]) +AT_KEYWORDS([monitor]) +OVS_VSWITCHD_START + +AT_DATA([groups.txt], [dnl +group_id=1,type=all,bucket=output:1 +group_id=2,type=all,bucket=output:2 +]) +AT_CHECK([ovs-ofctl -O OpenFlow14 -vwarn add-groups br0 groups.txt]) + +AT_DATA([flows.txt], [dnl +in_port=0,dl_vlan=121,actions=group:1 +in_port=0,dl_vlan=122,actions=group:1 +in_port=0,dl_vlan=123,actions=group:2 +]) +AT_CHECK([ovs-ofctl -O OpenFlow14 -vwarn add-flows br0 flows.txt]) + +# Start a monitor watching the flow table and check the initial reply. +ovs-ofctl -O OpenFlow14 monitor br0 watch:out_group=2 --detach --no-chdir --pidfile >monitor.log 2>&1 +AT_CAPTURE_FILE([monitor.log]) +ovs-appctl -t ovs-ofctl ofctl/barrier +AT_CHECK([sed 's/ (xid=0x[[1-9a-fA-F]][[0-9a-fA-F]]*)//' monitor.log], [0], + [OFPST_FLOW_MONITOR reply (OF1.4): + event=INITIAL table=0 cookie=0 in_port=0,dl_vlan=123 actions=group:2 +OFPT_BARRIER_REPLY (OF1.4): +]) + +ovs-appctl -t ovs-ofctl ofctl/set-output-file monitor.log + +# Add, modify flows and check the updates. +ovs-ofctl -O OpenFlow14 mod-flows br0 dl_vlan=121,actions=drop +ovs-ofctl -O OpenFlow14 mod-flows br0 dl_vlan=122,actions=group:1,group:2 +ovs-appctl -t ovs-ofctl ofctl/barrier + +ovs-ofctl -O OpenFlow14 mod-flows br0 dl_vlan=123,actions=group:1,group:2 +ovs-appctl -t ovs-ofctl ofctl/barrier + +ovs-ofctl -O OpenFlow14 mod-flows br0 dl_vlan=121,actions=group:1 +ovs-ofctl -O OpenFlow14 mod-flows br0 dl_vlan=122,actions=group:1 +ovs-appctl -t ovs-ofctl ofctl/barrier +ovs-ofctl -O OpenFlow14 mod-flows br0 dl_vlan=123,actions=group:2 +ovs-appctl -t ovs-ofctl ofctl/barrier + +ovs-ofctl -O OpenFlow14 del-groups br0 group_id=2 +ovs-appctl -t ovs-ofctl ofctl/barrier + +AT_CHECK([sed 's/ (xid=0x[[1-9a-fA-F]][[0-9a-fA-F]]*)//' monitor.log], [0], +[OFPST_FLOW_MONITOR reply (OF1.4) (xid=0x0): + event=MODIFIED table=0 cookie=0 in_port=0,dl_vlan=122 actions=group:1,group:2 +OFPT_BARRIER_REPLY (OF1.4): +OFPST_FLOW_MONITOR reply (OF1.4) (xid=0x0): + event=MODIFIED table=0 cookie=0 in_port=0,dl_vlan=123 actions=group:1,group:2 +OFPT_BARRIER_REPLY (OF1.4): +OFPST_FLOW_MONITOR reply (OF1.4) (xid=0x0): + event=MODIFIED table=0 cookie=0 in_port=0,dl_vlan=122 actions=group:1 +OFPT_BARRIER_REPLY (OF1.4): +OFPST_FLOW_MONITOR reply (OF1.4) (xid=0x0): + event=MODIFIED table=0 cookie=0 in_port=0,dl_vlan=123 actions=group:2 +OFPT_BARRIER_REPLY (OF1.4): +OFPST_FLOW_MONITOR reply (OF1.4) (xid=0x0): + event=REMOVED reason=group_delete table=0 cookie=0 in_port=0,dl_vlan=123 actions=group:2 +OFPT_BARRIER_REPLY (OF1.4): +]) + +ovs-appctl -t ovs-ofctl exit +OVS_VSWITCHD_STOP +AT_CLEANUP + +AT_SETUP([ofproto - flow monitoring with !own (OpenFlow 1.4)]) +AT_KEYWORDS([monitor]) +OVS_VSWITCHD_START + +ovs-ofctl -O OpenFlow14 add-flow br0 in_port=0,dl_vlan=123,actions=output:1 + +# Start a monitor watching the flow table and check the initial reply. +ovs-ofctl -O OpenFlow14 monitor br0 watch:\!own --detach --no-chdir --pidfile >monitor.log 2>&1 +AT_CAPTURE_FILE([monitor.log]) +ovs-appctl -t ovs-ofctl ofctl/barrier +AT_CHECK([sed 's/ (xid=0x[[1-9a-fA-F]][[0-9a-fA-F]]*)//' monitor.log], [0], + [OFPST_FLOW_MONITOR reply (OF1.4): + event=INITIAL table=0 cookie=0 in_port=0,dl_vlan=123 actions=output:1 +OFPT_BARRIER_REPLY (OF1.4): +]) + +# Check that our own changes are reported as abbreviations. +ovs-appctl -t ovs-ofctl ofctl/set-output-file monitor.log +ovs-ofctl -O OpenFlow14 add-flow br0 in_port=1,actions=output:2 +ovs-ofctl -O OpenFlow14 add-flow br0 in_port=2,actions=output:1 +ovs-appctl -t ovs-ofctl ofctl/barrier +AT_CHECK([ovs-appctl -t ovs-ofctl ofctl/send "\ +05 0e 00 38 12 34 56 78 00 00 00 00 00 00 00 00 \ +00 00 00 00 00 00 00 00 00 03 00 00 00 00 00 00 \ +ff ff ff ff ff ff ff ff ff ff ff ff 00 00 00 00 \ +00 01 00 04 00 00 00 00 \ +"], [0], [sent +]) +ovs-appctl -t ovs-ofctl ofctl/barrier +AT_CHECK([ovs-ofctl -O OpenFlow14 dump-flows br0 | ofctl_strip], [0], [OFPST_FLOW reply (OF1.4): +]) +AT_CHECK([sed 's/ (xid=0x[[1-9a-fA-F]][[0-9a-fA-F]]*)//' monitor.log], [0], +[OFPST_FLOW_MONITOR reply (OF1.4) (xid=0x0): + event=ADDED table=0 cookie=0 in_port=1 actions=output:2 +OFPST_FLOW_MONITOR reply (OF1.4) (xid=0x0): + event=ADDED table=0 cookie=0 in_port=2 actions=output:1 +OFPT_BARRIER_REPLY (OF1.4): +send: OFPT_FLOW_MOD (OF1.4): DEL priority=0 actions=drop +OFPST_FLOW_MONITOR reply (OF1.4) (xid=0x0): + event=ABBREV xid=0x12345678 +OFPT_BARRIER_REPLY (OF1.4): +]) + +ovs-appctl -t ovs-ofctl exit +OVS_VSWITCHD_STOP +AT_CLEANUP + +AT_SETUP([ofproto - flow monitoring with !other (OpenFlow 1.4)]) +AT_KEYWORDS([monitor]) +OVS_VSWITCHD_START + +ovs-ofctl -O OpenFlow14 add-flow br0 in_port=0,dl_vlan=123,actions=output:1 + +# Start a monitor watching the flow table and check the initial reply. +ovs-ofctl -O OpenFlow14 monitor br0 watch:\!other --detach --no-chdir --pidfile >monitor.log 2>&1 +AT_CAPTURE_FILE([monitor.log]) +ovs-appctl -t ovs-ofctl ofctl/barrier +AT_CHECK([sed 's/ (xid=0x[[1-9a-fA-F]][[0-9a-fA-F]]*)//' monitor.log], [0], + [OFPST_FLOW_MONITOR reply (OF1.4): + event=INITIAL table=0 cookie=0 in_port=0,dl_vlan=123 actions=output:1 +OFPT_BARRIER_REPLY (OF1.4): +]) + +# Check that our own changes are reported in full +# and that changes by other controllers are not reported. +ovs-appctl -t ovs-ofctl ofctl/set-output-file monitor.log +ovs-ofctl -O OpenFlow14 add-flow br0 in_port=1,actions=output:2 +ovs-ofctl -O OpenFlow14 add-flow br0 in_port=2,actions=output:1 +ovs-appctl -t ovs-ofctl ofctl/barrier +AT_CHECK([ovs-appctl -t ovs-ofctl ofctl/send "\ +05 0e 00 38 12 34 56 78 00 00 00 00 00 00 00 00 \ +00 00 00 00 00 00 00 00 00 03 00 00 00 00 00 00 \ +ff ff ff ff ff ff ff ff ff ff ff ff 00 00 00 00 \ +00 01 00 04 00 00 00 00 \ +"], [0], [sent +]) +ovs-appctl -t ovs-ofctl ofctl/barrier +AT_CHECK([ovs-ofctl -O OpenFlow14 dump-flows br0 | ofctl_strip], [0], +[OFPST_FLOW reply (OF1.4): +]) +AT_CHECK([sed 's/ (xid=0x[[1-9a-fA-F]][[0-9a-fA-F]]*)//' monitor.log | multiline_sort], [0], +[OFPT_BARRIER_REPLY (OF1.4): +send: OFPT_FLOW_MOD (OF1.4): DEL priority=0 actions=drop +OFPST_FLOW_MONITOR reply (OF1.4) (xid=0x0): + event=REMOVED reason=delete table=0 cookie=0 in_port=0,dl_vlan=123 actions=output:1 + event=REMOVED reason=delete table=0 cookie=0 in_port=1 actions=output:2 + event=REMOVED reason=delete table=0 cookie=0 in_port=2 actions=output:1 +OFPT_BARRIER_REPLY (OF1.4): +]) + +ovs-appctl -t ovs-ofctl exit +OVS_VSWITCHD_STOP +AT_CLEANUP + +AT_SETUP([ofproto - flow monitoring pause and resume (OpenFlow 1.4)]) +AT_KEYWORDS([monitor]) + +# The maximum socket receive buffer size is important for this test, which +# tests behavior when the receive buffer overflows. +if test -e /proc/sys/net/core/rmem_max; then + # Linux + rmem_max=`cat /proc/sys/net/core/rmem_max` +elif rmem_max=`sysctl -n net.inet.tcp.recvbuf_max 2>/dev/null`; then + : # FreeBSD, NetBSD +else + # Don't know how to get maximum socket receive buffer on this OS + AT_SKIP_IF([:]) +fi +# Calculate the total amount of queuing: rmem_max in the kernel, 128 kB +# in ofproto sending userspace (see ofmonitor_flush() in connmgr.c). +queue_size=`expr $rmem_max + 128 \* 1024` +echo rmem_max=$rmem_max queue_size=$queue_size + +# If there's too much queuing skip the test to avoid timing out. +AT_SKIP_IF([test $rmem_max -gt 1048576]) + +# Each flow update message takes up at least 48 bytes of space in queues +# and in practice more than that. +n_msgs=`expr $queue_size / 48` +echo n_msgs=$n_msgs + +OVS_VSWITCHD_START + +# Start a monitor watching the flow table, then make it block. +ON_EXIT([kill `cat ovs-ofctl.pid`]) +ovs-ofctl -O OpenFlow14 monitor br0 watch: --detach --no-chdir --pidfile >monitor.log 2>&1 +AT_CAPTURE_FILE([monitor.log]) +ovs-appctl -t ovs-ofctl ofctl/block + +# Add $n_msgs flows. +(echo "in_port=2,cookie=2,actions=drop" +${PERL} -e ' + for ($i = 0; $i < '$n_msgs'; $i++) { + print "cookie=1,reg1=$i,actions=drop\n"; + } +') > flows.txt +AT_CHECK([ovs-ofctl -O OpenFlow14 add-flows br0 flows.txt]) +AT_CHECK([ovs-ofctl -O OpenFlow14 add-flow br0 in_port=1,cookie=3,actions=drop]) +AT_CHECK([ovs-ofctl -O OpenFlow14 mod-flows br0 in_port=2,actions=output:2]) +AT_CHECK([ovs-ofctl -O OpenFlow14 del-flows br0 cookie=1/-1]) + +ovs-appctl -t ovs-ofctl ofctl/unblock + +# Wait for the connection resumed. +# A barrier doesn't work for this purpose. +# https://www.mail-archive.com/dev@openvswitch.org/msg27013.html +# https://www.mail-archive.com/dev@openvswitch.org/msg27675.html +OVS_WAIT_UNTIL([grep event=RESUMED monitor.log]) + +ovs-appctl -t ovs-ofctl exit + +# Check that the flow monitor reported the same number of flows +# added and deleted, but fewer than we actually added and deleted. +adds=`grep -c 'ADDED.*reg1=' monitor.log` +removes=`grep -c 'REMOVED.*reg1=' monitor.log` +echo adds=$adds removes=$removes +AT_CHECK([test $adds -gt 100 && test $adds -lt $n_msgs]) +AT_CHECK([test $adds = $removes]) + +# Check that the flow monitor reported everything in the expected order: +# +# event=ADDED table=0 cookie=0x1 reg1=0x22 +# ... +# event=PAUSED +# ... +# event=REMOVED reason=delete table=0 cookie=0x1 reg1=0x22 +# ... +# event=ADDED table=0 cookie=0x3 in_port=1 +# event=MODIFIED table=0 cookie=0x2 in_port=2 actions=output:2 +# event=RESUMED +# +# except that, between the PAUSED and RESUMED, the order of the ADDED +# and MODIFIED lines lines depends on hash order, that is, it varies +# as we change the hash function or change architecture. Therefore, +# we use a couple of tests below to accept both orders. +AT_CHECK([ofctl_strip < monitor.log | sed -n -e ' +/reg1=0x22$/p +/cookie=0x[[23]]/p +/event=RESUMED/p +/event=PAUSED/p +' > monitor.log.subset]) +AT_CHECK([grep -v MODIFIED monitor.log.subset], [0], [dnl + event=ADDED table=0 cookie=0x2 in_port=2 + event=ADDED table=0 cookie=0x1 reg1=0x22 + event=PAUSED + event=REMOVED reason=delete table=0 cookie=0x1 reg1=0x22 + event=ADDED table=0 cookie=0x3 in_port=1 + event=RESUMED +]) +AT_CHECK([grep -v ADDED monitor.log.subset], [0], [dnl + event=PAUSED + event=REMOVED reason=delete table=0 cookie=0x1 reg1=0x22 + event=MODIFIED table=0 cookie=0x2 in_port=2 actions=output:2 + event=RESUMED +]) + +OVS_VSWITCHD_STOP +AT_CLEANUP + AT_SETUP([ofproto - event filtering (OpenFlow 1.3)]) AT_KEYWORDS([monitor]) OVS_VSWITCHD_START -- 2.0.0.rc2 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev