]> git.proxmox.com Git - ovs.git/blame - tests/ofproto-dpif.at
ovs-vsctl: reconnect to the database if connection was dropped
[ovs.git] / tests / ofproto-dpif.at
CommitLineData
29901626
BP
1AT_BANNER([ofproto-dpif])
2
631486bd
AZ
3# Strips out uninteresting parts of flow output, as well as parts
4# that vary from one run to another (e.g., timing and bond actions).
5m4_define([STRIP_USED], [[sed '
6 s/used:[0-9]*\.[0-9]*/used:0.0/
7' | sort]])
8m4_define([STRIP_XOUT], [[sed '
9 s/used:[0-9]*\.[0-9]*/used:0.0/
10 s/actions:.*/actions: <del>/
11 s/packets:[0-9]*/packets:0/
12 s/bytes:[0-9]*/bytes:0/
13' | sort]])
14
15AT_SETUP([ofproto-dpif - dummy interface])
16# Create br0 with interfaces p1 and p7
17# and br1 with interfaces p2 and p8
18# with p1 and p2 connected via unix domain socket
19OVS_VSWITCHD_START(
20 [add-port br0 p1 -- set interface p1 type=dummy options:pstream=punix:$OVS_RUNDIR/p0.sock ofport_request=1 -- \
21 add-port br0 p7 -- set interface p7 ofport_request=7 type=dummy -- \
22 add-br br1 -- \
23 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
24 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
25 fail-mode=secure -- \
26 add-port br1 p2 -- set interface p2 type=dummy options:stream=unix:$OVS_RUNDIR/p0.sock ofport_request=2 -- \
27 add-port br1 p8 -- set interface p8 ofport_request=8 type=dummy --])
28
29AT_CHECK([ovs-ofctl add-flow br0 action=normal])
30AT_CHECK([ovs-ofctl add-flow br1 action=normal])
31ovs-appctl time/stop
32ovs-appctl time/warp 5000
33AT_CHECK([ovs-appctl netdev-dummy/receive p7 'in_port(7),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
34AT_CHECK([ovs-appctl netdev-dummy/receive p8 'in_port(8),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.3,dst=10.0.0.4,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
35ovs-appctl time/warp 100
0070679f 36sleep 1 # wait for forwarders process packets
631486bd
AZ
37
38AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
39skb_priority(0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.3/0.0.0.0,dst=10.0.0.4/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
40skb_priority(0),in_port(7),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
41])
42
43AT_CHECK([ovs-appctl dpif/dump-flows br1 | STRIP_XOUT], [0], [dnl
44skb_priority(0),in_port(2),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
45skb_priority(0),in_port(8),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.3/0.0.0.0,dst=10.0.0.4/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
46])
47OVS_VSWITCHD_STOP
48AT_CLEANUP
49
29901626 50AT_SETUP([ofproto-dpif - resubmit])
023e1e0a 51OVS_VSWITCHD_START
f7b8e494
JP
52ADD_OF_PORTS([br0], [1], [10], [11], [12], [13], [14], [15],
53 [16], [17], [18], [19], [20], [21])
29901626
BP
54AT_DATA([flows.txt], [dnl
55table=0 in_port=1 priority=1000 icmp actions=output(10),resubmit(2),output(19),resubmit(3),output(21)
56table=0 in_port=2 priority=1500 icmp actions=output(11),resubmit(,1),output(16),resubmit(2,1),output(18)
57table=0 in_port=3 priority=2000 icmp actions=output(20)
58table=1 in_port=1 priority=1000 icmp actions=output(12),resubmit(4,1),output(13),resubmit(3),output(15)
59table=1 in_port=2 priority=1500 icmp actions=output(17),resubmit(,2)
60table=1 in_port=3 priority=1500 icmp actions=output(14),resubmit(,2)
61])
62AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
31a19d69 63AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
29901626
BP
64AT_CHECK([tail -1 stdout], [0],
65 [Datapath actions: 10,11,12,13,14,15,16,17,18,19,20,21
66])
023e1e0a 67OVS_VSWITCHD_STOP
29901626 68AT_CLEANUP
58a89177 69
55599423
JR
70AT_SETUP([ofproto-dpif - goto table])
71OVS_VSWITCHD_START
72ADD_OF_PORTS([br0], [1], [10], [11])
73echo "table=0 in_port=1 actions=output(10),goto_table(1)" > flows.txt
4468099e
EJ
74for i in `seq 1 63`; do echo "table=$i actions=goto_table($(($i+1)))"; done >> flows.txt
75echo "table=64 actions=output(11)" >> flows.txt
55599423
JR
76AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
77AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
78AT_CHECK([tail -1 stdout], [0],
79 [Datapath actions: 10,11
80])
81OVS_VSWITCHD_STOP
82AT_CLEANUP
83
7fdb60a7
SH
84AT_SETUP([ofproto-dpif - write actions])
85OVS_VSWITCHD_START
86ADD_OF_PORTS([br0], [1], [10], [11], [12], [13])
87AT_DATA([flows.txt], [dnl
88table=0 in_port=1,ip actions=output(10),write_actions(set_field:192.168.3.90->ip_src,output(12)),goto_table(1)
89table=1 ip actions=write_actions(output(13)),goto_table(2)
90table=2 ip actions=set_field:192.168.3.91->ip_src,output(11)
91])
92AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
93AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
94AT_CHECK([tail -1 stdout], [0],
95 [Datapath actions: 10,set(ipv4(src=192.168.3.91,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no)),11,set(ipv4(src=192.168.3.90,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no)),13
96])
97OVS_VSWITCHD_STOP
98AT_CLEANUP
99
100AT_SETUP([ofproto-dpif - clear actions])
101OVS_VSWITCHD_START
102ADD_OF_PORTS([br0], [1], [10], [11], [12])
103AT_DATA([flows.txt], [dnl
104table=0 in_port=1,ip actions=output(10),write_actions(set_field:192.168.3.90->ip_src,output(12)),goto_table(1)
105table=1 ip actions=set_field:192.168.3.91->ip_src,output(11),clear_actions
106])
107AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
108AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
109AT_CHECK([tail -1 stdout], [0],
110 [Datapath actions: 10,set(ipv4(src=192.168.3.91,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no)),11
111])
112OVS_VSWITCHD_STOP
113AT_CLEANUP
114
f4fb341b
SH
115AT_SETUP([ofproto-dpif - all group in action list])
116OVS_VSWITCHD_START
117ADD_OF_PORTS([br0], [1], [10], [11])
118AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=all,bucket=output:10,set_field:192.168.3.90->ip_src,bucket=output:11'])
119AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=group:1234'])
120AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
121AT_CHECK([tail -1 stdout], [0],
122 [Datapath actions: set(ipv4(src=192.168.3.90,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no)),10,set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no)),11
123])
124OVS_VSWITCHD_STOP
125AT_CLEANUP
126
127AT_SETUP([ofproto-dpif - indirect group in action list])
128OVS_VSWITCHD_START
129ADD_OF_PORTS([br0], [1], [10])
130AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 group_id=1234,type=indirect,bucket=output:10])
131AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=group:1234'])
132AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
133AT_CHECK([tail -1 stdout], [0],
134 [Datapath actions: 10
135])
136OVS_VSWITCHD_STOP
137AT_CLEANUP
138
139AT_SETUP([ofproto-dpif - all group in action set])
140OVS_VSWITCHD_START
141ADD_OF_PORTS([br0], [1], [10], [11])
142AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=all,bucket=output:10,set_field:192.168.3.90->ip_src,bucket=output:11'])
143AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
144AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
145AT_CHECK([tail -1 stdout], [0],
146 [Datapath actions: set(ipv4(src=192.168.3.90,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no)),10,set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no)),11
147])
148OVS_VSWITCHD_STOP
149AT_CLEANUP
150
151AT_SETUP([ofproto-dpif - indirect group in action set])
152OVS_VSWITCHD_START
153ADD_OF_PORTS([br0], [1], [10])
154AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 group_id=1234,type=indirect,bucket=output:10])
155AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
156AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
157AT_CHECK([tail -1 stdout], [0],
158 [Datapath actions: 10
159])
160OVS_VSWITCHD_STOP
161AT_CLEANUP
162
fe7e5749
SH
163AT_SETUP([ofproto-dpif - select group])
164OVS_VSWITCHD_START
165ADD_OF_PORTS([br0], [1], [10], [11])
166AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=output:10,bucket=output:11'])
167AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
7cb279c2
SH
168
169# Try a bunch of different flows and make sure that they get distributed
170# at least somewhat.
171for d in 0 1 2 3 4 5 6 7 8 9 a b c d e f; do
172 AT_CHECK([ovs-appctl ofproto/trace br0 "in_port=1,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:0$d,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0"], [0], [stdout])
173 tail -1 stdout >> results
174done
175sort results | uniq -c
176AT_CHECK([sort results | uniq], [0],
fe7e5749 177 [Datapath actions: 10
7cb279c2 178Datapath actions: 11
fe7e5749
SH
179])
180OVS_VSWITCHD_STOP
181AT_CLEANUP
182
183AT_SETUP([ofproto-dpif - select group with watch port])
184OVS_VSWITCHD_START
185ADD_OF_PORTS([br0], [1], [10], [11])
186AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=watch_port:10,output:10,bucket=output:11'])
187AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
188AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
189AT_CHECK([tail -1 stdout], [0],
190 [Datapath actions: 11
191])
192OVS_VSWITCHD_STOP
193AT_CLEANUP
194
7cb279c2
SH
195AT_SETUP([ofproto-dpif - select group with weight])
196OVS_VSWITCHD_START
197ADD_OF_PORTS([br0], [1], [10], [11], [12])
125bf01d 198AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=output:10,bucket=output:11,weight=2000,bucket=output:12,weight=0'])
7cb279c2
SH
199AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
200AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
201AT_CHECK([tail -1 stdout], [0],
202 [Datapath actions: 11
203])
204OVS_VSWITCHD_STOP
205AT_CLEANUP
206
dd8cd4b4
SH
207AT_SETUP([ofproto-dpif - fast failover group])
208OVS_VSWITCHD_START
209ADD_OF_PORTS([br0], [1], [10], [11])
210AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=ff,bucket=watch_port:10,output:10,bucket=watch_port:11,output:11'])
211AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
212AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
213AT_CHECK([tail -1 stdout], [0],
214 [Datapath actions: drop
215])
216OVS_VSWITCHD_STOP
217AT_CLEANUP
218
58a89177 219AT_SETUP([ofproto-dpif - registers])
023e1e0a 220OVS_VSWITCHD_START
f7b8e494 221ADD_OF_PORTS([br0], [20], [21], [22], [33], [90])
58a89177
EJ
222AT_DATA([flows.txt], [dnl
223in_port=90 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:91
224in_port=91 actions=resubmit:5,resubmit:6,resubmit:7,resubmit:92
e9358af6
EJ
225in_port=92 actions=resubmit:8,resubmit:9,resubmit:10,resubmit:11,resubmit:93
226in_port=93 actions=resubmit:12,resubmit:13,resubmit:14,resubmit:15
227
58a89177
EJ
228in_port=2 actions=load:0x000db000->NXM_NX_REG0[[]]
229in_port=3 actions=load:0xdea->NXM_NX_REG0[[20..31]]
230in_port=4 actions=load:0xeef->NXM_NX_REG0[[0..11]]
231in_port=5 actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]]
232in_port=6 actions=load:0x22222222->NXM_NX_REG2[[]]
233in_port=7 actions=move:NXM_NX_REG1[[20..31]]->NXM_NX_REG2[[0..11]]
234in_port=8 actions=move:NXM_NX_REG1[[0..11]]->NXM_NX_REG2[[20..31]]
235in_port=9,reg0=0xdeadbeef actions=output:20
236in_port=10,reg1=0xdeadbeef actions=output:21
237in_port=11,reg2=0xeef22dea actions=output:22
e9358af6
EJ
238
239dnl Sanilty check all registers
240in_port=12 actions=load:0x10->NXM_NX_REG0[[]],load:0x11->NXM_NX_REG1[[]],load:0x12->NXM_NX_REG2[[]]
241in_port=13 actions=load:0x13->NXM_NX_REG3[[]],load:0x14->NXM_NX_REG4[[]],load:0x15->NXM_NX_REG5[[]]
242in_port=14 actions=load:0x16->NXM_NX_REG6[[]],load:0x17->NXM_NX_REG7[[]]
243in_port=15,reg0=0x10,reg1=0x11,reg2=0x12,reg3=0x13,reg4=0x14,reg5=0x15,reg6=0x16,reg7=0x17 actions=output:33
bd85dac1 244
58a89177
EJ
245])
246AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
50aa28fd 247AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(90),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
58a89177 248AT_CHECK([tail -1 stdout], [0],
e9358af6 249 [Datapath actions: 20,21,22,33
58a89177 250])
023e1e0a 251OVS_VSWITCHD_STOP
58a89177 252AT_CLEANUP
f694937d 253
bd85dac1
AZ
254AT_SETUP([ofproto-dpif - push-pop])
255OVS_VSWITCHD_START
256ADD_OF_PORTS([br0], [20], [21], [22], [33], [90])
257AT_DATA([flows.txt], [dnl
258in_port=90 actions=load:20->NXM_NX_REG0[[0..7]],load:21->NXM_NX_REG1[[0..7]],load:22->NXM_NX_REG2[[0..7]], load:33->NXM_NX_REG3[[0..7]], push:NXM_NX_REG0[[]], push:NXM_NX_REG1[[0..7]],push:NXM_NX_REG2[[0..15]], push:NXM_NX_REG3[[]], resubmit:2, resubmit:3, resubmit:4, resubmit:5
259in_port=2 actions=pop:NXM_NX_REG0[[0..7]],output:NXM_NX_REG0[[]]
260in_port=3 actions=pop:NXM_NX_REG1[[0..7]],output:NXM_NX_REG1[[]]
261in_port=4 actions=pop:NXM_NX_REG2[[0..15]],output:NXM_NX_REG2[[]]
262in_port=5 actions=pop:NXM_NX_REG3[[]],output:NXM_NX_REG3[[]]
263
264])
265AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
50aa28fd 266AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(90),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
bd85dac1
AZ
267AT_CHECK([tail -1 stdout], [0],
268 [Datapath actions: 33,22,21,20
269])
270OVS_VSWITCHD_STOP
271AT_CLEANUP
272
f694937d 273AT_SETUP([ofproto-dpif - output])
023e1e0a 274OVS_VSWITCHD_START
f7b8e494 275ADD_OF_PORTS([br0], [1], [9], [10], [11], [55], [66], [77], [88])
f694937d 276AT_DATA([flows.txt], [dnl
557323cd 277in_port=1 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:5,resubmit:6,resubmit:7,resubmit:8
f694937d
EJ
278in_port=2 actions=output:9
279in_port=3 actions=load:55->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]],load:66->NXM_NX_REG1[[]]
280in_port=4 actions=output:10,output:NXM_NX_REG0[[]],output:NXM_NX_REG1[[]],output:11
281in_port=5 actions=load:77->NXM_NX_REG0[[0..15]],load:88->NXM_NX_REG0[[16..31]]
282in_port=6 actions=output:NXM_NX_REG0[[0..15]],output:NXM_NX_REG0[[16..31]]
283in_port=7 actions=load:0x110000ff->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]]
557323cd 284in_port=8 actions=1,9,load:9->NXM_OF_IN_PORT[[]],1,9
f694937d
EJ
285])
286AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
50aa28fd 287AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
f694937d 288AT_CHECK([tail -1 stdout], [0],
557323cd 289 [Datapath actions: 9,55,10,55,66,11,77,88,9,1
f694937d 290])
023e1e0a 291OVS_VSWITCHD_STOP
f694937d 292AT_CLEANUP
8e9ce036 293
f0fd1a17
PS
294AT_SETUP([ofproto-dpif - dec_ttl])
295OVS_VSWITCHD_START
f7b8e494 296ADD_OF_PORTS([br0], [1], [2], [3], [4])
f0fd1a17
PS
297AT_DATA([flows.txt], [dnl
298table=0 in_port=1 action=dec_ttl,output:2,resubmit(1,1),output:4
299table=1 in_port=1 action=dec_ttl,output:3
300])
301AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
8249a1fe 302AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=111,tos=0,ttl=2,frag=no)' -generate], [0], [stdout])
6a7e895f 303AT_CHECK([tail -3 stdout], [0],
8249a1fe 304 [Datapath actions: set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=111,tos=0,ttl=1,frag=no)),2,4
6a7e895f
BP
305This flow is handled by the userspace slow path because it:
306 - Sends "packet-in" messages to the OpenFlow controller.
f0fd1a17 307])
8249a1fe 308AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=111,tos=0,ttl=3,frag=no)'], [0], [stdout])
f0fd1a17 309AT_CHECK([tail -1 stdout], [0],
8249a1fe 310 [Datapath actions: set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=111,tos=0,ttl=2,frag=no)),2,set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=111,tos=0,ttl=1,frag=no)),3,4
f0fd1a17 311])
50aa28fd 312AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x86dd),ipv6(src=::1,dst=::2,label=0,proto=10,tclass=0x70,hlimit=128,frag=no)'], [0], [stdout])
f0fd1a17
PS
313AT_CHECK([tail -1 stdout], [0],
314 [Datapath actions: set(ipv6(src=::1,dst=::2,label=0,proto=10,tclass=0x70,hlimit=127,frag=no)),2,set(ipv6(src=::1,dst=::2,label=0,proto=10,tclass=0x70,hlimit=126,frag=no)),3,4
315])
316
982697a4 317AT_CAPTURE_FILE([ofctl_monitor.log])
77a922c7 318AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
8249a1fe 319AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=111,tos=0,ttl=2,frag=no)' -generate], [0], [stdout])
f0fd1a17
PS
320OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
321AT_CHECK([cat ofctl_monitor.log], [0], [dnl
8249a1fe
JR
322NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=34 in_port=1 (via invalid_ttl) data_len=34 (unbuffered)
323ip,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=111,nw_tos=0,nw_ecn=0,nw_ttl=1
f0fd1a17
PS
324])
325OVS_VSWITCHD_STOP
326AT_CLEANUP
327
328
77750738 329AT_SETUP([ofproto-dpif - output, OFPP_NONE ingress port])
e44768b7
JP
330OVS_VSWITCHD_START
331ADD_OF_PORTS([br0], [1], [2])
77750738 332
77750738
JP
333AT_CHECK([ovs-ofctl add-flow br0 action=normal])
334
335# "in_port" defaults to OFPP_NONE if it's not specified.
72d64e33 336flow="icmp,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,icmp_type=8,icmp_code=0"
77750738 337AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
72d64e33
EJ
338AT_CHECK([tail -1 stdout | sed 's/Datapath actions: //' | tr "," "\n" | sort -n], [0], [dnl
3391
3402
341100
342])
77750738
JP
343
344OVS_VSWITCHD_STOP
345AT_CLEANUP
346
8b36f51e 347AT_SETUP([ofproto-dpif - DSCP])
8b36f51e 348OVS_VSWITCHD_START([add-port br0 p1 -- set Interface p1 type=dummy])
72d64e33 349ADD_OF_PORTS([br0], [9])
8b36f51e 350AT_DATA([flows.txt], [dnl
bdda5aca 351actions=output:LOCAL,enqueue:1:1,enqueue:1:2,enqueue:1:2,enqueue:1:1,output:1,mod_nw_tos:0,output:1,output:LOCAL
8b36f51e
EJ
352])
353AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
354AT_CHECK([ovs-vsctl -- \
355 set Port p1 qos=@newqos --\
356 --id=@newqos create QoS type=linux-htb queues=1=@q1,2=@q2 --\
357 --id=@q1 create Queue dscp=1 --\
358 --id=@q2 create Queue dscp=2], [0], [ignore])
50aa28fd 359AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(9),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0xff,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
8b36f51e
EJ
360AT_CHECK([tail -1 stdout], [0],
361 [Datapath actions: dnl
e44768b7 362100,dnl
1b567fb9
AA
363set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0x7,ttl=128,frag=no)),set(skb_priority(0x1)),1,dnl
364set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0xb,ttl=128,frag=no)),set(skb_priority(0x2)),1,dnl
8b36f51e 3651,dnl
1b567fb9
AA
366set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0x7,ttl=128,frag=no)),set(skb_priority(0x1)),1,dnl
367set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0xff,ttl=128,frag=no)),set(skb_priority(0)),1,dnl
8b36f51e 368set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0x3,ttl=128,frag=no)),1,dnl
e44768b7 369100
8b36f51e
EJ
370])
371OVS_VSWITCHD_STOP
372AT_CLEANUP
373
fd19297b 374AT_SETUP([ofproto-dpif - output/flood flags])
f7b8e494
JP
375OVS_VSWITCHD_START
376ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [7])
fd19297b
EJ
377
378AT_DATA([flows.txt], [dnl
a0fbe94a 379in_port=local actions=local,flood
fd19297b
EJ
380in_port=1 actions=flood
381in_port=2 actions=all
bdda5aca
BP
382in_port=3 actions=output:LOCAL,output:1,output:2,output:3,output:4,output:5,output:6,output:7
383in_port=4 actions=enqueue:LOCAL:1,enqueue:1:1,enqueue:2:1,enqueue:3:2,enqueue:4:1,enqueue:5:1,enqueue:6:1,enqueue:7:1
fd19297b
EJ
384])
385AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
386AT_CHECK([ovs-ofctl mod-port br0 5 noforward])
387AT_CHECK([ovs-ofctl mod-port br0 6 noflood])
388
50aa28fd 389AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(100),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
a0fbe94a
AR
390AT_CHECK([tail -1 stdout \
391| sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
3921
3932
3943
3954
3967
397])
398
50aa28fd 399AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
fd19297b
EJ
400AT_CHECK([tail -1 stdout \
401| sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
e44768b7 402100
fd19297b
EJ
4032
4043
4054
4067
407])
408
50aa28fd 409AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(2),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
fd19297b
EJ
410AT_CHECK([tail -1 stdout \
411| sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
fd19297b 4121
e44768b7 413100
fd19297b
EJ
4143
4154
4166
4177
418])
419
50aa28fd 420AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(3),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
fd19297b 421AT_CHECK([tail -1 stdout], [0],
e44768b7 422 [Datapath actions: 100,1,2,4,6,7
fd19297b
EJ
423])
424
50aa28fd 425AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(4),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
fd19297b 426AT_CHECK([tail -1 stdout], [0],
1b567fb9 427 [Datapath actions: set(skb_priority(0x1)),100,1,2,set(skb_priority(0x2)),3,set(skb_priority(0x1)),6,7
fd19297b
EJ
428])
429OVS_VSWITCHD_STOP
430AT_CLEANUP
431
15056dc8
EJ
432AT_SETUP([ofproto-dpif - controller])
433OVS_VSWITCHD_START([dnl
434 add-port br0 p1 -- set Interface p1 type=dummy
435])
57c94f35 436ON_EXIT([kill `cat ovs-ofctl.pid`])
15056dc8
EJ
437
438AT_CAPTURE_FILE([ofctl_monitor.log])
439AT_DATA([flows.txt], [dnl
440cookie=0x0 dl_src=10:11:11:11:11:11 actions=controller
54834960 441cookie=0x1 dl_src=20:22:22:22:22:22 actions=controller,resubmit(80,1)
15056dc8
EJ
442cookie=0x2 dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,controller
443
54834960
EJ
444cookie=0x3 table=1 in_port=80 actions=load:1->NXM_NX_REG0[[]],mod_vlan_vid:80,controller,resubmit(81,2)
445cookie=0x4 table=2 in_port=81 actions=load:2->NXM_NX_REG1[[]],mod_dl_src:80:81:81:81:81:81,controller,resubmit(82,3)
446cookie=0x5 table=3 in_port=82 actions=load:3->NXM_NX_REG2[[]],mod_dl_dst:82:82:82:82:82:82,controller,resubmit(83,4)
447cookie=0x6 table=4 in_port=83 actions=load:4->NXM_NX_REG3[[]],mod_nw_src:83.83.83.83,controller,resubmit(84,5)
448cookie=0x7 table=5 in_port=84 actions=load:5->NXM_NX_REG4[[]],load:6->NXM_NX_TUN_ID[[]],mod_nw_dst:84.84.84.84,controller,resubmit(85,6)
449cookie=0x8 table=6 in_port=85 actions=mod_tp_src:85,controller,resubmit(86,7)
450cookie=0x9 table=7 in_port=86 actions=mod_tp_dst:86,controller,controller
78cef7fd 451cookie=0xa dl_src=40:44:44:44:44:41 actions=mod_vlan_vid:99,mod_vlan_pcp:1,controller
b02475c5 452cookie=0xa dl_src=40:44:44:44:44:42 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],load:3->OXM_OF_MPLS_TC[[]],controller
b0a17866 453cookie=0xa dl_src=41:44:44:44:44:42 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],load:3->OXM_OF_MPLS_TC[[]],pop_mpls:0x0800,controller
b02475c5
SH
454cookie=0xa dl_src=40:44:44:44:44:43 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],load:3->OXM_OF_MPLS_TC[[]],controller
455cookie=0xa dl_src=40:44:44:44:44:44 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],load:3->OXM_OF_MPLS_TC[[]],controller
b676167a 456cookie=0xa dl_src=40:44:44:44:44:45 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],load:3->OXM_OF_MPLS_TC[[]],dec_mpls_ttl,controller
0f3f3c3d
SH
457cookie=0xa dl_src=40:44:44:44:44:46 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],load:3->OXM_OF_MPLS_TC[[]],set_mpls_ttl(10),controller
458cookie=0xa dl_src=40:44:44:44:44:47 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],load:3->OXM_OF_MPLS_TC[[]],dec_mpls_ttl,set_mpls_ttl(10),controller
459cookie=0xa dl_src=40:44:44:44:44:48 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],load:3->OXM_OF_MPLS_TC[[]],set_mpls_ttl(10),dec_mpls_ttl,controller
b02475c5
SH
460cookie=0xb dl_src=50:55:55:55:55:55 dl_type=0x8847 actions=load:1000->OXM_OF_MPLS_LABEL[[]],controller
461cookie=0xd dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,controller
462cookie=0xc dl_src=70:77:77:77:77:77 actions=push_mpls:0x8848,load:1000->OXM_OF_MPLS_LABEL[[]],load:7->OXM_OF_MPLS_TC[[]],controller
56d72f37 463cookie=0xd dl_src=80:88:88:88:88:88 arp actions=load:2->OXM_OF_ARP_OP[[]],controller,load:0xc0a88001->OXM_OF_ARP_SPA[[]],controller,load:0x404444444441->OXM_OF_ARP_THA[[]],load:0x01010101->OXM_OF_ARP_SPA[[]],load:0x02020202->OXM_OF_ARP_TPA[[]],controller
15056dc8
EJ
464])
465AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
466
467dnl Flow miss.
77a922c7 468AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
15056dc8
EJ
469
470for i in 1 2 3 ; do
dc235f7f 471 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9),tcp_flags(0x010)'
15056dc8 472done
57c94f35
BP
473OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
474ovs-appctl -t ovs-ofctl exit
15056dc8 475
15056dc8 476AT_CHECK([cat ofctl_monitor.log], [0], [dnl
f0fd1a17 477OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
dc235f7f 478tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
15056dc8 479dnl
f0fd1a17 480OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
dc235f7f 481tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
15056dc8 482dnl
f0fd1a17 483OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
dc235f7f 484tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
15056dc8
EJ
485])
486
487dnl Singleton controller action.
77a922c7 488AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
15056dc8
EJ
489
490for i in 1 2 3 ; do
dc235f7f 491 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=10:11:11:11:11:11,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=10),tcp_flags(0x002)'
15056dc8 492done
57c94f35
BP
493OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
494ovs-appctl -t ovs-ofctl exit
15056dc8 495
15056dc8
EJ
496AT_CHECK([cat ofctl_monitor.log], [0], [dnl
497OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
dc235f7f 498tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=0x002 tcp_csum:0
15056dc8
EJ
499dnl
500OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
dc235f7f 501tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=0x002 tcp_csum:0
15056dc8
EJ
502dnl
503OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
dc235f7f 504tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=0x002 tcp_csum:0
15056dc8
EJ
505])
506
507dnl Modified controller action.
77a922c7 508AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
15056dc8
EJ
509
510for i in 1 2 3 ; do
dc235f7f 511 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=30:33:33:33:33:33,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=10),tcp_flags(0x001)'
15056dc8 512done
57c94f35
BP
513OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
514ovs-appctl -t ovs-ofctl exit
15056dc8 515
15056dc8
EJ
516AT_CHECK([cat ofctl_monitor.log], [0], [dnl
517OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
dc235f7f 518tcp,metadata=0,in_port=0,dl_vlan=15,dl_vlan_pcp=0,dl_src=30:33:33:33:33:33,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=0x001 tcp_csum:0
15056dc8
EJ
519dnl
520OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
dc235f7f 521tcp,metadata=0,in_port=0,dl_vlan=15,dl_vlan_pcp=0,dl_src=30:33:33:33:33:33,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=0x001 tcp_csum:0
15056dc8
EJ
522dnl
523OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
dc235f7f 524tcp,metadata=0,in_port=0,dl_vlan=15,dl_vlan_pcp=0,dl_src=30:33:33:33:33:33,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=0x001 tcp_csum:0
15056dc8
EJ
525])
526
363dd1d9
JS
527dnl Modified VLAN controller action.
528AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
529
530for i in 1 2 3; do
8249a1fe 531 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:44:41,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=16,tos=0,ttl=64,frag=no)'
363dd1d9 532done
57c94f35
BP
533OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
534ovs-appctl -t ovs-ofctl exit
363dd1d9 535
363dd1d9
JS
536AT_CHECK([cat ofctl_monitor.log], [0], [dnl
537NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
8249a1fe 538ip,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:44:41,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=16,nw_tos=0,nw_ecn=0,nw_ttl=64
363dd1d9
JS
539dnl
540NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
8249a1fe 541ip,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:44:41,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=16,nw_tos=0,nw_ecn=0,nw_ttl=64
363dd1d9
JS
542dnl
543NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
8249a1fe 544ip,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:44:41,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=16,nw_tos=0,nw_ecn=0,nw_ttl=64
363dd1d9
JS
545])
546
b02475c5
SH
547dnl Modified MPLS controller action.
548AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
549
550for i in 1 2 3; do
8249a1fe 551 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:44:42,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=16,tos=0,ttl=64,frag=no)'
b02475c5 552done
57c94f35
BP
553OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
554ovs-appctl -t ovs-ofctl exit
b02475c5 555
b02475c5
SH
556AT_CHECK([cat ofctl_monitor.log], [0], [dnl
557NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 558mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:42,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=1
b02475c5
SH
559dnl
560NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 561mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:42,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=1
b02475c5
SH
562dnl
563NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 564mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:42,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=1
b02475c5
SH
565])
566
567dnl Modified MPLS controller action.
568AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
569
b0a17866 570for i in 1 2 3; do
8249a1fe 571 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=41:44:44:44:44:42,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=16,tos=0,ttl=64,frag=no)'
b0a17866
SH
572done
573OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
574ovs-appctl -t ovs-ofctl exit
575
576AT_CHECK([cat ofctl_monitor.log], [0], [dnl
577NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
8249a1fe 578ip,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=41:44:44:44:44:42,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=16,nw_tos=0,nw_ecn=0,nw_ttl=64
b0a17866
SH
579dnl
580NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
8249a1fe 581ip,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=41:44:44:44:44:42,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=16,nw_tos=0,nw_ecn=0,nw_ttl=64
b0a17866
SH
582dnl
583NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
8249a1fe 584ip,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=41:44:44:44:44:42,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=16,nw_tos=0,nw_ecn=0,nw_ttl=64
b0a17866
SH
585])
586
587dnl Modified MPLS controller action.
588AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
589
b02475c5
SH
590dnl in_port(1),eth(src=00:01:02:03:04:05,dst=10:11:12:13:14:15),eth_type(0x8847),mpls(label=100,tc=3,ttl=64,bos=1)
591
592for i in 1 2 3; do
593 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:44:43,dst=50:54:00:00:00:07),eth_type(0x8847),mpls(label=11,tc=3,ttl=64,bos=1)'
594done
595
596OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
597AT_CHECK([cat ofctl_monitor.log], [0], [dnl
598NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
8bfd0fda 599mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:43,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=0,mpls_lse1=46912
b02475c5
SH
600dnl
601NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
8bfd0fda 602mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:43,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=0,mpls_lse1=46912
b02475c5
SH
603dnl
604NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
8bfd0fda 605mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:43,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=0,mpls_lse1=46912
b02475c5
SH
606])
607
608dnl Modified MPLS controller action.
609AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
610
611for i in 1 2 3; do
8249a1fe 612 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:44:44,dst=50:54:00:00:00:07),eth_type(0x8100),vlan(vid=99,pcp=7),encap(eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=16,tos=0,ttl=64,frag=no))'
b02475c5 613done
57c94f35
BP
614OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
615ovs-appctl -t ovs-ofctl exit
b02475c5 616
b02475c5
SH
617AT_CHECK([cat ofctl_monitor.log], [0], [dnl
618NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 619mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=7,dl_src=40:44:44:44:44:44,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=1
b02475c5
SH
620dnl
621NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 622mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=7,dl_src=40:44:44:44:44:44,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=1
b02475c5
SH
623dnl
624NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 625mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=7,dl_src=40:44:44:44:44:44,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=1
b02475c5
SH
626])
627
b676167a
SH
628dnl Modified MPLS controller action.
629AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
630
631for i in 1 2 3; do
8249a1fe 632 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:44:45,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=16,tos=0,ttl=64,frag=no)'
b676167a 633done
57c94f35
BP
634OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
635ovs-appctl -t ovs-ofctl exit
b676167a 636
b676167a
SH
637AT_CHECK([cat ofctl_monitor.log], [0], [dnl
638NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 639mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:45,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=63,mpls_bos=1
b676167a
SH
640dnl
641NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 642mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:45,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=63,mpls_bos=1
b676167a
SH
643dnl
644NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 645mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:45,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=63,mpls_bos=1
b676167a
SH
646])
647
0f3f3c3d
SH
648dnl Modified MPLS controller action.
649AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
650
651for i in 1 2 3; do
8249a1fe 652 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:44:46,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=16,tos=0,ttl=64,frag=no)'
0f3f3c3d 653done
57c94f35
BP
654OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
655ovs-appctl -t ovs-ofctl exit
0f3f3c3d 656
0f3f3c3d
SH
657AT_CHECK([cat ofctl_monitor.log], [0], [dnl
658NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 659mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:46,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=10,mpls_bos=1
0f3f3c3d
SH
660dnl
661NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 662mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:46,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=10,mpls_bos=1
0f3f3c3d
SH
663dnl
664NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 665mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:46,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=10,mpls_bos=1
0f3f3c3d
SH
666])
667
668dnl Modified MPLS controller action.
669AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
670
671for i in 1 2 3; do
8249a1fe 672 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:44:47,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=16,tos=0,ttl=64,frag=no)'
0f3f3c3d 673done
57c94f35
BP
674OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
675ovs-appctl -t ovs-ofctl exit
0f3f3c3d 676
0f3f3c3d
SH
677AT_CHECK([cat ofctl_monitor.log], [0], [dnl
678NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 679mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:47,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=10,mpls_bos=1
0f3f3c3d
SH
680dnl
681NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 682mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:47,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=10,mpls_bos=1
0f3f3c3d
SH
683dnl
684NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 685mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:47,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=10,mpls_bos=1
0f3f3c3d
SH
686])
687
688dnl Modified MPLS controller action.
689AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
690
691for i in 1 2 3; do
8249a1fe 692 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:44:48,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=16,tos=0,ttl=64,frag=no)'
0f3f3c3d 693done
57c94f35
BP
694OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
695ovs-appctl -t ovs-ofctl exit
0f3f3c3d 696
0f3f3c3d
SH
697AT_CHECK([cat ofctl_monitor.log], [0], [dnl
698NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 699mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:48,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=9,mpls_bos=1
0f3f3c3d
SH
700dnl
701NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 702mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:48,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=9,mpls_bos=1
0f3f3c3d
SH
703dnl
704NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 705mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:48,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=9,mpls_bos=1
0f3f3c3d
SH
706])
707
b02475c5
SH
708dnl Modified MPLS actions.
709AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
710
711for i in 1 2 3; do
02830175 712 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:55:55:55:55:55,dst=50:54:00:00:00:07),eth_type(0x8847),mpls(label=100,tc=7,ttl=64,bos=1)'
b02475c5 713done
57c94f35
BP
714OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
715ovs-appctl -t ovs-ofctl exit
b02475c5 716
b02475c5
SH
717AT_CHECK([cat ofctl_monitor.log], [0], [dnl
718NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
392c30ba 719mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:55:55:55:55:55,dl_dst=50:54:00:00:00:07,mpls_label=1000,mpls_tc=7,mpls_ttl=64,mpls_bos=1
b02475c5
SH
720dnl
721NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
392c30ba 722mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:55:55:55:55:55,dl_dst=50:54:00:00:00:07,mpls_label=1000,mpls_tc=7,mpls_ttl=64,mpls_bos=1
b02475c5
SH
723dnl
724NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
392c30ba 725mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:55:55:55:55:55,dl_dst=50:54:00:00:00:07,mpls_label=1000,mpls_tc=7,mpls_ttl=64,mpls_bos=1
b02475c5
SH
726])
727
728dnl Modified MPLS ipv6 controller action.
729AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
730
731for i in 1 2 3; do
732 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=70:77:77:77:77:77,dst=50:54:00:00:00:07),eth_type(0x86dd),ipv6(src=::1,dst=::2,label=0,proto=10,tclass=0x70,hlimit=128,frag=no)'
733done
57c94f35
BP
734OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
735ovs-appctl -t ovs-ofctl exit
b02475c5 736
b02475c5
SH
737AT_CHECK([cat ofctl_monitor.log], [0], [dnl
738NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
52105b67 739mplsm,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=70:77:77:77:77:77,dl_dst=50:54:00:00:00:07,mpls_label=1000,mpls_tc=7,mpls_ttl=128,mpls_bos=1
b02475c5
SH
740dnl
741NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
52105b67 742mplsm,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=70:77:77:77:77:77,dl_dst=50:54:00:00:00:07,mpls_label=1000,mpls_tc=7,mpls_ttl=128,mpls_bos=1
b02475c5
SH
743dnl
744NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
52105b67 745mplsm,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=70:77:77:77:77:77,dl_dst=50:54:00:00:00:07,mpls_label=1000,mpls_tc=7,mpls_ttl=128,mpls_bos=1
b02475c5
SH
746])
747
748
749dnl Modified MPLS pop action.
cff78c88
SH
750dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
751dnl 60:66:66:66:66:66 > 50:54:00:00:00:07, ethertype MPLS multicast (0x8847), length 66: MPLS (label 20, exp 0, ttl 32)
752dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44)
753
b02475c5
SH
754AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
755
756for i in 1 2 3; do
cff78c88 757 ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 66 66 88 47 00 01 41 20 45 00 00 2c 00 00 00 00 40 06 3b 78 c0 a8 00 01 c0 a8 00 02 00 50 00 00 00 00 00 2a 00 00 00 2a 50 00 27 10 77 44 00 00 48 4f 47 45'
b02475c5 758done
cff78c88
SH
759#for i in 2 3; do
760# ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=60:66:66:66:66:66,dst=50:54:00:00:00:07),eth_type(0x8847),mpls(label=10,tc=3,ttl=100,bos=1)'
761#done
57c94f35
BP
762OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
763ovs-appctl -t ovs-ofctl exit
b02475c5 764
b02475c5 765AT_CHECK([cat ofctl_monitor.log], [0], [dnl
cff78c88 766NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
dc235f7f 767tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=60:66:66:66:66:66,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=80,tp_dst=0,tcp_flags=0x000 tcp_csum:7744
b02475c5 768dnl
cff78c88 769NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
dc235f7f 770tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=60:66:66:66:66:66,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=80,tp_dst=0,tcp_flags=0x000 tcp_csum:7744
b02475c5 771dnl
cff78c88 772NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
dc235f7f 773tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=60:66:66:66:66:66,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=80,tp_dst=0,tcp_flags=0x000 tcp_csum:7744
b02475c5
SH
774])
775
15056dc8 776dnl Checksum TCP.
77a922c7 777AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
15056dc8
EJ
778
779for i in 1 ; do
dc235f7f 780 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=20:22:22:22:22:22,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=11),tcp_flags(0x001)'
15056dc8 781done
57c94f35
BP
782OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
783ovs-appctl -t ovs-ofctl exit
15056dc8 784
15056dc8 785AT_CHECK([cat ofctl_monitor.log], [0], [dnl
42edbe39 786NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
dc235f7f 787tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=20:22:22:22:22:22,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=11,tcp_flags=0x001 tcp_csum:0
15056dc8 788dnl
42edbe39 789NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
dc235f7f 790tcp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=20:22:22:22:22:22,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=11,tcp_flags=0x001 tcp_csum:0
15056dc8 791dnl
42edbe39 792NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x4 total_len=64 in_port=1 reg0=0x1 reg1=0x2 (via action) data_len=64 (unbuffered)
dc235f7f 793tcp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=11,tcp_flags=0x001 tcp_csum:0
15056dc8 794dnl
42edbe39 795NXT_PACKET_IN (xid=0x0): table_id=3 cookie=0x5 total_len=64 in_port=1 reg0=0x1 reg1=0x2 reg2=0x3 (via action) data_len=64 (unbuffered)
dc235f7f 796tcp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=11,tcp_flags=0x001 tcp_csum:0
15056dc8 797dnl
42edbe39 798NXT_PACKET_IN (xid=0x0): table_id=4 cookie=0x6 total_len=64 in_port=1 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 (via action) data_len=64 (unbuffered)
dc235f7f 799tcp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=11,tcp_flags=0x001 tcp_csum:1a03
15056dc8 800dnl
42edbe39 801NXT_PACKET_IN (xid=0x0): table_id=5 cookie=0x7 total_len=64 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=64 (unbuffered)
dc235f7f 802tcp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=11,tcp_flags=0x001 tcp_csum:3205
15056dc8 803dnl
42edbe39 804NXT_PACKET_IN (xid=0x0): table_id=6 cookie=0x8 total_len=64 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=64 (unbuffered)
dc235f7f 805tcp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=85,tp_dst=11,tcp_flags=0x001 tcp_csum:31b8
15056dc8 806dnl
42edbe39 807NXT_PACKET_IN (xid=0x0): table_id=7 cookie=0x9 total_len=64 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=64 (unbuffered)
dc235f7f 808tcp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=85,tp_dst=86,tcp_flags=0x001 tcp_csum:316d
15056dc8 809dnl
42edbe39 810NXT_PACKET_IN (xid=0x0): table_id=7 cookie=0x9 total_len=64 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=64 (unbuffered)
dc235f7f 811tcp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=85,tp_dst=86,tcp_flags=0x001 tcp_csum:316d
15056dc8
EJ
812])
813
814dnl Checksum UDP.
77a922c7 815AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
15056dc8
EJ
816
817for i in 1 ; do
818 ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 20 22 22 22 22 22 08 00 45 00 00 1C 00 00 00 00 00 11 00 00 C0 A8 00 01 C0 A8 00 02 00 08 00 0B 00 00 12 34 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
819done
57c94f35
BP
820OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
821ovs-appctl -t ovs-ofctl exit
15056dc8 822
15056dc8 823AT_CHECK([cat ofctl_monitor.log], [0], [dnl
42edbe39 824NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
3f78c3cc 825udp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=20:22:22:22:22:22,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=8,tp_dst=11 udp_csum:1234
15056dc8 826dnl
42edbe39 827NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
3f78c3cc 828udp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=20:22:22:22:22:22,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=8,tp_dst=11 udp_csum:1234
15056dc8 829dnl
42edbe39 830NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x4 total_len=64 in_port=1 reg0=0x1 reg1=0x2 (via action) data_len=64 (unbuffered)
3f78c3cc 831udp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=8,tp_dst=11 udp_csum:1234
15056dc8 832dnl
42edbe39 833NXT_PACKET_IN (xid=0x0): table_id=3 cookie=0x5 total_len=64 in_port=1 reg0=0x1 reg1=0x2 reg2=0x3 (via action) data_len=64 (unbuffered)
3f78c3cc 834udp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=8,tp_dst=11 udp_csum:1234
15056dc8 835dnl
42edbe39 836NXT_PACKET_IN (xid=0x0): table_id=4 cookie=0x6 total_len=64 in_port=1 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 (via action) data_len=64 (unbuffered)
3f78c3cc 837udp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=8,tp_dst=11 udp_csum:2c37
15056dc8 838dnl
42edbe39 839NXT_PACKET_IN (xid=0x0): table_id=5 cookie=0x7 total_len=64 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=64 (unbuffered)
3f78c3cc 840udp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=8,tp_dst=11 udp_csum:4439
15056dc8 841dnl
42edbe39 842NXT_PACKET_IN (xid=0x0): table_id=6 cookie=0x8 total_len=64 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=64 (unbuffered)
3f78c3cc 843udp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=85,tp_dst=11 udp_csum:43ec
15056dc8 844dnl
42edbe39 845NXT_PACKET_IN (xid=0x0): table_id=7 cookie=0x9 total_len=64 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=64 (unbuffered)
3f78c3cc 846udp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=85,tp_dst=86 udp_csum:43a1
15056dc8 847dnl
42edbe39 848NXT_PACKET_IN (xid=0x0): table_id=7 cookie=0x9 total_len=64 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=64 (unbuffered)
3f78c3cc 849udp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=85,tp_dst=86 udp_csum:43a1
15056dc8
EJ
850])
851
f6c8a6b1
BP
852dnl Modified ARP controller action.
853AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
854
855for i in 1 2 3; do
856 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=80:88:88:88:88:88,dst=ff:ff:ff:ff:ff:ff),eth_type(0x0806),arp(sip=192.168.0.1,tip=192.168.0.2,op=1,sha=50:54:00:00:00:05,tha=00:00:00:00:00:00)'
857done
858
8125a83a 859OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 9])
f6c8a6b1
BP
860OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
861AT_CHECK([cat ofctl_monitor.log], [0], [dnl
862NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
863arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.0.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
864NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
865arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
866NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
56d72f37 867arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=1.1.1.1,arp_tpa=2.2.2.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=40:44:44:44:44:41
f6c8a6b1
BP
868NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
869arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.0.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
870NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
871arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
872NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
56d72f37 873arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=1.1.1.1,arp_tpa=2.2.2.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=40:44:44:44:44:41
f6c8a6b1
BP
874NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
875arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.0.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
876NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
877arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
878NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
56d72f37 879arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=1.1.1.1,arp_tpa=2.2.2.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=40:44:44:44:44:41
f6c8a6b1
BP
880])
881
5c0243a9 882AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
0d56eaf2
JS
883
884dnl Checksum SCTP.
885AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
886
887for i in 1 ; do
888 ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 20 22 22 22 22 22 08 00 45 00 00 24 00 00 00 00 00 84 00 00 C0 A8 00 01 C0 A8 00 02 04 58 08 af 00 00 00 00 d9 d7 91 57 01 00 00 34 cf 28 ec 4e 00 01 40 00 00 0a ff ff b7 53 24 19 00 05 00 08 7f 00 00 01 00 05 00 08 c0 a8 02 07 00 0c 00 06 00 05 00 00 80 00 00 04 c0 00 00 04'
889done
890
8125a83a 891OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 9])
0d56eaf2
JS
892OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
893AT_CHECK([cat ofctl_monitor.log], [0], [dnl
894NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=98 in_port=1 (via action) data_len=98 (unbuffered)
895sctp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=20:22:22:22:22:22,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=1112,tp_dst=2223 sctp_csum:d9d79157
896dnl
897NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=102 in_port=1 reg0=0x1 (via action) data_len=102 (unbuffered)
898sctp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=20:22:22:22:22:22,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=1112,tp_dst=2223 sctp_csum:d9d79157
899dnl
900NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x4 total_len=102 in_port=1 reg0=0x1 reg1=0x2 (via action) data_len=102 (unbuffered)
901sctp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=1112,tp_dst=2223 sctp_csum:d9d79157
902dnl
903NXT_PACKET_IN (xid=0x0): table_id=3 cookie=0x5 total_len=102 in_port=1 reg0=0x1 reg1=0x2 reg2=0x3 (via action) data_len=102 (unbuffered)
904sctp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=1112,tp_dst=2223 sctp_csum:d9d79157
905dnl
906NXT_PACKET_IN (xid=0x0): table_id=4 cookie=0x6 total_len=102 in_port=1 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 (via action) data_len=102 (unbuffered)
907sctp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=1112,tp_dst=2223 sctp_csum:d9d79157
908dnl
909NXT_PACKET_IN (xid=0x0): table_id=5 cookie=0x7 total_len=102 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=102 (unbuffered)
910sctp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=1112,tp_dst=2223 sctp_csum:d9d79157
911dnl
912NXT_PACKET_IN (xid=0x0): table_id=6 cookie=0x8 total_len=102 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=102 (unbuffered)
913sctp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=85,tp_dst=2223 sctp_csum:7f12662e
914dnl
915NXT_PACKET_IN (xid=0x0): table_id=7 cookie=0x9 total_len=102 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=102 (unbuffered)
916sctp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=85,tp_dst=86 sctp_csum:a7e86f67
917dnl
918NXT_PACKET_IN (xid=0x0): table_id=7 cookie=0x9 total_len=102 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=102 (unbuffered)
919sctp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=85,tp_dst=86 sctp_csum:a7e86f67
920])
921
ef0ce8ae 922AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
0d56eaf2 923 cookie=0x1, n_packets=3, n_bytes=218, dl_src=20:22:22:22:22:22 actions=CONTROLLER:65535,resubmit(80,1)
ef0ce8ae 924 cookie=0x2, n_packets=3, n_bytes=180, dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,CONTROLLER:65535
0d56eaf2
JS
925 cookie=0x3, table=1, n_packets=3, n_bytes=218, in_port=80 actions=load:0x1->NXM_NX_REG0[[]],mod_vlan_vid:80,CONTROLLER:65535,resubmit(81,2)
926 cookie=0x4, table=2, n_packets=3, n_bytes=218, in_port=81 actions=load:0x2->NXM_NX_REG1[[]],mod_dl_src:80:81:81:81:81:81,CONTROLLER:65535,resubmit(82,3)
927 cookie=0x5, table=3, n_packets=3, n_bytes=218, in_port=82 actions=load:0x3->NXM_NX_REG2[[]],mod_dl_dst:82:82:82:82:82:82,CONTROLLER:65535,resubmit(83,4)
928 cookie=0x6, table=4, n_packets=3, n_bytes=218, in_port=83 actions=load:0x4->NXM_NX_REG3[[]],mod_nw_src:83.83.83.83,CONTROLLER:65535,resubmit(84,5)
929 cookie=0x7, table=5, n_packets=3, n_bytes=218, in_port=84 actions=load:0x5->NXM_NX_REG4[[]],load:0x6->NXM_NX_TUN_ID[[]],mod_nw_dst:84.84.84.84,CONTROLLER:65535,resubmit(85,6)
930 cookie=0x8, table=6, n_packets=3, n_bytes=218, in_port=85 actions=mod_tp_src:85,CONTROLLER:65535,resubmit(86,7)
931 cookie=0x9, table=7, n_packets=3, n_bytes=218, in_port=86 actions=mod_tp_dst:86,CONTROLLER:65535,CONTROLLER:65535
363dd1d9 932 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:44:41 actions=mod_vlan_vid:99,mod_vlan_pcp:1,CONTROLLER:65535
b02475c5
SH
933 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:44:42 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],load:0x3->OXM_OF_MPLS_TC[[]],CONTROLLER:65535
934 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:44:43 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],load:0x3->OXM_OF_MPLS_TC[[]],CONTROLLER:65535
935 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:44:44 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],load:0x3->OXM_OF_MPLS_TC[[]],CONTROLLER:65535
b676167a 936 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:44:45 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],load:0x3->OXM_OF_MPLS_TC[[]],dec_mpls_ttl,CONTROLLER:65535
0f3f3c3d
SH
937 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:44:46 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],load:0x3->OXM_OF_MPLS_TC[[]],set_mpls_ttl(10),CONTROLLER:65535
938 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:44:47 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],load:0x3->OXM_OF_MPLS_TC[[]],dec_mpls_ttl,set_mpls_ttl(10),CONTROLLER:65535
939 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:44:48 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],load:0x3->OXM_OF_MPLS_TC[[]],set_mpls_ttl(10),dec_mpls_ttl,CONTROLLER:65535
b0a17866 940 cookie=0xa, n_packets=3, n_bytes=180, dl_src=41:44:44:44:44:42 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],load:0x3->OXM_OF_MPLS_TC[[]],pop_mpls:0x0800,CONTROLLER:65535
392c30ba 941 cookie=0xb, n_packets=3, n_bytes=180, mpls,dl_src=50:55:55:55:55:55 actions=load:0x3e8->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
b02475c5 942 cookie=0xc, n_packets=3, n_bytes=180, dl_src=70:77:77:77:77:77 actions=push_mpls:0x8848,load:0x3e8->OXM_OF_MPLS_LABEL[[]],load:0x7->OXM_OF_MPLS_TC[[]],CONTROLLER:65535
56d72f37 943 cookie=0xd, n_packets=3, n_bytes=180, arp,dl_src=80:88:88:88:88:88 actions=load:0x2->NXM_OF_ARP_OP[[]],CONTROLLER:65535,load:0xc0a88001->NXM_OF_ARP_SPA[[]],CONTROLLER:65535,load:0x404444444441->NXM_NX_ARP_THA[[]],load:0x1010101->NXM_OF_ARP_SPA[[]],load:0x2020202->NXM_OF_ARP_TPA[[]],CONTROLLER:65535
cff78c88 944 cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,CONTROLLER:65535
ef0ce8ae
BP
945 n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
946NXST_FLOW reply:
15056dc8
EJ
947])
948
949OVS_VSWITCHD_STOP
8e9ce036 950AT_CLEANUP
04c956fc 951
f6c8a6b1
BP
952AT_SETUP([ofproto-dpif - ARP modification slow-path])
953OVS_VSWITCHD_START
954ADD_OF_PORTS([br0], [1], [2])
955
956ovs-vsctl -- set Interface p2 type=dummy options:pcap=p2.pcap
957ovs-ofctl add-flow br0 'in_port=1,arp actions=load:2->OXM_OF_ARP_OP[[]],2,load:0xc0a88001->OXM_OF_ARP_SPA[[]],2,load:0x404444444441->OXM_OF_ARP_THA[[]],2'
958
959# Input some packets that should follow the arp modification slow-path.
960for i in 1 2 3; do
961 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=80:88:88:88:88:88,dst=ff:ff:ff:ff:ff:ff),eth_type(0x0806),arp(sip=192.168.0.1,tip=192.168.0.2,op=1,sha=50:54:00:00:00:05,tha=00:00:00:00:00:00)'
962done
963AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
964
965# Check the packets that were output.
966AT_CHECK([ovs-ofctl parse-pcap p2.pcap], [0], [dnl
967arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.0.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
968arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
969arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=40:44:44:44:44:41
970arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.0.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
971arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
972arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=40:44:44:44:44:41
973arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.0.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
974arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
975arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=40:44:44:44:44:41
976])
977
f6c8a6b1
BP
978OVS_VSWITCHD_STOP
979AT_CLEANUP
980
ecac4ebf 981AT_SETUP([ofproto-dpif - VLAN handling])
04c956fc 982OVS_VSWITCHD_START(
023e1e0a
BP
983 [set Bridge br0 fail-mode=standalone -- \
984 add-port br0 p1 trunks=10,12 -- \
ecac4ebf 985 add-port br0 p2 tag=10 -- \
5e9ceccd
BP
986 add-port br0 p3 tag=12 \
987 other-config:priority-tags=true -- \
ecac4ebf
BP
988 add-port br0 p4 tag=12 -- \
989 add-port br0 p5 vlan_mode=native-tagged tag=10 -- \
990 add-port br0 p6 vlan_mode=native-tagged tag=10 trunks=10,12 -- \
991 add-port br0 p7 vlan_mode=native-untagged tag=12 -- \
5e9ceccd
BP
992 add-port br0 p8 vlan_mode=native-untagged tag=12 trunks=10,12 \
993 other-config:priority-tags=true -- \
ecac4ebf
BP
994 set Interface p1 type=dummy -- \
995 set Interface p2 type=dummy -- \
996 set Interface p3 type=dummy -- \
997 set Interface p4 type=dummy -- \
998 set Interface p5 type=dummy -- \
999 set Interface p6 type=dummy -- \
1000 set Interface p7 type=dummy -- \
1001 set Interface p8 type=dummy --])
04c956fc 1002
247527db
BP
1003dnl Each of these specifies an in_port by number, a VLAN VID (or "none"),
1004dnl a VLAN PCP (used if the VID isn't "none") and the expected set of datapath
ecac4ebf 1005dnl actions.
04c956fc 1006for tuple in \
e44768b7
JP
1007 "100 none 0 drop" \
1008 "100 0 0 drop" \
1009 "100 0 1 drop" \
1010 "100 10 0 1,5,6,7,8,pop_vlan,2" \
1011 "100 10 1 1,5,6,7,8,pop_vlan,2" \
1012 "100 11 0 5,7" \
1013 "100 11 1 5,7" \
1014 "100 12 0 1,5,6,pop_vlan,3,4,7,8" \
1015 "100 12 1 1,5,6,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
247527db
BP
1016 "1 none 0 drop" \
1017 "1 0 0 drop" \
1018 "1 0 1 drop" \
e44768b7
JP
1019 "1 10 0 5,6,7,8,100,pop_vlan,2" \
1020 "1 10 1 5,6,7,8,100,pop_vlan,2" \
247527db
BP
1021 "1 11 0 drop" \
1022 "1 11 1 drop" \
e44768b7
JP
1023 "1 12 0 5,6,100,pop_vlan,3,4,7,8" \
1024 "1 12 1 5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1025 "2 none 0 push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
1026 "2 0 0 pop_vlan,push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
1027 "2 0 1 pop_vlan,push_vlan(vid=10,pcp=1),1,5,6,7,8,100" \
247527db
BP
1028 "2 10 0 drop" \
1029 "2 10 1 drop" \
1030 "2 11 0 drop" \
1031 "2 11 1 drop" \
1032 "2 12 0 drop" \
1033 "2 12 1 drop" \
e44768b7
JP
1034 "3 none 0 4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1035 "3 0 0 pop_vlan,4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1036 "3 0 1 8,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
247527db
BP
1037 "3 10 0 drop" \
1038 "3 10 1 drop" \
1039 "3 11 0 drop" \
1040 "3 11 1 drop" \
1041 "3 12 0 drop" \
1042 "3 12 1 drop" \
e44768b7
JP
1043 "4 none 0 3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1044 "4 0 0 pop_vlan,3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1045 "4 0 1 3,8,pop_vlan,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
247527db
BP
1046 "4 10 0 drop" \
1047 "4 10 1 drop" \
1048 "4 11 0 drop" \
1049 "4 11 1 drop" \
1050 "4 12 0 drop" \
1051 "4 12 1 drop" \
e44768b7
JP
1052 "5 none 0 2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
1053 "5 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
1054 "5 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,6,7,8,100" \
1055 "5 10 0 1,6,7,8,100,pop_vlan,2" \
1056 "5 10 1 1,6,7,8,100,pop_vlan,2" \
1057 "5 11 0 7,100" \
1058 "5 11 1 7,100" \
1059 "5 12 0 1,6,100,pop_vlan,3,4,7,8" \
1060 "5 12 1 1,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1061 "6 none 0 2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
1062 "6 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
1063 "6 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,5,7,8,100" \
1064 "6 10 0 1,5,7,8,100,pop_vlan,2" \
1065 "6 10 1 1,5,7,8,100,pop_vlan,2" \
247527db
BP
1066 "6 11 0 drop" \
1067 "6 11 1 drop" \
e44768b7
JP
1068 "6 12 0 1,5,100,pop_vlan,3,4,7,8" \
1069 "6 12 1 1,5,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1070 "7 none 0 3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1071 "7 0 0 pop_vlan,3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1072 "7 0 1 3,8,pop_vlan,4,push_vlan(vid=12,pcp=1),1,5,6,100" \
1073 "7 10 0 1,5,6,8,100,pop_vlan,2" \
1074 "7 10 1 1,5,6,8,100,pop_vlan,2" \
1075 "7 11 0 5,100" \
1076 "7 11 1 5,100" \
1077 "7 12 0 1,5,6,100,pop_vlan,3,4,8" \
1078 "7 12 1 1,5,6,100,pop_vlan,4,push_vlan(vid=0,pcp=1),3,8" \
1079 "8 none 0 3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
1080 "8 0 0 pop_vlan,3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
1081 "8 0 1 3,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1082 "8 10 0 1,5,6,7,100,pop_vlan,2" \
1083 "8 10 1 1,5,6,7,100,pop_vlan,2" \
247527db
BP
1084 "8 11 0 drop" \
1085 "8 11 1 drop" \
e44768b7
JP
1086 "8 12 0 1,5,6,100,pop_vlan,3,4,7" \
1087 "8 12 1 1,5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3"
04c956fc
BP
1088do
1089 set $tuple
1090 in_port=$1
1091 vlan=$2
ecac4ebf
BP
1092 pcp=$3
1093 expected=$4
04c956fc
BP
1094
1095 if test $vlan = none; then
247527db 1096 flow="in_port($in_port),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff),eth_type(0xabcd)"
04c956fc 1097 else
247527db 1098 flow="in_port($in_port),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff),eth_type(0x8100),vlan(vid=$vlan,pcp=$pcp),encap(eth_type(0xabcd))"
04c956fc
BP
1099 fi
1100
395e68ce
BP
1101 echo "----------------------------------------------------------------------"
1102 echo "in_port=$in_port vlan=$vlan pcp=$pcp"
1103
50aa28fd 1104 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
ecac4ebf 1105 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
04c956fc 1106
247527db 1107 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
becffb86 1108 mv stdout expout
247527db 1109 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
04c956fc
BP
1110done
1111
1112OVS_VSWITCHD_STOP
1113AT_CLEANUP
7257b535 1114
56879058
JS
1115AT_SETUP([ofproto-dpif - MPLS handling])
1116OVS_VSWITCHD_START([dnl
1117 add-port br0 p1 -- set Interface p1 type=dummy
1118])
1119ON_EXIT([kill `cat ovs-ofctl.pid`])
1120
1121AT_CAPTURE_FILE([ofctl_monitor.log])
1122AT_DATA([flows.txt], [dnl
1123dl_src=40:44:44:44:00:00 actions=push_mpls:0x8847,controller
1124])
1125AT_CHECK([ovs-ofctl --protocols=OpenFlow12 add-flows br0 flows.txt])
1126
1127dnl In this test, we push an MPLS tag to an ethernet packet.
1128AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1129
1130for i in 1 2 3; do
1131 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:00:00,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no)'
1132done
1133OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1134
1135AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1136OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1137mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:00:00,dl_dst=50:54:00:00:00:07,mpls_label=0,mpls_tc=0,mpls_ttl=64,mpls_bos=1
113800000000 50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
113900000010 01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
114000000020 00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
114100000030 00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
1142dnl
1143OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1144mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:00:00,dl_dst=50:54:00:00:00:07,mpls_label=0,mpls_tc=0,mpls_ttl=64,mpls_bos=1
114500000000 50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
114600000010 01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
114700000020 00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
114800000030 00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
1149dnl
1150OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1151mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:00:00,dl_dst=50:54:00:00:00:07,mpls_label=0,mpls_tc=0,mpls_ttl=64,mpls_bos=1
115200000000 50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
115300000010 01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
115400000020 00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
115500000030 00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
1156])
1157
1158OVS_VSWITCHD_STOP
1159AT_CLEANUP
1160
846e159a
SH
1161AT_SETUP([ofproto-dpif - VLAN+MPLS handling])
1162OVS_VSWITCHD_START([dnl
1163 add-port br0 p1 -- set Interface p1 type=dummy
1164])
1165ON_EXIT([kill `cat ovs-ofctl.pid`])
1166
1167AT_CAPTURE_FILE([ofctl_monitor.log])
1168AT_DATA([flows.txt], [dnl
1169cookie=0xa dl_src=40:44:44:44:54:50 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],push_vlan:0x8100,set_vlan_vid:99,set_vlan_pcp:1,controller
1170cookie=0xa dl_src=40:44:44:44:54:51 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],push_vlan:0x8100,set_vlan_vid:99,set_vlan_pcp:1,controller
1171cookie=0xa dl_src=40:44:44:44:54:52 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],push_vlan:0x8100,load:99->OXM_OF_VLAN_VID[[]],set_vlan_pcp:1,controller
1172cookie=0xa dl_src=40:44:44:44:54:53 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],push_vlan:0x8100,load:99->OXM_OF_VLAN_VID[[]],set_vlan_pcp:1,controller
1173cookie=0xa dl_src=40:44:44:44:54:54 actions=push_vlan:0x8100,set_vlan_vid:99,set_vlan_pcp:1,push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],controller
1174cookie=0xa dl_src=40:44:44:44:54:55 actions=push_vlan:0x8100,set_vlan_vid:99,set_vlan_pcp:1,push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],controller
1175cookie=0xa dl_src=40:44:44:44:54:56 actions=push_vlan:0x8100,load:99->OXM_OF_VLAN_VID[[]],set_vlan_pcp:1,push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],controller
1176cookie=0xa dl_src=40:44:44:44:54:57 actions=push_vlan:0x8100,load:99->OXM_OF_VLAN_VID[[]],set_vlan_pcp:1,push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],controller
1177cookie=0xa dl_src=40:44:44:44:54:58,vlan_tci=0x1000/0x1000 actions=load:99->OXM_OF_VLAN_VID[[]],set_vlan_pcp:1,push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],controller
1178cookie=0xa dl_src=40:44:44:44:54:59,vlan_tci=0x1000/0x1000 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],set_vlan_pcp:1,load:99->OXM_OF_VLAN_VID[[]],controller
1179])
1180AT_CHECK([ovs-ofctl --protocols=OpenFlow12 add-flows br0 flows.txt])
1181
1182dnl Modified MPLS controller action.
1183dnl In this test, we push the MPLS tag before pushing a VLAN tag, so we see
1184dnl both of these in the final flow
1185AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1186
1187for i in 1 2 3; do
1188 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:54:50,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no)'
1189done
1190OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1191
1192AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1193OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1194mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:50,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
119500000000 50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
119600000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
119700000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
119800000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
119900000040 00 00 00 00
1200dnl
1201OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1202mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:50,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
120300000000 50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
120400000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
120500000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
120600000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
120700000040 00 00 00 00
1208dnl
1209OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1210mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:50,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
121100000000 50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
121200000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
121300000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
121400000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
121500000040 00 00 00 00
1216])
1217
1218dnl Modified MPLS controller action.
1219dnl In this test, the input packet in vlan-tagged, which should be stripped
1220dnl before we push the MPLS and VLAN tags.
1221AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1222
1223for i in 1 2 3; do
1224 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:54:51,dst=50:54:00:00:00:07),eth_type(0x8100),vlan(vid=88,pcp=7),encap(eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no))'
1225done
1226OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1227ovs-appctl -t ovs-ofctl exit
1228
1229AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1230OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1231mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:51,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
123200000000 50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
123300000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
123400000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
123500000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1236dnl
1237OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1238mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:51,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
123900000000 50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
124000000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
124100000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
124200000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1243dnl
1244OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1245mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:51,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
124600000000 50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
124700000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
124800000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
124900000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1250])
1251
1252dnl Modified MPLS controller action.
1253dnl In this test, we push the MPLS tag before pushing a VLAN tag, so we see
1254dnl both of these in the final flow
1255AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1256
1257for i in 1 2 3; do
1258 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:54:52,dst=52:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no)'
1259done
1260OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1261
1262AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1263OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1264mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:52,dl_dst=52:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
126500000000 52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
126600000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
126700000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
126800000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
126900000040 00 00 00 00
1270dnl
1271OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1272mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:52,dl_dst=52:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
127300000000 52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
127400000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
127500000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
127600000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
127700000040 00 00 00 00
1278dnl
1279OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1280mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:52,dl_dst=52:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
128100000000 52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
128200000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
128300000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
128400000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
128500000040 00 00 00 00
1286])
1287
1288dnl Modified MPLS controller action.
1289dnl In this test, the input packet in vlan-tagged, which should be stripped
1290dnl before we push the MPLS and VLAN tags.
1291AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1292
1293for i in 1 2 3; do
1294 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:54:53,dst=50:54:00:00:00:07),eth_type(0x8100),vlan(vid=88,pcp=7),encap(eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no))'
1295done
1296OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1297ovs-appctl -t ovs-ofctl exit
1298
1299AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1300OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1301mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:53,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
130200000000 50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
130300000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
130400000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
130500000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1306dnl
1307OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1308mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:53,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
130900000000 50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
131000000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
131100000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
131200000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1313dnl
1314OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1315mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:53,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
131600000000 50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
131700000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
131800000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
131900000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1320])
1321
1322dnl Modified MPLS controller action.
1323dnl In this test, we push the VLAN tag before pushing a MPLS tag, but these
1324dnl actions are reordered, so we see both of these in the final flow.
1325AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1326
1327for i in 1 2 3; do
1328 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:54:54,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no)'
1329done
1330OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1331ovs-appctl -t ovs-ofctl exit
1332
1333AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1334OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1335mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:54,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
133600000000 50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
133700000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
133800000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
133900000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
134000000040 00 00 00 00
1341dnl
1342OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1343mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:54,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
134400000000 50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
134500000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
134600000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
134700000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
134800000040 00 00 00 00
1349dnl
1350OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1351mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:54,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
135200000000 50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
135300000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
135400000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
135500000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
135600000040 00 00 00 00
1357])
1358
1359dnl Modified MPLS controller action.
1360dnl In this test, the input packet in vlan-tagged, which should be stripped
1361dnl before we push the MPLS and VLAN tags.
1362AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1363
1364for i in 1 2 3; do
1365 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:54:55,dst=50:54:00:00:00:07),eth_type(0x8100),vlan(vid=88,pcp=7),encap(eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no))'
1366done
1367OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1368ovs-appctl -t ovs-ofctl exit
1369
1370AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1371OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1372mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:55,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
137300000000 50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
137400000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
137500000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
137600000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1377dnl
1378OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1379mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:55,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
138000000000 50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
138100000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
138200000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
138300000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1384dnl
1385OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1386mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:55,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
138700000000 50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
138800000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
138900000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
139000000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1391])
1392
1393dnl Modified MPLS controller action.
1394dnl In this test, we push the VLAN tag before pushing a MPLS tag, but these
1395dnl actions are reordered, so we see both of these in the final flow.
1396AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1397
1398for i in 1 2 3; do
1399 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:54:56,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no)'
1400done
1401OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1402ovs-appctl -t ovs-ofctl exit
1403
1404AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1405OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1406mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:56,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
140700000000 50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
140800000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
140900000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
141000000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
141100000040 00 00 00 00
1412dnl
1413OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1414mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:56,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
141500000000 50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
141600000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
141700000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
141800000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
141900000040 00 00 00 00
1420dnl
1421OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1422mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:56,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
142300000000 50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
142400000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
142500000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
142600000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
142700000040 00 00 00 00
1428])
1429
1430dnl Modified MPLS controller action.
1431dnl In this test, the input packet in vlan-tagged, which should be stripped
1432dnl before we push the MPLS and VLAN tags.
1433AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 -m 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1434
1435for i in 1 2 3; do
1436 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:54:57,dst=50:54:00:00:00:07),eth_type(0x8100),vlan(vid=88,pcp=7),encap(eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no))'
1437done
1438OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1439ovs-appctl -t ovs-ofctl exit
1440
1441AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1442OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1443mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:57,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
144400000000 50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
144500000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
144600000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
144700000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1448dnl
1449OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1450mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:57,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
145100000000 50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
145200000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
145300000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
145400000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1455dnl
1456OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1457mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:57,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
145800000000 50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
145900000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
146000000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
146100000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1462])
1463
1464dnl Modified MPLS controller action.
1465dnl In this test, the input packet in vlan-tagged, which should be stripped
1466dnl before we push the MPLS and VLAN tags.
1467AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1468
1469for i in 1 2 3; do
1470 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:54:58,dst=50:54:00:00:00:07),eth_type(0x8100),vlan(vid=88,pcp=7),encap(eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no))'
1471done
1472OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1473ovs-appctl -t ovs-ofctl exit
1474
1475AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1476OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1477mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:58,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
147800000000 50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
147900000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
148000000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
148100000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1482dnl
1483OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1484mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:58,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
148500000000 50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
148600000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
148700000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
148800000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1489dnl
1490OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1491mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:58,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
149200000000 50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
149300000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
149400000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
149500000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1496])
1497
1498dnl Modified MPLS controller action.
1499dnl In this test, the input packet in vlan-tagged, which should be modified
1500dnl before we push MPLS and VLAN tags.
1501AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1502
1503for i in 1 2 3; do
1504 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:54:59,dst=50:54:00:00:00:07),eth_type(0x8100),vlan(vid=88,pcp=7),encap(eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no))'
1505done
1506OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1507ovs-appctl -t ovs-ofctl exit
1508
1509AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1510OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1511mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:59,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
151200000000 50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
151300000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
151400000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
151500000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1516dnl
1517OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1518mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:59,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
151900000000 50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
152000000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
152100000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
152200000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1523dnl
1524OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1525mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:59,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
152600000000 50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
152700000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
152800000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
152900000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1530])
1531
1532AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1533AT_CHECK([ovs-ofctl --protocols=OpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1534 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:54:50 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],push_vlan:0x8100,set_field:4195->vlan_vid,set_field:1->vlan_pcp,CONTROLLER:65535
1535 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:54:51 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],push_vlan:0x8100,set_field:4195->vlan_vid,set_field:1->vlan_pcp,CONTROLLER:65535
1536 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:54:52 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],push_vlan:0x8100,load:0x63->OXM_OF_VLAN_VID[[]],set_field:1->vlan_pcp,CONTROLLER:65535
1537 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:54:53 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],push_vlan:0x8100,load:0x63->OXM_OF_VLAN_VID[[]],set_field:1->vlan_pcp,CONTROLLER:65535
1538 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:54:54 actions=push_vlan:0x8100,set_field:4195->vlan_vid,set_field:1->vlan_pcp,push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
1539 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:54:55 actions=push_vlan:0x8100,set_field:4195->vlan_vid,set_field:1->vlan_pcp,push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
1540 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:54:56 actions=push_vlan:0x8100,load:0x63->OXM_OF_VLAN_VID[[]],set_field:1->vlan_pcp,push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
1541 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:54:57 actions=push_vlan:0x8100,load:0x63->OXM_OF_VLAN_VID[[]],set_field:1->vlan_pcp,push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
1542 cookie=0xa, n_packets=3, n_bytes=180, vlan_tci=0x1000/0x1000,dl_src=40:44:44:44:54:58 actions=load:0x63->OXM_OF_VLAN_VID[[]],set_field:1->vlan_pcp,push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
1543 cookie=0xa, n_packets=3, n_bytes=180, vlan_tci=0x1000/0x1000,dl_src=40:44:44:44:54:59 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],set_field:1->vlan_pcp,load:0x63->OXM_OF_VLAN_VID[[]],CONTROLLER:65535
1544OFPST_FLOW reply (OF1.2):
1545])
1546
1547OVS_VSWITCHD_STOP
1548AT_CLEANUP
1549
7257b535 1550AT_SETUP([ofproto-dpif - fragment handling])
023e1e0a 1551OVS_VSWITCHD_START
72d64e33 1552ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [90])
7257b535
BP
1553AT_DATA([flows.txt], [dnl
1554priority=75 tcp ip_frag=no tp_dst=80 actions=output:1
1555priority=75 tcp ip_frag=first tp_dst=80 actions=output:2
1556priority=75 tcp ip_frag=later tp_dst=80 actions=output:3
1557priority=50 tcp ip_frag=no actions=output:4
1558priority=50 tcp ip_frag=first actions=output:5
1559priority=50 tcp ip_frag=later actions=output:6
1560])
1561AT_CHECK([ovs-ofctl replace-flows br0 flows.txt])
1562
a61680c6 1563base_flow="in_port(90),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=128"
7257b535
BP
1564no_flow="$base_flow,frag=no),tcp(src=12345,dst=80)"
1565first_flow="$base_flow,frag=first),tcp(src=12345,dst=80)"
1566later_flow="$base_flow,frag=later)"
1567
1568 # mode no first later
1569for tuple in \
1570 'normal 1 5 6' \
1571 'drop 1 drop drop' \
1572 'nx-match 1 2 6'
1573do
1574 set $tuple
1575 mode=$1
1576 no=$2
1577 first=$3
1578 later=$4
1579
1580 AT_CHECK([ovs-ofctl set-frags br0 $mode])
1581 for type in no first later; do
1582 eval flow=\$${type}_flow exp_output=\$$type
7fd51d39 1583 printf "\n%s\n" "----$mode $type-----"
50aa28fd 1584 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
7fd51d39
BP
1585 : > expout
1586 if test $mode = drop && test $type != no; then
1587 echo 'Packets dropped because they are IP fragments and the fragment handling mode is "drop".' >> expout
1588 fi
1589 echo "Datapath actions: $exp_output" >> expout
1590 AT_CHECK([grep 'IP fragments' stdout; tail -1 stdout], [0], [expout])
7257b535
BP
1591 done
1592done
023e1e0a 1593OVS_VSWITCHD_STOP
7257b535 1594AT_CLEANUP
848e8809
EJ
1595
1596AT_SETUP([ofproto-dpif - exit])
1597OVS_VSWITCHD_START
f7b8e494 1598ADD_OF_PORTS([br0], [1], [2], [3], [10], [11], [12], [13], [14])
848e8809
EJ
1599AT_DATA([flows.txt], [dnl
1600in_port=1 actions=output:10,exit,output:11
1601in_port=2 actions=output:12,resubmit:1,output:12
1602in_port=3 actions=output:13,resubmit:2,output:14
1603])
1604AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
50aa28fd 1605AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
848e8809
EJ
1606AT_CHECK([tail -1 stdout], [0],
1607 [Datapath actions: 10
1608])
50aa28fd 1609AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(2),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
848e8809
EJ
1610AT_CHECK([tail -1 stdout], [0],
1611 [Datapath actions: 12,10
1612])
50aa28fd 1613AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(3),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
848e8809
EJ
1614AT_CHECK([tail -1 stdout], [0],
1615 [Datapath actions: 13,12,10
1616])
1617OVS_VSWITCHD_STOP
1618AT_CLEANUP
c06bba01
JP
1619
1620
1621AT_SETUP([ofproto-dpif - mirroring, select_all])
432fca23
BP
1622OVS_VSWITCHD_START
1623ADD_OF_PORTS([br0], 1, 2, 3)
1624ovs-vsctl \
c06bba01
JP
1625 set Bridge br0 mirrors=@m --\
1626 --id=@p3 get Port p3 --\
432fca23 1627 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
c06bba01 1628
c06bba01
JP
1629AT_DATA([flows.txt], [dnl
1630in_port=1 actions=output:2
1631in_port=2 actions=output:1
1632])
1633AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1634
247527db 1635flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
50aa28fd 1636AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01 1637AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 1638 [Datapath actions: 2,3
c06bba01
JP
1639])
1640
247527db 1641flow="in_port(2),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
50aa28fd 1642AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01 1643AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 1644 [Datapath actions: 1,3
c06bba01
JP
1645])
1646
1647OVS_VSWITCHD_STOP
1648AT_CLEANUP
1649
1650
1651AT_SETUP([ofproto-dpif - mirroring, select_src])
432fca23
BP
1652OVS_VSWITCHD_START
1653ADD_OF_PORTS([br0], 1, 2, 3)
1654ovs-vsctl \
c06bba01
JP
1655 set Bridge br0 mirrors=@m --\
1656 --id=@p1 get Port p1 -- --id=@p3 get Port p3 --\
432fca23 1657 --id=@m create Mirror name=mymirror select_src_port=@p1 output_port=@p3
c06bba01 1658
c06bba01
JP
1659AT_DATA([flows.txt], [dnl
1660in_port=1 actions=output:2
1661in_port=2 actions=output:1
1662])
1663AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1664
247527db 1665flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
50aa28fd 1666AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01 1667AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 1668 [Datapath actions: 2,3
c06bba01
JP
1669])
1670
247527db 1671flow="in_port(2),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
50aa28fd 1672AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01 1673AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 1674 [Datapath actions: 1
c06bba01
JP
1675])
1676OVS_VSWITCHD_STOP
1677AT_CLEANUP
1678
33158a18 1679AT_SETUP([ofproto-dpif - mirroring, OFPP_NONE ingress port])
432fca23
BP
1680OVS_VSWITCHD_START
1681ADD_OF_PORTS([br0], 1, 2)
1682ovs-vsctl \
33158a18
JP
1683 set Bridge br0 mirrors=@m --\
1684 --id=@p2 get Port p2 --\
432fca23 1685 --id=@m create Mirror name=mymirror select_all=true output_port=@p2
33158a18 1686
33158a18
JP
1687AT_CHECK([ovs-ofctl add-flow br0 action=output:1])
1688
1689# "in_port" defaults to OFPP_NONE if it's not specified.
72d64e33 1690flow="icmp,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_ttl=128,icmp_type=8,icmp_code=0"
33158a18
JP
1691AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
1692AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 1693 [Datapath actions: 1,2
33158a18
JP
1694])
1695
1696OVS_VSWITCHD_STOP
1697AT_CLEANUP
1698
c06bba01
JP
1699
1700AT_SETUP([ofproto-dpif - mirroring, select_dst])
432fca23
BP
1701OVS_VSWITCHD_START
1702ADD_OF_PORTS([br0], 1, 2, 3)
1703ovs-vsctl \
c06bba01
JP
1704 set Bridge br0 mirrors=@m --\
1705 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
432fca23 1706 --id=@m create Mirror name=mymirror select_dst_port=@p2 output_port=@p3
c06bba01 1707
c06bba01
JP
1708AT_DATA([flows.txt], [dnl
1709in_port=1 actions=output:2
1710in_port=2 actions=output:1
1711])
1712AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1713
247527db 1714flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
50aa28fd 1715AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01 1716AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 1717 [Datapath actions: 2,3
c06bba01
JP
1718])
1719
247527db 1720flow="in_port(2),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
50aa28fd 1721AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01 1722AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 1723 [Datapath actions: 1
c06bba01
JP
1724])
1725
1726OVS_VSWITCHD_STOP
1727AT_CLEANUP
1728
1729
1730AT_SETUP([ofproto-dpif - mirroring, select_vlan])
432fca23
BP
1731OVS_VSWITCHD_START
1732ADD_OF_PORTS([br0], 1, 2, 3)
1733ovs-vsctl \
c06bba01
JP
1734 set Bridge br0 mirrors=@m --\
1735 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
432fca23 1736 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
c06bba01 1737
c06bba01
JP
1738AT_DATA([flows.txt], [dnl
1739in_port=1, actions=output:2
1740])
1741AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1742
247527db 1743flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
50aa28fd 1744AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01 1745AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 1746 [Datapath actions: 2
c06bba01
JP
1747])
1748
247527db 1749flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x8100),vlan(vid=10,pcp=0),encap(eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0))"
50aa28fd 1750AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01 1751AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 1752 [Datapath actions: 2
c06bba01
JP
1753])
1754
247527db 1755flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x8100),vlan(vid=11,pcp=0),encap(eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0))"
50aa28fd 1756AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01 1757AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 1758 [Datapath actions: 2,3
c06bba01
JP
1759])
1760
1761OVS_VSWITCHD_STOP
1762AT_CLEANUP
1763
1764
1765AT_SETUP([ofproto-dpif - mirroring, output_port])
432fca23
BP
1766OVS_VSWITCHD_START
1767ADD_OF_PORTS([br0], 1, 2, 3)
1768ovs-vsctl \
c06bba01
JP
1769 set Bridge br0 mirrors=@m --\
1770 --id=@p3 get Port p3 --\
432fca23 1771 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
c06bba01 1772
c06bba01
JP
1773AT_DATA([flows.txt], [dnl
1774in_port=1 actions=mod_vlan_vid:17,output:2
1775in_port=2 actions=output:1
1776])
1777AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1778
247527db 1779flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
50aa28fd 1780AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01 1781AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 1782 [Datapath actions: push_vlan(vid=17,pcp=0),2,pop_vlan,3
c06bba01
JP
1783])
1784
247527db 1785flow="in_port(2),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
50aa28fd 1786AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01 1787AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 1788 [Datapath actions: 1,3
c06bba01
JP
1789])
1790
1791OVS_VSWITCHD_STOP
1792AT_CLEANUP
1793
c06bba01 1794AT_SETUP([ofproto-dpif - mirroring, output_vlan])
432fca23
BP
1795OVS_VSWITCHD_START
1796ADD_OF_PORTS([br0], 1, 2)
1797ovs-vsctl \
c06bba01 1798 set Bridge br0 mirrors=@m --\
432fca23 1799 --id=@m create Mirror name=mymirror select_all=true output_vlan=12
c06bba01 1800
c06bba01
JP
1801AT_DATA([flows.txt], [dnl
1802in_port=1 actions=output:2
1803in_port=2 actions=mod_vlan_vid:17,output:1
1804])
1805AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1806
247527db 1807flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
50aa28fd 1808AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01
JP
1809actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1810
e44768b7 1811expected="2,push_vlan(vid=12,pcp=0),1,2,100"
247527db 1812AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
c06bba01 1813mv stdout expout
247527db 1814AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
c06bba01 1815
247527db 1816flow="in_port(2),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
50aa28fd 1817AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01
JP
1818actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1819
e44768b7 1820expected="push_vlan(vid=17,pcp=0),1,pop_vlan,push_vlan(vid=12,pcp=0),1,2,100"
247527db 1821AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
c06bba01 1822mv stdout expout
247527db 1823AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
c06bba01
JP
1824
1825OVS_VSWITCHD_STOP
1826AT_CLEANUP
b44a10b7 1827
22bb3cbc
AW
1828# Two testcases below are for the ofproto/trace command
1829# The first one tests all correct syntax:
1830# ofproto/trace [dp_name] odp_flow [-generate|packet]
1831# ofproto/trace br_name br_flow [-generate|packet]
1832AT_SETUP([ofproto-dpif - ofproto/trace command 1])
1833OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
1834ADD_OF_PORTS([br0], 1, 2, 3)
1835
1836AT_DATA([flows.txt], [dnl
1837in_port=1 actions=output:2
1838in_port=2 actions=output:1
1839])
1840AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1841
0a37839c 1842odp_flow="in_port(p1)"
22bb3cbc 1843br_flow="in_port=1"
0a37839c
GS
1844# Test command: ofproto/trace odp_flow with in_port as a name.
1845AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
1846AT_CHECK([tail -1 stdout], [0], [dnl
1847Datapath actions: 2
1848])
1849
1850odp_flow="in_port(1)"
22bb3cbc
AW
1851# Test command: ofproto/trace odp_flow
1852AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
1853AT_CHECK([tail -1 stdout], [0], [dnl
1854Datapath actions: 2
1855])
1856
1857# Test command: ofproto/trace dp_name odp_flow
1858AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$odp_flow"], [0], [stdout])
1859AT_CHECK([tail -1 stdout], [0], [dnl
1860Datapath actions: 2
1861])
1862# Test commmand: ofproto/trace br_name br_flow
1863AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
1864AT_CHECK([tail -1 stdout], [0], [dnl
1865Datapath actions: 2
1866])
1867
1868# Delete the inserted flows
1869AT_CHECK([ovs-ofctl del-flows br0 "in_port=1"], [0], [stdout])
1870AT_CHECK([ovs-ofctl del-flows br0 "in_port=2"], [0], [stdout])
1871
1872# This section beflow tests the [-generate] option
1873odp_flow="in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff)"
1874br_flow="arp,metadata=0,in_port=3,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=ff:ff:ff:ff:ff:ff"
1875
1876# Test command: ofproto/trace odp_flow
1877AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
1878# Check for no MAC learning entry
1879AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1880 port VLAN MAC Age
1881])
1882
1883# Test command: ofproto/trace br_name br_flow
1884AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
1885# Check for no MAC learning entry
1886AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1887 port VLAN MAC Age
1888])
1889
1890# Test command: ofproto/trace odp_flow -generate
1891AT_CHECK([ovs-appctl ofproto/trace "$odp_flow" -generate], [0], [stdout])
1892# Check for the MAC learning entry
1893AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1894 port VLAN MAC Age
1895 3 0 50:54:00:00:00:05 ?
1896])
1897
1898# Test command: ofproto/trace dp_name odp_flow -generate
1899AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1900 "in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05)" \
1901 -generate], [0], [stdout])
1902# Check for both MAC learning entries
1903AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1904 port VLAN MAC Age
1905 3 0 50:54:00:00:00:05 ?
1906 1 0 50:54:00:00:00:06 ?
1907])
1908
1909# Test command: ofproto/trace br_name br_flow -generate
1910AT_CHECK([ovs-appctl ofproto/trace br0 \
1911 "in_port=2,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:06" \
1912 -generate], [0], [stdout])
1913# Check for both MAC learning entries.
1914AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1915 port VLAN MAC Age
1916 3 0 50:54:00:00:00:05 ?
1917 1 0 50:54:00:00:00:06 ?
1918 2 0 50:54:00:00:00:07 ?
1919])
1920
1921# This section beflow tests the [packet] option
1922# The ovs-tcpundump of packets between port1 and port2
1923pkt1to2="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
1924pkt2to1="50540000000150540000000208064500001C000100004001F98CC0A80002C0A800010800F7FF00000000"
1925
1926# Construct the MAC learning table
1927AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1928 "in_port(1),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff)" \
1929 -generate], [0], [stdout])
1930
1931# Construct the MAC learning table
1932AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1933 "in_port(2),eth(src=50:54:00:00:00:02,dst=ff:ff:ff:ff:ff:ff)" \
1934 -generate], [0], [stdout])
1935
1936# Test command: ofproto/trace odp_flow packet
1937AT_CHECK([ovs-appctl ofproto/trace \
1938 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
1939AT_CHECK([tail -1 stdout], [0], [dnl
1940Datapath actions: 2
1941])
b6f00895 1942AT_CHECK([head -n 2 stdout], [0], [dnl
22bb3cbc 1943Bridge: br0
1362e248 1944Flow: pkt_mark=0x2,skb_priority=0x1,arp,metadata=0,in_port=1,vlan_tci=0x0000,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02,arp_spa=0.0.0.0,arp_tpa=0.0.0.0,arp_sha=00:00:00:00:00:00,arp_tha=00:00:00:00:00:00
22bb3cbc
AW
1945])
1946
1947# Test command: ofproto/trace dp_name odp_flow packet
1948AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1949 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
1950AT_CHECK([tail -1 stdout], [0], [dnl
1951Datapath actions: 2
1952])
b6f00895 1953AT_CHECK([head -n 2 stdout], [0], [dnl
22bb3cbc 1954Bridge: br0
1362e248 1955Flow: pkt_mark=0x2,skb_priority=0x1,arp,metadata=0,in_port=1,vlan_tci=0x0000,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02,arp_spa=0.0.0.0,arp_tpa=0.0.0.0,arp_sha=00:00:00:00:00:00,arp_tha=00:00:00:00:00:00
22bb3cbc
AW
1956])
1957
1958# Test command: ofproto/trace br_name br_flow packet
1959AT_CHECK([ovs-appctl ofproto/trace br0 \
1362e248 1960 "in_port=2,skb_priority=2,pkt_mark=1" "$pkt2to1"], [0], [stdout],[stderr])
22bb3cbc 1961AT_CHECK([tail -1 stdout], [0], [dnl
ed2e7245 1962Datapath actions: 1
22bb3cbc
AW
1963])
1964AT_CHECK([head -n 2 stdout], [0], [dnl
b6f00895 1965Bridge: br0
1362e248 1966Flow: pkt_mark=0x1,skb_priority=0x2,arp,metadata=0,in_port=2,vlan_tci=0x0000,dl_src=50:54:00:00:00:02,dl_dst=50:54:00:00:00:01,arp_spa=0.0.0.0,arp_tpa=0.0.0.0,arp_sha=00:00:00:00:00:00,arp_tha=00:00:00:00:00:00
22bb3cbc
AW
1967])
1968
1969OVS_VSWITCHD_STOP
1970AT_CLEANUP
1971
1972# The second test tests the corner cases
1973AT_SETUP([ofproto-dpif - ofproto/trace command 2])
1974OVS_VSWITCHD_START
1975ADD_OF_PORTS([br0], 1, 2)
1976
1977# Define flows
1978odp_flow="in_port(1),eth(src=50:54:00:00:00:01,dst=50:54:00:00:00:02)"
1979br_flow="in_port=1,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02"
1980# Define options
1981generate="-generate"
1982pkt="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
1983
1984# Test incorrect command: ofproto/trace wrong_name odp_flow [-generate|packet]
1985m4_foreach(
1986[option],
1987[[],
1988["$generate"],
1989["$pkt"]],
1990[AT_CHECK([ovs-appctl ofproto/trace wrong_name "$odp_flow" option],
1991 [2], [], [stderr])
1992AT_CHECK([tail -2 stderr], [0], [dnl
0a37839c 1993Cannot find the datapath
22bb3cbc
AW
1994ovs-appctl: ovs-vswitchd: server returned an error
1995])])
1996
1997# Test incorrect command: ofproto/trace empty_string odp_flow [-generate|packet]
1998m4_foreach(
1999[option],
2000[[],
2001["$generate"],
2002["$pkt"]],
2003[AT_CHECK([ovs-appctl ofproto/trace "" "$odp_flow" option],
2004 [2], [], [stderr])
2005AT_CHECK([tail -2 stderr], [0], [dnl
0a37839c 2006Cannot find the datapath
22bb3cbc
AW
2007ovs-appctl: ovs-vswitchd: server returned an error
2008])])
2009
2010# Test incorrect command: ofproto/trace nonexist_dp_name odp_flow [-generate|packet]
2011m4_foreach(
2012[option],
2013[[],
2014["$generate"],
2015["$pkt"]],
2016[AT_CHECK([ovs-appctl ofproto/trace ovs-system "$odp_flow" option],
2017 [2], [], [stderr])
2018AT_CHECK([tail -2 stderr], [0], [dnl
0a37839c 2019Cannot find the datapath
22bb3cbc
AW
2020ovs-appctl: ovs-vswitchd: server returned an error
2021])])
2022
2023# Test incorrect command: ofproto/trace br_name odp_flow [-generate|packet]
2024m4_foreach(
2025[option],
2026[[],
2027["$generate"],
2028["$pkt"]],
2029[AT_CHECK([ovs-appctl ofproto/trace br0 "$odp_flow" option],
2030 [2], [], [stderr])
2031AT_CHECK([tail -2 stderr], [0], [dnl
0a37839c 2032Cannot find the datapath
22bb3cbc
AW
2033ovs-appctl: ovs-vswitchd: server returned an error
2034])])
2035
2036# Test incorrect command: ofproto/trace dp_name br_flow [-generate|packet]
2037m4_foreach(
2038[option],
2039[[],
2040["$generate"],
2041["$pkt"]],
2042[AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$br_flow" option],
2043 [2], [], [stderr])
2044AT_CHECK([tail -2 stderr], [0], [dnl
2045Unknown bridge name
2046ovs-appctl: ovs-vswitchd: server returned an error
2047])])
2048
2049# Test incorrect command: ofproto/trace br_flow [-generate|packet]
2050m4_foreach(
2051[option],
2052[[],
2053["$generate"],
2054["$pkt"]],
2055[AT_CHECK([ovs-appctl ofproto/trace "$br_flow" option],
2056 [2], [], [stderr])
2057AT_CHECK([tail -2 stderr], [0], [dnl
2058Must specify bridge name
2059ovs-appctl: ovs-vswitchd: server returned an error
2060])])
2061
2062# Test incorrect command: ofproto/trace dp_name odp_flow garbage_option
2063AT_CHECK([ovs-appctl ofproto/trace \
2064 ovs-dummy "$odp_flow" garbage_option],
2065 [2], [stdout],[stderr])
2066AT_CHECK([tail -2 stderr], [0], [dnl
2067Trailing garbage in packet data
2068ovs-appctl: ovs-vswitchd: server returned an error
2069])
2070
2071# Test incorrect command: ofproto/trace with 4 arguments
2072AT_CHECK([ovs-appctl ofproto/trace \
2073 arg1, arg2, arg3, arg4], [2], [stdout],[stderr])
2074AT_CHECK([tail -2 stderr], [0], [dnl
2075"ofproto/trace" command takes at most 3 arguments
2076ovs-appctl: ovs-vswitchd: server returned an error
2077])
2078
2079# Test incorrect command: ofproto/trace with 0 argument
2080AT_CHECK([ovs-appctl ofproto/trace ], [2], [stdout],[stderr])
2081AT_CHECK([tail -2 stderr], [0], [dnl
2082"ofproto/trace" command requires at least 1 arguments
2083ovs-appctl: ovs-vswitchd: server returned an error
2084])
2085
2086OVS_VSWITCHD_STOP
2087AT_CLEANUP
2088
aee0979b
BP
2089AT_SETUP([ofproto-dpif - ofproto/trace-packet-out])
2090OVS_VSWITCHD_START
2091ADD_OF_PORTS([br0], 1, 2, 3)
2092
2093AT_DATA([flows.txt], [dnl
2094in_port=1 actions=output:2
2095in_port=2 actions=output:1
2096])
2097AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2098
2099AT_CHECK([ovs-appctl ofproto/trace-packet-out br0 in_port=1 'mod_vlan_vid:123,resubmit(,0)'], [0], [stdout])
2100AT_CHECK([tail -1 stdout], [0], [dnl
2101Datapath actions: push_vlan(vid=123,pcp=0),2
2102])
2103
2104OVS_VSWITCHD_STOP
2105AT_CLEANUP
2106
2107
b44a10b7
BP
2108m4_define([OFPROTO_TRACE],
2109 [flow="$2"
2110 AT_CHECK([ovs-appctl ofproto/trace $1 "$flow" $3], [0], [stdout])
2111 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
2112 expected="$4"
2113 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected" $5],
2114 [0], [stdout])
2115 mv stdout expout
2116 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual" $5],
2117 [0], [expout])])
2118
2119AT_SETUP([ofproto-dpif - MAC learning])
432fca23
BP
2120OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
2121ADD_OF_PORTS([br0], 1, 2, 3)
b44a10b7 2122
b44a10b7
BP
2123arp='eth_type(0x0806),arp(sip=192.168.0.1,tip=192.168.0.2,op=1,sha=50:54:00:00:00:05,tha=00:00:00:00:00:00)'
2124
2125# Trace an ARP packet arriving on p3, to create a MAC learning entry.
2126OFPROTO_TRACE(
50aa28fd 2127 [ovs-dummy],
247527db 2128 [in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
b44a10b7 2129 [-generate],
e44768b7 2130 [1,2,100])
b44a10b7
BP
2131
2132# Check for the MAC learning entry.
83664f72 2133AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
b44a10b7 2134 port VLAN MAC Age
247527db 2135 3 0 50:54:00:00:00:05 ?
b44a10b7
BP
2136])
2137
2138# Trace a packet arrival destined for the learned MAC.
2139# (This will also learn a MAC.)
2140OFPROTO_TRACE(
50aa28fd 2141 [ovs-dummy],
247527db 2142 [in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05),$arp],
b44a10b7 2143 [-generate],
247527db 2144 [3])
b44a10b7
BP
2145
2146# Check for both MAC learning entries.
83664f72 2147AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
b44a10b7 2148 port VLAN MAC Age
247527db
BP
2149 3 0 50:54:00:00:00:05 ?
2150 1 0 50:54:00:00:00:06 ?
b44a10b7
BP
2151])
2152
2153# Trace a packet arrival that updates the first learned MAC entry.
2154OFPROTO_TRACE(
50aa28fd 2155 [ovs-dummy],
247527db 2156 [in_port(2),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
b44a10b7 2157 [-generate],
e44768b7 2158 [1,3,100])
b44a10b7
BP
2159
2160# Check that the MAC learning entry was updated.
83664f72 2161AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
b44a10b7 2162 port VLAN MAC Age
247527db
BP
2163 1 0 50:54:00:00:00:06 ?
2164 2 0 50:54:00:00:00:05 ?
b44a10b7
BP
2165])
2166
2167# Add another bridge.
2168AT_CHECK(
2169 [ovs-vsctl \
2170 -- add-br br1 \
ad28062f
BP
2171 -- set bridge br1 datapath-type=dummy])
2172ADD_OF_PORTS([br1], 4, 5)
b44a10b7
BP
2173
2174# Trace some packet arrivals in br1 to create MAC learning entries there too.
2175OFPROTO_TRACE(
50aa28fd 2176 [ovs-dummy],
247527db 2177 [in_port(4),eth(src=50:54:00:00:00:06,dst=ff:ff:ff:ff:ff:ff),$arp],
b44a10b7 2178 [-generate],
e44768b7 2179 [5,101])
b44a10b7 2180OFPROTO_TRACE(
50aa28fd 2181 [ovs-dummy],
247527db 2182 [in_port(5),eth(src=50:54:00:00:00:07,dst=ff:ff:ff:ff:ff:ff),$arp],
b44a10b7 2183 [-generate],
e44768b7 2184 [4,101])
b44a10b7
BP
2185
2186# Check that the MAC learning entries were added.
83664f72 2187AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
b44a10b7 2188 port VLAN MAC Age
247527db
BP
2189 4 0 50:54:00:00:00:06 ?
2190 5 0 50:54:00:00:00:07 ?
b44a10b7
BP
2191])
2192
2193# Delete port p1 and see that its MAC learning entry disappeared, and
2194# that the MAC learning entry for the same MAC was also deleted from br1.
2195AT_CHECK([ovs-vsctl del-port p1])
83664f72 2196AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
b44a10b7 2197 port VLAN MAC Age
247527db 2198 2 0 50:54:00:00:00:05 ?
b44a10b7 2199])
83664f72 2200AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
b44a10b7 2201 port VLAN MAC Age
247527db 2202 5 0 50:54:00:00:00:07 ?
b44a10b7
BP
2203])
2204
2205OVS_VSWITCHD_STOP
2206AT_CLEANUP
17f7f7e0 2207
c4069512
BP
2208AT_SETUP([ofproto-dpif - MAC table overflow])
2209OVS_VSWITCHD_START(
ad28062f
BP
2210 [set bridge br0 fail-mode=standalone other-config:mac-table-size=10])
2211ADD_OF_PORTS([br0], 1, 2, 3)
c4069512
BP
2212
2213arp='eth_type(0x0806),arp(sip=192.168.0.1,tip=192.168.0.2,op=1,sha=50:54:00:00:00:05,tha=00:00:00:00:00:00)'
2214
2215AT_CHECK([ovs-appctl time/stop])
2216
2217# Trace 10 ARP packets arriving on p3, to create MAC learning entries.
2218for i in 0 1 2 3 4 5 6 7 8 9; do
2219 OFPROTO_TRACE(
50aa28fd 2220 [ovs-dummy],
c4069512
BP
2221 [in_port(3),eth(src=50:54:00:00:00:0$i,dst=ff:ff:ff:ff:ff:ff),$arp],
2222 [-generate],
2223 [1,2,100])
2224 ovs-appctl time/warp 1000
2225done
2226
2227# Check for the MAC learning entries.
2228AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
2229 [0], [dnl
2230 3 0 50:54:00:00:00:00
2231 3 0 50:54:00:00:00:01
2232 3 0 50:54:00:00:00:02
2233 3 0 50:54:00:00:00:03
2234 3 0 50:54:00:00:00:04
2235 3 0 50:54:00:00:00:05
2236 3 0 50:54:00:00:00:06
2237 3 0 50:54:00:00:00:07
2238 3 0 50:54:00:00:00:08
2239 3 0 50:54:00:00:00:09
2240 port VLAN MAC Age
2241])
2242
2243# Trace another ARP packet on another MAC.
2244OFPROTO_TRACE(
50aa28fd 2245 [ovs-dummy],
c4069512
BP
2246 [in_port(3),eth(src=50:54:00:00:00:10,dst=ff:ff:ff:ff:ff:ff),$arp],
2247 [-generate],
2248 [1,2,100])
2249
2250# Check that the new one chased the oldest one out of the table.
2251AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/' | sort],
2252 [0], [dnl
2253 3 0 50:54:00:00:00:01 ?
2254 3 0 50:54:00:00:00:02 ?
2255 3 0 50:54:00:00:00:03 ?
2256 3 0 50:54:00:00:00:04 ?
2257 3 0 50:54:00:00:00:05 ?
2258 3 0 50:54:00:00:00:06 ?
2259 3 0 50:54:00:00:00:07 ?
2260 3 0 50:54:00:00:00:08 ?
2261 3 0 50:54:00:00:00:09 ?
2262 3 0 50:54:00:00:00:10 ?
2263 port VLAN MAC Age
2264])
2265OVS_VSWITCHD_STOP
2266AT_CLEANUP
2267
e731d71b
AS
2268# CHECK_SFLOW_SAMPLING_PACKET(LOOPBACK_ADDR, ADDR_WITHOUT_BRACKETS)
2269#
2270# Test that sFlow samples packets correctly using IPv4/IPv6 sFlow collector
2271#
2272# IP_VERSION_TYPE is used in AT_SETUP
2273m4_define([CHECK_SFLOW_SAMPLING_PACKET],
2274 [AT_SETUP([ofproto-dpif - sFlow packet sampling - $2 collector])
2275 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
2276
2277 ON_EXIT([kill `cat test-sflow.pid`])
2278 AT_CHECK([test-sflow --log-file --detach --no-chdir --pidfile 0:$1 > sflow.log], [0], [], [ignore])
2279 AT_CAPTURE_FILE([sflow.log])
2280 SFLOW_PORT=`parse_listening_port < test-sflow.log`
2281 ovs-appctl time/stop
2282
2283 ADD_OF_PORTS([br0], 1, 2)
2284 ovs-vsctl \
2285 set Interface br0 options:ifindex=1002 -- \
2286 set Interface p1 options:ifindex=1004 -- \
2287 set Interface p2 options:ifindex=1003 -- \
2288 set Bridge br0 sflow=@sf -- \
2289 --id=@sf create sflow targets=\"$1:$SFLOW_PORT\" \
2290 header=128 sampling=1 polling=1 agent=lo
2291
2292 dnl open with ARP packets to seed the bridge-learning. The output
2293 dnl ifIndex numbers should be reported predictably after that.
2294 dnl Since we set sampling=1 we should see all of these packets
2295 dnl reported. Sorting the output by data-source and seqNo makes
2296 dnl it deterministic. Ensuring that we send at least two packets
2297 dnl into each port means we get to check the seq nos are
2298 dnl incrementing correctly.
2299 dnl because packets from different ports can be handled by separate
2300 dnl threads, put some sleeps
2301
2302 ovs-appctl netdev-dummy/receive p1 'in_port(2),eth(src=50:54:00:00:00:05,dst=FF:FF:FF:FF:FF:FF),eth_type(0x0806),arp(sip=192.168.0.2,tip=192.168.0.1,op=1,sha=50:54:00:00:00:05,tha=00:00:00:00:00:00)'
2303 sleep 1
2304 ovs-appctl netdev-dummy/receive p2 'in_port(1),eth(src=50:54:00:00:00:07,dst=FF:FF:FF:FF:FF:FF),eth_type(0x0806),arp(sip=192.168.0.1,tip=192.168.0.2,op=1,sha=50:54:00:00:00:07,tha=00:00:00:00:00:00)'
2305 sleep 1
2306 ovs-appctl netdev-dummy/receive p1 'in_port(2),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'
2307 sleep 1
2308 ovs-appctl netdev-dummy/receive p2 'in_port(1),eth(src=50:54:00:00:00:07,dst=50:54:00:00:00:05),eth_type(0x0800),ipv4(src=192.168.0.2,dst=192.168.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=0,code=0)'
2309 ovs-appctl netdev-dummy/receive p2 'in_port(1),eth(src=50:54:00:00:00:07,dst=50:54:00:00:00:05),eth_type(0x86dd),ipv6(src=fe80::1,dst=fe80::2,label=0,proto=10,tclass=0x70,hlimit=128,frag=no)'
2310
2311 dnl sleep long enough to get more than one counter sample
2312 dnl from each datasource so we can check sequence numbers
2313 for i in `seq 1 30`; do
2314 ovs-appctl time/warp 100
2315 done
2316 OVS_VSWITCHD_STOP
2317 ovs-appctl -t test-sflow exit
8073dd31 2318
e731d71b 2319 AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'HEADER|ERROR' | sed 's/ /\
8073dd31
NM
2320 /g']], [0], [dnl
2321HEADER
2322 dgramSeqNo=1
743cea45 2323 ds=127.0.0.1>2:1000
8073dd31
NM
2324 fsSeqNo=1
2325 in_vlan=0
2326 in_priority=0
2327 out_vlan=0
2328 out_priority=0
2329 meanSkip=1
2330 samplePool=1
2331 dropEvents=0
743cea45 2332 in_ifindex=1004
8073dd31
NM
2333 in_format=0
2334 out_ifindex=2
2335 out_format=2
2336 hdr_prot=1
2337 pkt_len=64
2338 stripped=4
2339 hdr_len=60
743cea45 2340 hdr=FF-FF-FF-FF-FF-FF-50-54-00-00-00-05-08-06-00-01-08-00-06-04-00-01-50-54-00-00-00-05-C0-A8-00-02-00-00-00-00-00-00-C0-A8-00-01-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
8073dd31
NM
2341HEADER
2342 dgramSeqNo=1
743cea45 2343 ds=127.0.0.1>2:1000
8073dd31
NM
2344 fsSeqNo=2
2345 in_vlan=0
2346 in_priority=0
2347 out_vlan=0
2348 out_priority=0
2349 meanSkip=1
2350 samplePool=2
2351 dropEvents=0
2352 in_ifindex=1003
2353 in_format=0
743cea45
NM
2354 out_ifindex=2
2355 out_format=2
8073dd31
NM
2356 hdr_prot=1
2357 pkt_len=64
2358 stripped=4
2359 hdr_len=60
743cea45 2360 hdr=FF-FF-FF-FF-FF-FF-50-54-00-00-00-07-08-06-00-01-08-00-06-04-00-01-50-54-00-00-00-07-C0-A8-00-01-00-00-00-00-00-00-C0-A8-00-02-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
8073dd31
NM
2361HEADER
2362 dgramSeqNo=1
743cea45 2363 ds=127.0.0.1>2:1000
8073dd31
NM
2364 fsSeqNo=3
2365 in_vlan=0
2366 in_priority=0
2367 out_vlan=0
2368 out_priority=0
2369 meanSkip=1
2370 samplePool=3
2371 dropEvents=0
743cea45 2372 in_ifindex=1004
8073dd31 2373 in_format=0
743cea45 2374 out_ifindex=1003
8073dd31
NM
2375 out_format=0
2376 hdr_prot=1
2377 pkt_len=64
2378 stripped=4
2379 hdr_len=60
743cea45 2380 hdr=50-54-00-00-00-07-50-54-00-00-00-05-08-00-45-00-00-1C-00-00-00-00-40-01-F9-8D-C0-A8-00-01-C0-A8-00-02-08-00-F7-FF-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
8073dd31
NM
2381HEADER
2382 dgramSeqNo=1
743cea45
NM
2383 ds=127.0.0.1>2:1000
2384 fsSeqNo=4
8073dd31
NM
2385 in_vlan=0
2386 in_priority=0
2387 out_vlan=0
2388 out_priority=0
2389 meanSkip=1
743cea45 2390 samplePool=4
8073dd31 2391 dropEvents=0
743cea45 2392 in_ifindex=1003
8073dd31 2393 in_format=0
743cea45
NM
2394 out_ifindex=1004
2395 out_format=0
8073dd31
NM
2396 hdr_prot=1
2397 pkt_len=64
2398 stripped=4
2399 hdr_len=60
743cea45 2400 hdr=50-54-00-00-00-05-50-54-00-00-00-07-08-00-45-00-00-1C-00-00-00-00-40-01-F9-8D-C0-A8-00-02-C0-A8-00-01-00-00-FF-FF-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
8073dd31
NM
2401HEADER
2402 dgramSeqNo=1
743cea45
NM
2403 ds=127.0.0.1>2:1000
2404 fsSeqNo=5
8073dd31
NM
2405 in_vlan=0
2406 in_priority=0
2407 out_vlan=0
2408 out_priority=0
2409 meanSkip=1
743cea45 2410 samplePool=5
8073dd31 2411 dropEvents=0
743cea45 2412 in_ifindex=1003
8073dd31 2413 in_format=0
743cea45 2414 out_ifindex=1004
8073dd31
NM
2415 out_format=0
2416 hdr_prot=1
2417 pkt_len=64
2418 stripped=4
2419 hdr_len=60
52105b67 2420 hdr=50-54-00-00-00-05-50-54-00-00-00-07-86-DD-67-00-00-00-00-00-0A-80-FE-80-00-00-00-00-00-00-00-00-00-00-00-00-00-01-FE-80-00-00-00-00-00-00-00-00-00-00-00-00-00-02-00-00-00-00-00-00
8073dd31
NM
2421])
2422
e731d71b 2423 AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'IFCOUNTERS|ERROR' | head -6 | sed 's/ /\
8073dd31
NM
2424 /g']], [0], [dnl
2425IFCOUNTERS
2426 dgramSeqNo=2
2427 ds=127.0.0.1>0:1002
2428 csSeqNo=1
2429 ifindex=1002
2430 type=6
2431 ifspeed=100000000
2432 direction=0
2433 status=3
2434 in_octets=0
2435 in_unicasts=0
2436 in_multicasts=0
2437 in_broadcasts=4294967295
2438 in_discards=0
2439 in_errors=0
2440 in_unknownprotos=4294967295
2441 out_octets=120
2442 out_unicasts=2
2443 out_multicasts=4294967295
2444 out_broadcasts=4294967295
2445 out_discards=0
2446 out_errors=0
2447 promiscuous=0
2448IFCOUNTERS
2449 dgramSeqNo=2
2450 ds=127.0.0.1>0:1003
2451 csSeqNo=1
2452 ifindex=1003
2453 type=6
2454 ifspeed=100000000
2455 direction=0
2456 status=0
52105b67 2457 in_octets=138
8073dd31
NM
2458 in_unicasts=3
2459 in_multicasts=0
2460 in_broadcasts=4294967295
2461 in_discards=0
2462 in_errors=0
2463 in_unknownprotos=4294967295
2464 out_octets=120
2465 out_unicasts=2
2466 out_multicasts=4294967295
2467 out_broadcasts=4294967295
2468 out_discards=0
2469 out_errors=0
2470 promiscuous=0
2471IFCOUNTERS
2472 dgramSeqNo=2
2473 ds=127.0.0.1>0:1004
2474 csSeqNo=1
2475 ifindex=1004
2476 type=6
2477 ifspeed=100000000
2478 direction=0
2479 status=0
2480 in_octets=84
2481 in_unicasts=2
2482 in_multicasts=0
2483 in_broadcasts=4294967295
2484 in_discards=0
2485 in_errors=0
2486 in_unknownprotos=4294967295
2487 out_octets=180
2488 out_unicasts=3
2489 out_multicasts=4294967295
2490 out_broadcasts=4294967295
2491 out_discards=0
2492 out_errors=0
2493 promiscuous=0
2494IFCOUNTERS
2495 dgramSeqNo=3
2496 ds=127.0.0.1>0:1002
2497 csSeqNo=2
2498 ifindex=1002
2499 type=6
2500 ifspeed=100000000
2501 direction=0
2502 status=3
2503 in_octets=0
2504 in_unicasts=0
2505 in_multicasts=0
2506 in_broadcasts=4294967295
2507 in_discards=0
2508 in_errors=0
2509 in_unknownprotos=4294967295
2510 out_octets=120
2511 out_unicasts=2
2512 out_multicasts=4294967295
2513 out_broadcasts=4294967295
2514 out_discards=0
2515 out_errors=0
2516 promiscuous=0
2517IFCOUNTERS
2518 dgramSeqNo=3
2519 ds=127.0.0.1>0:1003
2520 csSeqNo=2
2521 ifindex=1003
2522 type=6
2523 ifspeed=100000000
2524 direction=0
2525 status=0
52105b67 2526 in_octets=138
8073dd31
NM
2527 in_unicasts=3
2528 in_multicasts=0
2529 in_broadcasts=4294967295
2530 in_discards=0
2531 in_errors=0
2532 in_unknownprotos=4294967295
2533 out_octets=120
2534 out_unicasts=2
2535 out_multicasts=4294967295
2536 out_broadcasts=4294967295
2537 out_discards=0
2538 out_errors=0
2539 promiscuous=0
2540IFCOUNTERS
2541 dgramSeqNo=3
2542 ds=127.0.0.1>0:1004
2543 csSeqNo=2
2544 ifindex=1004
2545 type=6
2546 ifspeed=100000000
2547 direction=0
2548 status=0
2549 in_octets=84
2550 in_unicasts=2
2551 in_multicasts=0
2552 in_broadcasts=4294967295
2553 in_discards=0
2554 in_errors=0
2555 in_unknownprotos=4294967295
2556 out_octets=180
2557 out_unicasts=3
2558 out_multicasts=4294967295
2559 out_broadcasts=4294967295
2560 out_discards=0
2561 out_errors=0
2562 promiscuous=0
2563])
e731d71b 2564 AT_CLEANUP])
17f7f7e0 2565
e731d71b
AS
2566CHECK_SFLOW_SAMPLING_PACKET([127.0.0.1], [IPv4])
2567CHECK_SFLOW_SAMPLING_PACKET([[[::1]]], [IPv6])
1e04fcc8 2568
e731d71b
AS
2569# CHECK_NETFLOW_EXPIRATION(LOOPBACK_ADDR, IP_VERSION_TYPE)
2570#
2571# Test that basic NetFlow reports flow statistics correctly:
2572# The initial packet of a flow are correctly accounted.
2573# Later packets within a flow are correctly accounted.
2574# Flow actions changing (in this case, due to MAC learning)
2575# cause a record to be sent.
2576#
2577# IP_VERSION_TYPE is used in AT_SETUP
2578m4_define([CHECK_NETFLOW_EXPIRATION],
2579 [AT_SETUP([ofproto-dpif - NetFlow flow expiration - $2 collector])
2580 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
2581 ADD_OF_PORTS([br0], 1, 2)
2582
2583 ovs-appctl time/stop
2584 ON_EXIT([kill `cat test-netflow.pid`])
2585 AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
2586 AT_CAPTURE_FILE([netflow.log])
2587 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
2588
2589 ovs-vsctl \
2590 set Bridge br0 netflow=@nf -- \
2591 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
2592 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
2593
2594 for delay in 1000 30000; do
2595 ovs-appctl netdev-dummy/receive p1 'in_port(2),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'
2596 ovs-appctl netdev-dummy/receive p2 'in_port(1),eth(src=50:54:00:00:00:07,dst=50:54:00:00:00:05),eth_type(0x0800),ipv4(src=192.168.0.2,dst=192.168.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=0,code=0)'
2597
2598 ovs-appctl time/warp $delay
2599 done
17f7f7e0 2600
e731d71b
AS
2601 ovs-appctl time/warp 6000
2602 sleep 1
2603 OVS_VSWITCHD_STOP
2604 ovs-appctl -t test-netflow exit
e79a6c83 2605
e731d71b 2606 AT_CHECK([test `grep "192.168.0.1 > 192.168.0.2, if 1 > 65535, 1 pkts, 60 bytes, ICMP 8:0" netflow.log | wc -l` -eq 1])
e79a6c83 2607
e731d71b 2608 AT_CHECK([test `grep "192.168.0.1 > 192.168.0.2, if 1 > 2, 1 pkts, 60 bytes, ICMP 8:0" netflow.log | wc -l` -eq 1])
e79a6c83 2609
e731d71b
AS
2610 combined=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 2 pkts, 120 bytes, ICMP 0:0" netflow.log | wc -l`
2611 separate=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 1 pkts, 60 bytes, ICMP 0:0" netflow.log | wc -l`
2612 AT_CHECK([test $separate = 2 || test $combined = 1], [0])
17f7f7e0 2613
e731d71b 2614 AT_CLEANUP])
17f7f7e0 2615
e731d71b
AS
2616CHECK_NETFLOW_EXPIRATION([127.0.0.1], [IPv4])
2617CHECK_NETFLOW_EXPIRATION([[[::1]]], [IPv6])
1e04fcc8 2618
e731d71b
AS
2619# CHECK_NETFLOW_ACTIVE_EXPIRATION(LOOPBACK_ADDR, IP_VERSION_TYPE)
2620#
2621# Test that basic NetFlow reports active expirations correctly.
2622#
2623# IP_VERSION_TYPE is used in AT_SETUP
2624m4_define([CHECK_NETFLOW_ACTIVE_EXPIRATION],
2625 [AT_SETUP([ofproto-dpif - NetFlow active expiration - $2 collector])
1e04fcc8 2626
e731d71b
AS
2627 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
2628 ADD_OF_PORTS([br0], 1, 2)
17f7f7e0 2629
e731d71b
AS
2630 ON_EXIT([kill `cat test-netflow.pid`])
2631 AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
2632 AT_CAPTURE_FILE([netflow.log])
2633 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
17f7f7e0 2634
e731d71b
AS
2635 ovs-vsctl \
2636 set Bridge br0 netflow=@nf -- \
2637 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
2638 engine_id=1 engine_type=2 active_timeout=10 add-id-to-interface=false
17f7f7e0 2639
e731d71b
AS
2640 AT_CHECK([ovs-appctl time/stop])
2641 n=1
2642 while test $n -le 60; do
2643 n=`expr $n + 1`
17f7f7e0 2644
e731d71b
AS
2645 ovs-appctl netdev-dummy/receive p1 'in_port(2),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=1234,dst=80)'
2646 ovs-appctl netdev-dummy/receive p2 'in_port(1),eth(src=50:54:00:00:00:07,dst=50:54:00:00:00:05),eth_type(0x0800),ipv4(src=192.168.0.2,dst=192.168.0.1,proto=6,tos=0,ttl=64,frag=no),tcp(src=80,dst=1234)'
17f7f7e0 2647
e731d71b
AS
2648 ovs-appctl time/warp 1000
2649 done
17f7f7e0 2650
e731d71b
AS
2651 ovs-appctl time/warp 10000
2652
2653 sleep 1
2654 OVS_VSWITCHD_STOP
2655 ovs-appctl -t test-netflow exit
2656
2657 # Count the number of reported packets:
2658 # - From source to destination before MAC learning kicks in (just one).
2659 # - From source to destination after that.
2660 # - From destination to source.
2661 n_learn=0
2662 n_in=0
2663 n_out=0
2664 n_other=0
2665 n_recs=0
2666 none=0
2667 while read line; do
2668 pkts=`echo "$line" | sed 's/.*, \([[0-9]]*\) pkts,.*/\1/'`
2669 case $pkts in
2670 [[0-9]]*) ;;
2671 *) continue ;;
2672 esac
2673
2674 case $line in
2675 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 65535, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
2676 counter=n_learn
2677 ;;
2678 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 2, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
2679 counter=n_in
2680 ;;
2681 "seq "*": 192.168.0.2 > 192.168.0.1, if 2 > 1, "*" pkts, "*" bytes, TCP 80 > 1234, time "*)
2682 counter=n_out
2683 ;;
2684 *)
2685 counter=n_other
2686 ;;
2687 esac
2688 eval $counter=\`expr \$$counter + \$pkts\`
2689 n_recs=`expr $n_recs + 1`
2690 done < netflow.log
2691
2692 # There should be exactly 1 MAC learning packet,
2693 # exactly 59 other packets in that direction,
2694 # and exactly 60 packets in the other direction.
2695 AT_CHECK([echo $n_learn $n_in $n_out $n_other], [0], [1 59 60 0
2696])
2697
2698 AT_CLEANUP])
2699
2700CHECK_NETFLOW_ACTIVE_EXPIRATION([127.0.0.1], [IPv4])
2701CHECK_NETFLOW_ACTIVE_EXPIRATION([[[::1]]], [IPv6])
f27f2134
BP
2702
2703AT_SETUP([idle_age and hard_age increase over time])
2704OVS_VSWITCHD_START
2705
2706# get_ages DURATION HARD IDLE
2707#
2708# Fetch the flow duration, hard age, and idle age into the variables
2709# whose names are given as arguments. Rounds DURATION down to the
2710# nearest integer. If hard_age doesn't appear in the output, sets
2711# HARD to "none". If idle_age doesn't appear in the output, sets IDLE
2712# to 0.
2713get_ages () {
2714 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
2715
2716 duration=`sed -n 's/.*duration=\([[0-9]]*\)\(\.[[0-9]]*\)\{0,1\}s.*/\1/p' stdout`
2717 AT_CHECK([[expr X"$duration" : 'X[0-9][0-9]*$']], [0], [ignore])
2718 AS_VAR_COPY([$1], [duration])
2719
2720 hard=`sed -n 's/.*hard_age=\([[0-9]]*\),.*/\1/p' stdout`
2721 if test X"$hard" = X; then
2722 hard=none
2723 else
2724 AT_CHECK([[expr X"$hard" : 'X[0-9][0-9]*$']], [0], [ignore])
2725 fi
2726 AS_VAR_COPY([$2], [hard])
2727
2728 idle=`sed -n 's/.*idle_age=\([[0-9]]*\),.*/\1/p' stdout`
2729 if test X"$idle" = X; then
2730 idle=0
2731 else
2732 AT_CHECK([[expr X"$idle" : 'X[0-9][0-9]*$']], [0], [ignore])
2733 fi
2734 AS_VAR_COPY([$3], [idle])
2735}
2736
2737# Add a flow and get its initial hard and idle age.
2738AT_CHECK([ovs-ofctl add-flow br0 hard_timeout=199,idle_timeout=188,actions=drop])
2739get_ages duration1 hard1 idle1
2740
31ef9f51 2741ovs-appctl time/stop
f27f2134
BP
2742# Warp time forward by 10 seconds, then modify the flow's actions.
2743ovs-appctl time/warp 10000
2744get_ages duration2 hard2 idle2
2745AT_CHECK([ovs-ofctl mod-flows br0 actions=flood])
2746
2747# Warp time forward by 10 seconds.
2748ovs-appctl time/warp 10000
2749get_ages duration3 hard3 idle3
2750
2751# Warp time forward 10 more seconds, then pass some packets through the flow,
2752# then warp forward a few more times because idle times are only updated
2753# occasionally.
2754ovs-appctl time/warp 10000
2755ovs-appctl netdev-dummy/receive br0 'in_port(0),eth(src=50:54:00:00:00:07,dst=50:54:00:00:00:05),eth_type(0x0800),ipv4(src=192.168.0.2,dst=192.168.0.1,proto=6,tos=0,ttl=64,frag=no),tcp(src=80,dst=1234)'
2756ovs-appctl time/warp 1000
2757ovs-appctl time/warp 1000
2758ovs-appctl time/warp 1000
2759get_ages duration4 hard4 idle4
2760
2761printf "duration: %4s => %4s => %4s => %4s\n" $duration1 $duration2 $duration3 $duration4
2762printf "hard_age: %4s => %4s => %4s => %4s\n" $hard1 $hard2 $hard3 $hard4
2763printf "idle_age: %4s => %4s => %4s => %4s\n" $idle1 $idle2 $idle3 $idle4
2764
2765# Duration should increase steadily over time.
2766AT_CHECK([test $duration1 -lt $duration2])
2767AT_CHECK([test $duration2 -lt $duration3])
2768AT_CHECK([test $duration3 -lt $duration4])
2769
2770# Hard age should be "none" initially because it's the same as flow_duration,
2771# then it should increase.
2772AT_CHECK([test $hard1 = none])
2773AT_CHECK([test $hard2 = none])
2774AT_CHECK([test $hard3 != none])
2775AT_CHECK([test $hard4 != none])
2776AT_CHECK([test $hard3 -lt $hard4])
2777
2778# Idle age should increase from 1 to 2 to 3, then decrease.
2779AT_CHECK([test $idle1 -lt $idle2])
2780AT_CHECK([test $idle2 -lt $idle3])
2781AT_CHECK([test $idle3 -gt $idle4])
2782
2783# Check some invariant relationships.
2784AT_CHECK([test $duration1 = $idle1])
2785AT_CHECK([test $duration2 = $idle2])
2786AT_CHECK([test $duration3 = $idle3])
2787AT_CHECK([test $idle3 -gt $hard3])
2788AT_CHECK([test $idle4 -lt $hard4])
2789AT_CHECK([test $hard4 -lt $duration4])
2790
2791OVS_VSWITCHD_STOP
2792AT_CLEANUP
0e553d9c
BP
2793
2794AT_SETUP([ofproto-dpif - fin_timeout])
2795OVS_VSWITCHD_START
2796AT_DATA([flows.txt], [dnl
2797in_port=1 actions=output:2
2798in_port=2 actions=mod_vlan_vid:17,output:1
2799])
2800AT_CHECK([ovs-ofctl add-flow br0 'idle_timeout=60,actions=fin_timeout(idle_timeout=5)'])
2801AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
2802[NXST_FLOW reply:
2803 idle_timeout=60, actions=fin_timeout(idle_timeout=5)
2804])
31ef9f51
AW
2805
2806ovs-appctl time/stop
0e553d9c
BP
2807# Check that a TCP SYN packet does not change the timeout. (Because
2808# flow stats updates are mainly what implements the fin_timeout
2809# feature, we warp forward a couple of times to ensure that flow stats
2810# run before re-checking the flow table.)
323cc924 2811AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f908004500003c2e2440004006465dac11370dac11370b828b0016751e267b00000000a00216d017360000020405b40402080a2d25085f0000000001030307])
0e553d9c
BP
2812AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
2813warped
2814])
2815AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
2816[NXST_FLOW reply:
2817 n_packets=1, n_bytes=74, idle_timeout=60, actions=fin_timeout(idle_timeout=5)
2818])
2819# Check that a TCP FIN packet does change the timeout.
323cc924 2820AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f90800451000342e3e40004006463bac11370dac11370b828b0016751e319dfc96399b801100717ae800000101080a2d250a9408579588])
0e553d9c
BP
2821AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
2822warped
2823])
2824AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
2825[NXST_FLOW reply:
2826 n_packets=2, n_bytes=140, idle_timeout=5, actions=fin_timeout(idle_timeout=5)
2827])
2828OVS_VSWITCHD_STOP
2829AT_CLEANUP
27022416
JP
2830
2831AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-dps])
2832OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
2833ADD_OF_PORTS([br0], [1], [2])
2834ADD_OF_PORTS([br1], [3])
2835
2836AT_CHECK([ovs-appctl dpif/dump-dps], [0], [dnl
2837dummy@br0
2838dummy@br1
2839])
2840OVS_VSWITCHD_STOP
2841AT_CLEANUP
2842
2843AT_SETUP([ofproto-dpif - ovs-appctl dpif/show])
2844OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
2845ADD_OF_PORTS([br0], [1], [2])
2846ADD_OF_PORTS([br1], [3])
2847
2848AT_CHECK([ovs-appctl dpif/show], [0], [dnl
dc54ef36 2849dummy@ovs-dummy: hit:0 missed:0
e79a6c83 2850 br0:
dc54ef36
EJ
2851 br0 65534/100: (dummy)
2852 p1 1/1: (dummy)
2853 p2 2/2: (dummy)
e79a6c83 2854 br1:
dc54ef36
EJ
2855 br1 65534/101: (dummy)
2856 p3 3/3: (dummy)
27022416
JP
2857])
2858OVS_VSWITCHD_STOP
2859AT_CLEANUP
2860
2861AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows])
2862OVS_VSWITCHD_START([add-br br1 -- \
2863 set bridge br1 datapath-type=dummy fail-mode=secure])
2864ADD_OF_PORTS([br0], [1], [2])
2865ADD_OF_PORTS([br1], [3])
2866
323cc924
BP
2867AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2868AT_CHECK([ovs-appctl netdev-dummy/receive p2 'in_port(2),eth(src=50:54:00:00:00:07,dst=50:54:00:00:00:05),eth_type(0x0800),ipv4(src=192.168.0.2,dst=192.168.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=0,code=0)'])
2869AT_CHECK([ovs-appctl netdev-dummy/receive p3 'in_port(3),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
27022416
JP
2870
2871AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
1b849273
JS
2872skb_priority(0),in_port(1),eth_type(0x0800),ipv4(src=192.168.0.1/0.0.0.0,dst=192.168.0.2/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions:userspace(pid=0,slow_path(controller))
2873skb_priority(0),in_port(2),eth_type(0x0800),ipv4(src=192.168.0.2/0.0.0.0,dst=192.168.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions:userspace(pid=0,slow_path(controller))
27022416
JP
2874])
2875
2876AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
1b849273 2877skb_priority(0),in_port(3),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions:userspace(pid=0,slow_path(controller))
27022416
JP
2878])
2879
04b541df
GS
2880AT_CHECK([ovs-appctl dpif/dump-flows -m br0 | sort | STRIP_USED], [0], [dnl
2881skb_priority(0),skb_mark(0/0),in_port(p1),eth(src=50:54:00:00:00:05/00:00:00:00:00:00,dst=50:54:00:00:00:07/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=192.168.0.1/0.0.0.0,dst=192.168.0.2/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), packets:0, bytes:0, used:never, actions:userspace(pid=0,slow_path(controller))
2882skb_priority(0),skb_mark(0/0),in_port(p2),eth(src=50:54:00:00:00:07/00:00:00:00:00:00,dst=50:54:00:00:00:05/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=192.168.0.2/0.0.0.0,dst=192.168.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=0/0,code=0/0), packets:0, bytes:0, used:never, actions:userspace(pid=0,slow_path(controller))
2883])
2884
2885AT_CHECK([ovs-appctl dpif/dump-flows -m br1 | sort | STRIP_USED], [0], [dnl
2886skb_priority(0),skb_mark(0/0),in_port(p3),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), packets:0, bytes:0, used:never, actions:userspace(pid=0,slow_path(controller))
2887])
2888
27022416
JP
2889OVS_VSWITCHD_STOP
2890AT_CLEANUP
2891
8bfd0fda
BP
2892AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows - MPLS actions that result in a userspace action])
2893OVS_VSWITCHD_START([dnl
2894 add-port br0 p1 -- set Interface p1 type=dummy
2895])
2896ON_EXIT([kill `cat ovs-ofctl.pid`])
2897
2898AT_CAPTURE_FILE([ofctl_monitor.log])
2899AT_DATA([flows.txt], [dnl
2900dl_src=60:66:66:66:66:00 actions=push_mpls:0x8847,controller
2901dl_src=60:66:66:66:66:01 actions=pop_mpls:0x8849,controller
2902])
2903AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2904
2905dnl Packet is sent to userspace because a MPLS push or pop action is applied to
47fb7f71 2906dnl a packet with 2 MPLS LSEs but dpif-netdev can't handle any labels.
8bfd0fda 2907dnl
47fb7f71 2908dnl The input is a frame with two MPLS labels which tcpdump -vve shows as:
8bfd0fda 2909dnl 60:66:66:66:66:00 > 50:54:00:00:00:07, ethertype MPLS unicast (0x8847), length 74: MPLS (label 20, exp 0, ttl 32)
8bfd0fda
BP
2910dnl (label 20, exp 0, [S], ttl 32)
2911dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44, bad cksum 3b78 (->f978)!)
2912dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
2913
2914for dl_src in 00 01; do
47fb7f71 2915 AT_CHECK([ovs-appctl netdev-dummy/receive p1 "505400000007 6066666666$dl_src 8847 00014020 00014120 45 00 00 2c 00 00 00 00 40 06 3b 78 c0 a8 00 01 c0 a8 00 02 00 50 00 00 00 00 00 2a 00 00 00 2a 50 00 27 10 77 44 00 00 48 4f 47 45"])
8bfd0fda
BP
2916
2917 AT_CHECK_UNQUOTED([ovs-appctl dpif/dump-flows br0 | grep ":$dl_src/" | STRIP_USED], [0], [dnl
47fb7f71 2918skb_priority(0),in_port(1),eth(src=60:66:66:66:66:$dl_src/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:07/00:00:00:00:00:00),eth_type(0x8847),mpls(lse0=0x14020,lse1=0x14120), packets:0, bytes:0, used:never, actions:userspace(pid=0,slow_path(controller))
8bfd0fda
BP
2919])
2920done
2921
2922OVS_VSWITCHD_STOP
2923AT_CLEANUP
2924
2925
2926AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows - MPLS actions that result in a drop])
2927OVS_VSWITCHD_START([dnl
2928 add-port br0 p1 -- set Interface p1 type=dummy
2929])
2930ON_EXIT([kill `cat ovs-ofctl.pid`])
2931
2932AT_CAPTURE_FILE([ofctl_monitor.log])
2933AT_DATA([flows.txt], [dnl
2934dl_src=60:66:66:66:66:00 actions=push_mpls:0x8847,controller
2935dl_src=60:66:66:66:66:01 actions=pop_mpls:0x8849,controller
2936])
2937AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2938
2939dnl Packet is dropped because an MPLS PUSH action is applied to a packet with
2940dnl 4 MPLS LSEs but ovs-vswtichd can only handle up to 3 MPLS LSEs and thus
47fb7f71 2941dnl can't determine the resulting MPLS label after MPLS push/pop actions.
8bfd0fda
BP
2942dnl
2943dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
2944dnl 60:66:66:66:66:01 > 50:54:00:00:00:07, ethertype MPLS unicast (0x8847), length 74: MPLS (label 20, exp 0, ttl 32)
2945dnl (label 20, exp 0, ttl 32)
2946dnl (label 20, exp 0, ttl 32)
2947dnl (label 20, exp 0, [S], ttl 32)
2948dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44, bad cksum 3b78 (->f978)!)
2949dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
8bfd0fda 2950
47fb7f71
JS
2951for dl_src in 00 01; do
2952 AT_CHECK([ovs-appctl netdev-dummy/receive p1 "505400000007 6066666666$dl_src 8847 00014020 00014120 45 00 00 2c 00 00 00 00 40 06 3b 78 c0 a8 00 01 c0 a8 00 02 00 50 00 00 00 00 00 2a 00 00 00 2a 50 00 27 10 77 44 00 00 48 4f 47 45"])
2953
2954 AT_CHECK_UNQUOTED([ovs-appctl dpif/dump-flows br0 | grep ":$dl_src/" | STRIP_USED], [0], [dnl
2955skb_priority(0),in_port(1),eth(src=60:66:66:66:66:$dl_src/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:07/00:00:00:00:00:00),eth_type(0x8847),mpls(lse0=0x14020,lse1=0x14120), packets:0, bytes:0, used:never, actions:userspace(pid=0,slow_path(controller))
8bfd0fda 2956])
47fb7f71 2957done
8bfd0fda
BP
2958
2959OVS_VSWITCHD_STOP
2960AT_CLEANUP
2961
0a740f48
EJ
2962AT_SETUP([ofproto-dpif - patch ports])
2963OVS_VSWITCHD_START([add-br br1 \
2964-- set bridge br1 datapath-type=dummy fail-mode=secure \
2965-- add-port br1 pbr1 -- set int pbr1 type=patch options:peer=pbr0 \
2966-- add-port br0 pbr0 -- set int pbr0 type=patch options:peer=pbr1])
2967
2968ADD_OF_PORTS([br0], [2])
2969ADD_OF_PORTS([br1], [3])
2970
aef0491b 2971AT_CHECK([ovs-appctl time/stop])
9fc0165a 2972
0a740f48
EJ
2973AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
2974AT_CHECK([ovs-ofctl add-flow br1 actions=LOCAL,output:1,output:3])
2975
2976for i in $(seq 1 10); do
2977 ovs-appctl netdev-dummy/receive br0 'in_port(100),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'
2978done
2979
2980for i in $(seq 1 5); do
2981 ovs-appctl netdev-dummy/receive br1 'in_port(101),eth(src=50:54:00:00:00:07,dst=50:54:00:00:00:05),eth_type(0x0800),ipv4(src=192.168.0.2,dst=192.168.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'
2982done
2983
0a8763fc
EJ
2984AT_CHECK([ovs-appctl time/warp 500], [0],
2985[warped
735d7efb
AZ
2986])
2987
0a740f48 2988AT_CHECK([ovs-appctl dpif/show], [0], [dnl
dc54ef36 2989dummy@ovs-dummy: hit:13 missed:2
e79a6c83 2990 br0:
dc54ef36
EJ
2991 br0 65534/100: (dummy)
2992 p2 2/2: (dummy)
2993 pbr0 1/none: (patch: peer=pbr1)
e79a6c83 2994 br1:
dc54ef36
EJ
2995 br1 65534/101: (dummy)
2996 p3 3/3: (dummy)
2997 pbr1 1/none: (patch: peer=pbr0)
0a740f48
EJ
2998])
2999
3000AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
54bb0348 3001skb_priority(0),in_port(100),eth_type(0x0800),ipv4(src=192.168.0.1/0.0.0.0,dst=192.168.0.2/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:9, bytes:540, used:0.0s, actions:101,3,2
0a740f48
EJ
3002]),
3003AT_CHECK([ovs-appctl dpif/dump-flows br1 | STRIP_USED], [0], [dnl
54bb0348 3004skb_priority(0),in_port(101),eth_type(0x0800),ipv4(src=192.168.0.2/0.0.0.0,dst=192.168.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:4, bytes:240, used:0.0s, actions:100,2,3
0a740f48
EJ
3005])
3006
3007AT_CHECK([ovs-ofctl dump-ports br0 pbr0], [0], [dnl
3008OFPST_PORT reply (xid=0x4): 1 ports
3009 port 1: rx pkts=5, bytes=300, drop=0, errs=0, frame=0, over=0, crc=0
3010 tx pkts=10, bytes=600, drop=0, errs=0, coll=0
3011])
3012
3013AT_CHECK([ovs-ofctl dump-ports br1 pbr1], [0], [dnl
3014OFPST_PORT reply (xid=0x4): 1 ports
3015 port 1: rx pkts=10, bytes=600, drop=0, errs=0, frame=0, over=0, crc=0
3016 tx pkts=5, bytes=300, drop=0, errs=0, coll=0
3017])
3018
3019OVS_VSWITCHD_STOP
3020AT_CLEANUP
655ab909 3021
65e0be10
BP
3022AT_SETUP([ofproto-dpif - port duration])
3023OVS_VSWITCHD_START([set Bridge br0 protocols=OpenFlow13])
3024ADD_OF_PORTS([br0], 1, 2)
3025
31ef9f51 3026ovs-appctl time/stop
65e0be10
BP
3027ovs-appctl time/warp 10000
3028
3029AT_CHECK([ovs-ofctl -O openflow13 dump-ports br0], [0], [stdout])
125bf01d 3030AT_CHECK([sed -n 's/=[[0-9]][[0-9]]\(\.[[0-9]][[0-9]]*\)\{0,1\}s/=?s/p' stdout], [0],
65e0be10 3031[dnl
65e0be10 3032 duration=?s
65e0be10 3033 duration=?s
65e0be10
BP
3034 duration=?s
3035])
3036OVS_VSWITCHD_STOP
3037AT_CLEANUP
bcd2633a
JP
3038
3039dnl ----------------------------------------------------------------------
3040AT_BANNER([ofproto-dpif -- megaflows])
3041
bcd2633a
JP
3042AT_SETUP([ofproto-dpif megaflow - port classification])
3043OVS_VSWITCHD_START
3044ADD_OF_PORTS([br0], [1], [2])
3045AT_DATA([flows.txt], [dnl
3046table=0 in_port=1 actions=output(2)
3047])
3048AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3049AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
3050AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
ae692725 3051sleep 1
2c0ea78f
GS
3052AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3053skb_priority(0),in_port(1),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:0.0s, actions: <del>
bcd2633a
JP
3054])
3055OVS_VSWITCHD_STOP
3056AT_CLEANUP
3057
3058AT_SETUP([ofproto-dpif megaflow - L2 classification])
3059OVS_VSWITCHD_START
3060ADD_OF_PORTS([br0], [1], [2])
3061AT_DATA([flows.txt], [dnl
3062table=0 in_port=1,dl_src=50:54:00:00:00:09 actions=output(2)
3063])
3064AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3065AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
3066AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
ae692725 3067sleep 1
2c0ea78f 3068AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
1b849273
JS
3069skb_priority(0),in_port(1),eth(src=50:54:00:00:00:09/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
3070skb_priority(0),in_port(1),eth(src=50:54:00:00:00:0b/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
bcd2633a
JP
3071])
3072OVS_VSWITCHD_STOP
3073AT_CLEANUP
3074
3075AT_SETUP([ofproto-dpif megaflow - L3 classification])
3076OVS_VSWITCHD_START
3077ADD_OF_PORTS([br0], [1], [2])
13751fd8 3078AT_CHECK([ovs-vsctl set Bridge br0 flow_tables:0=@N1 -- --id=@N1 create Flow_Table name=t0 prefixes=nw_dst,nw_src], [0], [ignore], [])
bcd2633a
JP
3079AT_DATA([flows.txt], [dnl
3080table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=output(2)
3081])
3082AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3083AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
3084AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
ae692725 3085sleep 1
2c0ea78f 3086AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
1b849273
JS
3087skb_priority(0),in_port(1),eth_type(0x0800),ipv4(src=10.0.0.2/255.255.255.252,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
3088skb_priority(0),in_port(1),eth_type(0x0800),ipv4(src=10.0.0.4/255.255.255.255,dst=10.0.0.3/0.0.0.0,proto=1/0xff,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
bcd2633a
JP
3089])
3090OVS_VSWITCHD_STOP
3091AT_CLEANUP
3092
13751fd8
JR
3093AT_SETUP([ofproto-dpif megaflow - IPv6 classification])
3094OVS_VSWITCHD_START
3095ADD_OF_PORTS([br0], [1], [2])
3096AT_CHECK([ovs-vsctl set Bridge br0 flow_tables:0=@N1 -- --id=@N1 create Flow_Table name=t0 prefixes=ipv6_dst,ipv6_src], [0], [ignore], [])
3097AT_DATA([flows.txt], [dnl
3098table=0 in_port=1,ipv6,ipv6_src=2001:db8:3c4d:1:2:3:4:5 actions=output(2)
3099])
3100AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3101AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:07,dst=50:54:00:00:00:05),eth_type(0x86dd),ipv6(src=2001:db8:3c4d:1:2:3:4:5,dst=fe80::2,label=0,proto=10,tclass=0x70,hlimit=128,frag=no)'])
3102AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x86dd),ipv6(src=2001:db8:3c4d:5:4:3:2:1,dst=2001:db8:3c4d:1:2:3:4:1,label=0,proto=99,tclass=0x70,hlimit=64,frag=no)'])
ae692725 3103sleep 1
13751fd8 3104AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
1b849273
JS
3105skb_priority(0),in_port(1),eth_type(0x86dd),ipv6(src=2001:db8:3c4d:1:2:3:4:5/ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff,dst=fe80::2/::,label=0/0,proto=10/0,tclass=0x70/0,hlimit=128/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
3106skb_priority(0),in_port(1),eth_type(0x86dd),ipv6(src=2001:db8:3c4d:5:4:3:2:1/ffff:ffff:ffff:fffc::,dst=2001:db8:3c4d:1:2:3:4:1/::,label=0/0,proto=99/0,tclass=0x70/0,hlimit=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
13751fd8
JR
3107])
3108OVS_VSWITCHD_STOP
3109AT_CLEANUP
3110
bcd2633a
JP
3111AT_SETUP([ofproto-dpif megaflow - L4 classification])
3112OVS_VSWITCHD_START
3113ADD_OF_PORTS([br0], [1], [2])
3114AT_DATA([flows.txt], [dnl
3115table=0 in_port=1,icmp,icmp_type=8 actions=output(2)
3116])
3117AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3118AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
3119AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2c0ea78f
GS
3120AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3121skb_priority(0),in_port(1),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0xff,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0xff,code=0/0), packets:0, bytes:0, used:0.0s, actions: <del>
bcd2633a
JP
3122])
3123OVS_VSWITCHD_STOP
3124AT_CLEANUP
3125
3126AT_SETUP([ofproto-dpif megaflow - normal])
3127OVS_VSWITCHD_START
3128ADD_OF_PORTS([br0], [1], [2])
3129AT_CHECK([ovs-ofctl add-flow br0 action=normal])
3130AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
3131AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
ae692725 3132sleep 1
2c0ea78f 3133AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
1b849273
JS
3134skb_priority(0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
3135skb_priority(0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
bcd2633a
JP
3136])
3137OVS_VSWITCHD_STOP
3138AT_CLEANUP
3139
3140AT_SETUP([ofproto-dpif megaflow - mpls])
3141OVS_VSWITCHD_START
3142ADD_OF_PORTS([br0], [1], [2])
3143AT_DATA([flows.txt], [dnl
3144table=0 dl_src=50:54:00:00:00:09 actions=push_mpls:0x8847,2
3145table=0 dl_src=50:54:00:00:00:0b actions=pop_mpls:0x0800,2
3146])
3147AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3148AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x8847),mpls(label=11,tc=3,ttl=64,bos=1)'])
3149AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0a),eth_type(0x8847),mpls(label=11,tc=3,ttl=64,bos=1)'])
ae692725 3150sleep 1
2c0ea78f 3151AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
1b849273
JS
3152skb_priority(0),in_port(1),eth(src=50:54:00:00:00:09/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x8847),mpls(label=11,tc=3,ttl=64,bos=1), packets:0, bytes:0, used:never, actions: <del>
3153skb_priority(0),in_port(1),eth(src=50:54:00:00:00:0b/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x8847),mpls(label=11,tc=3,ttl=64,bos=1), packets:0, bytes:0, used:never, actions: <del>
bcd2633a
JP
3154])
3155OVS_VSWITCHD_STOP
3156AT_CLEANUP
3157
e731d71b
AS
3158# CHECK_MEGAFLOW_NETFLOW(LOOPBACK_ADDR, IP_VERSION_TYPE)
3159#
3160# IP_VERSION_TYPE is used in AT_SETUP
3161m4_define([CHECK_MEGAFLOW_NETFLOW],
3162 [AT_SETUP([ofproto-dpif megaflow - netflow - $2 collector])
3163 OVS_VSWITCHD_START
3164 ADD_OF_PORTS([br0], [1], [2])
3165
3166 dnl NetFlow configuration disables wildcarding relevant fields
3167 ON_EXIT([kill `cat test-netflow.pid`])
3168 AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
3169 AT_CAPTURE_FILE([netflow.log])
3170 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
3171 ovs-vsctl \
3172 set Bridge br0 netflow=@nf -- \
3173 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
3174 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
3175
3176 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
3177 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
3178 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
3179 sleep 1
3180 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
1b849273
JS
3181skb_priority(0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2/255.255.255.255,dst=10.0.0.1/255.255.255.255,proto=1/0xff,tos=0/0xfc,ttl=64/0,frag=no/0xff),icmp(type=8,code=0), packets:0, bytes:0, used:never, actions: <del>
3182skb_priority(0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4/255.255.255.255,dst=10.0.0.3/255.255.255.255,proto=1/0xff,tos=0/0xfc,ttl=64/0,frag=no/0xff),icmp(type=8,code=0), packets:0, bytes:0, used:never, actions: <del>
bcd2633a 3183])
e731d71b
AS
3184 OVS_VSWITCHD_STOP
3185 AT_CLEANUP])
3186
3187CHECK_MEGAFLOW_NETFLOW([127.0.0.1], [IPv4])
3188CHECK_MEGAFLOW_NETFLOW([[[::1]]], [IPv6])
bcd2633a
JP
3189
3190AT_SETUP([ofproto-dpif megaflow - normal, active-backup bonding])
3191OVS_VSWITCHD_START(
3192 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
3193 add-bond br0 bond0 p2 p3 bond_mode=active-backup -- \
3194 set interface p2 type=dummy ofport_request=2 -- \
3195 set interface p3 type=dummy ofport_request=3])
3196AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
3197])
3198
3199AT_CHECK([ovs-ofctl add-flow br0 action=normal])
3200AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
3201AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
ae692725 3202sleep 1
2c0ea78f 3203AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
1b849273
JS
3204skb_priority(0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
3205skb_priority(0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
bcd2633a
JP
3206])
3207OVS_VSWITCHD_STOP
3208AT_CLEANUP
3209
3210AT_SETUP([ofproto-dpif megaflow - normal, balance-slb bonding])
3211OVS_VSWITCHD_START(
3212 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
3213 add-bond br0 bond0 p2 p3 bond_mode=balance-slb -- \
3214 set interface p2 type=dummy ofport_request=2 -- \
3215 set interface p3 type=dummy ofport_request=3])
3216AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
3217])
3218
3219AT_CHECK([ovs-ofctl add-flow br0 action=normal])
3220AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
3221AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
ae692725 3222sleep 1
2c0ea78f 3223AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
1b849273
JS
3224skb_priority(0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
3225skb_priority(0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
bcd2633a
JP
3226])
3227OVS_VSWITCHD_STOP
3228AT_CLEANUP
3229
3230AT_SETUP([ofproto-dpif megaflow - normal, balance-tcp bonding])
3231# Create bond0 on br0 with interfaces p0 and p1
3232# and bond1 on br1 with interfaces p2 and p3
3233# with p0 patched to p2 and p1 patched to p3.
3234OVS_VSWITCHD_START(
3235 [add-bond br0 bond0 p0 p1 bond_mode=balance-tcp lacp=active \
3236 other-config:lacp-time=fast \
3237 other-config:bond-rebalance-interval=0 -- \
3238 set interface p0 type=patch options:peer=p2 ofport_request=1 -- \
3239 set interface p1 type=patch options:peer=p3 ofport_request=2 -- \
3240 add-br br1 -- \
3241 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
3242 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
3243 fail-mode=secure -- \
3244 add-bond br1 bond1 p2 p3 bond_mode=balance-tcp lacp=active \
3245 other-config:lacp-time=fast \
3246 other-config:bond-rebalance-interval=0 -- \
3247 set interface p2 type=patch options:peer=p0 ofport_request=3 -- \
3248 set interface p3 type=patch options:peer=p1 ofport_request=4 --])
3249
3250AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
3251])
3252ADD_OF_PORTS([br0], [7])
3253AT_CHECK([ovs-ofctl add-flow br0 action=normal])
3254AT_CHECK([ovs-ofctl add-flow br1 action=normal])
31ef9f51 3255ovs-appctl time/stop
bcd2633a
JP
3256ovs-appctl time/warp 5000
3257AT_CHECK([ovs-appctl netdev-dummy/receive p7 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
3258AT_CHECK([ovs-appctl netdev-dummy/receive p7 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
ae692725 3259sleep 1
2c0ea78f 3260AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
1b849273
JS
3261skb_priority(0),in_port(7),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2/255.255.255.255,dst=10.0.0.1/255.255.255.255,proto=1/0xff,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8,code=0), packets:0, bytes:0, used:never, actions: <del>
3262skb_priority(0),in_port(7),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4/255.255.255.255,dst=10.0.0.3/255.255.255.255,proto=1/0xff,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8,code=0), packets:0, bytes:0, used:never, actions: <del>
bcd2633a
JP
3263])
3264OVS_VSWITCHD_STOP
3265AT_CLEANUP
3266
3267AT_SETUP([ofproto-dpif megaflow - resubmit port action])
3268OVS_VSWITCHD_START
3269ADD_OF_PORTS([br0], [1], [2])
3270AT_DATA([flows.txt], [dnl
3271table=0 in_port=1,ip actions=resubmit(90)
3272table=0 in_port=90,dl_src=50:54:00:00:00:09 actions=output(2)
3273])
3274AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3275AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
3276AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
ae692725 3277sleep 1
2c0ea78f 3278AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
1b849273
JS
3279skb_priority(0),in_port(1),eth(src=50:54:00:00:00:09/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
3280skb_priority(0),in_port(1),eth(src=50:54:00:00:00:0b/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
bcd2633a
JP
3281])
3282OVS_VSWITCHD_STOP
3283AT_CLEANUP
3284
3285AT_SETUP([ofproto-dpif megaflow - resubmit table action])
3286OVS_VSWITCHD_START
3287ADD_OF_PORTS([br0], [1], [2])
3288AT_DATA([flows.txt], [dnl
3289table=0 in_port=1,ip actions=resubmit(,1)
3290table=1 dl_src=50:54:00:00:00:09 actions=output(2)
3291])
3292AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3293AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
3294AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=
32951,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
ae692725 3296sleep 1
2c0ea78f 3297AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
1b849273
JS
3298skb_priority(0),in_port(1),eth(src=50:54:00:00:00:09/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
3299skb_priority(0),in_port(1),eth(src=50:54:00:00:00:0b/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
bcd2633a
JP
3300])
3301OVS_VSWITCHD_STOP
3302AT_CLEANUP
3303
3304AT_SETUP([ofproto-dpif megaflow - goto_table action])
3305OVS_VSWITCHD_START
3306ADD_OF_PORTS([br0], [1], [2])
3307AT_DATA([flows.txt], [dnl
3308table=0 in_port=1,ip actions=goto_table(1)
3309table=1 dl_src=50:54:00:00:00:09 actions=output(2)
3310])
3311AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
3312AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
3313AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
ae692725 3314sleep 1
2c0ea78f 3315AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
1b849273
JS
3316skb_priority(0),in_port(1),eth(src=50:54:00:00:00:09/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
3317skb_priority(0),in_port(1),eth(src=50:54:00:00:00:0b/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
bcd2633a
JP
3318])
3319OVS_VSWITCHD_STOP
3320AT_CLEANUP
3321
3322AT_SETUP([ofproto-dpif megaflow - mirroring, select_all])
3323OVS_VSWITCHD_START
3324ADD_OF_PORTS([br0], [1], [2], [3])
3325ovs-vsctl \
3326 set Bridge br0 mirrors=@m --\
3327 --id=@p3 get Port p3 --\
3328 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
3329
3330AT_DATA([flows.txt], [dnl
3331in_port=1 actions=output:2
3332])
3333AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3334AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
3335AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
ae692725 3336sleep 1
2c0ea78f
GS
3337AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3338skb_priority(0),in_port(1),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:0.0s, actions: <del>
bcd2633a
JP
3339])
3340OVS_VSWITCHD_STOP
3341AT_CLEANUP
3342
3343AT_SETUP([ofproto-dpif megaflow - mirroring, select_vlan])
3344OVS_VSWITCHD_START
3345ADD_OF_PORTS([br0], [1], [2], [3])
3346ovs-vsctl \
3347 set Bridge br0 mirrors=@m --\
3348 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
3349 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
3350
3351AT_DATA([flows.txt], [dnl
3352in_port=1 actions=output:2
3353])
3354AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3355AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x8100),vlan(vid=11,pcp=7),encap(eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0))'])
3356AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
ae692725 3357sleep 1
2c0ea78f 3358AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
1b849273
JS
3359skb_priority(0),in_port(1),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
3360skb_priority(0),in_port(1),eth_type(0x8100),vlan(vid=11/0xfff,pcp=7/0x0,cfi=1/1),encap(eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff)), packets:0, bytes:0, used:never, actions: <del>
bcd2633a
JP
3361])
3362OVS_VSWITCHD_STOP
3363AT_CLEANUP
3364
3365AT_SETUP([ofproto-dpif megaflow - move action])
3366OVS_VSWITCHD_START
3367ADD_OF_PORTS([br0], [1], [2])
3368AT_DATA([flows.txt], [dnl
3369table=0 in_port=1 ip,actions=move:NXM_OF_IP_SRC[[]]->NXM_NX_REG0[[]],resubmit(90)
3370table=0 in_port=90 ip,actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]],resubmit(91)
3371table=0 in_port=91 reg0=0x0a000002,actions=output(2)
3372])
3373AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3374AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
3375AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
ae692725 3376sleep 1
2c0ea78f 3377AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
1b849273
JS
3378skb_priority(0),in_port(1),eth_type(0x0800),ipv4(src=10.0.0.2/255.255.255.255,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
3379skb_priority(0),in_port(1),eth_type(0x0800),ipv4(src=10.0.0.4/255.255.255.255,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
bcd2633a
JP
3380])
3381OVS_VSWITCHD_STOP
3382AT_CLEANUP
3383
3384AT_SETUP([ofproto-dpif megaflow - push action])
3385OVS_VSWITCHD_START
3386ADD_OF_PORTS([br0], [1], [2])
3387AT_DATA([flows.txt], [dnl
3388table=0 in_port=1 ip,actions=push:NXM_OF_IP_SRC[[]],output(2)
3389])
3390AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3391AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
3392AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
ae692725 3393sleep 1
2c0ea78f 3394AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
1b849273
JS
3395skb_priority(0),in_port(1),eth_type(0x0800),ipv4(src=10.0.0.2/255.255.255.255,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
3396skb_priority(0),in_port(1),eth_type(0x0800),ipv4(src=10.0.0.4/255.255.255.255,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
bcd2633a
JP
3397])
3398OVS_VSWITCHD_STOP
3399AT_CLEANUP
3400
3401AT_SETUP([ofproto-dpif megaflow - learning])
3402OVS_VSWITCHD_START
3403ADD_OF_PORTS([br0], [1], [2])
3404AT_DATA([flows.txt], [dnl
3405table=0 in_port=1 actions=load:2->NXM_NX_REG0[[0..15]],learn(table=1,priority=65535,NXM_OF_ETH_SRC[[]],NXM_OF_VLAN_TCI[[0..11]],output:NXM_NX_REG0[[0..15]]),output:2
3406])
3407AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
31ef9f51 3408ovs-appctl time/stop
956f2bf0
BP
3409# We send each packet twice because the first packet in each flow causes the
3410# flow table to change and thus revalidations, which (depending on timing)
3411# can keep a megaflow from being installed. The revalidations are done by
3412# the second iteration, allowing the flows to be installed.
3413for i in 1 2; do
3414 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
3415 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
3416 ovs-appctl time/warp 100
3417done
ae692725 3418sleep 1
bcd2633a 3419dnl The original flow is missing due to a revalidation.
2c0ea78f
GS
3420AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3421skb_priority(0),in_port(1),eth(src=50:54:00:00:00:09/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:0.0s, actions: <del>
3422skb_priority(0),in_port(1),eth(src=50:54:00:00:00:0b/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:0.0s, actions: <del>
bcd2633a
JP
3423])
3424OVS_VSWITCHD_STOP
3425AT_CLEANUP
d4f4a9b2
JP
3426
3427AT_SETUP([ofproto-dpif megaflow - tunnels])
3428OVS_VSWITCHD_START(
2c0ea78f
GS
3429 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1])
3430AT_CHECK([ovs-vsctl add-port br0 p2 -- set Interface p2 type=gre \
3431 options:remote_ip=1.1.1.1 ofport_request=2 options:key=flow])
3432AT_CHECK([ovs-vsctl add-port br0 p3 -- set Interface p3 type=dummy \
3433 ofport_request=3])
3434AT_CHECK([ovs-vsctl add-port br0 p4 -- set Interface p4 type=gre \
3435 options:remote_ip=1.1.1.2 options:tos=inherit options:ttl=inherit \
3436 ofport_request=4 options:key=flow])
d4f4a9b2
JP
3437AT_DATA([flows.txt], [dnl
3438in_port=1,actions=output(2)
3439in_port=3,actions=output(4)
3440])
3441AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3442dnl ECN bits are always copied out, but don't use 0x3 (CE), since that
3443dnl will cause the packet to be dropped.
3444AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0xfd,ttl=128,frag=no),icmp(type=8,code=0)'])
3445AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0x1,ttl=64,frag=no),icmp(type=8,code=0)'])
3446AT_CHECK([ovs-appctl netdev-dummy/receive p3 'in_port(3),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0xfd,ttl=128,frag=no),icmp(type=8,code=0)'])
3447AT_CHECK([ovs-appctl netdev-dummy/receive p3 'in_port(3),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0x1,ttl=64,frag=no),icmp(type=8,code=0)'])
ae692725 3448sleep 1
2c0ea78f
GS
3449AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3450skb_priority(0),in_port(1),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0xfd/0x3,ttl=128/0,frag=no/0xff), packets:0, bytes:0, used:0.0s, actions: <del>
1b849273
JS
3451skb_priority(0),in_port(3),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0xfd/0xff,ttl=128/0xff,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
3452skb_priority(0),in_port(3),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0x1/0xff,ttl=64/0xff,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
1dd35f8a
JP
3453])
3454OVS_VSWITCHD_STOP
3455AT_CLEANUP
3456
3457AT_SETUP([ofproto-dpif megaflow - dec_ttl])
3458OVS_VSWITCHD_START
3459ADD_OF_PORTS([br0], [1], [2])
13751fd8 3460AT_CHECK([ovs-vsctl set Bridge br0 flow_tables:0=@N1 -- --id=@N1 create Flow_Table name=t0 prefixes=nw_dst,nw_src], [0], [ignore], [])
1dd35f8a
JP
3461AT_DATA([flows.txt], [dnl
3462table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=dec_ttl,output(2)
3463])
3464AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3465AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
3466AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
ae692725 3467sleep 1
2c0ea78f 3468AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
1b849273
JS
3469skb_priority(0),in_port(1),eth_type(0x0800),ipv4(src=10.0.0.2/255.255.255.252,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
3470skb_priority(0),in_port(1),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no), packets:0, bytes:0, used:never, actions: <del>
d4f4a9b2
JP
3471])
3472OVS_VSWITCHD_STOP
3473AT_CLEANUP
74cc3969 3474
f74e7df7
JP
3475AT_SETUP([ofproto-dpif megaflow - set dl_dst])
3476OVS_VSWITCHD_START
3477ADD_OF_PORTS([br0], [1], [2])
3478AT_DATA([flows.txt], [dnl
3479table=0 in_port=1 actions=mod_dl_dst(50:54:00:00:00:0a),output(2)
3480])
3481AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3482AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
3483AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
ae692725 3484sleep 1
f74e7df7
JP
3485dnl The megaflows do not match the same fields, since the first packet
3486dnl is essentially a no-op. (The new destination MAC is the same as the
3487dnl original.) The ofproto-dpif library un-wildcards the destination MAC
3488dnl so that a packet that doesn't need its MAC address changed doesn't
3489dnl hide one that does. Since the first entry doesn't need to change,
3490dnl only the destination MAC address is matched (as decided by
3491dnl ofproto-dpif). The second entry actually updates the destination
3492dnl MAC, so both the source and destination MAC addresses are
3493dnl un-wildcarded, since the ODP commit functions update both the source
3494dnl and destination MAC addresses.
2c0ea78f 3495AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
1b849273
JS
3496skb_priority(0),in_port(1),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/ff:ff:ff:ff:ff:ff),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions:2
3497skb_priority(0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions:set(eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0a)),2
f74e7df7
JP
3498])
3499OVS_VSWITCHD_STOP
3500AT_CLEANUP
3501
8c301900
JR
3502AT_SETUP([ofproto-dpif megaflow - disabled])
3503OVS_VSWITCHD_START
3504ADD_OF_PORTS([br0], [1], [2])
3505AT_DATA([flows.txt], [dnl
3506table=0 in_port=1,ip,nw_dst=10.0.0.1 actions=output(2)
3507table=0 in_port=1,ip,nw_dst=10.0.0.3 actions=drop
3508])
e79a6c83 3509AT_CHECK([ovs-appctl upcall/disable-megaflows], [0], [megaflows disabled
8c301900
JR
3510], [])
3511AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg], [0], [], [])
3512AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3513for i in 1 2 3 4; do
3514 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
3515 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
3516done
ae692725 3517sleep 1
8c301900 3518AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
c8abb8af
JR
3519skb_priority(0),skb_mark(0),in_port(1/0xffff),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0), packets:3, bytes:180, used:0.0s, actions:2
3520skb_priority(0),skb_mark(0),in_port(1/0xffff),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0), packets:3, bytes:180, used:0.0s, actions:drop
8c301900
JR
3521])
3522OVS_VSWITCHD_STOP
3523AT_CLEANUP
3524
74cc3969
BP
3525AT_SETUP([ofproto-dpif - datapath port number change])
3526OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
3527ADD_OF_PORTS([br0], 1)
3528
3529# Trace a flow that should output to p1.
3530AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
3531 [0], [stdout])
3532AT_CHECK([tail -1 stdout], [0], [Datapath actions: 1
3533])
3534
3535# Change p1's port number to 5.
3536AT_CHECK([ovs-appctl dpif-dummy/change-port-number ovs-dummy p1 5])
3537
3538# Trace a flow that should output to p1 in its new location.
3539AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
3540 [0], [stdout])
3541AT_CHECK([tail -1 stdout], [0], [Datapath actions: 5
3542])
3543OVS_VSWITCHD_STOP
3544AT_CLEANUP
2d344ba5
AW
3545
3546# Tests the bundling with various bfd and cfm configurations.
3547AT_SETUP([ofproto - bundle with variable bfd/cfm config])
3548OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy -- \
3549 add-bond br0 br0bond p0 p2 bond-mode=active-backup -- \
3550 add-bond br1 br1bond p1 p3 bond-mode=active-backup -- \
3551 set Interface p1 type=patch options:peer=p0 ofport_request=2 -- \
3552 set Interface p3 type=patch options:peer=p2 ofport_request=4 -- \
3553 set Interface p0 type=patch options:peer=p1 ofport_request=1 -- \
3554 set Interface p2 type=patch options:peer=p3 ofport_request=3 -- \
3555 set Interface p0 bfd:enable=true bfd:min_tx=300 bfd:min_rx=300 -- \
3556 set Interface p0 cfm_mpid=1 -- \
3557 set Interface p1 bfd:enable=true bfd:min_tx=500 bfd:min_rx=500])
3558
3559ovs-appctl time/stop
3560# advance the clock to stablize everything.
3561for i in `seq 0 49`; do ovs-appctl time/warp 100; done
3562# cfm/show should show 'recv' fault.
3563AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
3564 fault: recv
3565])
3566# bfd/show should show 'up'.
3567AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
3568 Local Session State: up
3569 Remote Session State: up
3570 Local Session State: up
3571 Remote Session State: up
3572])
3573# bond/show should show 'may-enable: true' for all slaves.
3574AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
3575 may_enable: true
3576 may_enable: true
3577 may_enable: true
3578 may_enable: true
3579])
3580
3581# now disable the bfd on p1.
3582AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=false])
3583# advance the clock to stablize everything.
3584for i in `seq 0 49`; do ovs-appctl time/warp 100; done
3585# cfm/show should show 'recv' fault.
3586AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
3587 fault: recv
3588])
3589# bfd/show should show 'down'.
3590AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
3591 Local Session State: down
3592 Remote Session State: down
3593])
3594# bond/show should show 'may-enable: false' for p0.
125bf01d 3595AT_CHECK([ovs-appctl bond/show br0bond | sed -n '/^.*may_enable:.*/p'], [0], [dnl
2d344ba5
AW
3596 may_enable: false
3597 may_enable: true
2d344ba5
AW
3598])
3599
3600# now enable the bfd on p1 and disable bfd on p0.
3601AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=true])
3602AT_CHECK([ovs-vsctl set Interface p0 bfd:enable=false])
3603# advance the clock to stablize everything.
3604for i in `seq 0 49`; do ovs-appctl time/warp 100; done
3605# cfm/show should show 'recv' fault.
3606AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
3607 fault: recv
3608])
3609# bfd/show should show 'down'.
3610AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
3611 Local Session State: down
3612 Remote Session State: down
3613])
3614# bond/show should show 'may-enable: false' for p0 and p1.
3615AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
3616 may_enable: false
3617 may_enable: true
3618 may_enable: false
3619 may_enable: true
3620])
3621
e441a806
AW
3622OVS_VSWITCHD_STOP
3623AT_CLEANUP
3624
3625AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 1])
3626OVS_VSWITCHD_START([add-port br0 p0 -- set interface p0 type=gre options:remote_ip=1.2.3.4])
3627
3628# enable bfd on p0.
3629AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
3630# check log.
3631AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3632monitor thread created
3633])
3634# disable bfd on p0.
3635AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
3636# check log.
3637AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3638monitor thread terminated
3639])
3640AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
3641
3642# enable cfm on p0.
3643AT_CHECK([ovs-vsctl set interface p0 cfm_mpid=10])
3644# check log.
3645AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3646monitor thread created
3647])
3648# disable cfm on p0.
3649AT_CHECK([ovs-vsctl remove interface p0 cfm_mpid 10])
3650# check log.
3651AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3652monitor thread terminated
3653])
3654AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
3655
3656# enable both bfd and cfm on p0.
3657AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true cfm_mpid=10])
3658# check log.
3659AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3660monitor thread created
3661])
3662# disable bfd on p0.
3663AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
3664# check log, there should not be the log of thread terminated.
3665AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3666])
3667# reenable bfd on p0.
3668AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
3669# check log, should still be on log of thread created.
3670AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3671monitor thread created
3672])
3673# disable bfd and cfm together.
3674AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false -- remove interface p0 cfm_mpid 10])
3675# check log.
3676AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3677monitor thread terminated
3678])
3679
3680OVS_VSWITCHD_STOP
3681AT_CLEANUP
3682
3683# this test helps avoid the deadlock between the main thread and monitor thread.
3684AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 2])
3685OVS_VSWITCHD_START
3686
3687for i in `seq 1 199`
3688do
3689 AT_CHECK([ovs-vsctl add-port br0 p$i -- set interface p$i type=gre options:remote_ip=1.2.3.4 options:key=$i bfd:enable=true])
3690done
3691
98cf638b
AW
3692OVS_VSWITCHD_STOP
3693AT_CLEANUP
98b07853
BP
3694\f
3695AT_BANNER([ofproto-dpif - flow translation resource limits])
3696
3697AT_SETUP([ofproto-dpif - infinite resubmit])
3698OVS_VSWITCHD_START
3699AT_CHECK([ovs-ofctl add-flow br0 actions=resubmit:1,resubmit:2,output:3])
3700AT_CHECK([ovs-appctl ofproto/trace br0 'eth_dst=ff:ff:ff:ff:ff:ff'],
3701 [0], [stdout])
3702AT_CHECK([tail -1 stdout], [0], [Datapath actions: drop
3703])
3704AT_CHECK([grep -c 'resubmit actions recursed over 64 times' ovs-vswitchd.log],
3705 [0], [1
3706])
3707OVS_VSWITCHD_STOP(["/resubmit actions recursed/d"])
3708AT_CLEANUP
3709
3710AT_SETUP([ofproto-dpif - exponential resubmit chain])
3711OVS_VSWITCHD_START
3712ADD_OF_PORTS([br0], 1)
3713(for i in `seq 1 64`; do
3714 j=`expr $i + 1`
3715 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
3716 done
3717 echo "in_port=65, actions=local") > flows
3718 AT_CHECK([ovs-ofctl add-flows br0 flows])
3719AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
3720AT_CHECK([grep -c 'over 4096 resubmit actions' ovs-vswitchd.log], [0], [1
3721])
3722OVS_VSWITCHD_STOP(["/over.*resubmit actions/d"])
3723AT_CLEANUP
3724
3725AT_SETUP([ofproto-dpif - too many output actions])
3726OVS_VSWITCHD_START
3727ADD_OF_PORTS([br0], 1)
3728(for i in `seq 1 12`; do
3729 j=`expr $i + 1`
3730 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
3731 done
3732 echo "in_port=13, actions=local,local,local,local,local,local,local,local") > flows
542024c4 3733AT_CHECK([ovs-ofctl add-flows br0 flows])
98b07853 3734AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
0f032e95
BP
3735AT_CHECK([grep -c -e '- Uses action(s) not supported by datapath' stdout],
3736 [0], [1
98b07853 3737])
0f032e95 3738AT_CHECK([grep -c 'resubmits yielded over 64 kB of actions' ovs-vswitchd.log], [0], [1
542024c4 3739])
0f032e95 3740OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of actions/d"])
98b07853
BP
3741AT_CLEANUP
3742
3743AT_SETUP([ofproto-dpif - stack too deep])
3744OVS_VSWITCHD_START
3745ADD_OF_PORTS([br0], 1)
3746(for i in `seq 1 12`; do
3747 j=`expr $i + 1`
3748 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
3749 done
3750 push="push:NXM_NX_REG0[[]]"
3751 echo "in_port=13, actions=$push,$push,$push,$push,$push,$push,$push,$push") > flows
3752 AT_CHECK([ovs-ofctl add-flows br0 flows])
3753AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
3754AT_CHECK([grep -c 'resubmits yielded over 64 kB of stack' ovs-vswitchd.log], [0], [1
3755])
3756OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of stack/d"])
3757AT_CLEANUP