[ovs-dev] [PATCH v2 31/47] ofproto: OF1.4 flow monitor tests
Simon Horman
horms at verge.net.au
Tue Jun 10 10:27:35 UTC 2014
Signed-off-by: Simon Horman <horms at verge.net.au>
---
v2
* Rebased
* Remove spurious use of diff-flows
* Consistently use a space in "OpenFlow 1.4"
---
tests/ofproto.at | 468 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 464 insertions(+), 4 deletions(-)
diff --git a/tests/ofproto.at b/tests/ofproto.at
index 5ba23e0..4240b98 100644
--- a/tests/ofproto.at
+++ b/tests/ofproto.at
@@ -2088,7 +2088,7 @@ OFPT_BARRIER_REPLY (OF1.2):
OVS_VSWITCHD_STOP
AT_CLEANUP
-AT_SETUP([ofproto - flow monitoring])
+AT_SETUP([ofproto - flow monitoring (OpenFlow 1.0)])
AT_KEYWORDS([monitor])
OVS_VSWITCHD_START
@@ -2224,7 +2224,7 @@ ovs-appctl -t ovs-ofctl exit
OVS_VSWITCHD_STOP
AT_CLEANUP
-AT_SETUP([ofproto - flow monitoring with !own])
+AT_SETUP([ofproto - flow monitoring with !own (OpenFlow 1.0)])
AT_KEYWORDS([monitor])
OVS_VSWITCHD_START
@@ -2267,7 +2267,7 @@ ovs-appctl -t ovs-ofctl exit
OVS_VSWITCHD_STOP
AT_CLEANUP
-AT_SETUP([ofproto - flow monitoring with out_port])
+AT_SETUP([ofproto - flow monitoring with out_port (OpenFlow 1.0)])
AT_KEYWORDS([monitor])
OVS_VSWITCHD_START
@@ -2319,7 +2319,7 @@ ovs-appctl -t ovs-ofctl exit
OVS_VSWITCHD_STOP
AT_CLEANUP
-AT_SETUP([ofproto - flow monitoring pause and resume])
+AT_SETUP([ofproto - flow monitoring pause and resume (OpenFlow 1.0)])
AT_KEYWORDS([monitor])
# The maximum socket receive buffer size is important for this test, which
@@ -2425,6 +2425,466 @@ 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 | ${PERL} $srcdir/multiline-sort.pl], [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 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 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=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 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 | ${PERL} $srcdir/multiline-sort.pl], [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=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 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 as abbreviations
+# 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 | ${PERL} $srcdir/multiline-sort.pl], [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=ABBREV xid=0x12345678
+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
More information about the dev
mailing list