]> git.proxmox.com Git - ovs.git/blame - tests/ofproto-dpif.at
ovsdb-server: Improve message for "add-db" of database already open.
[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
5a070238
BP
115AT_SETUP([ofproto-dpif - group chaining not supported])
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,group:123,bucket=output:11'],
119 [1], [], [stderr])
120AT_CHECK([STRIP_XIDS stderr | sed 1q], [0],
121 [OFPT_ERROR (OF1.2): OFPGMFC_CHAINING_UNSUPPORTED
122])
123OVS_VSWITCHD_STOP
124AT_CLEANUP
125
f4fb341b
SH
126AT_SETUP([ofproto-dpif - all group in action list])
127OVS_VSWITCHD_START
128ADD_OF_PORTS([br0], [1], [10], [11])
129AT_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'])
130AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=group:1234'])
131AT_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])
132AT_CHECK([tail -1 stdout], [0],
133 [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
134])
135OVS_VSWITCHD_STOP
136AT_CLEANUP
137
138AT_SETUP([ofproto-dpif - indirect group in action list])
139OVS_VSWITCHD_START
140ADD_OF_PORTS([br0], [1], [10])
141AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 group_id=1234,type=indirect,bucket=output:10])
142AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=group:1234'])
143AT_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])
144AT_CHECK([tail -1 stdout], [0],
145 [Datapath actions: 10
146])
147OVS_VSWITCHD_STOP
148AT_CLEANUP
149
150AT_SETUP([ofproto-dpif - all group in action set])
151OVS_VSWITCHD_START
152ADD_OF_PORTS([br0], [1], [10], [11])
153AT_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'])
154AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
155AT_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])
156AT_CHECK([tail -1 stdout], [0],
157 [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
158])
159OVS_VSWITCHD_STOP
160AT_CLEANUP
161
162AT_SETUP([ofproto-dpif - indirect group in action set])
163OVS_VSWITCHD_START
164ADD_OF_PORTS([br0], [1], [10])
165AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 group_id=1234,type=indirect,bucket=output:10])
166AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
167AT_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])
168AT_CHECK([tail -1 stdout], [0],
169 [Datapath actions: 10
170])
171OVS_VSWITCHD_STOP
172AT_CLEANUP
173
fe7e5749
SH
174AT_SETUP([ofproto-dpif - select group])
175OVS_VSWITCHD_START
176ADD_OF_PORTS([br0], [1], [10], [11])
177AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=output:10,bucket=output:11'])
178AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
7cb279c2
SH
179
180# Try a bunch of different flows and make sure that they get distributed
181# at least somewhat.
182for d in 0 1 2 3 4 5 6 7 8 9 a b c d e f; do
183 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])
184 tail -1 stdout >> results
185done
186sort results | uniq -c
187AT_CHECK([sort results | uniq], [0],
fe7e5749 188 [Datapath actions: 10
7cb279c2 189Datapath actions: 11
fe7e5749
SH
190])
191OVS_VSWITCHD_STOP
192AT_CLEANUP
193
194AT_SETUP([ofproto-dpif - select group with watch port])
195OVS_VSWITCHD_START
196ADD_OF_PORTS([br0], [1], [10], [11])
197AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=watch_port:10,output:10,bucket=output:11'])
198AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
199AT_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])
200AT_CHECK([tail -1 stdout], [0],
201 [Datapath actions: 11
202])
203OVS_VSWITCHD_STOP
204AT_CLEANUP
205
7cb279c2
SH
206AT_SETUP([ofproto-dpif - select group with weight])
207OVS_VSWITCHD_START
208ADD_OF_PORTS([br0], [1], [10], [11], [12])
125bf01d 209AT_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
210AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
211AT_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])
212AT_CHECK([tail -1 stdout], [0],
213 [Datapath actions: 11
214])
215OVS_VSWITCHD_STOP
216AT_CLEANUP
217
dd8cd4b4
SH
218AT_SETUP([ofproto-dpif - fast failover group])
219OVS_VSWITCHD_START
220ADD_OF_PORTS([br0], [1], [10], [11])
221AT_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'])
222AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
223AT_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])
224AT_CHECK([tail -1 stdout], [0],
225 [Datapath actions: drop
226])
227OVS_VSWITCHD_STOP
228AT_CLEANUP
229
58a89177 230AT_SETUP([ofproto-dpif - registers])
023e1e0a 231OVS_VSWITCHD_START
f7b8e494 232ADD_OF_PORTS([br0], [20], [21], [22], [33], [90])
58a89177
EJ
233AT_DATA([flows.txt], [dnl
234in_port=90 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:91
235in_port=91 actions=resubmit:5,resubmit:6,resubmit:7,resubmit:92
e9358af6
EJ
236in_port=92 actions=resubmit:8,resubmit:9,resubmit:10,resubmit:11,resubmit:93
237in_port=93 actions=resubmit:12,resubmit:13,resubmit:14,resubmit:15
238
58a89177
EJ
239in_port=2 actions=load:0x000db000->NXM_NX_REG0[[]]
240in_port=3 actions=load:0xdea->NXM_NX_REG0[[20..31]]
241in_port=4 actions=load:0xeef->NXM_NX_REG0[[0..11]]
242in_port=5 actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]]
243in_port=6 actions=load:0x22222222->NXM_NX_REG2[[]]
244in_port=7 actions=move:NXM_NX_REG1[[20..31]]->NXM_NX_REG2[[0..11]]
245in_port=8 actions=move:NXM_NX_REG1[[0..11]]->NXM_NX_REG2[[20..31]]
246in_port=9,reg0=0xdeadbeef actions=output:20
247in_port=10,reg1=0xdeadbeef actions=output:21
248in_port=11,reg2=0xeef22dea actions=output:22
e9358af6
EJ
249
250dnl Sanilty check all registers
251in_port=12 actions=load:0x10->NXM_NX_REG0[[]],load:0x11->NXM_NX_REG1[[]],load:0x12->NXM_NX_REG2[[]]
252in_port=13 actions=load:0x13->NXM_NX_REG3[[]],load:0x14->NXM_NX_REG4[[]],load:0x15->NXM_NX_REG5[[]]
253in_port=14 actions=load:0x16->NXM_NX_REG6[[]],load:0x17->NXM_NX_REG7[[]]
254in_port=15,reg0=0x10,reg1=0x11,reg2=0x12,reg3=0x13,reg4=0x14,reg5=0x15,reg6=0x16,reg7=0x17 actions=output:33
bd85dac1 255
58a89177
EJ
256])
257AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
50aa28fd 258AT_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 259AT_CHECK([tail -1 stdout], [0],
e9358af6 260 [Datapath actions: 20,21,22,33
58a89177 261])
023e1e0a 262OVS_VSWITCHD_STOP
58a89177 263AT_CLEANUP
f694937d 264
bd85dac1
AZ
265AT_SETUP([ofproto-dpif - push-pop])
266OVS_VSWITCHD_START
267ADD_OF_PORTS([br0], [20], [21], [22], [33], [90])
268AT_DATA([flows.txt], [dnl
269in_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
270in_port=2 actions=pop:NXM_NX_REG0[[0..7]],output:NXM_NX_REG0[[]]
271in_port=3 actions=pop:NXM_NX_REG1[[0..7]],output:NXM_NX_REG1[[]]
272in_port=4 actions=pop:NXM_NX_REG2[[0..15]],output:NXM_NX_REG2[[]]
273in_port=5 actions=pop:NXM_NX_REG3[[]],output:NXM_NX_REG3[[]]
274
275])
276AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
50aa28fd 277AT_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
278AT_CHECK([tail -1 stdout], [0],
279 [Datapath actions: 33,22,21,20
280])
281OVS_VSWITCHD_STOP
282AT_CLEANUP
283
f694937d 284AT_SETUP([ofproto-dpif - output])
023e1e0a 285OVS_VSWITCHD_START
f7b8e494 286ADD_OF_PORTS([br0], [1], [9], [10], [11], [55], [66], [77], [88])
f694937d 287AT_DATA([flows.txt], [dnl
557323cd 288in_port=1 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:5,resubmit:6,resubmit:7,resubmit:8
f694937d
EJ
289in_port=2 actions=output:9
290in_port=3 actions=load:55->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]],load:66->NXM_NX_REG1[[]]
291in_port=4 actions=output:10,output:NXM_NX_REG0[[]],output:NXM_NX_REG1[[]],output:11
292in_port=5 actions=load:77->NXM_NX_REG0[[0..15]],load:88->NXM_NX_REG0[[16..31]]
293in_port=6 actions=output:NXM_NX_REG0[[0..15]],output:NXM_NX_REG0[[16..31]]
294in_port=7 actions=load:0x110000ff->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]]
557323cd 295in_port=8 actions=1,9,load:9->NXM_OF_IN_PORT[[]],1,9
f694937d
EJ
296])
297AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
50aa28fd 298AT_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 299AT_CHECK([tail -1 stdout], [0],
557323cd 300 [Datapath actions: 9,55,10,55,66,11,77,88,9,1
f694937d 301])
023e1e0a 302OVS_VSWITCHD_STOP
f694937d 303AT_CLEANUP
8e9ce036 304
f0fd1a17
PS
305AT_SETUP([ofproto-dpif - dec_ttl])
306OVS_VSWITCHD_START
f7b8e494 307ADD_OF_PORTS([br0], [1], [2], [3], [4])
f0fd1a17
PS
308AT_DATA([flows.txt], [dnl
309table=0 in_port=1 action=dec_ttl,output:2,resubmit(1,1),output:4
310table=1 in_port=1 action=dec_ttl,output:3
311])
312AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
8249a1fe 313AT_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 314AT_CHECK([tail -3 stdout], [0],
8249a1fe 315 [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
316This flow is handled by the userspace slow path because it:
317 - Sends "packet-in" messages to the OpenFlow controller.
f0fd1a17 318])
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=3,frag=no)'], [0], [stdout])
f0fd1a17 320AT_CHECK([tail -1 stdout], [0],
8249a1fe 321 [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 322])
50aa28fd 323AT_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
324AT_CHECK([tail -1 stdout], [0],
325 [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
326])
327
982697a4 328AT_CAPTURE_FILE([ofctl_monitor.log])
77a922c7 329AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
8249a1fe 330AT_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
331OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
332AT_CHECK([cat ofctl_monitor.log], [0], [dnl
8249a1fe
JR
333NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=34 in_port=1 (via invalid_ttl) data_len=34 (unbuffered)
334ip,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
335])
336OVS_VSWITCHD_STOP
337AT_CLEANUP
338
65bfce4a
SH
339dnl A dec_ttl action at offset 32 in ofpacts will cause the ofpacts
340dnl buffer to be resized just before pushing the id of the dec_ttl action.
341dnl Thus the implementation must account for this by using the
342dnl reallocated buffer rather than the original buffer.
343dnl
344dnl A number of similar rules are added to try and exercise
345dnl xrealloc sufficiently that it returns a different base pointer
346AT_SETUP([ofproto-dpif - dec_ttl without arguments at offset 32 in ofpacts])
347OVS_VSWITCHD_START
348ADD_OF_PORTS([br0], [1])
349(for i in `seq 0 255`; do
350 printf "dl_src=10:11:11:11:11:%02x actions=output:1,output:1,output:1,dec_ttl,controller\n" $i
351 done) > flows.txt
352AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
353OVS_VSWITCHD_STOP
354AT_CLEANUP
355
356dnl A dec_ttl action at offset 32 in ofpacts will cause the ofpacts
357dnl buffer to be resized just before pushing the id of the dec_ttl action.
358dnl Thus the implementation must account for this by using the
359dnl reallocated buffer rather than the original buffer.
360dnl
361dnl A number of similar rules are added to try and exercise
362dnl xrealloc sufficiently that it returns a different base pointer
363AT_SETUP([ofproto-dpif - dec_ttl with arguments at offset 32 in ofpacts])
364OVS_VSWITCHD_START
365ADD_OF_PORTS([br0], [1])
366(for i in `seq 0 255`; do
367 printf "dl_src=10:11:11:11:11:%02x actions=output:1,output:1,output:1,dec_ttl(1),controller\n" $i
368 done) > flows.txt
369AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
370OVS_VSWITCHD_STOP
371AT_CLEANUP
372
373dnl A note action at offset 24 in ofpacts will cause the ofpacts
374dnl buffer to be resized just before pushing the id of the dec_ttl action.
375dnl Thus the implementation must account for this by using the
376dnl reallocated buffer rather than the original buffer.
377dnl
378dnl A number of similar rules are added to try and exercise
379dnl xrealloc sufficiently that it returns a different base pointer
380AT_SETUP([ofproto-dpif - note at offset 24 in ofpacts])
381OVS_VSWITCHD_START
382ADD_OF_PORTS([br0], [1])
383(for i in `seq 0 255`; do
384 printf "dl_src=10:11:11:11:11:%02x actions=output:1,output:1,note:ff,controller\n" $i
385 done) > flows.txt
386AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
387OVS_VSWITCHD_STOP
388AT_CLEANUP
f0fd1a17 389
77750738 390AT_SETUP([ofproto-dpif - output, OFPP_NONE ingress port])
e44768b7
JP
391OVS_VSWITCHD_START
392ADD_OF_PORTS([br0], [1], [2])
77750738 393
77750738
JP
394AT_CHECK([ovs-ofctl add-flow br0 action=normal])
395
396# "in_port" defaults to OFPP_NONE if it's not specified.
72d64e33 397flow="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 398AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
72d64e33
EJ
399AT_CHECK([tail -1 stdout | sed 's/Datapath actions: //' | tr "," "\n" | sort -n], [0], [dnl
4001
4012
402100
403])
77750738
JP
404
405OVS_VSWITCHD_STOP
406AT_CLEANUP
407
8b36f51e 408AT_SETUP([ofproto-dpif - DSCP])
8b36f51e 409OVS_VSWITCHD_START([add-port br0 p1 -- set Interface p1 type=dummy])
72d64e33 410ADD_OF_PORTS([br0], [9])
8b36f51e 411AT_DATA([flows.txt], [dnl
bdda5aca 412actions=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
413])
414AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
415AT_CHECK([ovs-vsctl -- \
416 set Port p1 qos=@newqos --\
417 --id=@newqos create QoS type=linux-htb queues=1=@q1,2=@q2 --\
418 --id=@q1 create Queue dscp=1 --\
419 --id=@q2 create Queue dscp=2], [0], [ignore])
50aa28fd 420AT_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
421AT_CHECK([tail -1 stdout], [0],
422 [Datapath actions: dnl
e44768b7 423100,dnl
1b567fb9
AA
424set(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
425set(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 4261,dnl
1b567fb9
AA
427set(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
428set(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 429set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0x3,ttl=128,frag=no)),1,dnl
e44768b7 430100
8b36f51e
EJ
431])
432OVS_VSWITCHD_STOP
433AT_CLEANUP
434
fd19297b 435AT_SETUP([ofproto-dpif - output/flood flags])
f7b8e494
JP
436OVS_VSWITCHD_START
437ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [7])
fd19297b
EJ
438
439AT_DATA([flows.txt], [dnl
a0fbe94a 440in_port=local actions=local,flood
fd19297b
EJ
441in_port=1 actions=flood
442in_port=2 actions=all
bdda5aca
BP
443in_port=3 actions=output:LOCAL,output:1,output:2,output:3,output:4,output:5,output:6,output:7
444in_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
445])
446AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
447AT_CHECK([ovs-ofctl mod-port br0 5 noforward])
448AT_CHECK([ovs-ofctl mod-port br0 6 noflood])
449
50aa28fd 450AT_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
451AT_CHECK([tail -1 stdout \
452| sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
4531
4542
4553
4564
4577
458])
459
50aa28fd 460AT_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
461AT_CHECK([tail -1 stdout \
462| sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
e44768b7 463100
fd19297b
EJ
4642
4653
4664
4677
468])
469
50aa28fd 470AT_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
471AT_CHECK([tail -1 stdout \
472| sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
fd19297b 4731
e44768b7 474100
fd19297b
EJ
4753
4764
4776
4787
479])
480
50aa28fd 481AT_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 482AT_CHECK([tail -1 stdout], [0],
e44768b7 483 [Datapath actions: 100,1,2,4,6,7
fd19297b
EJ
484])
485
50aa28fd 486AT_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 487AT_CHECK([tail -1 stdout], [0],
1b567fb9 488 [Datapath actions: set(skb_priority(0x1)),100,1,2,set(skb_priority(0x2)),3,set(skb_priority(0x1)),6,7
fd19297b
EJ
489])
490OVS_VSWITCHD_STOP
491AT_CLEANUP
492
6b83a3c5 493AT_SETUP([ofproto-dpif - Default Table Miss - OF1.0 (OFPTC_TABLE_MISS_CONTROLLER)])
6d328fa2
SH
494OVS_VSWITCHD_START([dnl
495 add-port br0 p1 -- set Interface p1 type=dummy
496])
497ON_EXIT([kill `cat ovs-ofctl.pid`])
498
499AT_CAPTURE_FILE([ofctl_monitor.log])
500
501AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
502
503for i in 1 2 3 ; do
504 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)'
505done
8bd16974 506OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
6d328fa2
SH
507OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
508AT_CHECK([cat ofctl_monitor.log], [0], [dnl
509NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
510tcp,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
511dnl
512NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
513tcp,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
514dnl
515NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
516tcp,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
517])
518
519AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
520AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
521NXST_FLOW reply:
522])
523
524OVS_VSWITCHD_STOP
525AT_CLEANUP
526
6b83a3c5
SH
527AT_SETUP([ofproto-dpif - Default Table Miss - OF1.3 (OFPTC_TABLE_MISS_DROP)])
528OVS_VSWITCHD_START([dnl
529 add-port br0 p1 -- set Interface p1 type=dummy
530])
531ON_EXIT([kill `cat ovs-ofctl.pid`])
532
533AT_CAPTURE_FILE([ofctl_monitor.log])
534AT_CHECK([ovs-ofctl del-flows br0])
535
536AT_CHECK([ovs-ofctl monitor -OOpenFlow13 -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
537
538dnl Test that missed packets are droped
539for i in 1 2 3 ; do
540 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)'
541done
542OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
543
544AT_CHECK([cat ofctl_monitor.log], [0], [dnl
545])
546
547AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
548AT_CHECK([ovs-ofctl -OOpenFlow13 dump-flows br0 | ofctl_strip | sort], [0], [dnl
549OFPST_FLOW reply (OF1.3):
550])
551
552OVS_VSWITCHD_STOP
553AT_CLEANUP
554
6d328fa2
SH
555AT_SETUP([ofproto-dpif - Table Miss - goto table and OFPTC_TABLE_MISS_CONTROLLER])
556OVS_VSWITCHD_START([dnl
557 add-port br0 p1 -- set Interface p1 type=dummy
558])
559ON_EXIT([kill `cat ovs-ofctl.pid`])
560
561AT_CAPTURE_FILE([ofctl_monitor.log])
562AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=goto_table(1)'])
563
564AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
565
566for i in 1 2 3 ; do
567 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)'
568done
8bd16974 569OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
6d328fa2
SH
570OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
571AT_CHECK([cat ofctl_monitor.log], [0], [dnl
572OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
573tcp,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
574dnl
575OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
576tcp,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
577dnl
578OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
579tcp,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
580])
581
582AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
583AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
584 n_packets=3, n_bytes=180, actions=goto_table:1
585OFPST_FLOW reply (OF1.2):
586])
587
588OVS_VSWITCHD_STOP
589AT_CLEANUP
590
591AT_SETUP([ofproto-dpif - Table Miss - resubmit and OFPTC_TABLE_MISS_CONTROLLER])
592OVS_VSWITCHD_START([dnl
593 add-port br0 p1 -- set Interface p1 type=dummy
594])
595ON_EXIT([kill `cat ovs-ofctl.pid`])
596
597AT_CAPTURE_FILE([ofctl_monitor.log])
598AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=resubmit(1,1)'])
599
600AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
601
602for i in 1 2 3 ; do
603 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)'
604done
605
606OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
607AT_CHECK([cat ofctl_monitor.log], [0], [dnl
608])
609
610AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
611AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
612 n_packets=3, n_bytes=180, actions=resubmit(1,1)
613OFPST_FLOW reply (OF1.2):
614])
615
616OVS_VSWITCHD_STOP
617AT_CLEANUP
618
619AT_SETUP([ofproto-dpif - Table Miss - OFPTC_TABLE_MISS_CONTINUE])
620OVS_VSWITCHD_START([dnl
621 add-port br0 p1 -- set Interface p1 type=dummy
622])
623ON_EXIT([kill `cat ovs-ofctl.pid`])
624
625AT_CAPTURE_FILE([ofctl_monitor.log])
626AT_CHECK([ovs-ofctl add-flow br0 'table=1 dl_src=10:11:11:11:11:11 actions=controller'])
627AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all continue])
628
629dnl Miss table 0, Hit table 1
630AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
631
632for i in 1 2 3 ; do
633 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=9),tcp_flags(0x010)'
634done
8bd16974 635OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
6d328fa2
SH
636OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
637
638AT_CHECK([cat ofctl_monitor.log], [0], [dnl
639NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
640tcp,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=9,tcp_flags=0x010 tcp_csum:0
641dnl
642NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
643tcp,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=9,tcp_flags=0x010 tcp_csum:0
644dnl
645NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
646tcp,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=9,tcp_flags=0x010 tcp_csum:0
647])
648
649dnl Hit table 0, Miss all other tables, sent to controller
650AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
651
652for i in 1 2 3 ; do
653 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)'
654done
8bd16974 655OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
6d328fa2
SH
656OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
657
658AT_CHECK([cat ofctl_monitor.log], [0], [dnl
659NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
660tcp,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
661dnl
662NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
663tcp,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
664dnl
665NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
666tcp,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
667])
668
669AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
670AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
671 table=1, n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
672OFPST_FLOW reply (OF1.2):
673])
674
675OVS_VSWITCHD_STOP
676AT_CLEANUP
677
678AT_SETUP([ofproto-dpif - Table Miss - goto table and OFPTC_TABLE_MISS_CONTINUE])
679OVS_VSWITCHD_START([dnl
680 add-port br0 p1 -- set Interface p1 type=dummy
681])
682ON_EXIT([kill `cat ovs-ofctl.pid`])
683
684AT_CAPTURE_FILE([ofctl_monitor.log])
685AT_DATA([flows.txt], [dnl
686table=0 actions=goto_table(1)
687table=2 dl_src=10:11:11:11:11:11 actions=controller
688])
689AT_CHECK([ovs-ofctl -OOpenFlow12 add-flows br0 flows.txt])
690AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all continue])
691
692dnl Hit table 0, Miss table 1, Hit table 2
693AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
694
695for i in 1 2 3 ; do
696 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=9),tcp_flags(0x010)'
697done
8bd16974 698OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
0c473314 699OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
6d328fa2
SH
700
701AT_CHECK([cat ofctl_monitor.log], [0], [dnl
702NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
703tcp,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=9,tcp_flags=0x010 tcp_csum:0
704dnl
705NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
706tcp,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=9,tcp_flags=0x010 tcp_csum:0
707dnl
708NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
709tcp,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=9,tcp_flags=0x010 tcp_csum:0
710])
711
712dnl Hit table 1, Miss all other tables, sent to controller
713AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
714
715for i in 1 2 3 ; do
716 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)'
717done
8bd16974 718OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
6d328fa2
SH
719OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
720
721AT_CHECK([cat ofctl_monitor.log], [0], [dnl
722NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
723tcp,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
724dnl
725NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
726tcp,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
727dnl
728NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
729tcp,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
730])
731
732AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
733AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
734 n_packets=6, n_bytes=360, actions=goto_table:1
735 table=2, n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
736OFPST_FLOW reply (OF1.2):
737])
738
739OVS_VSWITCHD_STOP
740AT_CLEANUP
741
742AT_SETUP([ofproto-dpif - Table Miss - resubmit and OFPTC_TABLE_MISS_CONTINUE])
743OVS_VSWITCHD_START([dnl
744 add-port br0 p1 -- set Interface p1 type=dummy
745])
746ON_EXIT([kill `cat ovs-ofctl.pid`])
747
748AT_CAPTURE_FILE([ofctl_monitor.log])
749AT_DATA([flows.txt], [dnl
750table=0 actions=resubmit(1,1)
751table=2 dl_src=10:11:11:11:11:11 actions=controller
752])
753AT_CHECK([ovs-ofctl -OOpenFlow12 add-flows br0 flows.txt])
754AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all continue])
755
756dnl Hit table 0, Miss table 1, Dropped
757AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
758
759for i in 1 2 3 ; do
760 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=9),tcp_flags(0x010)'
761done
0c473314 762OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
6d328fa2
SH
763
764AT_CHECK([cat ofctl_monitor.log], [0], [dnl
765])
766
767dnl Hit table 1, Dropped
768AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
769
770for i in 1 2 3 ; do
771 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)'
772done
773OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
774
775AT_CHECK([cat ofctl_monitor.log], [0], [dnl
776])
777
778AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
779AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
780 n_packets=6, n_bytes=360, actions=resubmit(1,1)
781 table=2, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
782OFPST_FLOW reply (OF1.2):
783])
784
785OVS_VSWITCHD_STOP
786AT_CLEANUP
787
788AT_SETUP([ofproto-dpif - Table Miss - OFPTC_TABLE_MISS_DROP])
789OVS_VSWITCHD_START([dnl
790 add-port br0 p1 -- set Interface p1 type=dummy
791])
792ON_EXIT([kill `cat ovs-ofctl.pid`])
793
794AT_CAPTURE_FILE([ofctl_monitor.log])
795AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all drop])
796
797AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
798
799dnl Test that missed packets are droped
800for i in 1 2 3 ; do
801 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)'
802done
803OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
804
805AT_CHECK([cat ofctl_monitor.log], [0], [dnl
806])
807
808AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
809AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
810NXST_FLOW reply:
811])
812
813OVS_VSWITCHD_STOP
814AT_CLEANUP
815
816AT_SETUP([ofproto-dpif - Table Miss - goto table and OFPTC_TABLE_MISS_DROP])
817OVS_VSWITCHD_START([dnl
818 add-port br0 p1 -- set Interface p1 type=dummy
819])
820ON_EXIT([kill `cat ovs-ofctl.pid`])
821
822AT_CAPTURE_FILE([ofctl_monitor.log])
823AT_CHECK([ovs-ofctl del-flows br0])
824AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=goto_table(1)'])
825AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all drop])
826
827AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
828
829dnl Test that missed packets are droped
830for i in 1 2 3 ; do
831 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)'
832done
833OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
834
835AT_CHECK([cat ofctl_monitor.log], [0], [dnl
836])
837
838AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
839AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
840 n_packets=3, n_bytes=180, actions=goto_table:1
841OFPST_FLOW reply (OF1.2):
842])
843
844OVS_VSWITCHD_STOP
845AT_CLEANUP
846
847AT_SETUP([ofproto-dpif - Table Miss - resubmit and OFPTC_TABLE_MISS_DROP])
848OVS_VSWITCHD_START([dnl
849 add-port br0 p1 -- set Interface p1 type=dummy
850])
851ON_EXIT([kill `cat ovs-ofctl.pid`])
852
853AT_CAPTURE_FILE([ofctl_monitor.log])
854AT_CHECK([ovs-ofctl del-flows br0])
855AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=resubmit(1,1)'])
856AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all drop])
857
858AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
859
860dnl Test that missed packets are droped
861for i in 1 2 3 ; do
862 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)'
863done
864OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
865
866AT_CHECK([cat ofctl_monitor.log], [0], [dnl
867])
868
869AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
870AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
871 n_packets=3, n_bytes=180, actions=resubmit(1,1)
872OFPST_FLOW reply (OF1.2):
873])
874
875OVS_VSWITCHD_STOP
876AT_CLEANUP
877
15056dc8
EJ
878AT_SETUP([ofproto-dpif - controller])
879OVS_VSWITCHD_START([dnl
880 add-port br0 p1 -- set Interface p1 type=dummy
881])
57c94f35 882ON_EXIT([kill `cat ovs-ofctl.pid`])
15056dc8
EJ
883
884AT_CAPTURE_FILE([ofctl_monitor.log])
885AT_DATA([flows.txt], [dnl
886cookie=0x0 dl_src=10:11:11:11:11:11 actions=controller
54834960 887cookie=0x1 dl_src=20:22:22:22:22:22 actions=controller,resubmit(80,1)
15056dc8
EJ
888cookie=0x2 dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,controller
889
54834960
EJ
890cookie=0x3 table=1 in_port=80 actions=load:1->NXM_NX_REG0[[]],mod_vlan_vid:80,controller,resubmit(81,2)
891cookie=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)
892cookie=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)
893cookie=0x6 table=4 in_port=83 actions=load:4->NXM_NX_REG3[[]],mod_nw_src:83.83.83.83,controller,resubmit(84,5)
894cookie=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)
895cookie=0x8 table=6 in_port=85 actions=mod_tp_src:85,controller,resubmit(86,7)
896cookie=0x9 table=7 in_port=86 actions=mod_tp_dst:86,controller,controller
78cef7fd 897cookie=0xa dl_src=40:44:44:44:44:41 actions=mod_vlan_vid:99,mod_vlan_pcp:1,controller
b02475c5 898cookie=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 899cookie=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
900cookie=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
901cookie=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 902cookie=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
903cookie=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
904cookie=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
905cookie=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
906cookie=0xb dl_src=50:55:55:55:55:55 dl_type=0x8847 actions=load:1000->OXM_OF_MPLS_LABEL[[]],controller
907cookie=0xd dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,controller
908cookie=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 909cookie=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
910])
911AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
912
913dnl Flow miss.
77a922c7 914AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
15056dc8
EJ
915
916for i in 1 2 3 ; do
dc235f7f 917 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 918done
57c94f35 919OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
0c473314 920OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
15056dc8 921
15056dc8 922AT_CHECK([cat ofctl_monitor.log], [0], [dnl
f0fd1a17 923OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
dc235f7f 924tcp,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 925dnl
f0fd1a17 926OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
dc235f7f 927tcp,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 928dnl
f0fd1a17 929OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
dc235f7f 930tcp,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
931])
932
933dnl Singleton controller action.
77a922c7 934AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
15056dc8
EJ
935
936for i in 1 2 3 ; do
dc235f7f 937 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 938done
57c94f35 939OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
0c473314 940OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
15056dc8 941
15056dc8
EJ
942AT_CHECK([cat ofctl_monitor.log], [0], [dnl
943OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
dc235f7f 944tcp,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
945dnl
946OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
dc235f7f 947tcp,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
948dnl
949OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
dc235f7f 950tcp,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
951])
952
953dnl Modified controller action.
77a922c7 954AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
15056dc8
EJ
955
956for i in 1 2 3 ; do
dc235f7f 957 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 958done
57c94f35 959OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
0c473314 960OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
15056dc8 961
15056dc8
EJ
962AT_CHECK([cat ofctl_monitor.log], [0], [dnl
963OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
dc235f7f 964tcp,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
965dnl
966OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
dc235f7f 967tcp,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
968dnl
969OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
dc235f7f 970tcp,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
971])
972
363dd1d9
JS
973dnl Modified VLAN controller action.
974AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
975
976for i in 1 2 3; do
8249a1fe 977 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 978done
57c94f35 979OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
0c473314 980OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
363dd1d9 981
363dd1d9
JS
982AT_CHECK([cat ofctl_monitor.log], [0], [dnl
983NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
8249a1fe 984ip,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
985dnl
986NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
8249a1fe 987ip,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
988dnl
989NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
8249a1fe 990ip,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
991])
992
b02475c5
SH
993dnl Modified MPLS controller action.
994AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
995
996for i in 1 2 3; do
8249a1fe 997 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 998done
57c94f35 999OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
0c473314 1000OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
b02475c5 1001
b02475c5
SH
1002AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1003NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 1004mpls,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
1005dnl
1006NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 1007mpls,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
1008dnl
1009NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 1010mpls,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
1011])
1012
1013dnl Modified MPLS controller action.
1014AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1015
b0a17866 1016for i in 1 2 3; do
8249a1fe 1017 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
1018done
1019OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
0c473314 1020OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
b0a17866
SH
1021
1022AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1023NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
8249a1fe 1024ip,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
1025dnl
1026NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
8249a1fe 1027ip,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
1028dnl
1029NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
8249a1fe 1030ip,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
1031])
1032
1033dnl Modified MPLS controller action.
1034AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1035
b02475c5
SH
1036dnl 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)
1037
1038for i in 1 2 3; do
1039 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)'
1040done
1041
0c473314 1042OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
b02475c5
SH
1043AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1044NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
8bfd0fda 1045mpls,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
1046dnl
1047NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
8bfd0fda 1048mpls,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
1049dnl
1050NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
8bfd0fda 1051mpls,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
1052])
1053
1054dnl Modified MPLS controller action.
1055AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1056
1057for i in 1 2 3; do
8249a1fe 1058 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 1059done
57c94f35 1060OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
0c473314 1061OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
b02475c5 1062
b02475c5
SH
1063AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1064NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 1065mpls,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
1066dnl
1067NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 1068mpls,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
1069dnl
1070NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 1071mpls,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
1072])
1073
b676167a
SH
1074dnl Modified MPLS controller action.
1075AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1076
1077for i in 1 2 3; do
8249a1fe 1078 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 1079done
57c94f35 1080OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
0c473314 1081OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
b676167a 1082
b676167a
SH
1083AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1084NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 1085mpls,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
1086dnl
1087NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 1088mpls,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
1089dnl
1090NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 1091mpls,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
1092])
1093
0f3f3c3d
SH
1094dnl Modified MPLS controller action.
1095AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1096
1097for i in 1 2 3; do
8249a1fe 1098 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 1099done
57c94f35 1100OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
0c473314 1101OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
0f3f3c3d 1102
0f3f3c3d
SH
1103AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1104NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 1105mpls,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
1106dnl
1107NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 1108mpls,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
1109dnl
1110NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 1111mpls,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
1112])
1113
1114dnl Modified MPLS controller action.
1115AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1116
1117for i in 1 2 3; do
8249a1fe 1118 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 1119done
57c94f35 1120OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
0c473314 1121OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
0f3f3c3d 1122
0f3f3c3d
SH
1123AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1124NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 1125mpls,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
1126dnl
1127NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 1128mpls,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
1129dnl
1130NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 1131mpls,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
1132])
1133
1134dnl Modified MPLS controller action.
1135AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1136
1137for i in 1 2 3; do
8249a1fe 1138 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 1139done
57c94f35 1140OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
0c473314 1141OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
0f3f3c3d 1142
0f3f3c3d
SH
1143AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1144NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 1145mpls,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
1146dnl
1147NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 1148mpls,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
1149dnl
1150NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 1151mpls,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
1152])
1153
b02475c5
SH
1154dnl Modified MPLS actions.
1155AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1156
1157for i in 1 2 3; do
02830175 1158 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 1159done
57c94f35 1160OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
0c473314 1161OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
b02475c5 1162
b02475c5
SH
1163AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1164NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
392c30ba 1165mpls,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
1166dnl
1167NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
392c30ba 1168mpls,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
1169dnl
1170NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
392c30ba 1171mpls,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
1172])
1173
1174dnl Modified MPLS ipv6 controller action.
1175AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1176
1177for i in 1 2 3; do
1178 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)'
1179done
57c94f35 1180OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
0c473314 1181OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
b02475c5 1182
b02475c5
SH
1183AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1184NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
52105b67 1185mplsm,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
1186dnl
1187NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
52105b67 1188mplsm,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
1189dnl
1190NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
52105b67 1191mplsm,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
1192])
1193
1194
1195dnl Modified MPLS pop action.
cff78c88
SH
1196dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
1197dnl 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)
1198dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44)
1199
b02475c5
SH
1200AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1201
1202for i in 1 2 3; do
cff78c88 1203 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 1204done
cff78c88
SH
1205#for i in 2 3; do
1206# 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)'
1207#done
57c94f35 1208OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
0c473314 1209OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
b02475c5 1210
b02475c5 1211AT_CHECK([cat ofctl_monitor.log], [0], [dnl
cff78c88 1212NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
dc235f7f 1213tcp,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 1214dnl
cff78c88 1215NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
dc235f7f 1216tcp,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 1217dnl
cff78c88 1218NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
dc235f7f 1219tcp,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
1220])
1221
15056dc8 1222dnl Checksum TCP.
77a922c7 1223AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
15056dc8
EJ
1224
1225for i in 1 ; do
dc235f7f 1226 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 1227done
57c94f35 1228OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
0c473314 1229OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
15056dc8 1230
15056dc8 1231AT_CHECK([cat ofctl_monitor.log], [0], [dnl
42edbe39 1232NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
dc235f7f 1233tcp,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 1234dnl
42edbe39 1235NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
dc235f7f 1236tcp,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 1237dnl
42edbe39 1238NXT_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 1239tcp,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 1240dnl
42edbe39 1241NXT_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 1242tcp,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 1243dnl
42edbe39 1244NXT_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 1245tcp,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 1246dnl
42edbe39 1247NXT_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 1248tcp,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 1249dnl
42edbe39 1250NXT_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 1251tcp,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 1252dnl
42edbe39 1253NXT_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 1254tcp,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 1255dnl
42edbe39 1256NXT_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 1257tcp,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
1258])
1259
1260dnl Checksum UDP.
77a922c7 1261AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
15056dc8
EJ
1262
1263for i in 1 ; do
1264 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'
1265done
57c94f35 1266OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
0c473314 1267OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
15056dc8 1268
15056dc8 1269AT_CHECK([cat ofctl_monitor.log], [0], [dnl
42edbe39 1270NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
3f78c3cc 1271udp,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 1272dnl
42edbe39 1273NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
3f78c3cc 1274udp,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 1275dnl
42edbe39 1276NXT_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 1277udp,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 1278dnl
42edbe39 1279NXT_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 1280udp,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 1281dnl
42edbe39 1282NXT_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 1283udp,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 1284dnl
42edbe39 1285NXT_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 1286udp,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 1287dnl
42edbe39 1288NXT_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 1289udp,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 1290dnl
42edbe39 1291NXT_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 1292udp,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 1293dnl
42edbe39 1294NXT_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 1295udp,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
1296])
1297
f6c8a6b1
BP
1298dnl Modified ARP controller action.
1299AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1300
1301for i in 1 2 3; do
1302 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)'
1303done
1304
8125a83a 1305OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 9])
0c473314 1306OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
f6c8a6b1
BP
1307AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1308NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1309arp,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
1310NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1311arp,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
1312NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
56d72f37 1313arp,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
1314NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1315arp,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
1316NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1317arp,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
1318NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
56d72f37 1319arp,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
1320NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1321arp,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
1322NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1323arp,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
1324NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
56d72f37 1325arp,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
1326])
1327
5c0243a9 1328AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
0d56eaf2
JS
1329
1330dnl Checksum SCTP.
1331AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1332
1333for i in 1 ; do
1334 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'
1335done
1336
8125a83a 1337OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 9])
0d56eaf2
JS
1338OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1339AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1340NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=98 in_port=1 (via action) data_len=98 (unbuffered)
1341sctp,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
1342dnl
1343NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=102 in_port=1 reg0=0x1 (via action) data_len=102 (unbuffered)
1344sctp,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
1345dnl
1346NXT_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)
1347sctp,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
1348dnl
1349NXT_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)
1350sctp,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
1351dnl
1352NXT_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)
1353sctp,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
1354dnl
1355NXT_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)
1356sctp,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
1357dnl
1358NXT_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)
1359sctp,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
1360dnl
1361NXT_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)
1362sctp,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
1363dnl
1364NXT_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)
1365sctp,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
1366])
1367
ef0ce8ae 1368AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
0d56eaf2 1369 cookie=0x1, n_packets=3, n_bytes=218, dl_src=20:22:22:22:22:22 actions=CONTROLLER:65535,resubmit(80,1)
ef0ce8ae 1370 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
1371 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)
1372 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)
1373 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)
1374 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)
1375 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)
1376 cookie=0x8, table=6, n_packets=3, n_bytes=218, in_port=85 actions=mod_tp_src:85,CONTROLLER:65535,resubmit(86,7)
1377 cookie=0x9, table=7, n_packets=3, n_bytes=218, in_port=86 actions=mod_tp_dst:86,CONTROLLER:65535,CONTROLLER:65535
363dd1d9 1378 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
1379 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
1380 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
1381 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 1382 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
1383 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
1384 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
1385 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 1386 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 1387 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 1388 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 1389 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 1390 cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,CONTROLLER:65535
ef0ce8ae
BP
1391 n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
1392NXST_FLOW reply:
15056dc8
EJ
1393])
1394
1395OVS_VSWITCHD_STOP
8e9ce036 1396AT_CLEANUP
04c956fc 1397
527ae97e
SH
1398
1399AT_SETUP([ofproto-dpif - table-miss flow (OpenFlow 1.0)])
1400OVS_VSWITCHD_START([dnl
1401 add-port br0 p1 -- set Interface p1 type=dummy
1402])
1403ON_EXIT([kill `cat ovs-ofctl.pid`])
1404
1405AT_CAPTURE_FILE([ofctl_monitor.log])
1406# A table-miss flow has priority 0 and no match
1407AT_CHECK([ovs-ofctl --protocols=OpenFlow10 add-flow br0 'priority=0 actions=output:CONTROLLER'])
1408
1409dnl Singleton controller action.
1410AT_CHECK([ovs-ofctl monitor -P openflow10 --protocols=OpenFlow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1411
1412for i in 1 2 3 ; do
1413 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)'
1414done
1415OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1416ovs-appctl -t ovs-ofctl exit
1417
1418AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1419OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1420tcp,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
1421dnl
1422OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1423tcp,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
1424dnl
1425OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1426tcp,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
1427])
1428
1429AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1430
1431AT_CHECK([ovs-ofctl --protocols=OpenFlow10 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1432 n_packets=3, n_bytes=180, priority=0 actions=CONTROLLER:65535
1433NXST_FLOW reply:
1434])
1435
1436OVS_VSWITCHD_STOP
1437AT_CLEANUP
1438
1439
1440AT_SETUP([ofproto-dpif - table-miss flow (OpenFlow 1.3)])
1441OVS_VSWITCHD_START([dnl
1442 add-port br0 p1 -- set Interface p1 type=dummy
1443])
1444ON_EXIT([kill `cat ovs-ofctl.pid`])
1445
1446AT_CAPTURE_FILE([ofctl_monitor.log])
1447# A table-miss flow has priority 0 and no match
1448AT_CHECK([ovs-ofctl --protocols=OpenFlow13 add-flow br0 'priority=0 actions=output:CONTROLLER'])
1449
1450dnl Singleton controller action.
1451AT_CHECK([ovs-ofctl monitor -P openflow10 --protocols=OpenFlow13 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1452
1453for i in 1 2 3 ; do
1454 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)'
1455done
1456OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1457ovs-appctl -t ovs-ofctl exit
1458
1459AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1460
1461AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1462OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1463tcp,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
1464dnl
1465OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1466tcp,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
1467dnl
1468OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1469tcp,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
1470])
1471
1472AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1473
1474AT_CHECK([ovs-ofctl --protocols=OpenFlow13 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1475 n_packets=3, n_bytes=180, priority=0 actions=CONTROLLER:65535
1476OFPST_FLOW reply (OF1.3):
1477])
1478
1479OVS_VSWITCHD_STOP
1480AT_CLEANUP
1481
f6c8a6b1
BP
1482AT_SETUP([ofproto-dpif - ARP modification slow-path])
1483OVS_VSWITCHD_START
1484ADD_OF_PORTS([br0], [1], [2])
1485
1486ovs-vsctl -- set Interface p2 type=dummy options:pcap=p2.pcap
1487ovs-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'
1488
1489# Input some packets that should follow the arp modification slow-path.
1490for i in 1 2 3; do
1491 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)'
1492done
1493AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1494
1495# Check the packets that were output.
1496AT_CHECK([ovs-ofctl parse-pcap p2.pcap], [0], [dnl
03fbdf8d
JR
1497arp,metadata=0,in_port=ANY,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
1498arp,metadata=0,in_port=ANY,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
1499arp,metadata=0,in_port=ANY,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
1500arp,metadata=0,in_port=ANY,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
1501arp,metadata=0,in_port=ANY,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
1502arp,metadata=0,in_port=ANY,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
1503arp,metadata=0,in_port=ANY,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
1504arp,metadata=0,in_port=ANY,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
1505arp,metadata=0,in_port=ANY,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
f6c8a6b1
BP
1506])
1507
f6c8a6b1
BP
1508OVS_VSWITCHD_STOP
1509AT_CLEANUP
1510
ecac4ebf 1511AT_SETUP([ofproto-dpif - VLAN handling])
04c956fc 1512OVS_VSWITCHD_START(
023e1e0a
BP
1513 [set Bridge br0 fail-mode=standalone -- \
1514 add-port br0 p1 trunks=10,12 -- \
ecac4ebf 1515 add-port br0 p2 tag=10 -- \
5e9ceccd
BP
1516 add-port br0 p3 tag=12 \
1517 other-config:priority-tags=true -- \
ecac4ebf
BP
1518 add-port br0 p4 tag=12 -- \
1519 add-port br0 p5 vlan_mode=native-tagged tag=10 -- \
1520 add-port br0 p6 vlan_mode=native-tagged tag=10 trunks=10,12 -- \
1521 add-port br0 p7 vlan_mode=native-untagged tag=12 -- \
5e9ceccd
BP
1522 add-port br0 p8 vlan_mode=native-untagged tag=12 trunks=10,12 \
1523 other-config:priority-tags=true -- \
ecac4ebf
BP
1524 set Interface p1 type=dummy -- \
1525 set Interface p2 type=dummy -- \
1526 set Interface p3 type=dummy -- \
1527 set Interface p4 type=dummy -- \
1528 set Interface p5 type=dummy -- \
1529 set Interface p6 type=dummy -- \
1530 set Interface p7 type=dummy -- \
1531 set Interface p8 type=dummy --])
04c956fc 1532
247527db
BP
1533dnl Each of these specifies an in_port by number, a VLAN VID (or "none"),
1534dnl a VLAN PCP (used if the VID isn't "none") and the expected set of datapath
ecac4ebf 1535dnl actions.
04c956fc 1536for tuple in \
e44768b7
JP
1537 "100 none 0 drop" \
1538 "100 0 0 drop" \
1539 "100 0 1 drop" \
1540 "100 10 0 1,5,6,7,8,pop_vlan,2" \
1541 "100 10 1 1,5,6,7,8,pop_vlan,2" \
1542 "100 11 0 5,7" \
1543 "100 11 1 5,7" \
1544 "100 12 0 1,5,6,pop_vlan,3,4,7,8" \
1545 "100 12 1 1,5,6,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
247527db
BP
1546 "1 none 0 drop" \
1547 "1 0 0 drop" \
1548 "1 0 1 drop" \
e44768b7
JP
1549 "1 10 0 5,6,7,8,100,pop_vlan,2" \
1550 "1 10 1 5,6,7,8,100,pop_vlan,2" \
247527db
BP
1551 "1 11 0 drop" \
1552 "1 11 1 drop" \
e44768b7
JP
1553 "1 12 0 5,6,100,pop_vlan,3,4,7,8" \
1554 "1 12 1 5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1555 "2 none 0 push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
1556 "2 0 0 pop_vlan,push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
1557 "2 0 1 pop_vlan,push_vlan(vid=10,pcp=1),1,5,6,7,8,100" \
247527db
BP
1558 "2 10 0 drop" \
1559 "2 10 1 drop" \
1560 "2 11 0 drop" \
1561 "2 11 1 drop" \
1562 "2 12 0 drop" \
1563 "2 12 1 drop" \
e44768b7
JP
1564 "3 none 0 4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1565 "3 0 0 pop_vlan,4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1566 "3 0 1 8,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
247527db
BP
1567 "3 10 0 drop" \
1568 "3 10 1 drop" \
1569 "3 11 0 drop" \
1570 "3 11 1 drop" \
1571 "3 12 0 drop" \
1572 "3 12 1 drop" \
e44768b7
JP
1573 "4 none 0 3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1574 "4 0 0 pop_vlan,3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1575 "4 0 1 3,8,pop_vlan,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
247527db
BP
1576 "4 10 0 drop" \
1577 "4 10 1 drop" \
1578 "4 11 0 drop" \
1579 "4 11 1 drop" \
1580 "4 12 0 drop" \
1581 "4 12 1 drop" \
e44768b7
JP
1582 "5 none 0 2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
1583 "5 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
1584 "5 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,6,7,8,100" \
1585 "5 10 0 1,6,7,8,100,pop_vlan,2" \
1586 "5 10 1 1,6,7,8,100,pop_vlan,2" \
1587 "5 11 0 7,100" \
1588 "5 11 1 7,100" \
1589 "5 12 0 1,6,100,pop_vlan,3,4,7,8" \
1590 "5 12 1 1,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1591 "6 none 0 2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
1592 "6 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
1593 "6 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,5,7,8,100" \
1594 "6 10 0 1,5,7,8,100,pop_vlan,2" \
1595 "6 10 1 1,5,7,8,100,pop_vlan,2" \
247527db
BP
1596 "6 11 0 drop" \
1597 "6 11 1 drop" \
e44768b7
JP
1598 "6 12 0 1,5,100,pop_vlan,3,4,7,8" \
1599 "6 12 1 1,5,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1600 "7 none 0 3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1601 "7 0 0 pop_vlan,3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1602 "7 0 1 3,8,pop_vlan,4,push_vlan(vid=12,pcp=1),1,5,6,100" \
1603 "7 10 0 1,5,6,8,100,pop_vlan,2" \
1604 "7 10 1 1,5,6,8,100,pop_vlan,2" \
1605 "7 11 0 5,100" \
1606 "7 11 1 5,100" \
1607 "7 12 0 1,5,6,100,pop_vlan,3,4,8" \
1608 "7 12 1 1,5,6,100,pop_vlan,4,push_vlan(vid=0,pcp=1),3,8" \
1609 "8 none 0 3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
1610 "8 0 0 pop_vlan,3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
1611 "8 0 1 3,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1612 "8 10 0 1,5,6,7,100,pop_vlan,2" \
1613 "8 10 1 1,5,6,7,100,pop_vlan,2" \
247527db
BP
1614 "8 11 0 drop" \
1615 "8 11 1 drop" \
e44768b7
JP
1616 "8 12 0 1,5,6,100,pop_vlan,3,4,7" \
1617 "8 12 1 1,5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3"
04c956fc
BP
1618do
1619 set $tuple
1620 in_port=$1
1621 vlan=$2
ecac4ebf
BP
1622 pcp=$3
1623 expected=$4
04c956fc
BP
1624
1625 if test $vlan = none; then
247527db 1626 flow="in_port($in_port),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff),eth_type(0xabcd)"
04c956fc 1627 else
247527db 1628 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
1629 fi
1630
395e68ce
BP
1631 echo "----------------------------------------------------------------------"
1632 echo "in_port=$in_port vlan=$vlan pcp=$pcp"
1633
50aa28fd 1634 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
ecac4ebf 1635 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
04c956fc 1636
247527db 1637 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
becffb86 1638 mv stdout expout
247527db 1639 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
04c956fc
BP
1640done
1641
1642OVS_VSWITCHD_STOP
1643AT_CLEANUP
7257b535 1644
56879058
JS
1645AT_SETUP([ofproto-dpif - MPLS handling])
1646OVS_VSWITCHD_START([dnl
1647 add-port br0 p1 -- set Interface p1 type=dummy
1648])
1649ON_EXIT([kill `cat ovs-ofctl.pid`])
1650
1651AT_CAPTURE_FILE([ofctl_monitor.log])
1652AT_DATA([flows.txt], [dnl
1653dl_src=40:44:44:44:00:00 actions=push_mpls:0x8847,controller
63636ee8 1654dl_src=40:44:44:44:00:01,mpls actions=push_mpls:0x8847,controller
0c1625e8 1655dl_src=40:44:44:44:00:02,mpls actions=push_mpls:0x8848,controller
56879058
JS
1656])
1657AT_CHECK([ovs-ofctl --protocols=OpenFlow12 add-flows br0 flows.txt])
1658
1659dnl In this test, we push an MPLS tag to an ethernet packet.
1660AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1661
1662for i in 1 2 3; do
1663 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)'
1664done
62022172 1665OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
0c473314 1666OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
56879058
JS
1667
1668AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1669OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1670mpls,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
167100000000 50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
167200000010 01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
167300000020 00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
167400000030 00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
1675dnl
1676OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1677mpls,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
167800000000 50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
167900000010 01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
168000000020 00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
168100000030 00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
1682dnl
1683OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1684mpls,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
168500000000 50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
168600000010 01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
168700000020 00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
168800000030 00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
1689])
1690
63636ee8
JS
1691dnl In this test, we push an MPLS tag to an MPLS packet. The LSE should be
1692dnl copied exactly, except for the BOS bit.
1693AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1694
1695for i in 1 2 3; do
1696 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:00:01,dst=50:54:00:00:00:07),eth_type(0x8847),mpls(label=10,tc=0,ttl=64,bos=1)'
1697done
62022172 1698OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
0c473314 1699OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
63636ee8
JS
1700
1701AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1702OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1703mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:00:01,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=0,mpls_lse1=41280
170400000000 50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
170500000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
170600000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
170700000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1708dnl
1709OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1710mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:00:01,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=0,mpls_lse1=41280
171100000000 50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
171200000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
171300000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
171400000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1715dnl
1716OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1717mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:00:01,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=0,mpls_lse1=41280
171800000000 50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
171900000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
172000000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
0c1625e8
SH
172100000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1722])
1723
1724dnl In this test, we push an MPLS tag to an MPLS packet. The LSE should be
1725dnl copied exactly, except for the BOS bit. The ethertype should be updated
1726dnl to the MPLS ethertype of the MPLS push action which differs to that
1727dnl of the input packet.
1728AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1729
1730for i in 1 2 3; do
1731 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:00:02,dst=50:54:00:00:00:07),eth_type(0x8847),mpls(label=10,tc=0,ttl=64,bos=1)'
1732done
62022172 1733OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
0c1625e8
SH
1734OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1735
1736AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1737OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1738mplsm,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:00:02,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=0,mpls_lse1=41280
173900000000 50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
174000000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
174100000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
174200000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1743dnl
1744OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1745mplsm,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:00:02,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=0,mpls_lse1=41280
174600000000 50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
174700000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
174800000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
174900000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1750dnl
1751OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1752mplsm,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:00:02,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=0,mpls_lse1=41280
175300000000 50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
175400000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
175500000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
63636ee8
JS
175600000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1757])
1758
56879058
JS
1759OVS_VSWITCHD_STOP
1760AT_CLEANUP
1761
846e159a
SH
1762AT_SETUP([ofproto-dpif - VLAN+MPLS handling])
1763OVS_VSWITCHD_START([dnl
1764 add-port br0 p1 -- set Interface p1 type=dummy
1765])
1766ON_EXIT([kill `cat ovs-ofctl.pid`])
1767
1768AT_CAPTURE_FILE([ofctl_monitor.log])
1769AT_DATA([flows.txt], [dnl
1770cookie=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
1771cookie=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
1772cookie=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
1773cookie=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
1774cookie=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
1775cookie=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
1776cookie=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
1777cookie=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
1778cookie=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
1779cookie=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
1780])
1781AT_CHECK([ovs-ofctl --protocols=OpenFlow12 add-flows br0 flows.txt])
1782
1783dnl Modified MPLS controller action.
1784dnl In this test, we push the MPLS tag before pushing a VLAN tag, so we see
1785dnl both of these in the final flow
1786AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1787
1788for i in 1 2 3; do
1789 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)'
1790done
62022172 1791OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
0c473314 1792OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
846e159a
SH
1793
1794AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1795OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1796mpls,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
179700000000 50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
179800000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
179900000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
180000000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
180100000040 00 00 00 00
1802dnl
1803OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1804mpls,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
180500000000 50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
180600000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
180700000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
180800000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
180900000040 00 00 00 00
1810dnl
1811OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1812mpls,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
181300000000 50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
181400000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
181500000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
181600000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
181700000040 00 00 00 00
1818])
1819
1820dnl Modified MPLS controller action.
1821dnl In this test, the input packet in vlan-tagged, which should be stripped
1822dnl before we push the MPLS and VLAN tags.
1823AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1824
1825for i in 1 2 3; do
1826 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))'
1827done
62022172 1828OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
0c473314 1829OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
846e159a
SH
1830
1831AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1832OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1833mpls,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
183400000000 50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
183500000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
183600000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
183700000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1838dnl
1839OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1840mpls,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
184100000000 50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
184200000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
184300000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
184400000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1845dnl
1846OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1847mpls,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
184800000000 50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
184900000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
185000000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
185100000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1852])
1853
1854dnl Modified MPLS controller action.
1855dnl In this test, we push the MPLS tag before pushing a VLAN tag, so we see
1856dnl both of these in the final flow
1857AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1858
1859for i in 1 2 3; do
1860 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)'
1861done
62022172 1862OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
0c473314 1863OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
846e159a
SH
1864
1865AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1866OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1867mpls,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
186800000000 52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
186900000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
187000000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
187100000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
187200000040 00 00 00 00
1873dnl
1874OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1875mpls,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
187600000000 52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
187700000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
187800000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
187900000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
188000000040 00 00 00 00
1881dnl
1882OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1883mpls,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
188400000000 52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
188500000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
188600000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
188700000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
188800000040 00 00 00 00
1889])
1890
1891dnl Modified MPLS controller action.
1892dnl In this test, the input packet in vlan-tagged, which should be stripped
1893dnl before we push the MPLS and VLAN tags.
1894AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1895
1896for i in 1 2 3; do
1897 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))'
1898done
62022172 1899OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
0c473314 1900OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
846e159a
SH
1901
1902AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1903OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1904mpls,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
190500000000 50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
190600000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
190700000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
190800000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1909dnl
1910OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1911mpls,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
191200000000 50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
191300000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
191400000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
191500000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1916dnl
1917OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1918mpls,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
191900000000 50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
192000000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
192100000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
192200000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1923])
1924
1925dnl Modified MPLS controller action.
1926dnl In this test, we push the VLAN tag before pushing a MPLS tag, but these
1927dnl actions are reordered, so we see both of these in the final flow.
1928AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1929
1930for i in 1 2 3; do
1931 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)'
1932done
62022172 1933OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
0c473314 1934OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
846e159a
SH
1935
1936AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1937OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1938mpls,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
193900000000 50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
194000000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
194100000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
194200000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
194300000040 00 00 00 00
1944dnl
1945OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1946mpls,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
194700000000 50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
194800000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
194900000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
195000000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
195100000040 00 00 00 00
1952dnl
1953OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1954mpls,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
195500000000 50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
195600000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
195700000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
195800000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
195900000040 00 00 00 00
1960])
1961
1962dnl Modified MPLS controller action.
1963dnl In this test, the input packet in vlan-tagged, which should be stripped
1964dnl before we push the MPLS and VLAN tags.
1965AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1966
1967for i in 1 2 3; do
1968 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))'
1969done
62022172 1970OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
846e159a
SH
1971ovs-appctl -t ovs-ofctl exit
1972
1973AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1974OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1975mpls,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
197600000000 50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
197700000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
197800000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
197900000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1980dnl
1981OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1982mpls,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
198300000000 50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
198400000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
198500000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
198600000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1987dnl
1988OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1989mpls,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
199000000000 50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
199100000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
199200000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
199300000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1994])
1995
1996dnl Modified MPLS controller action.
1997dnl In this test, we push the VLAN tag before pushing a MPLS tag, but these
1998dnl actions are reordered, so we see both of these in the final flow.
1999AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2000
2001for i in 1 2 3; do
2002 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)'
2003done
62022172 2004OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
0c473314 2005OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
846e159a
SH
2006
2007AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2008OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2009mpls,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
201000000000 50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
201100000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
201200000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
201300000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
201400000040 00 00 00 00
2015dnl
2016OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2017mpls,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
201800000000 50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
201900000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
202000000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
202100000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
202200000040 00 00 00 00
2023dnl
2024OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2025mpls,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
202600000000 50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
202700000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
202800000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
202900000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
203000000040 00 00 00 00
2031])
2032
2033dnl Modified MPLS controller action.
2034dnl In this test, the input packet in vlan-tagged, which should be stripped
2035dnl before we push the MPLS and VLAN tags.
2036AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 -m 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2037
2038for i in 1 2 3; do
2039 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))'
2040done
62022172 2041OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
0c473314 2042OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
846e159a
SH
2043
2044AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2045OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2046mpls,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
204700000000 50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
204800000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
204900000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
205000000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2051dnl
2052OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2053mpls,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
205400000000 50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
205500000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
205600000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
205700000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2058dnl
2059OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2060mpls,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
206100000000 50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
206200000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
206300000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
206400000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2065])
2066
2067dnl Modified MPLS controller action.
2068dnl In this test, the input packet in vlan-tagged, which should be stripped
2069dnl before we push the MPLS and VLAN tags.
2070AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2071
2072for i in 1 2 3; do
2073 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))'
2074done
62022172 2075OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
0c473314 2076OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
846e159a
SH
2077
2078AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2079OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2080mpls,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
208100000000 50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
208200000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
208300000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
208400000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2085dnl
2086OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2087mpls,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
208800000000 50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
208900000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
209000000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
209100000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2092dnl
2093OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2094mpls,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
209500000000 50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
209600000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
209700000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
209800000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2099])
2100
2101dnl Modified MPLS controller action.
2102dnl In this test, the input packet in vlan-tagged, which should be modified
2103dnl before we push MPLS and VLAN tags.
2104AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2105
2106for i in 1 2 3; do
2107 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))'
2108done
62022172 2109OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
846e159a
SH
2110ovs-appctl -t ovs-ofctl exit
2111
2112AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2113OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2114mpls,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
211500000000 50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
211600000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
211700000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
211800000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2119dnl
2120OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2121mpls,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
212200000000 50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
212300000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
212400000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
212500000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2126dnl
2127OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2128mpls,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
212900000000 50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
213000000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
213100000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
213200000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2133])
2134
2135AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2136AT_CHECK([ovs-ofctl --protocols=OpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
2137 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
2138 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
2139 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
2140 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
2141 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
2142 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
2143 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
2144 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
2145 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
2146 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
2147OFPST_FLOW reply (OF1.2):
2148])
2149
2150OVS_VSWITCHD_STOP
2151AT_CLEANUP
2152
7257b535 2153AT_SETUP([ofproto-dpif - fragment handling])
023e1e0a 2154OVS_VSWITCHD_START
72d64e33 2155ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [90])
7257b535
BP
2156AT_DATA([flows.txt], [dnl
2157priority=75 tcp ip_frag=no tp_dst=80 actions=output:1
2158priority=75 tcp ip_frag=first tp_dst=80 actions=output:2
2159priority=75 tcp ip_frag=later tp_dst=80 actions=output:3
2160priority=50 tcp ip_frag=no actions=output:4
2161priority=50 tcp ip_frag=first actions=output:5
2162priority=50 tcp ip_frag=later actions=output:6
2163])
2164AT_CHECK([ovs-ofctl replace-flows br0 flows.txt])
2165
a61680c6 2166base_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
2167no_flow="$base_flow,frag=no),tcp(src=12345,dst=80)"
2168first_flow="$base_flow,frag=first),tcp(src=12345,dst=80)"
2169later_flow="$base_flow,frag=later)"
2170
2171 # mode no first later
2172for tuple in \
2173 'normal 1 5 6' \
2174 'drop 1 drop drop' \
2175 'nx-match 1 2 6'
2176do
2177 set $tuple
2178 mode=$1
2179 no=$2
2180 first=$3
2181 later=$4
2182
2183 AT_CHECK([ovs-ofctl set-frags br0 $mode])
2184 for type in no first later; do
2185 eval flow=\$${type}_flow exp_output=\$$type
7fd51d39 2186 printf "\n%s\n" "----$mode $type-----"
50aa28fd 2187 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
7fd51d39
BP
2188 : > expout
2189 if test $mode = drop && test $type != no; then
2190 echo 'Packets dropped because they are IP fragments and the fragment handling mode is "drop".' >> expout
2191 fi
2192 echo "Datapath actions: $exp_output" >> expout
2193 AT_CHECK([grep 'IP fragments' stdout; tail -1 stdout], [0], [expout])
7257b535
BP
2194 done
2195done
023e1e0a 2196OVS_VSWITCHD_STOP
7257b535 2197AT_CLEANUP
848e8809
EJ
2198
2199AT_SETUP([ofproto-dpif - exit])
2200OVS_VSWITCHD_START
f7b8e494 2201ADD_OF_PORTS([br0], [1], [2], [3], [10], [11], [12], [13], [14])
848e8809
EJ
2202AT_DATA([flows.txt], [dnl
2203in_port=1 actions=output:10,exit,output:11
2204in_port=2 actions=output:12,resubmit:1,output:12
2205in_port=3 actions=output:13,resubmit:2,output:14
2206])
2207AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
50aa28fd 2208AT_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
2209AT_CHECK([tail -1 stdout], [0],
2210 [Datapath actions: 10
2211])
50aa28fd 2212AT_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
2213AT_CHECK([tail -1 stdout], [0],
2214 [Datapath actions: 12,10
2215])
50aa28fd 2216AT_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
2217AT_CHECK([tail -1 stdout], [0],
2218 [Datapath actions: 13,12,10
2219])
2220OVS_VSWITCHD_STOP
2221AT_CLEANUP
c06bba01
JP
2222
2223
2224AT_SETUP([ofproto-dpif - mirroring, select_all])
432fca23
BP
2225OVS_VSWITCHD_START
2226ADD_OF_PORTS([br0], 1, 2, 3)
2227ovs-vsctl \
c06bba01
JP
2228 set Bridge br0 mirrors=@m --\
2229 --id=@p3 get Port p3 --\
432fca23 2230 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
c06bba01 2231
c06bba01
JP
2232AT_DATA([flows.txt], [dnl
2233in_port=1 actions=output:2
2234in_port=2 actions=output:1
2235])
2236AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2237
247527db 2238flow="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 2239AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01 2240AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 2241 [Datapath actions: 2,3
c06bba01
JP
2242])
2243
247527db 2244flow="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 2245AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01 2246AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 2247 [Datapath actions: 1,3
c06bba01
JP
2248])
2249
2250OVS_VSWITCHD_STOP
2251AT_CLEANUP
2252
2253
2254AT_SETUP([ofproto-dpif - mirroring, select_src])
432fca23
BP
2255OVS_VSWITCHD_START
2256ADD_OF_PORTS([br0], 1, 2, 3)
2257ovs-vsctl \
c06bba01
JP
2258 set Bridge br0 mirrors=@m --\
2259 --id=@p1 get Port p1 -- --id=@p3 get Port p3 --\
432fca23 2260 --id=@m create Mirror name=mymirror select_src_port=@p1 output_port=@p3
c06bba01 2261
c06bba01
JP
2262AT_DATA([flows.txt], [dnl
2263in_port=1 actions=output:2
2264in_port=2 actions=output:1
2265])
2266AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2267
247527db 2268flow="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 2269AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01 2270AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 2271 [Datapath actions: 2,3
c06bba01
JP
2272])
2273
247527db 2274flow="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 2275AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01 2276AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 2277 [Datapath actions: 1
c06bba01
JP
2278])
2279OVS_VSWITCHD_STOP
2280AT_CLEANUP
2281
33158a18 2282AT_SETUP([ofproto-dpif - mirroring, OFPP_NONE ingress port])
432fca23
BP
2283OVS_VSWITCHD_START
2284ADD_OF_PORTS([br0], 1, 2)
2285ovs-vsctl \
33158a18
JP
2286 set Bridge br0 mirrors=@m --\
2287 --id=@p2 get Port p2 --\
432fca23 2288 --id=@m create Mirror name=mymirror select_all=true output_port=@p2
33158a18 2289
33158a18
JP
2290AT_CHECK([ovs-ofctl add-flow br0 action=output:1])
2291
2292# "in_port" defaults to OFPP_NONE if it's not specified.
72d64e33 2293flow="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
2294AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
2295AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 2296 [Datapath actions: 1,2
33158a18
JP
2297])
2298
2299OVS_VSWITCHD_STOP
2300AT_CLEANUP
2301
c06bba01
JP
2302
2303AT_SETUP([ofproto-dpif - mirroring, select_dst])
432fca23
BP
2304OVS_VSWITCHD_START
2305ADD_OF_PORTS([br0], 1, 2, 3)
2306ovs-vsctl \
c06bba01
JP
2307 set Bridge br0 mirrors=@m --\
2308 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
432fca23 2309 --id=@m create Mirror name=mymirror select_dst_port=@p2 output_port=@p3
c06bba01 2310
c06bba01
JP
2311AT_DATA([flows.txt], [dnl
2312in_port=1 actions=output:2
2313in_port=2 actions=output:1
2314])
2315AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2316
247527db 2317flow="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 2318AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01 2319AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 2320 [Datapath actions: 2,3
c06bba01
JP
2321])
2322
247527db 2323flow="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 2324AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01 2325AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 2326 [Datapath actions: 1
c06bba01
JP
2327])
2328
2329OVS_VSWITCHD_STOP
2330AT_CLEANUP
2331
2332
2333AT_SETUP([ofproto-dpif - mirroring, select_vlan])
432fca23
BP
2334OVS_VSWITCHD_START
2335ADD_OF_PORTS([br0], 1, 2, 3)
2336ovs-vsctl \
c06bba01
JP
2337 set Bridge br0 mirrors=@m --\
2338 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
432fca23 2339 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
c06bba01 2340
c06bba01
JP
2341AT_DATA([flows.txt], [dnl
2342in_port=1, actions=output:2
2343])
2344AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2345
247527db 2346flow="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 2347AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01 2348AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 2349 [Datapath actions: 2
c06bba01
JP
2350])
2351
247527db 2352flow="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 2353AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01 2354AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 2355 [Datapath actions: 2
c06bba01
JP
2356])
2357
247527db 2358flow="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 2359AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01 2360AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 2361 [Datapath actions: 2,3
c06bba01
JP
2362])
2363
2364OVS_VSWITCHD_STOP
2365AT_CLEANUP
2366
2367
2368AT_SETUP([ofproto-dpif - mirroring, output_port])
432fca23
BP
2369OVS_VSWITCHD_START
2370ADD_OF_PORTS([br0], 1, 2, 3)
2371ovs-vsctl \
c06bba01
JP
2372 set Bridge br0 mirrors=@m --\
2373 --id=@p3 get Port p3 --\
432fca23 2374 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
c06bba01 2375
c06bba01
JP
2376AT_DATA([flows.txt], [dnl
2377in_port=1 actions=mod_vlan_vid:17,output:2
2378in_port=2 actions=output:1
2379])
2380AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2381
247527db 2382flow="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 2383AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01 2384AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 2385 [Datapath actions: push_vlan(vid=17,pcp=0),2,pop_vlan,3
c06bba01
JP
2386])
2387
247527db 2388flow="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 2389AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01 2390AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 2391 [Datapath actions: 1,3
c06bba01
JP
2392])
2393
2394OVS_VSWITCHD_STOP
2395AT_CLEANUP
2396
c06bba01 2397AT_SETUP([ofproto-dpif - mirroring, output_vlan])
432fca23
BP
2398OVS_VSWITCHD_START
2399ADD_OF_PORTS([br0], 1, 2)
2400ovs-vsctl \
c06bba01 2401 set Bridge br0 mirrors=@m --\
432fca23 2402 --id=@m create Mirror name=mymirror select_all=true output_vlan=12
c06bba01 2403
c06bba01
JP
2404AT_DATA([flows.txt], [dnl
2405in_port=1 actions=output:2
2406in_port=2 actions=mod_vlan_vid:17,output:1
2407])
2408AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2409
247527db 2410flow="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 2411AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01
JP
2412actual=`tail -1 stdout | sed 's/Datapath actions: //'`
2413
e44768b7 2414expected="2,push_vlan(vid=12,pcp=0),1,2,100"
247527db 2415AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
c06bba01 2416mv stdout expout
247527db 2417AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
c06bba01 2418
247527db 2419flow="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 2420AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01
JP
2421actual=`tail -1 stdout | sed 's/Datapath actions: //'`
2422
e44768b7 2423expected="push_vlan(vid=17,pcp=0),1,pop_vlan,push_vlan(vid=12,pcp=0),1,2,100"
247527db 2424AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
c06bba01 2425mv stdout expout
247527db 2426AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
c06bba01
JP
2427
2428OVS_VSWITCHD_STOP
2429AT_CLEANUP
b44a10b7 2430
22bb3cbc
AW
2431# Two testcases below are for the ofproto/trace command
2432# The first one tests all correct syntax:
2433# ofproto/trace [dp_name] odp_flow [-generate|packet]
2434# ofproto/trace br_name br_flow [-generate|packet]
2435AT_SETUP([ofproto-dpif - ofproto/trace command 1])
2436OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
2437ADD_OF_PORTS([br0], 1, 2, 3)
2438
2439AT_DATA([flows.txt], [dnl
2440in_port=1 actions=output:2
2441in_port=2 actions=output:1
2442])
2443AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2444
0a37839c 2445odp_flow="in_port(p1)"
22bb3cbc 2446br_flow="in_port=1"
0a37839c
GS
2447# Test command: ofproto/trace odp_flow with in_port as a name.
2448AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
2449AT_CHECK([tail -1 stdout], [0], [dnl
2450Datapath actions: 2
2451])
2452
2453odp_flow="in_port(1)"
22bb3cbc
AW
2454# Test command: ofproto/trace odp_flow
2455AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
2456AT_CHECK([tail -1 stdout], [0], [dnl
2457Datapath actions: 2
2458])
2459
2460# Test command: ofproto/trace dp_name odp_flow
2461AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$odp_flow"], [0], [stdout])
2462AT_CHECK([tail -1 stdout], [0], [dnl
2463Datapath actions: 2
2464])
2465# Test commmand: ofproto/trace br_name br_flow
2466AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
2467AT_CHECK([tail -1 stdout], [0], [dnl
2468Datapath actions: 2
2469])
2470
2471# Delete the inserted flows
2472AT_CHECK([ovs-ofctl del-flows br0 "in_port=1"], [0], [stdout])
2473AT_CHECK([ovs-ofctl del-flows br0 "in_port=2"], [0], [stdout])
2474
2475# This section beflow tests the [-generate] option
2476odp_flow="in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff)"
2477br_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"
2478
2479# Test command: ofproto/trace odp_flow
2480AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
2481# Check for no MAC learning entry
2482AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2483 port VLAN MAC Age
2484])
2485
2486# Test command: ofproto/trace br_name br_flow
2487AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
2488# Check for no MAC learning entry
2489AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2490 port VLAN MAC Age
2491])
2492
2493# Test command: ofproto/trace odp_flow -generate
2494AT_CHECK([ovs-appctl ofproto/trace "$odp_flow" -generate], [0], [stdout])
2495# Check for the MAC learning entry
2496AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2497 port VLAN MAC Age
2498 3 0 50:54:00:00:00:05 ?
2499])
2500
2501# Test command: ofproto/trace dp_name odp_flow -generate
2502AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2503 "in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05)" \
2504 -generate], [0], [stdout])
2505# Check for both MAC learning entries
2506AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2507 port VLAN MAC Age
2508 3 0 50:54:00:00:00:05 ?
2509 1 0 50:54:00:00:00:06 ?
2510])
2511
2512# Test command: ofproto/trace br_name br_flow -generate
2513AT_CHECK([ovs-appctl ofproto/trace br0 \
2514 "in_port=2,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:06" \
2515 -generate], [0], [stdout])
2516# Check for both MAC learning entries.
2517AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2518 port VLAN MAC Age
2519 3 0 50:54:00:00:00:05 ?
2520 1 0 50:54:00:00:00:06 ?
2521 2 0 50:54:00:00:00:07 ?
2522])
2523
2524# This section beflow tests the [packet] option
2525# The ovs-tcpundump of packets between port1 and port2
2526pkt1to2="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
2527pkt2to1="50540000000150540000000208064500001C000100004001F98CC0A80002C0A800010800F7FF00000000"
2528
2529# Construct the MAC learning table
2530AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2531 "in_port(1),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff)" \
2532 -generate], [0], [stdout])
2533
2534# Construct the MAC learning table
2535AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2536 "in_port(2),eth(src=50:54:00:00:00:02,dst=ff:ff:ff:ff:ff:ff)" \
2537 -generate], [0], [stdout])
2538
2539# Test command: ofproto/trace odp_flow packet
2540AT_CHECK([ovs-appctl ofproto/trace \
2541 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
2542AT_CHECK([tail -1 stdout], [0], [dnl
2543Datapath actions: 2
2544])
b6f00895 2545AT_CHECK([head -n 2 stdout], [0], [dnl
22bb3cbc 2546Bridge: br0
1362e248 2547Flow: 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
2548])
2549
2550# Test command: ofproto/trace dp_name odp_flow packet
2551AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2552 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
2553AT_CHECK([tail -1 stdout], [0], [dnl
2554Datapath actions: 2
2555])
b6f00895 2556AT_CHECK([head -n 2 stdout], [0], [dnl
22bb3cbc 2557Bridge: br0
1362e248 2558Flow: 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
2559])
2560
2561# Test command: ofproto/trace br_name br_flow packet
2562AT_CHECK([ovs-appctl ofproto/trace br0 \
1362e248 2563 "in_port=2,skb_priority=2,pkt_mark=1" "$pkt2to1"], [0], [stdout],[stderr])
22bb3cbc 2564AT_CHECK([tail -1 stdout], [0], [dnl
ed2e7245 2565Datapath actions: 1
22bb3cbc
AW
2566])
2567AT_CHECK([head -n 2 stdout], [0], [dnl
b6f00895 2568Bridge: br0
1362e248 2569Flow: 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
2570])
2571
2572OVS_VSWITCHD_STOP
2573AT_CLEANUP
2574
2575# The second test tests the corner cases
2576AT_SETUP([ofproto-dpif - ofproto/trace command 2])
2577OVS_VSWITCHD_START
2578ADD_OF_PORTS([br0], 1, 2)
2579
2580# Define flows
2581odp_flow="in_port(1),eth(src=50:54:00:00:00:01,dst=50:54:00:00:00:02)"
2582br_flow="in_port=1,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02"
2583# Define options
2584generate="-generate"
2585pkt="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
2586
2587# Test incorrect command: ofproto/trace wrong_name odp_flow [-generate|packet]
2588m4_foreach(
2589[option],
2590[[],
2591["$generate"],
2592["$pkt"]],
2593[AT_CHECK([ovs-appctl ofproto/trace wrong_name "$odp_flow" option],
2594 [2], [], [stderr])
2595AT_CHECK([tail -2 stderr], [0], [dnl
0a37839c 2596Cannot find the datapath
22bb3cbc
AW
2597ovs-appctl: ovs-vswitchd: server returned an error
2598])])
2599
2600# Test incorrect command: ofproto/trace empty_string odp_flow [-generate|packet]
2601m4_foreach(
2602[option],
2603[[],
2604["$generate"],
2605["$pkt"]],
2606[AT_CHECK([ovs-appctl ofproto/trace "" "$odp_flow" option],
2607 [2], [], [stderr])
2608AT_CHECK([tail -2 stderr], [0], [dnl
0a37839c 2609Cannot find the datapath
22bb3cbc
AW
2610ovs-appctl: ovs-vswitchd: server returned an error
2611])])
2612
2613# Test incorrect command: ofproto/trace nonexist_dp_name odp_flow [-generate|packet]
2614m4_foreach(
2615[option],
2616[[],
2617["$generate"],
2618["$pkt"]],
2619[AT_CHECK([ovs-appctl ofproto/trace ovs-system "$odp_flow" option],
2620 [2], [], [stderr])
2621AT_CHECK([tail -2 stderr], [0], [dnl
0a37839c 2622Cannot find the datapath
22bb3cbc
AW
2623ovs-appctl: ovs-vswitchd: server returned an error
2624])])
2625
2626# Test incorrect command: ofproto/trace br_name odp_flow [-generate|packet]
2627m4_foreach(
2628[option],
2629[[],
2630["$generate"],
2631["$pkt"]],
2632[AT_CHECK([ovs-appctl ofproto/trace br0 "$odp_flow" option],
2633 [2], [], [stderr])
2634AT_CHECK([tail -2 stderr], [0], [dnl
0a37839c 2635Cannot find the datapath
22bb3cbc
AW
2636ovs-appctl: ovs-vswitchd: server returned an error
2637])])
2638
2639# Test incorrect command: ofproto/trace dp_name br_flow [-generate|packet]
2640m4_foreach(
2641[option],
2642[[],
2643["$generate"],
2644["$pkt"]],
2645[AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$br_flow" option],
2646 [2], [], [stderr])
2647AT_CHECK([tail -2 stderr], [0], [dnl
2648Unknown bridge name
2649ovs-appctl: ovs-vswitchd: server returned an error
2650])])
2651
2652# Test incorrect command: ofproto/trace br_flow [-generate|packet]
2653m4_foreach(
2654[option],
2655[[],
2656["$generate"],
2657["$pkt"]],
2658[AT_CHECK([ovs-appctl ofproto/trace "$br_flow" option],
2659 [2], [], [stderr])
2660AT_CHECK([tail -2 stderr], [0], [dnl
2661Must specify bridge name
2662ovs-appctl: ovs-vswitchd: server returned an error
2663])])
2664
2665# Test incorrect command: ofproto/trace dp_name odp_flow garbage_option
2666AT_CHECK([ovs-appctl ofproto/trace \
2667 ovs-dummy "$odp_flow" garbage_option],
2668 [2], [stdout],[stderr])
2669AT_CHECK([tail -2 stderr], [0], [dnl
2670Trailing garbage in packet data
2671ovs-appctl: ovs-vswitchd: server returned an error
2672])
2673
2674# Test incorrect command: ofproto/trace with 4 arguments
2675AT_CHECK([ovs-appctl ofproto/trace \
2676 arg1, arg2, arg3, arg4], [2], [stdout],[stderr])
2677AT_CHECK([tail -2 stderr], [0], [dnl
2678"ofproto/trace" command takes at most 3 arguments
2679ovs-appctl: ovs-vswitchd: server returned an error
2680])
2681
2682# Test incorrect command: ofproto/trace with 0 argument
2683AT_CHECK([ovs-appctl ofproto/trace ], [2], [stdout],[stderr])
2684AT_CHECK([tail -2 stderr], [0], [dnl
2685"ofproto/trace" command requires at least 1 arguments
2686ovs-appctl: ovs-vswitchd: server returned an error
2687])
2688
2689OVS_VSWITCHD_STOP
2690AT_CLEANUP
2691
aee0979b
BP
2692AT_SETUP([ofproto-dpif - ofproto/trace-packet-out])
2693OVS_VSWITCHD_START
2694ADD_OF_PORTS([br0], 1, 2, 3)
2695
2696AT_DATA([flows.txt], [dnl
2697in_port=1 actions=output:2
2698in_port=2 actions=output:1
2699])
2700AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2701
2702AT_CHECK([ovs-appctl ofproto/trace-packet-out br0 in_port=1 'mod_vlan_vid:123,resubmit(,0)'], [0], [stdout])
2703AT_CHECK([tail -1 stdout], [0], [dnl
2704Datapath actions: push_vlan(vid=123,pcp=0),2
2705])
2706
2707OVS_VSWITCHD_STOP
2708AT_CLEANUP
2709
2710
b44a10b7
BP
2711m4_define([OFPROTO_TRACE],
2712 [flow="$2"
2713 AT_CHECK([ovs-appctl ofproto/trace $1 "$flow" $3], [0], [stdout])
2714 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
2715 expected="$4"
2716 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected" $5],
2717 [0], [stdout])
2718 mv stdout expout
2719 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual" $5],
2720 [0], [expout])])
2721
2722AT_SETUP([ofproto-dpif - MAC learning])
432fca23
BP
2723OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
2724ADD_OF_PORTS([br0], 1, 2, 3)
b44a10b7 2725
b44a10b7
BP
2726arp='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)'
2727
2728# Trace an ARP packet arriving on p3, to create a MAC learning entry.
2729OFPROTO_TRACE(
50aa28fd 2730 [ovs-dummy],
247527db 2731 [in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
b44a10b7 2732 [-generate],
e44768b7 2733 [1,2,100])
b44a10b7
BP
2734
2735# Check for the MAC learning entry.
83664f72 2736AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
b44a10b7 2737 port VLAN MAC Age
247527db 2738 3 0 50:54:00:00:00:05 ?
b44a10b7
BP
2739])
2740
2741# Trace a packet arrival destined for the learned MAC.
2742# (This will also learn a MAC.)
2743OFPROTO_TRACE(
50aa28fd 2744 [ovs-dummy],
247527db 2745 [in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05),$arp],
b44a10b7 2746 [-generate],
247527db 2747 [3])
b44a10b7
BP
2748
2749# Check for both MAC learning entries.
83664f72 2750AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
b44a10b7 2751 port VLAN MAC Age
247527db
BP
2752 3 0 50:54:00:00:00:05 ?
2753 1 0 50:54:00:00:00:06 ?
b44a10b7
BP
2754])
2755
2756# Trace a packet arrival that updates the first learned MAC entry.
2757OFPROTO_TRACE(
50aa28fd 2758 [ovs-dummy],
247527db 2759 [in_port(2),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
b44a10b7 2760 [-generate],
e44768b7 2761 [1,3,100])
b44a10b7
BP
2762
2763# Check that the MAC learning entry was updated.
83664f72 2764AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
b44a10b7 2765 port VLAN MAC Age
247527db
BP
2766 1 0 50:54:00:00:00:06 ?
2767 2 0 50:54:00:00:00:05 ?
b44a10b7
BP
2768])
2769
2770# Add another bridge.
2771AT_CHECK(
2772 [ovs-vsctl \
2773 -- add-br br1 \
ad28062f
BP
2774 -- set bridge br1 datapath-type=dummy])
2775ADD_OF_PORTS([br1], 4, 5)
b44a10b7
BP
2776
2777# Trace some packet arrivals in br1 to create MAC learning entries there too.
2778OFPROTO_TRACE(
50aa28fd 2779 [ovs-dummy],
247527db 2780 [in_port(4),eth(src=50:54:00:00:00:06,dst=ff:ff:ff:ff:ff:ff),$arp],
b44a10b7 2781 [-generate],
e44768b7 2782 [5,101])
b44a10b7 2783OFPROTO_TRACE(
50aa28fd 2784 [ovs-dummy],
247527db 2785 [in_port(5),eth(src=50:54:00:00:00:07,dst=ff:ff:ff:ff:ff:ff),$arp],
b44a10b7 2786 [-generate],
e44768b7 2787 [4,101])
b44a10b7
BP
2788
2789# Check that the MAC learning entries were added.
83664f72 2790AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
b44a10b7 2791 port VLAN MAC Age
247527db
BP
2792 4 0 50:54:00:00:00:06 ?
2793 5 0 50:54:00:00:00:07 ?
b44a10b7
BP
2794])
2795
2796# Delete port p1 and see that its MAC learning entry disappeared, and
2797# that the MAC learning entry for the same MAC was also deleted from br1.
2798AT_CHECK([ovs-vsctl del-port p1])
83664f72 2799AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
b44a10b7 2800 port VLAN MAC Age
247527db 2801 2 0 50:54:00:00:00:05 ?
b44a10b7 2802])
83664f72 2803AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
b44a10b7 2804 port VLAN MAC Age
247527db 2805 5 0 50:54:00:00:00:07 ?
b44a10b7
BP
2806])
2807
2808OVS_VSWITCHD_STOP
2809AT_CLEANUP
17f7f7e0 2810
c4069512
BP
2811AT_SETUP([ofproto-dpif - MAC table overflow])
2812OVS_VSWITCHD_START(
ad28062f
BP
2813 [set bridge br0 fail-mode=standalone other-config:mac-table-size=10])
2814ADD_OF_PORTS([br0], 1, 2, 3)
c4069512
BP
2815
2816arp='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)'
2817
2818AT_CHECK([ovs-appctl time/stop])
2819
2820# Trace 10 ARP packets arriving on p3, to create MAC learning entries.
2821for i in 0 1 2 3 4 5 6 7 8 9; do
2822 OFPROTO_TRACE(
50aa28fd 2823 [ovs-dummy],
c4069512
BP
2824 [in_port(3),eth(src=50:54:00:00:00:0$i,dst=ff:ff:ff:ff:ff:ff),$arp],
2825 [-generate],
2826 [1,2,100])
2827 ovs-appctl time/warp 1000
2828done
2829
2830# Check for the MAC learning entries.
2831AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
2832 [0], [dnl
2833 3 0 50:54:00:00:00:00
2834 3 0 50:54:00:00:00:01
2835 3 0 50:54:00:00:00:02
2836 3 0 50:54:00:00:00:03
2837 3 0 50:54:00:00:00:04
2838 3 0 50:54:00:00:00:05
2839 3 0 50:54:00:00:00:06
2840 3 0 50:54:00:00:00:07
2841 3 0 50:54:00:00:00:08
2842 3 0 50:54:00:00:00:09
2843 port VLAN MAC Age
2844])
2845
2846# Trace another ARP packet on another MAC.
2847OFPROTO_TRACE(
50aa28fd 2848 [ovs-dummy],
c4069512
BP
2849 [in_port(3),eth(src=50:54:00:00:00:10,dst=ff:ff:ff:ff:ff:ff),$arp],
2850 [-generate],
2851 [1,2,100])
2852
2853# Check that the new one chased the oldest one out of the table.
2854AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/' | sort],
2855 [0], [dnl
2856 3 0 50:54:00:00:00:01 ?
2857 3 0 50:54:00:00:00:02 ?
2858 3 0 50:54:00:00:00:03 ?
2859 3 0 50:54:00:00:00:04 ?
2860 3 0 50:54:00:00:00:05 ?
2861 3 0 50:54:00:00:00:06 ?
2862 3 0 50:54:00:00:00:07 ?
2863 3 0 50:54:00:00:00:08 ?
2864 3 0 50:54:00:00:00:09 ?
2865 3 0 50:54:00:00:00:10 ?
2866 port VLAN MAC Age
2867])
2868OVS_VSWITCHD_STOP
2869AT_CLEANUP
2870
e731d71b
AS
2871# CHECK_SFLOW_SAMPLING_PACKET(LOOPBACK_ADDR, ADDR_WITHOUT_BRACKETS)
2872#
2873# Test that sFlow samples packets correctly using IPv4/IPv6 sFlow collector
2874#
2875# IP_VERSION_TYPE is used in AT_SETUP
2876m4_define([CHECK_SFLOW_SAMPLING_PACKET],
2877 [AT_SETUP([ofproto-dpif - sFlow packet sampling - $2 collector])
2878 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
2879
2880 ON_EXIT([kill `cat test-sflow.pid`])
eadd1644 2881 AT_CHECK([ovstest test-sflow --log-file --detach --no-chdir --pidfile 0:$1 > sflow.log], [0], [], [ignore])
e731d71b
AS
2882 AT_CAPTURE_FILE([sflow.log])
2883 SFLOW_PORT=`parse_listening_port < test-sflow.log`
2884 ovs-appctl time/stop
2885
2886 ADD_OF_PORTS([br0], 1, 2)
2887 ovs-vsctl \
2888 set Interface br0 options:ifindex=1002 -- \
2889 set Interface p1 options:ifindex=1004 -- \
2890 set Interface p2 options:ifindex=1003 -- \
2891 set Bridge br0 sflow=@sf -- \
2892 --id=@sf create sflow targets=\"$1:$SFLOW_PORT\" \
9a9808d7 2893 header=128 sampling=1 polling=1 agent=$LOOPBACK_INTERFACE
e731d71b
AS
2894
2895 dnl open with ARP packets to seed the bridge-learning. The output
2896 dnl ifIndex numbers should be reported predictably after that.
2897 dnl Since we set sampling=1 we should see all of these packets
2898 dnl reported. Sorting the output by data-source and seqNo makes
2899 dnl it deterministic. Ensuring that we send at least two packets
2900 dnl into each port means we get to check the seq nos are
2901 dnl incrementing correctly.
2902 dnl because packets from different ports can be handled by separate
2903 dnl threads, put some sleeps
2904
2905 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)'
2906 sleep 1
2907 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)'
2908 sleep 1
2909 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)'
2910 sleep 1
2911 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)'
2912 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)'
2913
2914 dnl sleep long enough to get more than one counter sample
2915 dnl from each datasource so we can check sequence numbers
2916 for i in `seq 1 30`; do
2917 ovs-appctl time/warp 100
2918 done
2919 OVS_VSWITCHD_STOP
2920 ovs-appctl -t test-sflow exit
8073dd31 2921
e731d71b 2922 AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'HEADER|ERROR' | sed 's/ /\
8073dd31
NM
2923 /g']], [0], [dnl
2924HEADER
2925 dgramSeqNo=1
743cea45 2926 ds=127.0.0.1>2:1000
8073dd31
NM
2927 fsSeqNo=1
2928 in_vlan=0
2929 in_priority=0
2930 out_vlan=0
2931 out_priority=0
2932 meanSkip=1
2933 samplePool=1
2934 dropEvents=0
743cea45 2935 in_ifindex=1004
8073dd31
NM
2936 in_format=0
2937 out_ifindex=2
2938 out_format=2
2939 hdr_prot=1
2940 pkt_len=64
2941 stripped=4
2942 hdr_len=60
743cea45 2943 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
2944HEADER
2945 dgramSeqNo=1
743cea45 2946 ds=127.0.0.1>2:1000
8073dd31
NM
2947 fsSeqNo=2
2948 in_vlan=0
2949 in_priority=0
2950 out_vlan=0
2951 out_priority=0
2952 meanSkip=1
2953 samplePool=2
2954 dropEvents=0
2955 in_ifindex=1003
2956 in_format=0
743cea45
NM
2957 out_ifindex=2
2958 out_format=2
8073dd31
NM
2959 hdr_prot=1
2960 pkt_len=64
2961 stripped=4
2962 hdr_len=60
743cea45 2963 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
2964HEADER
2965 dgramSeqNo=1
743cea45 2966 ds=127.0.0.1>2:1000
8073dd31
NM
2967 fsSeqNo=3
2968 in_vlan=0
2969 in_priority=0
2970 out_vlan=0
2971 out_priority=0
2972 meanSkip=1
2973 samplePool=3
2974 dropEvents=0
743cea45 2975 in_ifindex=1004
8073dd31 2976 in_format=0
743cea45 2977 out_ifindex=1003
8073dd31
NM
2978 out_format=0
2979 hdr_prot=1
2980 pkt_len=64
2981 stripped=4
2982 hdr_len=60
743cea45 2983 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
2984HEADER
2985 dgramSeqNo=1
743cea45
NM
2986 ds=127.0.0.1>2:1000
2987 fsSeqNo=4
8073dd31
NM
2988 in_vlan=0
2989 in_priority=0
2990 out_vlan=0
2991 out_priority=0
2992 meanSkip=1
743cea45 2993 samplePool=4
8073dd31 2994 dropEvents=0
743cea45 2995 in_ifindex=1003
8073dd31 2996 in_format=0
743cea45
NM
2997 out_ifindex=1004
2998 out_format=0
8073dd31
NM
2999 hdr_prot=1
3000 pkt_len=64
3001 stripped=4
3002 hdr_len=60
743cea45 3003 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
3004HEADER
3005 dgramSeqNo=1
743cea45
NM
3006 ds=127.0.0.1>2:1000
3007 fsSeqNo=5
8073dd31
NM
3008 in_vlan=0
3009 in_priority=0
3010 out_vlan=0
3011 out_priority=0
3012 meanSkip=1
743cea45 3013 samplePool=5
8073dd31 3014 dropEvents=0
743cea45 3015 in_ifindex=1003
8073dd31 3016 in_format=0
743cea45 3017 out_ifindex=1004
8073dd31
NM
3018 out_format=0
3019 hdr_prot=1
3020 pkt_len=64
3021 stripped=4
3022 hdr_len=60
52105b67 3023 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
3024])
3025
e731d71b 3026 AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'IFCOUNTERS|ERROR' | head -6 | sed 's/ /\
8073dd31
NM
3027 /g']], [0], [dnl
3028IFCOUNTERS
3029 dgramSeqNo=2
3030 ds=127.0.0.1>0:1002
3031 csSeqNo=1
3032 ifindex=1002
3033 type=6
3034 ifspeed=100000000
3035 direction=0
1839c356 3036 status=0
8073dd31
NM
3037 in_octets=0
3038 in_unicasts=0
3039 in_multicasts=0
3040 in_broadcasts=4294967295
3041 in_discards=0
3042 in_errors=0
3043 in_unknownprotos=4294967295
3044 out_octets=120
3045 out_unicasts=2
3046 out_multicasts=4294967295
3047 out_broadcasts=4294967295
3048 out_discards=0
3049 out_errors=0
3050 promiscuous=0
3051IFCOUNTERS
3052 dgramSeqNo=2
3053 ds=127.0.0.1>0:1003
3054 csSeqNo=1
3055 ifindex=1003
3056 type=6
3057 ifspeed=100000000
3058 direction=0
3059 status=0
52105b67 3060 in_octets=138
8073dd31
NM
3061 in_unicasts=3
3062 in_multicasts=0
3063 in_broadcasts=4294967295
3064 in_discards=0
3065 in_errors=0
3066 in_unknownprotos=4294967295
3067 out_octets=120
3068 out_unicasts=2
3069 out_multicasts=4294967295
3070 out_broadcasts=4294967295
3071 out_discards=0
3072 out_errors=0
3073 promiscuous=0
3074IFCOUNTERS
3075 dgramSeqNo=2
3076 ds=127.0.0.1>0:1004
3077 csSeqNo=1
3078 ifindex=1004
3079 type=6
3080 ifspeed=100000000
3081 direction=0
3082 status=0
3083 in_octets=84
3084 in_unicasts=2
3085 in_multicasts=0
3086 in_broadcasts=4294967295
3087 in_discards=0
3088 in_errors=0
3089 in_unknownprotos=4294967295
3090 out_octets=180
3091 out_unicasts=3
3092 out_multicasts=4294967295
3093 out_broadcasts=4294967295
3094 out_discards=0
3095 out_errors=0
3096 promiscuous=0
3097IFCOUNTERS
3098 dgramSeqNo=3
3099 ds=127.0.0.1>0:1002
3100 csSeqNo=2
3101 ifindex=1002
3102 type=6
3103 ifspeed=100000000
3104 direction=0
1839c356 3105 status=0
8073dd31
NM
3106 in_octets=0
3107 in_unicasts=0
3108 in_multicasts=0
3109 in_broadcasts=4294967295
3110 in_discards=0
3111 in_errors=0
3112 in_unknownprotos=4294967295
3113 out_octets=120
3114 out_unicasts=2
3115 out_multicasts=4294967295
3116 out_broadcasts=4294967295
3117 out_discards=0
3118 out_errors=0
3119 promiscuous=0
3120IFCOUNTERS
3121 dgramSeqNo=3
3122 ds=127.0.0.1>0:1003
3123 csSeqNo=2
3124 ifindex=1003
3125 type=6
3126 ifspeed=100000000
3127 direction=0
3128 status=0
52105b67 3129 in_octets=138
8073dd31
NM
3130 in_unicasts=3
3131 in_multicasts=0
3132 in_broadcasts=4294967295
3133 in_discards=0
3134 in_errors=0
3135 in_unknownprotos=4294967295
3136 out_octets=120
3137 out_unicasts=2
3138 out_multicasts=4294967295
3139 out_broadcasts=4294967295
3140 out_discards=0
3141 out_errors=0
3142 promiscuous=0
3143IFCOUNTERS
3144 dgramSeqNo=3
3145 ds=127.0.0.1>0:1004
3146 csSeqNo=2
3147 ifindex=1004
3148 type=6
3149 ifspeed=100000000
3150 direction=0
3151 status=0
3152 in_octets=84
3153 in_unicasts=2
3154 in_multicasts=0
3155 in_broadcasts=4294967295
3156 in_discards=0
3157 in_errors=0
3158 in_unknownprotos=4294967295
3159 out_octets=180
3160 out_unicasts=3
3161 out_multicasts=4294967295
3162 out_broadcasts=4294967295
3163 out_discards=0
3164 out_errors=0
3165 promiscuous=0
3166])
e731d71b 3167 AT_CLEANUP])
17f7f7e0 3168
e731d71b
AS
3169CHECK_SFLOW_SAMPLING_PACKET([127.0.0.1], [IPv4])
3170CHECK_SFLOW_SAMPLING_PACKET([[[::1]]], [IPv6])
1e04fcc8 3171
e731d71b
AS
3172# CHECK_NETFLOW_EXPIRATION(LOOPBACK_ADDR, IP_VERSION_TYPE)
3173#
3174# Test that basic NetFlow reports flow statistics correctly:
3175# The initial packet of a flow are correctly accounted.
3176# Later packets within a flow are correctly accounted.
3177# Flow actions changing (in this case, due to MAC learning)
3178# cause a record to be sent.
3179#
3180# IP_VERSION_TYPE is used in AT_SETUP
3181m4_define([CHECK_NETFLOW_EXPIRATION],
3182 [AT_SETUP([ofproto-dpif - NetFlow flow expiration - $2 collector])
3183 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
3184 ADD_OF_PORTS([br0], 1, 2)
3185
3186 ovs-appctl time/stop
3187 ON_EXIT([kill `cat test-netflow.pid`])
eadd1644 3188 AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
e731d71b
AS
3189 AT_CAPTURE_FILE([netflow.log])
3190 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
3191
3192 ovs-vsctl \
3193 set Bridge br0 netflow=@nf -- \
3194 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
3195 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
3196
3197 for delay in 1000 30000; do
3198 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)'
3199 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)'
3200
3201 ovs-appctl time/warp $delay
3202 done
17f7f7e0 3203
e731d71b
AS
3204 ovs-appctl time/warp 6000
3205 sleep 1
3206 OVS_VSWITCHD_STOP
3207 ovs-appctl -t test-netflow exit
e79a6c83 3208
e731d71b 3209 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 3210
e731d71b 3211 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 3212
e731d71b
AS
3213 combined=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 2 pkts, 120 bytes, ICMP 0:0" netflow.log | wc -l`
3214 separate=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 1 pkts, 60 bytes, ICMP 0:0" netflow.log | wc -l`
3215 AT_CHECK([test $separate = 2 || test $combined = 1], [0])
17f7f7e0 3216
e731d71b 3217 AT_CLEANUP])
17f7f7e0 3218
e731d71b
AS
3219CHECK_NETFLOW_EXPIRATION([127.0.0.1], [IPv4])
3220CHECK_NETFLOW_EXPIRATION([[[::1]]], [IPv6])
1e04fcc8 3221
e731d71b
AS
3222# CHECK_NETFLOW_ACTIVE_EXPIRATION(LOOPBACK_ADDR, IP_VERSION_TYPE)
3223#
3224# Test that basic NetFlow reports active expirations correctly.
3225#
3226# IP_VERSION_TYPE is used in AT_SETUP
3227m4_define([CHECK_NETFLOW_ACTIVE_EXPIRATION],
3228 [AT_SETUP([ofproto-dpif - NetFlow active expiration - $2 collector])
1e04fcc8 3229
e731d71b
AS
3230 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
3231 ADD_OF_PORTS([br0], 1, 2)
17f7f7e0 3232
e731d71b 3233 ON_EXIT([kill `cat test-netflow.pid`])
eadd1644 3234 AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
e731d71b
AS
3235 AT_CAPTURE_FILE([netflow.log])
3236 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
17f7f7e0 3237
e731d71b
AS
3238 ovs-vsctl \
3239 set Bridge br0 netflow=@nf -- \
3240 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
3241 engine_id=1 engine_type=2 active_timeout=10 add-id-to-interface=false
17f7f7e0 3242
e731d71b
AS
3243 AT_CHECK([ovs-appctl time/stop])
3244 n=1
3245 while test $n -le 60; do
3246 n=`expr $n + 1`
17f7f7e0 3247
e731d71b
AS
3248 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)'
3249 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 3250
e731d71b
AS
3251 ovs-appctl time/warp 1000
3252 done
17f7f7e0 3253
e731d71b
AS
3254 ovs-appctl time/warp 10000
3255
3256 sleep 1
3257 OVS_VSWITCHD_STOP
3258 ovs-appctl -t test-netflow exit
3259
3260 # Count the number of reported packets:
3261 # - From source to destination before MAC learning kicks in (just one).
3262 # - From source to destination after that.
3263 # - From destination to source.
3264 n_learn=0
3265 n_in=0
3266 n_out=0
3267 n_other=0
3268 n_recs=0
3269 none=0
3270 while read line; do
3271 pkts=`echo "$line" | sed 's/.*, \([[0-9]]*\) pkts,.*/\1/'`
3272 case $pkts in
3273 [[0-9]]*) ;;
3274 *) continue ;;
3275 esac
3276
3277 case $line in
3278 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 65535, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
3279 counter=n_learn
3280 ;;
3281 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 2, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
3282 counter=n_in
3283 ;;
3284 "seq "*": 192.168.0.2 > 192.168.0.1, if 2 > 1, "*" pkts, "*" bytes, TCP 80 > 1234, time "*)
3285 counter=n_out
3286 ;;
3287 *)
3288 counter=n_other
3289 ;;
3290 esac
3291 eval $counter=\`expr \$$counter + \$pkts\`
3292 n_recs=`expr $n_recs + 1`
3293 done < netflow.log
3294
3295 # There should be exactly 1 MAC learning packet,
3296 # exactly 59 other packets in that direction,
3297 # and exactly 60 packets in the other direction.
3298 AT_CHECK([echo $n_learn $n_in $n_out $n_other], [0], [1 59 60 0
3299])
3300
3301 AT_CLEANUP])
3302
3303CHECK_NETFLOW_ACTIVE_EXPIRATION([127.0.0.1], [IPv4])
3304CHECK_NETFLOW_ACTIVE_EXPIRATION([[[::1]]], [IPv6])
f27f2134 3305
23a7d252
JS
3306AT_SETUP([ofproto-dpif - flow stats])
3307OVS_VSWITCHD_START
3308AT_CHECK([ovs-ofctl add-flow br0 "ip,actions=NORMAL"])
3309AT_CHECK([ovs-ofctl add-flow br0 "icmp,actions=NORMAL"])
3310
3311ovs-appctl time/stop
3312
3313for i in `seq 1 10`; do
3314 ovs-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)'
3315done
3316
3317ovs-appctl time/warp 1000
3318
e96a5c24 3319AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
11f9de00 3320AT_CHECK([STRIP_XIDS stdout | sed -n 's/duration=[[0-9]]*\.[[0-9]]*s/duration=0.0s/p' | sort], [0], [dnl
e96a5c24 3321 cookie=0x0, duration=0.0s, table=0, n_packets=0, n_bytes=0, idle_age=1, icmp actions=NORMAL
11f9de00 3322 cookie=0x0, duration=0.0s, table=0, n_packets=10, n_bytes=600, idle_age=1, ip actions=NORMAL
e96a5c24
JS
3323])
3324OVS_VSWITCHD_STOP
3325AT_CLEANUP
3326
3327AT_SETUP([ofproto-dpif - flow stats, set-n-threads])
3328OVS_VSWITCHD_START
3329AT_CHECK([ovs-ofctl add-flow br0 "ip,actions=NORMAL"])
3330AT_CHECK([ovs-ofctl add-flow br0 "icmp,actions=NORMAL"])
3331
3332ovs-appctl time/stop
3333
3334for i in `seq 1 10`; do
3335 ovs-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)'
3336done
3337
3338ovs-appctl time/warp 100
3339AT_CHECK([ovs-vsctl set Open_vSwitch . other-config:n-revalidator-threads=2])
3340ovs-appctl time/warp 1000
3341
23a7d252 3342AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
11f9de00 3343AT_CHECK([STRIP_XIDS stdout | sed -n 's/duration=[[0-9]]*\.[[0-9]]*s/duration=0.0s/p' | sort], [0], [dnl
23a7d252 3344 cookie=0x0, duration=0.0s, table=0, n_packets=0, n_bytes=0, idle_age=1, icmp actions=NORMAL
11f9de00 3345 cookie=0x0, duration=0.0s, table=0, n_packets=10, n_bytes=600, idle_age=1, ip actions=NORMAL
23a7d252
JS
3346])
3347OVS_VSWITCHD_STOP
3348AT_CLEANUP
3349
f27f2134
BP
3350AT_SETUP([idle_age and hard_age increase over time])
3351OVS_VSWITCHD_START
3352
3353# get_ages DURATION HARD IDLE
3354#
3355# Fetch the flow duration, hard age, and idle age into the variables
3356# whose names are given as arguments. Rounds DURATION down to the
3357# nearest integer. If hard_age doesn't appear in the output, sets
3358# HARD to "none". If idle_age doesn't appear in the output, sets IDLE
3359# to 0.
3360get_ages () {
3361 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
3362
3363 duration=`sed -n 's/.*duration=\([[0-9]]*\)\(\.[[0-9]]*\)\{0,1\}s.*/\1/p' stdout`
3364 AT_CHECK([[expr X"$duration" : 'X[0-9][0-9]*$']], [0], [ignore])
3365 AS_VAR_COPY([$1], [duration])
3366
3367 hard=`sed -n 's/.*hard_age=\([[0-9]]*\),.*/\1/p' stdout`
3368 if test X"$hard" = X; then
3369 hard=none
3370 else
3371 AT_CHECK([[expr X"$hard" : 'X[0-9][0-9]*$']], [0], [ignore])
3372 fi
3373 AS_VAR_COPY([$2], [hard])
3374
3375 idle=`sed -n 's/.*idle_age=\([[0-9]]*\),.*/\1/p' stdout`
3376 if test X"$idle" = X; then
3377 idle=0
3378 else
3379 AT_CHECK([[expr X"$idle" : 'X[0-9][0-9]*$']], [0], [ignore])
3380 fi
3381 AS_VAR_COPY([$3], [idle])
3382}
3383
3384# Add a flow and get its initial hard and idle age.
3385AT_CHECK([ovs-ofctl add-flow br0 hard_timeout=199,idle_timeout=188,actions=drop])
3386get_ages duration1 hard1 idle1
3387
31ef9f51 3388ovs-appctl time/stop
f27f2134
BP
3389# Warp time forward by 10 seconds, then modify the flow's actions.
3390ovs-appctl time/warp 10000
3391get_ages duration2 hard2 idle2
3392AT_CHECK([ovs-ofctl mod-flows br0 actions=flood])
3393
3394# Warp time forward by 10 seconds.
3395ovs-appctl time/warp 10000
3396get_ages duration3 hard3 idle3
3397
3398# Warp time forward 10 more seconds, then pass some packets through the flow,
3399# then warp forward a few more times because idle times are only updated
3400# occasionally.
3401ovs-appctl time/warp 10000
3402ovs-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)'
3403ovs-appctl time/warp 1000
3404ovs-appctl time/warp 1000
3405ovs-appctl time/warp 1000
3406get_ages duration4 hard4 idle4
3407
3408printf "duration: %4s => %4s => %4s => %4s\n" $duration1 $duration2 $duration3 $duration4
3409printf "hard_age: %4s => %4s => %4s => %4s\n" $hard1 $hard2 $hard3 $hard4
3410printf "idle_age: %4s => %4s => %4s => %4s\n" $idle1 $idle2 $idle3 $idle4
3411
3412# Duration should increase steadily over time.
3413AT_CHECK([test $duration1 -lt $duration2])
3414AT_CHECK([test $duration2 -lt $duration3])
3415AT_CHECK([test $duration3 -lt $duration4])
3416
3417# Hard age should be "none" initially because it's the same as flow_duration,
3418# then it should increase.
3419AT_CHECK([test $hard1 = none])
3420AT_CHECK([test $hard2 = none])
3421AT_CHECK([test $hard3 != none])
3422AT_CHECK([test $hard4 != none])
3423AT_CHECK([test $hard3 -lt $hard4])
3424
3425# Idle age should increase from 1 to 2 to 3, then decrease.
3426AT_CHECK([test $idle1 -lt $idle2])
3427AT_CHECK([test $idle2 -lt $idle3])
3428AT_CHECK([test $idle3 -gt $idle4])
3429
3430# Check some invariant relationships.
3431AT_CHECK([test $duration1 = $idle1])
3432AT_CHECK([test $duration2 = $idle2])
3433AT_CHECK([test $duration3 = $idle3])
3434AT_CHECK([test $idle3 -gt $hard3])
3435AT_CHECK([test $idle4 -lt $hard4])
3436AT_CHECK([test $hard4 -lt $duration4])
3437
3438OVS_VSWITCHD_STOP
3439AT_CLEANUP
0e553d9c
BP
3440
3441AT_SETUP([ofproto-dpif - fin_timeout])
3442OVS_VSWITCHD_START
3443AT_DATA([flows.txt], [dnl
3444in_port=1 actions=output:2
3445in_port=2 actions=mod_vlan_vid:17,output:1
3446])
3447AT_CHECK([ovs-ofctl add-flow br0 'idle_timeout=60,actions=fin_timeout(idle_timeout=5)'])
3448AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
3449[NXST_FLOW reply:
3450 idle_timeout=60, actions=fin_timeout(idle_timeout=5)
3451])
31ef9f51
AW
3452
3453ovs-appctl time/stop
0e553d9c
BP
3454# Check that a TCP SYN packet does not change the timeout. (Because
3455# flow stats updates are mainly what implements the fin_timeout
3456# feature, we warp forward a couple of times to ensure that flow stats
3457# run before re-checking the flow table.)
323cc924 3458AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f908004500003c2e2440004006465dac11370dac11370b828b0016751e267b00000000a00216d017360000020405b40402080a2d25085f0000000001030307])
0e553d9c
BP
3459AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
3460warped
3461])
3462AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
3463[NXST_FLOW reply:
3464 n_packets=1, n_bytes=74, idle_timeout=60, actions=fin_timeout(idle_timeout=5)
3465])
3466# Check that a TCP FIN packet does change the timeout.
323cc924 3467AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f90800451000342e3e40004006463bac11370dac11370b828b0016751e319dfc96399b801100717ae800000101080a2d250a9408579588])
0e553d9c
BP
3468AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
3469warped
3470])
3471AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
3472[NXST_FLOW reply:
3473 n_packets=2, n_bytes=140, idle_timeout=5, actions=fin_timeout(idle_timeout=5)
3474])
3475OVS_VSWITCHD_STOP
3476AT_CLEANUP
27022416
JP
3477
3478AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-dps])
3479OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
3480ADD_OF_PORTS([br0], [1], [2])
3481ADD_OF_PORTS([br1], [3])
3482
3483AT_CHECK([ovs-appctl dpif/dump-dps], [0], [dnl
3484dummy@br0
3485dummy@br1
3486])
3487OVS_VSWITCHD_STOP
3488AT_CLEANUP
3489
3490AT_SETUP([ofproto-dpif - ovs-appctl dpif/show])
3491OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
3492ADD_OF_PORTS([br0], [1], [2])
3493ADD_OF_PORTS([br1], [3])
3494
3495AT_CHECK([ovs-appctl dpif/show], [0], [dnl
dc54ef36 3496dummy@ovs-dummy: hit:0 missed:0
e79a6c83 3497 br0:
dc54ef36
EJ
3498 br0 65534/100: (dummy)
3499 p1 1/1: (dummy)
3500 p2 2/2: (dummy)
e79a6c83 3501 br1:
dc54ef36
EJ
3502 br1 65534/101: (dummy)
3503 p3 3/3: (dummy)
27022416
JP
3504])
3505OVS_VSWITCHD_STOP
3506AT_CLEANUP
3507
3508AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows])
3509OVS_VSWITCHD_START([add-br br1 -- \
3510 set bridge br1 datapath-type=dummy fail-mode=secure])
3511ADD_OF_PORTS([br0], [1], [2])
3512ADD_OF_PORTS([br1], [3])
3513
323cc924
BP
3514AT_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)'])
3515AT_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)'])
3516AT_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
3517
3518AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
6b83a3c5
SH
3519skb_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:drop
3520skb_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:drop
27022416
JP
3521])
3522
3523AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
6b83a3c5 3524skb_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:drop
27022416
JP
3525])
3526
04b541df 3527AT_CHECK([ovs-appctl dpif/dump-flows -m br0 | sort | STRIP_USED], [0], [dnl
6b83a3c5
SH
3528skb_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:drop
3529skb_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:drop
04b541df
GS
3530])
3531
3532AT_CHECK([ovs-appctl dpif/dump-flows -m br1 | sort | STRIP_USED], [0], [dnl
6b83a3c5 3533skb_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:drop
04b541df
GS
3534])
3535
27022416
JP
3536OVS_VSWITCHD_STOP
3537AT_CLEANUP
3538
8bfd0fda
BP
3539AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows - MPLS actions that result in a userspace action])
3540OVS_VSWITCHD_START([dnl
3541 add-port br0 p1 -- set Interface p1 type=dummy
3542])
3543ON_EXIT([kill `cat ovs-ofctl.pid`])
3544
3545AT_CAPTURE_FILE([ofctl_monitor.log])
3546AT_DATA([flows.txt], [dnl
3547dl_src=60:66:66:66:66:00 actions=push_mpls:0x8847,controller
3548dl_src=60:66:66:66:66:01 actions=pop_mpls:0x8849,controller
3549])
3550AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3551
3552dnl Packet is sent to userspace because a MPLS push or pop action is applied to
47fb7f71 3553dnl a packet with 2 MPLS LSEs but dpif-netdev can't handle any labels.
8bfd0fda 3554dnl
47fb7f71 3555dnl The input is a frame with two MPLS labels which tcpdump -vve shows as:
8bfd0fda 3556dnl 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
3557dnl (label 20, exp 0, [S], ttl 32)
3558dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44, bad cksum 3b78 (->f978)!)
3559dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
3560
3561for dl_src in 00 01; do
47fb7f71 3562 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
3563
3564 AT_CHECK_UNQUOTED([ovs-appctl dpif/dump-flows br0 | grep ":$dl_src/" | STRIP_USED], [0], [dnl
47fb7f71 3565skb_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
3566])
3567done
3568
3569OVS_VSWITCHD_STOP
3570AT_CLEANUP
3571
3572
3573AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows - MPLS actions that result in a drop])
3574OVS_VSWITCHD_START([dnl
3575 add-port br0 p1 -- set Interface p1 type=dummy
3576])
3577ON_EXIT([kill `cat ovs-ofctl.pid`])
3578
3579AT_CAPTURE_FILE([ofctl_monitor.log])
3580AT_DATA([flows.txt], [dnl
3581dl_src=60:66:66:66:66:00 actions=push_mpls:0x8847,controller
3582dl_src=60:66:66:66:66:01 actions=pop_mpls:0x8849,controller
3583])
3584AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3585
3586dnl Packet is dropped because an MPLS PUSH action is applied to a packet with
3587dnl 4 MPLS LSEs but ovs-vswtichd can only handle up to 3 MPLS LSEs and thus
47fb7f71 3588dnl can't determine the resulting MPLS label after MPLS push/pop actions.
8bfd0fda
BP
3589dnl
3590dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
3591dnl 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)
3592dnl (label 20, exp 0, ttl 32)
3593dnl (label 20, exp 0, ttl 32)
3594dnl (label 20, exp 0, [S], ttl 32)
3595dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44, bad cksum 3b78 (->f978)!)
3596dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
8bfd0fda 3597
47fb7f71
JS
3598for dl_src in 00 01; do
3599 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"])
3600
3601 AT_CHECK_UNQUOTED([ovs-appctl dpif/dump-flows br0 | grep ":$dl_src/" | STRIP_USED], [0], [dnl
3602skb_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 3603])
47fb7f71 3604done
8bfd0fda
BP
3605
3606OVS_VSWITCHD_STOP
3607AT_CLEANUP
3608
0a740f48
EJ
3609AT_SETUP([ofproto-dpif - patch ports])
3610OVS_VSWITCHD_START([add-br br1 \
3611-- set bridge br1 datapath-type=dummy fail-mode=secure \
3612-- add-port br1 pbr1 -- set int pbr1 type=patch options:peer=pbr0 \
3613-- add-port br0 pbr0 -- set int pbr0 type=patch options:peer=pbr1])
3614
3615ADD_OF_PORTS([br0], [2])
3616ADD_OF_PORTS([br1], [3])
3617
aef0491b 3618AT_CHECK([ovs-appctl time/stop])
9fc0165a 3619
0a740f48
EJ
3620AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
3621AT_CHECK([ovs-ofctl add-flow br1 actions=LOCAL,output:1,output:3])
3622
3623for i in $(seq 1 10); do
3624 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)'
3b401f9b
BP
3625 if [[ $i -eq 1 ]]; then
3626 sleep 1
3627 fi
0a740f48
EJ
3628done
3629
3630for i in $(seq 1 5); do
3631 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)'
3b401f9b
BP
3632 if [[ $i -eq 1 ]]; then
3633 sleep 1
3634 fi
0a740f48
EJ
3635done
3636
0a8763fc
EJ
3637AT_CHECK([ovs-appctl time/warp 500], [0],
3638[warped
735d7efb
AZ
3639])
3640
0a740f48 3641AT_CHECK([ovs-appctl dpif/show], [0], [dnl
dc54ef36 3642dummy@ovs-dummy: hit:13 missed:2
e79a6c83 3643 br0:
dc54ef36
EJ
3644 br0 65534/100: (dummy)
3645 p2 2/2: (dummy)
3646 pbr0 1/none: (patch: peer=pbr1)
e79a6c83 3647 br1:
dc54ef36
EJ
3648 br1 65534/101: (dummy)
3649 p3 3/3: (dummy)
3650 pbr1 1/none: (patch: peer=pbr0)
0a740f48
EJ
3651])
3652
3653AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
54bb0348 3654skb_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
3655]),
3656AT_CHECK([ovs-appctl dpif/dump-flows br1 | STRIP_USED], [0], [dnl
54bb0348 3657skb_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
3658])
3659
3660AT_CHECK([ovs-ofctl dump-ports br0 pbr0], [0], [dnl
3661OFPST_PORT reply (xid=0x4): 1 ports
3662 port 1: rx pkts=5, bytes=300, drop=0, errs=0, frame=0, over=0, crc=0
3663 tx pkts=10, bytes=600, drop=0, errs=0, coll=0
3664])
3665
3666AT_CHECK([ovs-ofctl dump-ports br1 pbr1], [0], [dnl
3667OFPST_PORT reply (xid=0x4): 1 ports
3668 port 1: rx pkts=10, bytes=600, drop=0, errs=0, frame=0, over=0, crc=0
3669 tx pkts=5, bytes=300, drop=0, errs=0, coll=0
3670])
3671
3672OVS_VSWITCHD_STOP
3673AT_CLEANUP
655ab909 3674
65e0be10
BP
3675AT_SETUP([ofproto-dpif - port duration])
3676OVS_VSWITCHD_START([set Bridge br0 protocols=OpenFlow13])
3677ADD_OF_PORTS([br0], 1, 2)
3678
31ef9f51 3679ovs-appctl time/stop
65e0be10
BP
3680ovs-appctl time/warp 10000
3681
3682AT_CHECK([ovs-ofctl -O openflow13 dump-ports br0], [0], [stdout])
125bf01d 3683AT_CHECK([sed -n 's/=[[0-9]][[0-9]]\(\.[[0-9]][[0-9]]*\)\{0,1\}s/=?s/p' stdout], [0],
65e0be10 3684[dnl
65e0be10 3685 duration=?s
65e0be10 3686 duration=?s
65e0be10
BP
3687 duration=?s
3688])
3689OVS_VSWITCHD_STOP
3690AT_CLEANUP
bcd2633a
JP
3691
3692dnl ----------------------------------------------------------------------
3693AT_BANNER([ofproto-dpif -- megaflows])
3694
bcd2633a
JP
3695AT_SETUP([ofproto-dpif megaflow - port classification])
3696OVS_VSWITCHD_START
3697ADD_OF_PORTS([br0], [1], [2])
3698AT_DATA([flows.txt], [dnl
3699table=0 in_port=1 actions=output(2)
3700])
3701AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3702AT_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)'])
3703AT_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 3704sleep 1
2c0ea78f
GS
3705AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3706skb_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
3707])
3708OVS_VSWITCHD_STOP
3709AT_CLEANUP
3710
3711AT_SETUP([ofproto-dpif megaflow - L2 classification])
3712OVS_VSWITCHD_START
3713ADD_OF_PORTS([br0], [1], [2])
3714AT_DATA([flows.txt], [dnl
3715table=0 in_port=1,dl_src=50:54:00:00:00:09 actions=output(2)
3716])
3717AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3718AT_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)'])
3719AT_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 3720sleep 1
2c0ea78f 3721AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
1b849273
JS
3722skb_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>
3723skb_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
3724])
3725OVS_VSWITCHD_STOP
3726AT_CLEANUP
3727
3728AT_SETUP([ofproto-dpif megaflow - L3 classification])
3729OVS_VSWITCHD_START
3730ADD_OF_PORTS([br0], [1], [2])
13751fd8 3731AT_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
3732AT_DATA([flows.txt], [dnl
3733table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=output(2)
3734])
3735AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3736AT_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)'])
3737AT_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 3738sleep 1
2c0ea78f 3739AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
1b849273
JS
3740skb_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>
3741skb_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
3742])
3743OVS_VSWITCHD_STOP
3744AT_CLEANUP
3745
13751fd8
JR
3746AT_SETUP([ofproto-dpif megaflow - IPv6 classification])
3747OVS_VSWITCHD_START
3748ADD_OF_PORTS([br0], [1], [2])
3749AT_CHECK([ovs-vsctl set Bridge br0 flow_tables:0=@N1 -- --id=@N1 create Flow_Table name=t0 prefixes=ipv6_dst,ipv6_src], [0], [ignore], [])
3750AT_DATA([flows.txt], [dnl
3751table=0 in_port=1,ipv6,ipv6_src=2001:db8:3c4d:1:2:3:4:5 actions=output(2)
3752])
3753AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3754AT_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)'])
3755AT_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 3756sleep 1
13751fd8 3757AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
1b849273
JS
3758skb_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>
3759skb_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
3760])
3761OVS_VSWITCHD_STOP
3762AT_CLEANUP
3763
bcd2633a
JP
3764AT_SETUP([ofproto-dpif megaflow - L4 classification])
3765OVS_VSWITCHD_START
3766ADD_OF_PORTS([br0], [1], [2])
3767AT_DATA([flows.txt], [dnl
3768table=0 in_port=1,icmp,icmp_type=8 actions=output(2)
3769])
3770AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3771AT_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)'])
3772AT_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
3773AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3774skb_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
3775])
3776OVS_VSWITCHD_STOP
3777AT_CLEANUP
3778
3779AT_SETUP([ofproto-dpif megaflow - normal])
3780OVS_VSWITCHD_START
3781ADD_OF_PORTS([br0], [1], [2])
3782AT_CHECK([ovs-ofctl add-flow br0 action=normal])
3783AT_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)'])
3784AT_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 3785sleep 1
2c0ea78f 3786AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
1b849273
JS
3787skb_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>
3788skb_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
3789])
3790OVS_VSWITCHD_STOP
3791AT_CLEANUP
3792
3793AT_SETUP([ofproto-dpif megaflow - mpls])
3794OVS_VSWITCHD_START
3795ADD_OF_PORTS([br0], [1], [2])
3796AT_DATA([flows.txt], [dnl
3797table=0 dl_src=50:54:00:00:00:09 actions=push_mpls:0x8847,2
3798table=0 dl_src=50:54:00:00:00:0b actions=pop_mpls:0x0800,2
3799])
3800AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3801AT_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)'])
3802AT_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 3803sleep 1
2c0ea78f 3804AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
1b849273
JS
3805skb_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>
3806skb_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
3807])
3808OVS_VSWITCHD_STOP
3809AT_CLEANUP
3810
e731d71b
AS
3811# CHECK_MEGAFLOW_NETFLOW(LOOPBACK_ADDR, IP_VERSION_TYPE)
3812#
3813# IP_VERSION_TYPE is used in AT_SETUP
3814m4_define([CHECK_MEGAFLOW_NETFLOW],
3815 [AT_SETUP([ofproto-dpif megaflow - netflow - $2 collector])
3816 OVS_VSWITCHD_START
3817 ADD_OF_PORTS([br0], [1], [2])
3818
3819 dnl NetFlow configuration disables wildcarding relevant fields
3820 ON_EXIT([kill `cat test-netflow.pid`])
eadd1644 3821 AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
e731d71b
AS
3822 AT_CAPTURE_FILE([netflow.log])
3823 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
3824 ovs-vsctl \
3825 set Bridge br0 netflow=@nf -- \
3826 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
3827 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
3828
3829 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
3830 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)'])
3831 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)'])
3832 sleep 1
3833 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
1b849273
JS
3834skb_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>
3835skb_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 3836])
e731d71b
AS
3837 OVS_VSWITCHD_STOP
3838 AT_CLEANUP])
3839
3840CHECK_MEGAFLOW_NETFLOW([127.0.0.1], [IPv4])
3841CHECK_MEGAFLOW_NETFLOW([[[::1]]], [IPv6])
bcd2633a
JP
3842
3843AT_SETUP([ofproto-dpif megaflow - normal, active-backup bonding])
3844OVS_VSWITCHD_START(
3845 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
3846 add-bond br0 bond0 p2 p3 bond_mode=active-backup -- \
3847 set interface p2 type=dummy ofport_request=2 -- \
3848 set interface p3 type=dummy ofport_request=3])
3849AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
3850])
3851
3852AT_CHECK([ovs-ofctl add-flow br0 action=normal])
3853AT_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)'])
3854AT_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 3855sleep 1
2c0ea78f 3856AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
1b849273
JS
3857skb_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>
3858skb_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
3859])
3860OVS_VSWITCHD_STOP
3861AT_CLEANUP
3862
3863AT_SETUP([ofproto-dpif megaflow - normal, balance-slb bonding])
3864OVS_VSWITCHD_START(
3865 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
3866 add-bond br0 bond0 p2 p3 bond_mode=balance-slb -- \
3867 set interface p2 type=dummy ofport_request=2 -- \
3868 set interface p3 type=dummy ofport_request=3])
3869AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
3870])
3871
3872AT_CHECK([ovs-ofctl add-flow br0 action=normal])
3873AT_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)'])
3874AT_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 3875sleep 1
2c0ea78f 3876AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
1b849273
JS
3877skb_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>
3878skb_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
3879])
3880OVS_VSWITCHD_STOP
3881AT_CLEANUP
3882
3883AT_SETUP([ofproto-dpif megaflow - normal, balance-tcp bonding])
3884# Create bond0 on br0 with interfaces p0 and p1
3885# and bond1 on br1 with interfaces p2 and p3
3886# with p0 patched to p2 and p1 patched to p3.
3887OVS_VSWITCHD_START(
3888 [add-bond br0 bond0 p0 p1 bond_mode=balance-tcp lacp=active \
3889 other-config:lacp-time=fast \
3890 other-config:bond-rebalance-interval=0 -- \
3891 set interface p0 type=patch options:peer=p2 ofport_request=1 -- \
3892 set interface p1 type=patch options:peer=p3 ofport_request=2 -- \
3893 add-br br1 -- \
3894 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
3895 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
3896 fail-mode=secure -- \
3897 add-bond br1 bond1 p2 p3 bond_mode=balance-tcp lacp=active \
3898 other-config:lacp-time=fast \
3899 other-config:bond-rebalance-interval=0 -- \
3900 set interface p2 type=patch options:peer=p0 ofport_request=3 -- \
3901 set interface p3 type=patch options:peer=p1 ofport_request=4 --])
3902
3903AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
3904])
3905ADD_OF_PORTS([br0], [7])
3906AT_CHECK([ovs-ofctl add-flow br0 action=normal])
3907AT_CHECK([ovs-ofctl add-flow br1 action=normal])
31ef9f51 3908ovs-appctl time/stop
bcd2633a
JP
3909ovs-appctl time/warp 5000
3910AT_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)'])
3911AT_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 3912sleep 1
2c0ea78f 3913AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
1b849273
JS
3914skb_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>
3915skb_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
3916])
3917OVS_VSWITCHD_STOP
3918AT_CLEANUP
3919
3920AT_SETUP([ofproto-dpif megaflow - resubmit port action])
3921OVS_VSWITCHD_START
3922ADD_OF_PORTS([br0], [1], [2])
3923AT_DATA([flows.txt], [dnl
3924table=0 in_port=1,ip actions=resubmit(90)
3925table=0 in_port=90,dl_src=50:54:00:00:00:09 actions=output(2)
3926])
3927AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3928AT_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)'])
3929AT_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 3930sleep 1
2c0ea78f 3931AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
1b849273
JS
3932skb_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>
3933skb_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
3934])
3935OVS_VSWITCHD_STOP
3936AT_CLEANUP
3937
3938AT_SETUP([ofproto-dpif megaflow - resubmit table action])
3939OVS_VSWITCHD_START
3940ADD_OF_PORTS([br0], [1], [2])
3941AT_DATA([flows.txt], [dnl
3942table=0 in_port=1,ip actions=resubmit(,1)
3943table=1 dl_src=50:54:00:00:00:09 actions=output(2)
3944])
3945AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3946AT_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)'])
3947AT_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=
39481,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
ae692725 3949sleep 1
2c0ea78f 3950AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
1b849273
JS
3951skb_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>
3952skb_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
3953])
3954OVS_VSWITCHD_STOP
3955AT_CLEANUP
3956
3957AT_SETUP([ofproto-dpif megaflow - goto_table action])
3958OVS_VSWITCHD_START
3959ADD_OF_PORTS([br0], [1], [2])
3960AT_DATA([flows.txt], [dnl
3961table=0 in_port=1,ip actions=goto_table(1)
3962table=1 dl_src=50:54:00:00:00:09 actions=output(2)
3963])
3964AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
3965AT_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)'])
3966AT_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 3967sleep 1
2c0ea78f 3968AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
1b849273
JS
3969skb_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>
3970skb_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
3971])
3972OVS_VSWITCHD_STOP
3973AT_CLEANUP
3974
3975AT_SETUP([ofproto-dpif megaflow - mirroring, select_all])
3976OVS_VSWITCHD_START
3977ADD_OF_PORTS([br0], [1], [2], [3])
3978ovs-vsctl \
3979 set Bridge br0 mirrors=@m --\
3980 --id=@p3 get Port p3 --\
3981 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
3982
3983AT_DATA([flows.txt], [dnl
3984in_port=1 actions=output:2
3985])
3986AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3987AT_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)'])
3988AT_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 3989sleep 1
2c0ea78f
GS
3990AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3991skb_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
3992])
3993OVS_VSWITCHD_STOP
3994AT_CLEANUP
3995
3996AT_SETUP([ofproto-dpif megaflow - mirroring, select_vlan])
3997OVS_VSWITCHD_START
3998ADD_OF_PORTS([br0], [1], [2], [3])
3999ovs-vsctl \
4000 set Bridge br0 mirrors=@m --\
4001 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
4002 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
4003
4004AT_DATA([flows.txt], [dnl
4005in_port=1 actions=output:2
4006])
4007AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4008AT_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))'])
4009AT_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 4010sleep 1
2c0ea78f 4011AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
1b849273
JS
4012skb_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>
4013skb_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
4014])
4015OVS_VSWITCHD_STOP
4016AT_CLEANUP
4017
4018AT_SETUP([ofproto-dpif megaflow - move action])
4019OVS_VSWITCHD_START
4020ADD_OF_PORTS([br0], [1], [2])
4021AT_DATA([flows.txt], [dnl
4022table=0 in_port=1 ip,actions=move:NXM_OF_IP_SRC[[]]->NXM_NX_REG0[[]],resubmit(90)
4023table=0 in_port=90 ip,actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]],resubmit(91)
4024table=0 in_port=91 reg0=0x0a000002,actions=output(2)
4025])
4026AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4027AT_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)'])
4028AT_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 4029sleep 1
2c0ea78f 4030AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
1b849273
JS
4031skb_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>
4032skb_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
4033])
4034OVS_VSWITCHD_STOP
4035AT_CLEANUP
4036
4037AT_SETUP([ofproto-dpif megaflow - push action])
4038OVS_VSWITCHD_START
4039ADD_OF_PORTS([br0], [1], [2])
4040AT_DATA([flows.txt], [dnl
4041table=0 in_port=1 ip,actions=push:NXM_OF_IP_SRC[[]],output(2)
4042])
4043AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4044AT_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)'])
4045AT_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 4046sleep 1
2c0ea78f 4047AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
1b849273
JS
4048skb_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>
4049skb_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
4050])
4051OVS_VSWITCHD_STOP
4052AT_CLEANUP
4053
4054AT_SETUP([ofproto-dpif megaflow - learning])
4055OVS_VSWITCHD_START
4056ADD_OF_PORTS([br0], [1], [2])
4057AT_DATA([flows.txt], [dnl
4058table=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
4059])
4060AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
31ef9f51 4061ovs-appctl time/stop
956f2bf0
BP
4062# We send each packet twice because the first packet in each flow causes the
4063# flow table to change and thus revalidations, which (depending on timing)
4064# can keep a megaflow from being installed. The revalidations are done by
4065# the second iteration, allowing the flows to be installed.
4066for i in 1 2; do
4067 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)'])
4068 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)'])
4069 ovs-appctl time/warp 100
4070done
ae692725 4071sleep 1
bcd2633a 4072dnl The original flow is missing due to a revalidation.
2c0ea78f
GS
4073AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
4074skb_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>
4075skb_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
4076])
4077OVS_VSWITCHD_STOP
4078AT_CLEANUP
d4f4a9b2
JP
4079
4080AT_SETUP([ofproto-dpif megaflow - tunnels])
4081OVS_VSWITCHD_START(
2c0ea78f
GS
4082 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1])
4083AT_CHECK([ovs-vsctl add-port br0 p2 -- set Interface p2 type=gre \
4084 options:remote_ip=1.1.1.1 ofport_request=2 options:key=flow])
4085AT_CHECK([ovs-vsctl add-port br0 p3 -- set Interface p3 type=dummy \
4086 ofport_request=3])
4087AT_CHECK([ovs-vsctl add-port br0 p4 -- set Interface p4 type=gre \
4088 options:remote_ip=1.1.1.2 options:tos=inherit options:ttl=inherit \
4089 ofport_request=4 options:key=flow])
d4f4a9b2
JP
4090AT_DATA([flows.txt], [dnl
4091in_port=1,actions=output(2)
4092in_port=3,actions=output(4)
4093])
4094AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4095dnl ECN bits are always copied out, but don't use 0x3 (CE), since that
4096dnl will cause the packet to be dropped.
4097AT_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)'])
4098AT_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)'])
4099AT_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)'])
4100AT_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 4101sleep 1
2c0ea78f
GS
4102AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
4103skb_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
4104skb_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>
4105skb_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
4106])
4107OVS_VSWITCHD_STOP
4108AT_CLEANUP
4109
4110AT_SETUP([ofproto-dpif megaflow - dec_ttl])
4111OVS_VSWITCHD_START
4112ADD_OF_PORTS([br0], [1], [2])
13751fd8 4113AT_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
4114AT_DATA([flows.txt], [dnl
4115table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=dec_ttl,output(2)
4116])
4117AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4118AT_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)'])
4119AT_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 4120sleep 1
2c0ea78f 4121AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
1b849273
JS
4122skb_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>
4123skb_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
4124])
4125OVS_VSWITCHD_STOP
4126AT_CLEANUP
74cc3969 4127
f74e7df7
JP
4128AT_SETUP([ofproto-dpif megaflow - set dl_dst])
4129OVS_VSWITCHD_START
4130ADD_OF_PORTS([br0], [1], [2])
4131AT_DATA([flows.txt], [dnl
4132table=0 in_port=1 actions=mod_dl_dst(50:54:00:00:00:0a),output(2)
4133])
4134AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4135AT_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)'])
4136AT_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 4137sleep 1
f74e7df7
JP
4138dnl The megaflows do not match the same fields, since the first packet
4139dnl is essentially a no-op. (The new destination MAC is the same as the
4140dnl original.) The ofproto-dpif library un-wildcards the destination MAC
4141dnl so that a packet that doesn't need its MAC address changed doesn't
4142dnl hide one that does. Since the first entry doesn't need to change,
4143dnl only the destination MAC address is matched (as decided by
4144dnl ofproto-dpif). The second entry actually updates the destination
4145dnl MAC, so both the source and destination MAC addresses are
4146dnl un-wildcarded, since the ODP commit functions update both the source
4147dnl and destination MAC addresses.
2c0ea78f 4148AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
1b849273
JS
4149skb_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
4150skb_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
4151])
4152OVS_VSWITCHD_STOP
4153AT_CLEANUP
4154
8c301900
JR
4155AT_SETUP([ofproto-dpif megaflow - disabled])
4156OVS_VSWITCHD_START
4157ADD_OF_PORTS([br0], [1], [2])
4158AT_DATA([flows.txt], [dnl
4159table=0 in_port=1,ip,nw_dst=10.0.0.1 actions=output(2)
4160table=0 in_port=1,ip,nw_dst=10.0.0.3 actions=drop
4161])
e79a6c83 4162AT_CHECK([ovs-appctl upcall/disable-megaflows], [0], [megaflows disabled
8c301900
JR
4163], [])
4164AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg], [0], [], [])
4165AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4166for i in 1 2 3 4; do
4167 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)'])
4168 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)'])
4169done
ae692725 4170sleep 1
8c301900 4171AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
f3f750e5
BP
4172skb_priority(0),skb_mark(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,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
4173skb_priority(0),skb_mark(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,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
4174])
4175OVS_VSWITCHD_STOP
4176AT_CLEANUP
4177
74cc3969
BP
4178AT_SETUP([ofproto-dpif - datapath port number change])
4179OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
4180ADD_OF_PORTS([br0], 1)
4181
4182# Trace a flow that should output to p1.
4183AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
4184 [0], [stdout])
4185AT_CHECK([tail -1 stdout], [0], [Datapath actions: 1
4186])
4187
4188# Change p1's port number to 5.
4189AT_CHECK([ovs-appctl dpif-dummy/change-port-number ovs-dummy p1 5])
4190
4191# Trace a flow that should output to p1 in its new location.
4192AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
4193 [0], [stdout])
4194AT_CHECK([tail -1 stdout], [0], [Datapath actions: 5
4195])
4196OVS_VSWITCHD_STOP
4197AT_CLEANUP
2d344ba5
AW
4198
4199# Tests the bundling with various bfd and cfm configurations.
4200AT_SETUP([ofproto - bundle with variable bfd/cfm config])
4201OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy -- \
4202 add-bond br0 br0bond p0 p2 bond-mode=active-backup -- \
4203 add-bond br1 br1bond p1 p3 bond-mode=active-backup -- \
4204 set Interface p1 type=patch options:peer=p0 ofport_request=2 -- \
4205 set Interface p3 type=patch options:peer=p2 ofport_request=4 -- \
4206 set Interface p0 type=patch options:peer=p1 ofport_request=1 -- \
4207 set Interface p2 type=patch options:peer=p3 ofport_request=3 -- \
4208 set Interface p0 bfd:enable=true bfd:min_tx=300 bfd:min_rx=300 -- \
4209 set Interface p0 cfm_mpid=1 -- \
4210 set Interface p1 bfd:enable=true bfd:min_tx=500 bfd:min_rx=500])
4211
4212ovs-appctl time/stop
4213# advance the clock to stablize everything.
4214for i in `seq 0 49`; do ovs-appctl time/warp 100; done
4215# cfm/show should show 'recv' fault.
4216AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
4217 fault: recv
4218])
4219# bfd/show should show 'up'.
4220AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
4221 Local Session State: up
4222 Remote Session State: up
4223 Local Session State: up
4224 Remote Session State: up
4225])
4226# bond/show should show 'may-enable: true' for all slaves.
4227AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
4228 may_enable: true
4229 may_enable: true
4230 may_enable: true
4231 may_enable: true
4232])
4233
4234# now disable the bfd on p1.
4235AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=false])
4236# advance the clock to stablize everything.
4237for i in `seq 0 49`; do ovs-appctl time/warp 100; done
4238# cfm/show should show 'recv' fault.
4239AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
4240 fault: recv
4241])
4242# bfd/show should show 'down'.
4243AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
4244 Local Session State: down
4245 Remote Session State: down
4246])
4247# bond/show should show 'may-enable: false' for p0.
125bf01d 4248AT_CHECK([ovs-appctl bond/show br0bond | sed -n '/^.*may_enable:.*/p'], [0], [dnl
2d344ba5
AW
4249 may_enable: false
4250 may_enable: true
2d344ba5
AW
4251])
4252
4253# now enable the bfd on p1 and disable bfd on p0.
4254AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=true])
4255AT_CHECK([ovs-vsctl set Interface p0 bfd:enable=false])
4256# advance the clock to stablize everything.
4257for i in `seq 0 49`; do ovs-appctl time/warp 100; done
4258# cfm/show should show 'recv' fault.
4259AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
4260 fault: recv
4261])
4262# bfd/show should show 'down'.
4263AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
4264 Local Session State: down
4265 Remote Session State: down
4266])
4267# bond/show should show 'may-enable: false' for p0 and p1.
4268AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
4269 may_enable: false
4270 may_enable: true
4271 may_enable: false
4272 may_enable: true
4273])
4274
e441a806
AW
4275OVS_VSWITCHD_STOP
4276AT_CLEANUP
4277
4278AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 1])
4279OVS_VSWITCHD_START([add-port br0 p0 -- set interface p0 type=gre options:remote_ip=1.2.3.4])
4280
4281# enable bfd on p0.
4282AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
4283# check log.
4284AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4285monitor thread created
4286])
4287# disable bfd on p0.
4288AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
4289# check log.
4290AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4291monitor thread terminated
4292])
4293AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
4294
4295# enable cfm on p0.
4296AT_CHECK([ovs-vsctl set interface p0 cfm_mpid=10])
4297# check log.
4298AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4299monitor thread created
4300])
4301# disable cfm on p0.
4302AT_CHECK([ovs-vsctl remove interface p0 cfm_mpid 10])
4303# check log.
4304AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4305monitor thread terminated
4306])
4307AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
4308
4309# enable both bfd and cfm on p0.
4310AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true cfm_mpid=10])
4311# check log.
4312AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4313monitor thread created
4314])
4315# disable bfd on p0.
4316AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
4317# check log, there should not be the log of thread terminated.
4318AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4319])
4320# reenable bfd on p0.
4321AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
4322# check log, should still be on log of thread created.
4323AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4324monitor thread created
4325])
4326# disable bfd and cfm together.
4327AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false -- remove interface p0 cfm_mpid 10])
4328# check log.
4329AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4330monitor thread terminated
4331])
4332
4333OVS_VSWITCHD_STOP
4334AT_CLEANUP
4335
4336# this test helps avoid the deadlock between the main thread and monitor thread.
4337AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 2])
4338OVS_VSWITCHD_START
4339
4340for i in `seq 1 199`
4341do
4342 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])
4343done
4344
98cf638b
AW
4345OVS_VSWITCHD_STOP
4346AT_CLEANUP
98b07853
BP
4347\f
4348AT_BANNER([ofproto-dpif - flow translation resource limits])
4349
4350AT_SETUP([ofproto-dpif - infinite resubmit])
4351OVS_VSWITCHD_START
4352AT_CHECK([ovs-ofctl add-flow br0 actions=resubmit:1,resubmit:2,output:3])
4353AT_CHECK([ovs-appctl ofproto/trace br0 'eth_dst=ff:ff:ff:ff:ff:ff'],
4354 [0], [stdout])
4355AT_CHECK([tail -1 stdout], [0], [Datapath actions: drop
4356])
4357AT_CHECK([grep -c 'resubmit actions recursed over 64 times' ovs-vswitchd.log],
4358 [0], [1
4359])
4360OVS_VSWITCHD_STOP(["/resubmit actions recursed/d"])
4361AT_CLEANUP
4362
4363AT_SETUP([ofproto-dpif - exponential resubmit chain])
4364OVS_VSWITCHD_START
4365ADD_OF_PORTS([br0], 1)
4366(for i in `seq 1 64`; do
4367 j=`expr $i + 1`
4368 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
4369 done
4370 echo "in_port=65, actions=local") > flows
4371 AT_CHECK([ovs-ofctl add-flows br0 flows])
4372AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
4373AT_CHECK([grep -c 'over 4096 resubmit actions' ovs-vswitchd.log], [0], [1
4374])
4375OVS_VSWITCHD_STOP(["/over.*resubmit actions/d"])
4376AT_CLEANUP
4377
4378AT_SETUP([ofproto-dpif - too many output actions])
4379OVS_VSWITCHD_START
4380ADD_OF_PORTS([br0], 1)
4381(for i in `seq 1 12`; do
4382 j=`expr $i + 1`
4383 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
4384 done
4385 echo "in_port=13, actions=local,local,local,local,local,local,local,local") > flows
542024c4 4386AT_CHECK([ovs-ofctl add-flows br0 flows])
98b07853 4387AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
0f032e95
BP
4388AT_CHECK([grep -c -e '- Uses action(s) not supported by datapath' stdout],
4389 [0], [1
98b07853 4390])
0f032e95 4391AT_CHECK([grep -c 'resubmits yielded over 64 kB of actions' ovs-vswitchd.log], [0], [1
542024c4 4392])
0f032e95 4393OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of actions/d"])
98b07853
BP
4394AT_CLEANUP
4395
4396AT_SETUP([ofproto-dpif - stack too deep])
4397OVS_VSWITCHD_START
4398ADD_OF_PORTS([br0], 1)
4399(for i in `seq 1 12`; do
4400 j=`expr $i + 1`
4401 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
4402 done
4403 push="push:NXM_NX_REG0[[]]"
4404 echo "in_port=13, actions=$push,$push,$push,$push,$push,$push,$push,$push") > flows
4405 AT_CHECK([ovs-ofctl add-flows br0 flows])
4406AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
4407AT_CHECK([grep -c 'resubmits yielded over 64 kB of stack' ovs-vswitchd.log], [0], [1
4408])
4409OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of stack/d"])
4410AT_CLEANUP