]> git.proxmox.com Git - mirror_ovs.git/blame - tests/ofproto-dpif.at
cfm: Notify connectivity_seq on remote maintenance points change.
[mirror_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
339
77750738 340AT_SETUP([ofproto-dpif - output, OFPP_NONE ingress port])
e44768b7
JP
341OVS_VSWITCHD_START
342ADD_OF_PORTS([br0], [1], [2])
77750738 343
77750738
JP
344AT_CHECK([ovs-ofctl add-flow br0 action=normal])
345
346# "in_port" defaults to OFPP_NONE if it's not specified.
72d64e33 347flow="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 348AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
72d64e33
EJ
349AT_CHECK([tail -1 stdout | sed 's/Datapath actions: //' | tr "," "\n" | sort -n], [0], [dnl
3501
3512
352100
353])
77750738
JP
354
355OVS_VSWITCHD_STOP
356AT_CLEANUP
357
8b36f51e 358AT_SETUP([ofproto-dpif - DSCP])
8b36f51e 359OVS_VSWITCHD_START([add-port br0 p1 -- set Interface p1 type=dummy])
72d64e33 360ADD_OF_PORTS([br0], [9])
8b36f51e 361AT_DATA([flows.txt], [dnl
bdda5aca 362actions=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
363])
364AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
365AT_CHECK([ovs-vsctl -- \
366 set Port p1 qos=@newqos --\
367 --id=@newqos create QoS type=linux-htb queues=1=@q1,2=@q2 --\
368 --id=@q1 create Queue dscp=1 --\
369 --id=@q2 create Queue dscp=2], [0], [ignore])
50aa28fd 370AT_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
371AT_CHECK([tail -1 stdout], [0],
372 [Datapath actions: dnl
e44768b7 373100,dnl
1b567fb9
AA
374set(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
375set(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 3761,dnl
1b567fb9
AA
377set(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
378set(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 379set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0x3,ttl=128,frag=no)),1,dnl
e44768b7 380100
8b36f51e
EJ
381])
382OVS_VSWITCHD_STOP
383AT_CLEANUP
384
fd19297b 385AT_SETUP([ofproto-dpif - output/flood flags])
f7b8e494
JP
386OVS_VSWITCHD_START
387ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [7])
fd19297b
EJ
388
389AT_DATA([flows.txt], [dnl
a0fbe94a 390in_port=local actions=local,flood
fd19297b
EJ
391in_port=1 actions=flood
392in_port=2 actions=all
bdda5aca
BP
393in_port=3 actions=output:LOCAL,output:1,output:2,output:3,output:4,output:5,output:6,output:7
394in_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
395])
396AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
397AT_CHECK([ovs-ofctl mod-port br0 5 noforward])
398AT_CHECK([ovs-ofctl mod-port br0 6 noflood])
399
50aa28fd 400AT_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
401AT_CHECK([tail -1 stdout \
402| sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
4031
4042
4053
4064
4077
408])
409
50aa28fd 410AT_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
411AT_CHECK([tail -1 stdout \
412| sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
e44768b7 413100
fd19297b
EJ
4142
4153
4164
4177
418])
419
50aa28fd 420AT_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
421AT_CHECK([tail -1 stdout \
422| sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
fd19297b 4231
e44768b7 424100
fd19297b
EJ
4253
4264
4276
4287
429])
430
50aa28fd 431AT_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 432AT_CHECK([tail -1 stdout], [0],
e44768b7 433 [Datapath actions: 100,1,2,4,6,7
fd19297b
EJ
434])
435
50aa28fd 436AT_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 437AT_CHECK([tail -1 stdout], [0],
1b567fb9 438 [Datapath actions: set(skb_priority(0x1)),100,1,2,set(skb_priority(0x2)),3,set(skb_priority(0x1)),6,7
fd19297b
EJ
439])
440OVS_VSWITCHD_STOP
441AT_CLEANUP
442
15056dc8
EJ
443AT_SETUP([ofproto-dpif - controller])
444OVS_VSWITCHD_START([dnl
445 add-port br0 p1 -- set Interface p1 type=dummy
446])
57c94f35 447ON_EXIT([kill `cat ovs-ofctl.pid`])
15056dc8
EJ
448
449AT_CAPTURE_FILE([ofctl_monitor.log])
450AT_DATA([flows.txt], [dnl
451cookie=0x0 dl_src=10:11:11:11:11:11 actions=controller
54834960 452cookie=0x1 dl_src=20:22:22:22:22:22 actions=controller,resubmit(80,1)
15056dc8
EJ
453cookie=0x2 dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,controller
454
54834960
EJ
455cookie=0x3 table=1 in_port=80 actions=load:1->NXM_NX_REG0[[]],mod_vlan_vid:80,controller,resubmit(81,2)
456cookie=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)
457cookie=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)
458cookie=0x6 table=4 in_port=83 actions=load:4->NXM_NX_REG3[[]],mod_nw_src:83.83.83.83,controller,resubmit(84,5)
459cookie=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)
460cookie=0x8 table=6 in_port=85 actions=mod_tp_src:85,controller,resubmit(86,7)
461cookie=0x9 table=7 in_port=86 actions=mod_tp_dst:86,controller,controller
78cef7fd 462cookie=0xa dl_src=40:44:44:44:44:41 actions=mod_vlan_vid:99,mod_vlan_pcp:1,controller
b02475c5 463cookie=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 464cookie=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
465cookie=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
466cookie=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 467cookie=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
468cookie=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
469cookie=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
470cookie=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
471cookie=0xb dl_src=50:55:55:55:55:55 dl_type=0x8847 actions=load:1000->OXM_OF_MPLS_LABEL[[]],controller
472cookie=0xd dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,controller
473cookie=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 474cookie=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
475])
476AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
477
478dnl Flow miss.
77a922c7 479AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
15056dc8
EJ
480
481for i in 1 2 3 ; do
dc235f7f 482 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 483done
57c94f35
BP
484OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
485ovs-appctl -t ovs-ofctl exit
15056dc8 486
15056dc8 487AT_CHECK([cat ofctl_monitor.log], [0], [dnl
f0fd1a17 488OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
dc235f7f 489tcp,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 490dnl
f0fd1a17 491OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
dc235f7f 492tcp,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 493dnl
f0fd1a17 494OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
dc235f7f 495tcp,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
496])
497
498dnl Singleton controller action.
77a922c7 499AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
15056dc8
EJ
500
501for i in 1 2 3 ; do
dc235f7f 502 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 503done
57c94f35
BP
504OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
505ovs-appctl -t ovs-ofctl exit
15056dc8 506
15056dc8
EJ
507AT_CHECK([cat ofctl_monitor.log], [0], [dnl
508OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
dc235f7f 509tcp,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
510dnl
511OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
dc235f7f 512tcp,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
513dnl
514OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
dc235f7f 515tcp,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
516])
517
518dnl Modified controller action.
77a922c7 519AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
15056dc8
EJ
520
521for i in 1 2 3 ; do
dc235f7f 522 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 523done
57c94f35
BP
524OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
525ovs-appctl -t ovs-ofctl exit
15056dc8 526
15056dc8
EJ
527AT_CHECK([cat ofctl_monitor.log], [0], [dnl
528OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
dc235f7f 529tcp,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
530dnl
531OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
dc235f7f 532tcp,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
533dnl
534OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
dc235f7f 535tcp,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
536])
537
363dd1d9
JS
538dnl Modified VLAN controller action.
539AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
540
541for i in 1 2 3; do
8249a1fe 542 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 543done
57c94f35
BP
544OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
545ovs-appctl -t ovs-ofctl exit
363dd1d9 546
363dd1d9
JS
547AT_CHECK([cat ofctl_monitor.log], [0], [dnl
548NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
8249a1fe 549ip,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
550dnl
551NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
8249a1fe 552ip,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
553dnl
554NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
8249a1fe 555ip,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
556])
557
b02475c5
SH
558dnl Modified MPLS controller action.
559AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
560
561for i in 1 2 3; do
8249a1fe 562 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 563done
57c94f35
BP
564OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
565ovs-appctl -t ovs-ofctl exit
b02475c5 566
b02475c5
SH
567AT_CHECK([cat ofctl_monitor.log], [0], [dnl
568NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 569mpls,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
570dnl
571NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 572mpls,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
573dnl
574NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 575mpls,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
576])
577
578dnl Modified MPLS controller action.
579AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
580
b0a17866 581for i in 1 2 3; do
8249a1fe 582 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
583done
584OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
585ovs-appctl -t ovs-ofctl exit
586
587AT_CHECK([cat ofctl_monitor.log], [0], [dnl
588NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
8249a1fe 589ip,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
590dnl
591NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
8249a1fe 592ip,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
593dnl
594NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
8249a1fe 595ip,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
596])
597
598dnl Modified MPLS controller action.
599AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
600
b02475c5
SH
601dnl 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)
602
603for i in 1 2 3; do
604 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)'
605done
606
607OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
608AT_CHECK([cat ofctl_monitor.log], [0], [dnl
609NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
8bfd0fda 610mpls,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
611dnl
612NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
8bfd0fda 613mpls,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
614dnl
615NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
8bfd0fda 616mpls,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
617])
618
619dnl Modified MPLS controller action.
620AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
621
622for i in 1 2 3; do
8249a1fe 623 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 624done
57c94f35
BP
625OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
626ovs-appctl -t ovs-ofctl exit
b02475c5 627
b02475c5
SH
628AT_CHECK([cat ofctl_monitor.log], [0], [dnl
629NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 630mpls,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
631dnl
632NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 633mpls,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
634dnl
635NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 636mpls,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
637])
638
b676167a
SH
639dnl Modified MPLS controller action.
640AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
641
642for i in 1 2 3; do
8249a1fe 643 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 644done
57c94f35
BP
645OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
646ovs-appctl -t ovs-ofctl exit
b676167a 647
b676167a
SH
648AT_CHECK([cat ofctl_monitor.log], [0], [dnl
649NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 650mpls,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
651dnl
652NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 653mpls,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
654dnl
655NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 656mpls,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
657])
658
0f3f3c3d
SH
659dnl Modified MPLS controller action.
660AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
661
662for i in 1 2 3; do
8249a1fe 663 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 664done
57c94f35
BP
665OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
666ovs-appctl -t ovs-ofctl exit
0f3f3c3d 667
0f3f3c3d
SH
668AT_CHECK([cat ofctl_monitor.log], [0], [dnl
669NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 670mpls,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
671dnl
672NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 673mpls,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
674dnl
675NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 676mpls,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
677])
678
679dnl Modified MPLS controller action.
680AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
681
682for i in 1 2 3; do
8249a1fe 683 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 684done
57c94f35
BP
685OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
686ovs-appctl -t ovs-ofctl exit
0f3f3c3d 687
0f3f3c3d
SH
688AT_CHECK([cat ofctl_monitor.log], [0], [dnl
689NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 690mpls,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
691dnl
692NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 693mpls,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
694dnl
695NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 696mpls,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
697])
698
699dnl Modified MPLS controller action.
700AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
701
702for i in 1 2 3; do
8249a1fe 703 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 704done
57c94f35
BP
705OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
706ovs-appctl -t ovs-ofctl exit
0f3f3c3d 707
0f3f3c3d
SH
708AT_CHECK([cat ofctl_monitor.log], [0], [dnl
709NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 710mpls,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
711dnl
712NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 713mpls,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
714dnl
715NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 716mpls,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
717])
718
b02475c5
SH
719dnl Modified MPLS actions.
720AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
721
722for i in 1 2 3; do
02830175 723 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 724done
57c94f35
BP
725OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
726ovs-appctl -t ovs-ofctl exit
b02475c5 727
b02475c5
SH
728AT_CHECK([cat ofctl_monitor.log], [0], [dnl
729NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
392c30ba 730mpls,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
731dnl
732NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
392c30ba 733mpls,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
734dnl
735NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
392c30ba 736mpls,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
737])
738
739dnl Modified MPLS ipv6 controller action.
740AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
741
742for i in 1 2 3; do
743 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)'
744done
57c94f35
BP
745OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
746ovs-appctl -t ovs-ofctl exit
b02475c5 747
b02475c5
SH
748AT_CHECK([cat ofctl_monitor.log], [0], [dnl
749NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
52105b67 750mplsm,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
751dnl
752NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
52105b67 753mplsm,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
754dnl
755NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
52105b67 756mplsm,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
757])
758
759
760dnl Modified MPLS pop action.
cff78c88
SH
761dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
762dnl 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)
763dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44)
764
b02475c5
SH
765AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
766
767for i in 1 2 3; do
cff78c88 768 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 769done
cff78c88
SH
770#for i in 2 3; do
771# 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)'
772#done
57c94f35
BP
773OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
774ovs-appctl -t ovs-ofctl exit
b02475c5 775
b02475c5 776AT_CHECK([cat ofctl_monitor.log], [0], [dnl
cff78c88 777NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
dc235f7f 778tcp,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 779dnl
cff78c88 780NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
dc235f7f 781tcp,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 782dnl
cff78c88 783NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
dc235f7f 784tcp,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
785])
786
15056dc8 787dnl Checksum TCP.
77a922c7 788AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
15056dc8
EJ
789
790for i in 1 ; do
dc235f7f 791 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 792done
57c94f35
BP
793OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
794ovs-appctl -t ovs-ofctl exit
15056dc8 795
15056dc8 796AT_CHECK([cat ofctl_monitor.log], [0], [dnl
42edbe39 797NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
dc235f7f 798tcp,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 799dnl
42edbe39 800NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
dc235f7f 801tcp,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 802dnl
42edbe39 803NXT_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 804tcp,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 805dnl
42edbe39 806NXT_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 807tcp,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 808dnl
42edbe39 809NXT_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 810tcp,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 811dnl
42edbe39 812NXT_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 813tcp,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 814dnl
42edbe39 815NXT_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 816tcp,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 817dnl
42edbe39 818NXT_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 819tcp,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 820dnl
42edbe39 821NXT_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 822tcp,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
823])
824
825dnl Checksum UDP.
77a922c7 826AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
15056dc8
EJ
827
828for i in 1 ; do
829 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'
830done
57c94f35
BP
831OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
832ovs-appctl -t ovs-ofctl exit
15056dc8 833
15056dc8 834AT_CHECK([cat ofctl_monitor.log], [0], [dnl
42edbe39 835NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
3f78c3cc 836udp,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 837dnl
42edbe39 838NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
3f78c3cc 839udp,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 840dnl
42edbe39 841NXT_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 842udp,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 843dnl
42edbe39 844NXT_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 845udp,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 846dnl
42edbe39 847NXT_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 848udp,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 849dnl
42edbe39 850NXT_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 851udp,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 852dnl
42edbe39 853NXT_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 854udp,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 855dnl
42edbe39 856NXT_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 857udp,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 858dnl
42edbe39 859NXT_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 860udp,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
861])
862
f6c8a6b1
BP
863dnl Modified ARP controller action.
864AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
865
866for i in 1 2 3; do
867 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)'
868done
869
8125a83a 870OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 9])
f6c8a6b1
BP
871OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
872AT_CHECK([cat ofctl_monitor.log], [0], [dnl
873NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
874arp,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
875NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
876arp,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
877NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
56d72f37 878arp,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
879NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
880arp,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
881NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
882arp,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
883NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
56d72f37 884arp,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
885NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
886arp,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
887NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
888arp,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
889NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
56d72f37 890arp,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
891])
892
5c0243a9 893AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
0d56eaf2
JS
894
895dnl Checksum SCTP.
896AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
897
898for i in 1 ; do
899 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'
900done
901
8125a83a 902OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 9])
0d56eaf2
JS
903OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
904AT_CHECK([cat ofctl_monitor.log], [0], [dnl
905NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=98 in_port=1 (via action) data_len=98 (unbuffered)
906sctp,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
907dnl
908NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=102 in_port=1 reg0=0x1 (via action) data_len=102 (unbuffered)
909sctp,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
910dnl
911NXT_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)
912sctp,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
913dnl
914NXT_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)
915sctp,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
916dnl
917NXT_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)
918sctp,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
919dnl
920NXT_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)
921sctp,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
922dnl
923NXT_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)
924sctp,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
925dnl
926NXT_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)
927sctp,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
928dnl
929NXT_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)
930sctp,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
931])
932
ef0ce8ae 933AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
0d56eaf2 934 cookie=0x1, n_packets=3, n_bytes=218, dl_src=20:22:22:22:22:22 actions=CONTROLLER:65535,resubmit(80,1)
ef0ce8ae 935 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
936 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)
937 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)
938 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)
939 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)
940 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)
941 cookie=0x8, table=6, n_packets=3, n_bytes=218, in_port=85 actions=mod_tp_src:85,CONTROLLER:65535,resubmit(86,7)
942 cookie=0x9, table=7, n_packets=3, n_bytes=218, in_port=86 actions=mod_tp_dst:86,CONTROLLER:65535,CONTROLLER:65535
363dd1d9 943 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
944 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
945 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
946 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 947 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
948 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
949 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
950 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 951 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 952 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 953 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 954 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 955 cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,CONTROLLER:65535
ef0ce8ae
BP
956 n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
957NXST_FLOW reply:
15056dc8
EJ
958])
959
960OVS_VSWITCHD_STOP
8e9ce036 961AT_CLEANUP
04c956fc 962
f6c8a6b1
BP
963AT_SETUP([ofproto-dpif - ARP modification slow-path])
964OVS_VSWITCHD_START
965ADD_OF_PORTS([br0], [1], [2])
966
967ovs-vsctl -- set Interface p2 type=dummy options:pcap=p2.pcap
968ovs-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'
969
970# Input some packets that should follow the arp modification slow-path.
971for i in 1 2 3; do
972 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)'
973done
974AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
975
976# Check the packets that were output.
977AT_CHECK([ovs-ofctl parse-pcap p2.pcap], [0], [dnl
978arp,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
979arp,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
980arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=40:44:44:44:44:41
981arp,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
982arp,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
983arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=40:44:44:44:44:41
984arp,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
985arp,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
986arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=40:44:44:44:44:41
987])
988
f6c8a6b1
BP
989OVS_VSWITCHD_STOP
990AT_CLEANUP
991
ecac4ebf 992AT_SETUP([ofproto-dpif - VLAN handling])
04c956fc 993OVS_VSWITCHD_START(
023e1e0a
BP
994 [set Bridge br0 fail-mode=standalone -- \
995 add-port br0 p1 trunks=10,12 -- \
ecac4ebf 996 add-port br0 p2 tag=10 -- \
5e9ceccd
BP
997 add-port br0 p3 tag=12 \
998 other-config:priority-tags=true -- \
ecac4ebf
BP
999 add-port br0 p4 tag=12 -- \
1000 add-port br0 p5 vlan_mode=native-tagged tag=10 -- \
1001 add-port br0 p6 vlan_mode=native-tagged tag=10 trunks=10,12 -- \
1002 add-port br0 p7 vlan_mode=native-untagged tag=12 -- \
5e9ceccd
BP
1003 add-port br0 p8 vlan_mode=native-untagged tag=12 trunks=10,12 \
1004 other-config:priority-tags=true -- \
ecac4ebf
BP
1005 set Interface p1 type=dummy -- \
1006 set Interface p2 type=dummy -- \
1007 set Interface p3 type=dummy -- \
1008 set Interface p4 type=dummy -- \
1009 set Interface p5 type=dummy -- \
1010 set Interface p6 type=dummy -- \
1011 set Interface p7 type=dummy -- \
1012 set Interface p8 type=dummy --])
04c956fc 1013
247527db
BP
1014dnl Each of these specifies an in_port by number, a VLAN VID (or "none"),
1015dnl a VLAN PCP (used if the VID isn't "none") and the expected set of datapath
ecac4ebf 1016dnl actions.
04c956fc 1017for tuple in \
e44768b7
JP
1018 "100 none 0 drop" \
1019 "100 0 0 drop" \
1020 "100 0 1 drop" \
1021 "100 10 0 1,5,6,7,8,pop_vlan,2" \
1022 "100 10 1 1,5,6,7,8,pop_vlan,2" \
1023 "100 11 0 5,7" \
1024 "100 11 1 5,7" \
1025 "100 12 0 1,5,6,pop_vlan,3,4,7,8" \
1026 "100 12 1 1,5,6,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
247527db
BP
1027 "1 none 0 drop" \
1028 "1 0 0 drop" \
1029 "1 0 1 drop" \
e44768b7
JP
1030 "1 10 0 5,6,7,8,100,pop_vlan,2" \
1031 "1 10 1 5,6,7,8,100,pop_vlan,2" \
247527db
BP
1032 "1 11 0 drop" \
1033 "1 11 1 drop" \
e44768b7
JP
1034 "1 12 0 5,6,100,pop_vlan,3,4,7,8" \
1035 "1 12 1 5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1036 "2 none 0 push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
1037 "2 0 0 pop_vlan,push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
1038 "2 0 1 pop_vlan,push_vlan(vid=10,pcp=1),1,5,6,7,8,100" \
247527db
BP
1039 "2 10 0 drop" \
1040 "2 10 1 drop" \
1041 "2 11 0 drop" \
1042 "2 11 1 drop" \
1043 "2 12 0 drop" \
1044 "2 12 1 drop" \
e44768b7
JP
1045 "3 none 0 4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1046 "3 0 0 pop_vlan,4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1047 "3 0 1 8,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
247527db
BP
1048 "3 10 0 drop" \
1049 "3 10 1 drop" \
1050 "3 11 0 drop" \
1051 "3 11 1 drop" \
1052 "3 12 0 drop" \
1053 "3 12 1 drop" \
e44768b7
JP
1054 "4 none 0 3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1055 "4 0 0 pop_vlan,3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1056 "4 0 1 3,8,pop_vlan,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
247527db
BP
1057 "4 10 0 drop" \
1058 "4 10 1 drop" \
1059 "4 11 0 drop" \
1060 "4 11 1 drop" \
1061 "4 12 0 drop" \
1062 "4 12 1 drop" \
e44768b7
JP
1063 "5 none 0 2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
1064 "5 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
1065 "5 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,6,7,8,100" \
1066 "5 10 0 1,6,7,8,100,pop_vlan,2" \
1067 "5 10 1 1,6,7,8,100,pop_vlan,2" \
1068 "5 11 0 7,100" \
1069 "5 11 1 7,100" \
1070 "5 12 0 1,6,100,pop_vlan,3,4,7,8" \
1071 "5 12 1 1,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1072 "6 none 0 2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
1073 "6 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
1074 "6 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,5,7,8,100" \
1075 "6 10 0 1,5,7,8,100,pop_vlan,2" \
1076 "6 10 1 1,5,7,8,100,pop_vlan,2" \
247527db
BP
1077 "6 11 0 drop" \
1078 "6 11 1 drop" \
e44768b7
JP
1079 "6 12 0 1,5,100,pop_vlan,3,4,7,8" \
1080 "6 12 1 1,5,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1081 "7 none 0 3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1082 "7 0 0 pop_vlan,3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1083 "7 0 1 3,8,pop_vlan,4,push_vlan(vid=12,pcp=1),1,5,6,100" \
1084 "7 10 0 1,5,6,8,100,pop_vlan,2" \
1085 "7 10 1 1,5,6,8,100,pop_vlan,2" \
1086 "7 11 0 5,100" \
1087 "7 11 1 5,100" \
1088 "7 12 0 1,5,6,100,pop_vlan,3,4,8" \
1089 "7 12 1 1,5,6,100,pop_vlan,4,push_vlan(vid=0,pcp=1),3,8" \
1090 "8 none 0 3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
1091 "8 0 0 pop_vlan,3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
1092 "8 0 1 3,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1093 "8 10 0 1,5,6,7,100,pop_vlan,2" \
1094 "8 10 1 1,5,6,7,100,pop_vlan,2" \
247527db
BP
1095 "8 11 0 drop" \
1096 "8 11 1 drop" \
e44768b7
JP
1097 "8 12 0 1,5,6,100,pop_vlan,3,4,7" \
1098 "8 12 1 1,5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3"
04c956fc
BP
1099do
1100 set $tuple
1101 in_port=$1
1102 vlan=$2
ecac4ebf
BP
1103 pcp=$3
1104 expected=$4
04c956fc
BP
1105
1106 if test $vlan = none; then
247527db 1107 flow="in_port($in_port),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff),eth_type(0xabcd)"
04c956fc 1108 else
247527db 1109 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
1110 fi
1111
395e68ce
BP
1112 echo "----------------------------------------------------------------------"
1113 echo "in_port=$in_port vlan=$vlan pcp=$pcp"
1114
50aa28fd 1115 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
ecac4ebf 1116 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
04c956fc 1117
247527db 1118 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
becffb86 1119 mv stdout expout
247527db 1120 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
04c956fc
BP
1121done
1122
1123OVS_VSWITCHD_STOP
1124AT_CLEANUP
7257b535 1125
56879058
JS
1126AT_SETUP([ofproto-dpif - MPLS handling])
1127OVS_VSWITCHD_START([dnl
1128 add-port br0 p1 -- set Interface p1 type=dummy
1129])
1130ON_EXIT([kill `cat ovs-ofctl.pid`])
1131
1132AT_CAPTURE_FILE([ofctl_monitor.log])
1133AT_DATA([flows.txt], [dnl
1134dl_src=40:44:44:44:00:00 actions=push_mpls:0x8847,controller
63636ee8 1135dl_src=40:44:44:44:00:01,mpls actions=push_mpls:0x8847,controller
0c1625e8 1136dl_src=40:44:44:44:00:02,mpls actions=push_mpls:0x8848,controller
56879058
JS
1137])
1138AT_CHECK([ovs-ofctl --protocols=OpenFlow12 add-flows br0 flows.txt])
1139
1140dnl In this test, we push an MPLS tag to an ethernet packet.
1141AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1142
1143for i in 1 2 3; do
1144 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)'
1145done
8f6736d3 1146sleep 1
56879058
JS
1147OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1148
1149AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1150OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1151mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:00:00,dl_dst=50:54:00:00:00:07,mpls_label=0,mpls_tc=0,mpls_ttl=64,mpls_bos=1
115200000000 50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
115300000010 01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
115400000020 00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
115500000030 00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
1156dnl
1157OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1158mpls,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
115900000000 50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
116000000010 01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
116100000020 00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
116200000030 00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
1163dnl
1164OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1165mpls,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
116600000000 50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
116700000010 01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
116800000020 00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
116900000030 00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
1170])
1171
63636ee8
JS
1172dnl In this test, we push an MPLS tag to an MPLS packet. The LSE should be
1173dnl copied exactly, except for the BOS bit.
1174AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1175
1176for i in 1 2 3; do
1177 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)'
1178done
8f6736d3 1179sleep 1
63636ee8
JS
1180OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1181
1182AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1183OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1184mpls,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
118500000000 50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
118600000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
118700000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
118800000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1189dnl
1190OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1191mpls,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
119200000000 50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
119300000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
119400000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
119500000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1196dnl
1197OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1198mpls,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
119900000000 50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
120000000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
120100000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
0c1625e8
SH
120200000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1203])
1204
1205dnl In this test, we push an MPLS tag to an MPLS packet. The LSE should be
1206dnl copied exactly, except for the BOS bit. The ethertype should be updated
1207dnl to the MPLS ethertype of the MPLS push action which differs to that
1208dnl of the input packet.
1209AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1210
1211for i in 1 2 3; do
1212 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)'
1213done
8f6736d3 1214sleep 1
0c1625e8
SH
1215OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1216
1217AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1218OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1219mplsm,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
122000000000 50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
122100000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
122200000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
122300000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1224dnl
1225OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1226mplsm,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
122700000000 50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
122800000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
122900000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
123000000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1231dnl
1232OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1233mplsm,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
123400000000 50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
123500000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
123600000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
63636ee8
JS
123700000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1238])
1239
56879058
JS
1240OVS_VSWITCHD_STOP
1241AT_CLEANUP
1242
846e159a
SH
1243AT_SETUP([ofproto-dpif - VLAN+MPLS handling])
1244OVS_VSWITCHD_START([dnl
1245 add-port br0 p1 -- set Interface p1 type=dummy
1246])
1247ON_EXIT([kill `cat ovs-ofctl.pid`])
1248
1249AT_CAPTURE_FILE([ofctl_monitor.log])
1250AT_DATA([flows.txt], [dnl
1251cookie=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
1252cookie=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
1253cookie=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
1254cookie=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
1255cookie=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
1256cookie=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
1257cookie=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
1258cookie=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
1259cookie=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
1260cookie=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
1261])
1262AT_CHECK([ovs-ofctl --protocols=OpenFlow12 add-flows br0 flows.txt])
1263
1264dnl Modified MPLS controller action.
1265dnl In this test, we push the MPLS tag before pushing a VLAN tag, so we see
1266dnl both of these in the final flow
1267AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1268
1269for i in 1 2 3; do
1270 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)'
1271done
8f6736d3 1272sleep 1
846e159a
SH
1273OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1274
1275AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1276OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1277mpls,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
127800000000 50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
127900000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
128000000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
128100000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
128200000040 00 00 00 00
1283dnl
1284OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1285mpls,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
128600000000 50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
128700000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
128800000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
128900000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
129000000040 00 00 00 00
1291dnl
1292OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1293mpls,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
129400000000 50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
129500000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
129600000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
129700000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
129800000040 00 00 00 00
1299])
1300
1301dnl Modified MPLS controller action.
1302dnl In this test, the input packet in vlan-tagged, which should be stripped
1303dnl before we push the MPLS and VLAN tags.
1304AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1305
1306for i in 1 2 3; do
1307 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))'
1308done
1309OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1310ovs-appctl -t ovs-ofctl exit
1311
1312AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1313OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1314mpls,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
131500000000 50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
131600000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
131700000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
131800000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1319dnl
1320OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1321mpls,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
132200000000 50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
132300000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
132400000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
132500000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1326dnl
1327OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1328mpls,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
132900000000 50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
133000000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
133100000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
133200000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1333])
1334
1335dnl Modified MPLS controller action.
1336dnl In this test, we push the MPLS tag before pushing a VLAN tag, so we see
1337dnl both of these in the final flow
1338AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1339
1340for i in 1 2 3; do
1341 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)'
1342done
1343OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1344
1345AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1346OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1347mpls,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
134800000000 52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
134900000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
135000000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
135100000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
135200000040 00 00 00 00
1353dnl
1354OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1355mpls,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
135600000000 52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
135700000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
135800000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
135900000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
136000000040 00 00 00 00
1361dnl
1362OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1363mpls,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
136400000000 52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
136500000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
136600000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
136700000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
136800000040 00 00 00 00
1369])
1370
1371dnl Modified MPLS controller action.
1372dnl In this test, the input packet in vlan-tagged, which should be stripped
1373dnl before we push the MPLS and VLAN tags.
1374AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1375
1376for i in 1 2 3; do
1377 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))'
1378done
1379OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1380ovs-appctl -t ovs-ofctl exit
1381
1382AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1383OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1384mpls,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
138500000000 50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
138600000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
138700000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
138800000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1389dnl
1390OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1391mpls,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
139200000000 50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
139300000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
139400000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
139500000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1396dnl
1397OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1398mpls,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
139900000000 50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
140000000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
140100000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
140200000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1403])
1404
1405dnl Modified MPLS controller action.
1406dnl In this test, we push the VLAN tag before pushing a MPLS tag, but these
1407dnl actions are reordered, so we see both of these in the final flow.
1408AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1409
1410for i in 1 2 3; do
1411 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)'
1412done
1413OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1414ovs-appctl -t ovs-ofctl exit
1415
1416AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1417OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1418mpls,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
141900000000 50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
142000000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
142100000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
142200000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
142300000040 00 00 00 00
1424dnl
1425OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1426mpls,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
142700000000 50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
142800000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
142900000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
143000000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
143100000040 00 00 00 00
1432dnl
1433OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1434mpls,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
143500000000 50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
143600000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
143700000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
143800000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
143900000040 00 00 00 00
1440])
1441
1442dnl Modified MPLS controller action.
1443dnl In this test, the input packet in vlan-tagged, which should be stripped
1444dnl before we push the MPLS and VLAN tags.
1445AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1446
1447for i in 1 2 3; do
1448 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))'
1449done
1450OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1451ovs-appctl -t ovs-ofctl exit
1452
1453AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1454OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1455mpls,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
145600000000 50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
145700000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
145800000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
145900000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1460dnl
1461OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1462mpls,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
146300000000 50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
146400000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
146500000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
146600000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1467dnl
1468OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1469mpls,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
147000000000 50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
147100000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
147200000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
147300000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1474])
1475
1476dnl Modified MPLS controller action.
1477dnl In this test, we push the VLAN tag before pushing a MPLS tag, but these
1478dnl actions are reordered, so we see both of these in the final flow.
1479AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1480
1481for i in 1 2 3; do
1482 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)'
1483done
1484OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1485ovs-appctl -t ovs-ofctl exit
1486
1487AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1488OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1489mpls,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
149000000000 50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
149100000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
149200000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
149300000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
149400000040 00 00 00 00
1495dnl
1496OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1497mpls,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
149800000000 50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
149900000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
150000000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
150100000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
150200000040 00 00 00 00
1503dnl
1504OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1505mpls,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
150600000000 50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
150700000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
150800000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
150900000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
151000000040 00 00 00 00
1511])
1512
1513dnl Modified MPLS controller action.
1514dnl In this test, the input packet in vlan-tagged, which should be stripped
1515dnl before we push the MPLS and VLAN tags.
1516AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 -m 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1517
1518for i in 1 2 3; do
1519 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))'
1520done
1521OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1522ovs-appctl -t ovs-ofctl exit
1523
1524AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1525OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1526mpls,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
152700000000 50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
152800000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
152900000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
153000000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1531dnl
1532OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1533mpls,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
153400000000 50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
153500000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
153600000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
153700000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1538dnl
1539OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1540mpls,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
154100000000 50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
154200000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
154300000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
154400000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1545])
1546
1547dnl Modified MPLS controller action.
1548dnl In this test, the input packet in vlan-tagged, which should be stripped
1549dnl before we push the MPLS and VLAN tags.
1550AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1551
1552for i in 1 2 3; do
1553 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))'
1554done
1555OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1556ovs-appctl -t ovs-ofctl exit
1557
1558AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1559OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1560mpls,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
156100000000 50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
156200000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
156300000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
156400000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1565dnl
1566OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1567mpls,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
156800000000 50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
156900000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
157000000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
157100000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1572dnl
1573OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1574mpls,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
157500000000 50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
157600000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
157700000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
157800000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1579])
1580
1581dnl Modified MPLS controller action.
1582dnl In this test, the input packet in vlan-tagged, which should be modified
1583dnl before we push MPLS and VLAN tags.
1584AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1585
1586for i in 1 2 3; do
1587 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))'
1588done
1589OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1590ovs-appctl -t ovs-ofctl exit
1591
1592AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1593OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1594mpls,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
159500000000 50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
159600000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
159700000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
159800000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1599dnl
1600OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1601mpls,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
160200000000 50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
160300000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
160400000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
160500000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1606dnl
1607OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1608mpls,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
160900000000 50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
161000000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
161100000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
161200000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1613])
1614
1615AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1616AT_CHECK([ovs-ofctl --protocols=OpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1617 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
1618 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
1619 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
1620 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
1621 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
1622 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
1623 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
1624 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
1625 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
1626 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
1627OFPST_FLOW reply (OF1.2):
1628])
1629
1630OVS_VSWITCHD_STOP
1631AT_CLEANUP
1632
7257b535 1633AT_SETUP([ofproto-dpif - fragment handling])
023e1e0a 1634OVS_VSWITCHD_START
72d64e33 1635ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [90])
7257b535
BP
1636AT_DATA([flows.txt], [dnl
1637priority=75 tcp ip_frag=no tp_dst=80 actions=output:1
1638priority=75 tcp ip_frag=first tp_dst=80 actions=output:2
1639priority=75 tcp ip_frag=later tp_dst=80 actions=output:3
1640priority=50 tcp ip_frag=no actions=output:4
1641priority=50 tcp ip_frag=first actions=output:5
1642priority=50 tcp ip_frag=later actions=output:6
1643])
1644AT_CHECK([ovs-ofctl replace-flows br0 flows.txt])
1645
a61680c6 1646base_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
1647no_flow="$base_flow,frag=no),tcp(src=12345,dst=80)"
1648first_flow="$base_flow,frag=first),tcp(src=12345,dst=80)"
1649later_flow="$base_flow,frag=later)"
1650
1651 # mode no first later
1652for tuple in \
1653 'normal 1 5 6' \
1654 'drop 1 drop drop' \
1655 'nx-match 1 2 6'
1656do
1657 set $tuple
1658 mode=$1
1659 no=$2
1660 first=$3
1661 later=$4
1662
1663 AT_CHECK([ovs-ofctl set-frags br0 $mode])
1664 for type in no first later; do
1665 eval flow=\$${type}_flow exp_output=\$$type
7fd51d39 1666 printf "\n%s\n" "----$mode $type-----"
50aa28fd 1667 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
7fd51d39
BP
1668 : > expout
1669 if test $mode = drop && test $type != no; then
1670 echo 'Packets dropped because they are IP fragments and the fragment handling mode is "drop".' >> expout
1671 fi
1672 echo "Datapath actions: $exp_output" >> expout
1673 AT_CHECK([grep 'IP fragments' stdout; tail -1 stdout], [0], [expout])
7257b535
BP
1674 done
1675done
023e1e0a 1676OVS_VSWITCHD_STOP
7257b535 1677AT_CLEANUP
848e8809
EJ
1678
1679AT_SETUP([ofproto-dpif - exit])
1680OVS_VSWITCHD_START
f7b8e494 1681ADD_OF_PORTS([br0], [1], [2], [3], [10], [11], [12], [13], [14])
848e8809
EJ
1682AT_DATA([flows.txt], [dnl
1683in_port=1 actions=output:10,exit,output:11
1684in_port=2 actions=output:12,resubmit:1,output:12
1685in_port=3 actions=output:13,resubmit:2,output:14
1686])
1687AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
50aa28fd 1688AT_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
1689AT_CHECK([tail -1 stdout], [0],
1690 [Datapath actions: 10
1691])
50aa28fd 1692AT_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
1693AT_CHECK([tail -1 stdout], [0],
1694 [Datapath actions: 12,10
1695])
50aa28fd 1696AT_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
1697AT_CHECK([tail -1 stdout], [0],
1698 [Datapath actions: 13,12,10
1699])
1700OVS_VSWITCHD_STOP
1701AT_CLEANUP
c06bba01
JP
1702
1703
1704AT_SETUP([ofproto-dpif - mirroring, select_all])
432fca23
BP
1705OVS_VSWITCHD_START
1706ADD_OF_PORTS([br0], 1, 2, 3)
1707ovs-vsctl \
c06bba01
JP
1708 set Bridge br0 mirrors=@m --\
1709 --id=@p3 get Port p3 --\
432fca23 1710 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
c06bba01 1711
c06bba01
JP
1712AT_DATA([flows.txt], [dnl
1713in_port=1 actions=output:2
1714in_port=2 actions=output:1
1715])
1716AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1717
247527db 1718flow="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 1719AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01 1720AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 1721 [Datapath actions: 2,3
c06bba01
JP
1722])
1723
247527db 1724flow="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 1725AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01 1726AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 1727 [Datapath actions: 1,3
c06bba01
JP
1728])
1729
1730OVS_VSWITCHD_STOP
1731AT_CLEANUP
1732
1733
1734AT_SETUP([ofproto-dpif - mirroring, select_src])
432fca23
BP
1735OVS_VSWITCHD_START
1736ADD_OF_PORTS([br0], 1, 2, 3)
1737ovs-vsctl \
c06bba01
JP
1738 set Bridge br0 mirrors=@m --\
1739 --id=@p1 get Port p1 -- --id=@p3 get Port p3 --\
432fca23 1740 --id=@m create Mirror name=mymirror select_src_port=@p1 output_port=@p3
c06bba01 1741
c06bba01
JP
1742AT_DATA([flows.txt], [dnl
1743in_port=1 actions=output:2
1744in_port=2 actions=output:1
1745])
1746AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1747
247527db 1748flow="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 1749AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01 1750AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 1751 [Datapath actions: 2,3
c06bba01
JP
1752])
1753
247527db 1754flow="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 1755AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01 1756AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 1757 [Datapath actions: 1
c06bba01
JP
1758])
1759OVS_VSWITCHD_STOP
1760AT_CLEANUP
1761
33158a18 1762AT_SETUP([ofproto-dpif - mirroring, OFPP_NONE ingress port])
432fca23
BP
1763OVS_VSWITCHD_START
1764ADD_OF_PORTS([br0], 1, 2)
1765ovs-vsctl \
33158a18
JP
1766 set Bridge br0 mirrors=@m --\
1767 --id=@p2 get Port p2 --\
432fca23 1768 --id=@m create Mirror name=mymirror select_all=true output_port=@p2
33158a18 1769
33158a18
JP
1770AT_CHECK([ovs-ofctl add-flow br0 action=output:1])
1771
1772# "in_port" defaults to OFPP_NONE if it's not specified.
72d64e33 1773flow="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
1774AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
1775AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 1776 [Datapath actions: 1,2
33158a18
JP
1777])
1778
1779OVS_VSWITCHD_STOP
1780AT_CLEANUP
1781
c06bba01
JP
1782
1783AT_SETUP([ofproto-dpif - mirroring, select_dst])
432fca23
BP
1784OVS_VSWITCHD_START
1785ADD_OF_PORTS([br0], 1, 2, 3)
1786ovs-vsctl \
c06bba01
JP
1787 set Bridge br0 mirrors=@m --\
1788 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
432fca23 1789 --id=@m create Mirror name=mymirror select_dst_port=@p2 output_port=@p3
c06bba01 1790
c06bba01
JP
1791AT_DATA([flows.txt], [dnl
1792in_port=1 actions=output:2
1793in_port=2 actions=output:1
1794])
1795AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1796
247527db 1797flow="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 1798AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01 1799AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 1800 [Datapath actions: 2,3
c06bba01
JP
1801])
1802
247527db 1803flow="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 1804AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01 1805AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 1806 [Datapath actions: 1
c06bba01
JP
1807])
1808
1809OVS_VSWITCHD_STOP
1810AT_CLEANUP
1811
1812
1813AT_SETUP([ofproto-dpif - mirroring, select_vlan])
432fca23
BP
1814OVS_VSWITCHD_START
1815ADD_OF_PORTS([br0], 1, 2, 3)
1816ovs-vsctl \
c06bba01
JP
1817 set Bridge br0 mirrors=@m --\
1818 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
432fca23 1819 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
c06bba01 1820
c06bba01
JP
1821AT_DATA([flows.txt], [dnl
1822in_port=1, actions=output:2
1823])
1824AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1825
247527db 1826flow="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 1827AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01 1828AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 1829 [Datapath actions: 2
c06bba01
JP
1830])
1831
247527db 1832flow="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 1833AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01 1834AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 1835 [Datapath actions: 2
c06bba01
JP
1836])
1837
247527db 1838flow="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 1839AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01 1840AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 1841 [Datapath actions: 2,3
c06bba01
JP
1842])
1843
1844OVS_VSWITCHD_STOP
1845AT_CLEANUP
1846
1847
1848AT_SETUP([ofproto-dpif - mirroring, output_port])
432fca23
BP
1849OVS_VSWITCHD_START
1850ADD_OF_PORTS([br0], 1, 2, 3)
1851ovs-vsctl \
c06bba01
JP
1852 set Bridge br0 mirrors=@m --\
1853 --id=@p3 get Port p3 --\
432fca23 1854 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
c06bba01 1855
c06bba01
JP
1856AT_DATA([flows.txt], [dnl
1857in_port=1 actions=mod_vlan_vid:17,output:2
1858in_port=2 actions=output:1
1859])
1860AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1861
247527db 1862flow="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 1863AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01 1864AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 1865 [Datapath actions: push_vlan(vid=17,pcp=0),2,pop_vlan,3
c06bba01
JP
1866])
1867
247527db 1868flow="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 1869AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01 1870AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 1871 [Datapath actions: 1,3
c06bba01
JP
1872])
1873
1874OVS_VSWITCHD_STOP
1875AT_CLEANUP
1876
c06bba01 1877AT_SETUP([ofproto-dpif - mirroring, output_vlan])
432fca23
BP
1878OVS_VSWITCHD_START
1879ADD_OF_PORTS([br0], 1, 2)
1880ovs-vsctl \
c06bba01 1881 set Bridge br0 mirrors=@m --\
432fca23 1882 --id=@m create Mirror name=mymirror select_all=true output_vlan=12
c06bba01 1883
c06bba01
JP
1884AT_DATA([flows.txt], [dnl
1885in_port=1 actions=output:2
1886in_port=2 actions=mod_vlan_vid:17,output:1
1887])
1888AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1889
247527db 1890flow="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 1891AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01
JP
1892actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1893
e44768b7 1894expected="2,push_vlan(vid=12,pcp=0),1,2,100"
247527db 1895AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
c06bba01 1896mv stdout expout
247527db 1897AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
c06bba01 1898
247527db 1899flow="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 1900AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01
JP
1901actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1902
e44768b7 1903expected="push_vlan(vid=17,pcp=0),1,pop_vlan,push_vlan(vid=12,pcp=0),1,2,100"
247527db 1904AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
c06bba01 1905mv stdout expout
247527db 1906AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
c06bba01
JP
1907
1908OVS_VSWITCHD_STOP
1909AT_CLEANUP
b44a10b7 1910
22bb3cbc
AW
1911# Two testcases below are for the ofproto/trace command
1912# The first one tests all correct syntax:
1913# ofproto/trace [dp_name] odp_flow [-generate|packet]
1914# ofproto/trace br_name br_flow [-generate|packet]
1915AT_SETUP([ofproto-dpif - ofproto/trace command 1])
1916OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
1917ADD_OF_PORTS([br0], 1, 2, 3)
1918
1919AT_DATA([flows.txt], [dnl
1920in_port=1 actions=output:2
1921in_port=2 actions=output:1
1922])
1923AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1924
0a37839c 1925odp_flow="in_port(p1)"
22bb3cbc 1926br_flow="in_port=1"
0a37839c
GS
1927# Test command: ofproto/trace odp_flow with in_port as a name.
1928AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
1929AT_CHECK([tail -1 stdout], [0], [dnl
1930Datapath actions: 2
1931])
1932
1933odp_flow="in_port(1)"
22bb3cbc
AW
1934# Test command: ofproto/trace odp_flow
1935AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
1936AT_CHECK([tail -1 stdout], [0], [dnl
1937Datapath actions: 2
1938])
1939
1940# Test command: ofproto/trace dp_name odp_flow
1941AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$odp_flow"], [0], [stdout])
1942AT_CHECK([tail -1 stdout], [0], [dnl
1943Datapath actions: 2
1944])
1945# Test commmand: ofproto/trace br_name br_flow
1946AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
1947AT_CHECK([tail -1 stdout], [0], [dnl
1948Datapath actions: 2
1949])
1950
1951# Delete the inserted flows
1952AT_CHECK([ovs-ofctl del-flows br0 "in_port=1"], [0], [stdout])
1953AT_CHECK([ovs-ofctl del-flows br0 "in_port=2"], [0], [stdout])
1954
1955# This section beflow tests the [-generate] option
1956odp_flow="in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff)"
1957br_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"
1958
1959# Test command: ofproto/trace odp_flow
1960AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
1961# Check for no MAC learning entry
1962AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1963 port VLAN MAC Age
1964])
1965
1966# Test command: ofproto/trace br_name br_flow
1967AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
1968# Check for no MAC learning entry
1969AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1970 port VLAN MAC Age
1971])
1972
1973# Test command: ofproto/trace odp_flow -generate
1974AT_CHECK([ovs-appctl ofproto/trace "$odp_flow" -generate], [0], [stdout])
1975# Check for the MAC learning entry
1976AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1977 port VLAN MAC Age
1978 3 0 50:54:00:00:00:05 ?
1979])
1980
1981# Test command: ofproto/trace dp_name odp_flow -generate
1982AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1983 "in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05)" \
1984 -generate], [0], [stdout])
1985# Check for both MAC learning entries
1986AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1987 port VLAN MAC Age
1988 3 0 50:54:00:00:00:05 ?
1989 1 0 50:54:00:00:00:06 ?
1990])
1991
1992# Test command: ofproto/trace br_name br_flow -generate
1993AT_CHECK([ovs-appctl ofproto/trace br0 \
1994 "in_port=2,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:06" \
1995 -generate], [0], [stdout])
1996# Check for both MAC learning entries.
1997AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1998 port VLAN MAC Age
1999 3 0 50:54:00:00:00:05 ?
2000 1 0 50:54:00:00:00:06 ?
2001 2 0 50:54:00:00:00:07 ?
2002])
2003
2004# This section beflow tests the [packet] option
2005# The ovs-tcpundump of packets between port1 and port2
2006pkt1to2="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
2007pkt2to1="50540000000150540000000208064500001C000100004001F98CC0A80002C0A800010800F7FF00000000"
2008
2009# Construct the MAC learning table
2010AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2011 "in_port(1),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff)" \
2012 -generate], [0], [stdout])
2013
2014# Construct the MAC learning table
2015AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2016 "in_port(2),eth(src=50:54:00:00:00:02,dst=ff:ff:ff:ff:ff:ff)" \
2017 -generate], [0], [stdout])
2018
2019# Test command: ofproto/trace odp_flow packet
2020AT_CHECK([ovs-appctl ofproto/trace \
2021 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
2022AT_CHECK([tail -1 stdout], [0], [dnl
2023Datapath actions: 2
2024])
b6f00895 2025AT_CHECK([head -n 2 stdout], [0], [dnl
22bb3cbc 2026Bridge: br0
1362e248 2027Flow: 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
2028])
2029
2030# Test command: ofproto/trace dp_name odp_flow packet
2031AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2032 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
2033AT_CHECK([tail -1 stdout], [0], [dnl
2034Datapath actions: 2
2035])
b6f00895 2036AT_CHECK([head -n 2 stdout], [0], [dnl
22bb3cbc 2037Bridge: br0
1362e248 2038Flow: 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
2039])
2040
2041# Test command: ofproto/trace br_name br_flow packet
2042AT_CHECK([ovs-appctl ofproto/trace br0 \
1362e248 2043 "in_port=2,skb_priority=2,pkt_mark=1" "$pkt2to1"], [0], [stdout],[stderr])
22bb3cbc 2044AT_CHECK([tail -1 stdout], [0], [dnl
ed2e7245 2045Datapath actions: 1
22bb3cbc
AW
2046])
2047AT_CHECK([head -n 2 stdout], [0], [dnl
b6f00895 2048Bridge: br0
1362e248 2049Flow: 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
2050])
2051
2052OVS_VSWITCHD_STOP
2053AT_CLEANUP
2054
2055# The second test tests the corner cases
2056AT_SETUP([ofproto-dpif - ofproto/trace command 2])
2057OVS_VSWITCHD_START
2058ADD_OF_PORTS([br0], 1, 2)
2059
2060# Define flows
2061odp_flow="in_port(1),eth(src=50:54:00:00:00:01,dst=50:54:00:00:00:02)"
2062br_flow="in_port=1,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02"
2063# Define options
2064generate="-generate"
2065pkt="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
2066
2067# Test incorrect command: ofproto/trace wrong_name odp_flow [-generate|packet]
2068m4_foreach(
2069[option],
2070[[],
2071["$generate"],
2072["$pkt"]],
2073[AT_CHECK([ovs-appctl ofproto/trace wrong_name "$odp_flow" option],
2074 [2], [], [stderr])
2075AT_CHECK([tail -2 stderr], [0], [dnl
0a37839c 2076Cannot find the datapath
22bb3cbc
AW
2077ovs-appctl: ovs-vswitchd: server returned an error
2078])])
2079
2080# Test incorrect command: ofproto/trace empty_string odp_flow [-generate|packet]
2081m4_foreach(
2082[option],
2083[[],
2084["$generate"],
2085["$pkt"]],
2086[AT_CHECK([ovs-appctl ofproto/trace "" "$odp_flow" option],
2087 [2], [], [stderr])
2088AT_CHECK([tail -2 stderr], [0], [dnl
0a37839c 2089Cannot find the datapath
22bb3cbc
AW
2090ovs-appctl: ovs-vswitchd: server returned an error
2091])])
2092
2093# Test incorrect command: ofproto/trace nonexist_dp_name odp_flow [-generate|packet]
2094m4_foreach(
2095[option],
2096[[],
2097["$generate"],
2098["$pkt"]],
2099[AT_CHECK([ovs-appctl ofproto/trace ovs-system "$odp_flow" option],
2100 [2], [], [stderr])
2101AT_CHECK([tail -2 stderr], [0], [dnl
0a37839c 2102Cannot find the datapath
22bb3cbc
AW
2103ovs-appctl: ovs-vswitchd: server returned an error
2104])])
2105
2106# Test incorrect command: ofproto/trace br_name odp_flow [-generate|packet]
2107m4_foreach(
2108[option],
2109[[],
2110["$generate"],
2111["$pkt"]],
2112[AT_CHECK([ovs-appctl ofproto/trace br0 "$odp_flow" option],
2113 [2], [], [stderr])
2114AT_CHECK([tail -2 stderr], [0], [dnl
0a37839c 2115Cannot find the datapath
22bb3cbc
AW
2116ovs-appctl: ovs-vswitchd: server returned an error
2117])])
2118
2119# Test incorrect command: ofproto/trace dp_name br_flow [-generate|packet]
2120m4_foreach(
2121[option],
2122[[],
2123["$generate"],
2124["$pkt"]],
2125[AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$br_flow" option],
2126 [2], [], [stderr])
2127AT_CHECK([tail -2 stderr], [0], [dnl
2128Unknown bridge name
2129ovs-appctl: ovs-vswitchd: server returned an error
2130])])
2131
2132# Test incorrect command: ofproto/trace br_flow [-generate|packet]
2133m4_foreach(
2134[option],
2135[[],
2136["$generate"],
2137["$pkt"]],
2138[AT_CHECK([ovs-appctl ofproto/trace "$br_flow" option],
2139 [2], [], [stderr])
2140AT_CHECK([tail -2 stderr], [0], [dnl
2141Must specify bridge name
2142ovs-appctl: ovs-vswitchd: server returned an error
2143])])
2144
2145# Test incorrect command: ofproto/trace dp_name odp_flow garbage_option
2146AT_CHECK([ovs-appctl ofproto/trace \
2147 ovs-dummy "$odp_flow" garbage_option],
2148 [2], [stdout],[stderr])
2149AT_CHECK([tail -2 stderr], [0], [dnl
2150Trailing garbage in packet data
2151ovs-appctl: ovs-vswitchd: server returned an error
2152])
2153
2154# Test incorrect command: ofproto/trace with 4 arguments
2155AT_CHECK([ovs-appctl ofproto/trace \
2156 arg1, arg2, arg3, arg4], [2], [stdout],[stderr])
2157AT_CHECK([tail -2 stderr], [0], [dnl
2158"ofproto/trace" command takes at most 3 arguments
2159ovs-appctl: ovs-vswitchd: server returned an error
2160])
2161
2162# Test incorrect command: ofproto/trace with 0 argument
2163AT_CHECK([ovs-appctl ofproto/trace ], [2], [stdout],[stderr])
2164AT_CHECK([tail -2 stderr], [0], [dnl
2165"ofproto/trace" command requires at least 1 arguments
2166ovs-appctl: ovs-vswitchd: server returned an error
2167])
2168
2169OVS_VSWITCHD_STOP
2170AT_CLEANUP
2171
aee0979b
BP
2172AT_SETUP([ofproto-dpif - ofproto/trace-packet-out])
2173OVS_VSWITCHD_START
2174ADD_OF_PORTS([br0], 1, 2, 3)
2175
2176AT_DATA([flows.txt], [dnl
2177in_port=1 actions=output:2
2178in_port=2 actions=output:1
2179])
2180AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2181
2182AT_CHECK([ovs-appctl ofproto/trace-packet-out br0 in_port=1 'mod_vlan_vid:123,resubmit(,0)'], [0], [stdout])
2183AT_CHECK([tail -1 stdout], [0], [dnl
2184Datapath actions: push_vlan(vid=123,pcp=0),2
2185])
2186
2187OVS_VSWITCHD_STOP
2188AT_CLEANUP
2189
2190
b44a10b7
BP
2191m4_define([OFPROTO_TRACE],
2192 [flow="$2"
2193 AT_CHECK([ovs-appctl ofproto/trace $1 "$flow" $3], [0], [stdout])
2194 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
2195 expected="$4"
2196 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected" $5],
2197 [0], [stdout])
2198 mv stdout expout
2199 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual" $5],
2200 [0], [expout])])
2201
2202AT_SETUP([ofproto-dpif - MAC learning])
432fca23
BP
2203OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
2204ADD_OF_PORTS([br0], 1, 2, 3)
b44a10b7 2205
b44a10b7
BP
2206arp='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)'
2207
2208# Trace an ARP packet arriving on p3, to create a MAC learning entry.
2209OFPROTO_TRACE(
50aa28fd 2210 [ovs-dummy],
247527db 2211 [in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
b44a10b7 2212 [-generate],
e44768b7 2213 [1,2,100])
b44a10b7
BP
2214
2215# Check for the MAC learning entry.
83664f72 2216AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
b44a10b7 2217 port VLAN MAC Age
247527db 2218 3 0 50:54:00:00:00:05 ?
b44a10b7
BP
2219])
2220
2221# Trace a packet arrival destined for the learned MAC.
2222# (This will also learn a MAC.)
2223OFPROTO_TRACE(
50aa28fd 2224 [ovs-dummy],
247527db 2225 [in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05),$arp],
b44a10b7 2226 [-generate],
247527db 2227 [3])
b44a10b7
BP
2228
2229# Check for both MAC learning entries.
83664f72 2230AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
b44a10b7 2231 port VLAN MAC Age
247527db
BP
2232 3 0 50:54:00:00:00:05 ?
2233 1 0 50:54:00:00:00:06 ?
b44a10b7
BP
2234])
2235
2236# Trace a packet arrival that updates the first learned MAC entry.
2237OFPROTO_TRACE(
50aa28fd 2238 [ovs-dummy],
247527db 2239 [in_port(2),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
b44a10b7 2240 [-generate],
e44768b7 2241 [1,3,100])
b44a10b7
BP
2242
2243# Check that the MAC learning entry was updated.
83664f72 2244AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
b44a10b7 2245 port VLAN MAC Age
247527db
BP
2246 1 0 50:54:00:00:00:06 ?
2247 2 0 50:54:00:00:00:05 ?
b44a10b7
BP
2248])
2249
2250# Add another bridge.
2251AT_CHECK(
2252 [ovs-vsctl \
2253 -- add-br br1 \
ad28062f
BP
2254 -- set bridge br1 datapath-type=dummy])
2255ADD_OF_PORTS([br1], 4, 5)
b44a10b7
BP
2256
2257# Trace some packet arrivals in br1 to create MAC learning entries there too.
2258OFPROTO_TRACE(
50aa28fd 2259 [ovs-dummy],
247527db 2260 [in_port(4),eth(src=50:54:00:00:00:06,dst=ff:ff:ff:ff:ff:ff),$arp],
b44a10b7 2261 [-generate],
e44768b7 2262 [5,101])
b44a10b7 2263OFPROTO_TRACE(
50aa28fd 2264 [ovs-dummy],
247527db 2265 [in_port(5),eth(src=50:54:00:00:00:07,dst=ff:ff:ff:ff:ff:ff),$arp],
b44a10b7 2266 [-generate],
e44768b7 2267 [4,101])
b44a10b7
BP
2268
2269# Check that the MAC learning entries were added.
83664f72 2270AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
b44a10b7 2271 port VLAN MAC Age
247527db
BP
2272 4 0 50:54:00:00:00:06 ?
2273 5 0 50:54:00:00:00:07 ?
b44a10b7
BP
2274])
2275
2276# Delete port p1 and see that its MAC learning entry disappeared, and
2277# that the MAC learning entry for the same MAC was also deleted from br1.
2278AT_CHECK([ovs-vsctl del-port p1])
83664f72 2279AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
b44a10b7 2280 port VLAN MAC Age
247527db 2281 2 0 50:54:00:00:00:05 ?
b44a10b7 2282])
83664f72 2283AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
b44a10b7 2284 port VLAN MAC Age
247527db 2285 5 0 50:54:00:00:00:07 ?
b44a10b7
BP
2286])
2287
2288OVS_VSWITCHD_STOP
2289AT_CLEANUP
17f7f7e0 2290
c4069512
BP
2291AT_SETUP([ofproto-dpif - MAC table overflow])
2292OVS_VSWITCHD_START(
ad28062f
BP
2293 [set bridge br0 fail-mode=standalone other-config:mac-table-size=10])
2294ADD_OF_PORTS([br0], 1, 2, 3)
c4069512
BP
2295
2296arp='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)'
2297
2298AT_CHECK([ovs-appctl time/stop])
2299
2300# Trace 10 ARP packets arriving on p3, to create MAC learning entries.
2301for i in 0 1 2 3 4 5 6 7 8 9; do
2302 OFPROTO_TRACE(
50aa28fd 2303 [ovs-dummy],
c4069512
BP
2304 [in_port(3),eth(src=50:54:00:00:00:0$i,dst=ff:ff:ff:ff:ff:ff),$arp],
2305 [-generate],
2306 [1,2,100])
2307 ovs-appctl time/warp 1000
2308done
2309
2310# Check for the MAC learning entries.
2311AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
2312 [0], [dnl
2313 3 0 50:54:00:00:00:00
2314 3 0 50:54:00:00:00:01
2315 3 0 50:54:00:00:00:02
2316 3 0 50:54:00:00:00:03
2317 3 0 50:54:00:00:00:04
2318 3 0 50:54:00:00:00:05
2319 3 0 50:54:00:00:00:06
2320 3 0 50:54:00:00:00:07
2321 3 0 50:54:00:00:00:08
2322 3 0 50:54:00:00:00:09
2323 port VLAN MAC Age
2324])
2325
2326# Trace another ARP packet on another MAC.
2327OFPROTO_TRACE(
50aa28fd 2328 [ovs-dummy],
c4069512
BP
2329 [in_port(3),eth(src=50:54:00:00:00:10,dst=ff:ff:ff:ff:ff:ff),$arp],
2330 [-generate],
2331 [1,2,100])
2332
2333# Check that the new one chased the oldest one out of the table.
2334AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/' | sort],
2335 [0], [dnl
2336 3 0 50:54:00:00:00:01 ?
2337 3 0 50:54:00:00:00:02 ?
2338 3 0 50:54:00:00:00:03 ?
2339 3 0 50:54:00:00:00:04 ?
2340 3 0 50:54:00:00:00:05 ?
2341 3 0 50:54:00:00:00:06 ?
2342 3 0 50:54:00:00:00:07 ?
2343 3 0 50:54:00:00:00:08 ?
2344 3 0 50:54:00:00:00:09 ?
2345 3 0 50:54:00:00:00:10 ?
2346 port VLAN MAC Age
2347])
2348OVS_VSWITCHD_STOP
2349AT_CLEANUP
2350
e731d71b
AS
2351# CHECK_SFLOW_SAMPLING_PACKET(LOOPBACK_ADDR, ADDR_WITHOUT_BRACKETS)
2352#
2353# Test that sFlow samples packets correctly using IPv4/IPv6 sFlow collector
2354#
2355# IP_VERSION_TYPE is used in AT_SETUP
2356m4_define([CHECK_SFLOW_SAMPLING_PACKET],
2357 [AT_SETUP([ofproto-dpif - sFlow packet sampling - $2 collector])
2358 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
2359
2360 ON_EXIT([kill `cat test-sflow.pid`])
2361 AT_CHECK([test-sflow --log-file --detach --no-chdir --pidfile 0:$1 > sflow.log], [0], [], [ignore])
2362 AT_CAPTURE_FILE([sflow.log])
2363 SFLOW_PORT=`parse_listening_port < test-sflow.log`
2364 ovs-appctl time/stop
2365
2366 ADD_OF_PORTS([br0], 1, 2)
2367 ovs-vsctl \
2368 set Interface br0 options:ifindex=1002 -- \
2369 set Interface p1 options:ifindex=1004 -- \
2370 set Interface p2 options:ifindex=1003 -- \
2371 set Bridge br0 sflow=@sf -- \
2372 --id=@sf create sflow targets=\"$1:$SFLOW_PORT\" \
9a9808d7 2373 header=128 sampling=1 polling=1 agent=$LOOPBACK_INTERFACE
e731d71b
AS
2374
2375 dnl open with ARP packets to seed the bridge-learning. The output
2376 dnl ifIndex numbers should be reported predictably after that.
2377 dnl Since we set sampling=1 we should see all of these packets
2378 dnl reported. Sorting the output by data-source and seqNo makes
2379 dnl it deterministic. Ensuring that we send at least two packets
2380 dnl into each port means we get to check the seq nos are
2381 dnl incrementing correctly.
2382 dnl because packets from different ports can be handled by separate
2383 dnl threads, put some sleeps
2384
2385 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)'
2386 sleep 1
2387 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)'
2388 sleep 1
2389 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)'
2390 sleep 1
2391 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)'
2392 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)'
2393
2394 dnl sleep long enough to get more than one counter sample
2395 dnl from each datasource so we can check sequence numbers
2396 for i in `seq 1 30`; do
2397 ovs-appctl time/warp 100
2398 done
2399 OVS_VSWITCHD_STOP
2400 ovs-appctl -t test-sflow exit
8073dd31 2401
e731d71b 2402 AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'HEADER|ERROR' | sed 's/ /\
8073dd31
NM
2403 /g']], [0], [dnl
2404HEADER
2405 dgramSeqNo=1
743cea45 2406 ds=127.0.0.1>2:1000
8073dd31
NM
2407 fsSeqNo=1
2408 in_vlan=0
2409 in_priority=0
2410 out_vlan=0
2411 out_priority=0
2412 meanSkip=1
2413 samplePool=1
2414 dropEvents=0
743cea45 2415 in_ifindex=1004
8073dd31
NM
2416 in_format=0
2417 out_ifindex=2
2418 out_format=2
2419 hdr_prot=1
2420 pkt_len=64
2421 stripped=4
2422 hdr_len=60
743cea45 2423 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
2424HEADER
2425 dgramSeqNo=1
743cea45 2426 ds=127.0.0.1>2:1000
8073dd31
NM
2427 fsSeqNo=2
2428 in_vlan=0
2429 in_priority=0
2430 out_vlan=0
2431 out_priority=0
2432 meanSkip=1
2433 samplePool=2
2434 dropEvents=0
2435 in_ifindex=1003
2436 in_format=0
743cea45
NM
2437 out_ifindex=2
2438 out_format=2
8073dd31
NM
2439 hdr_prot=1
2440 pkt_len=64
2441 stripped=4
2442 hdr_len=60
743cea45 2443 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
2444HEADER
2445 dgramSeqNo=1
743cea45 2446 ds=127.0.0.1>2:1000
8073dd31
NM
2447 fsSeqNo=3
2448 in_vlan=0
2449 in_priority=0
2450 out_vlan=0
2451 out_priority=0
2452 meanSkip=1
2453 samplePool=3
2454 dropEvents=0
743cea45 2455 in_ifindex=1004
8073dd31 2456 in_format=0
743cea45 2457 out_ifindex=1003
8073dd31
NM
2458 out_format=0
2459 hdr_prot=1
2460 pkt_len=64
2461 stripped=4
2462 hdr_len=60
743cea45 2463 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
2464HEADER
2465 dgramSeqNo=1
743cea45
NM
2466 ds=127.0.0.1>2:1000
2467 fsSeqNo=4
8073dd31
NM
2468 in_vlan=0
2469 in_priority=0
2470 out_vlan=0
2471 out_priority=0
2472 meanSkip=1
743cea45 2473 samplePool=4
8073dd31 2474 dropEvents=0
743cea45 2475 in_ifindex=1003
8073dd31 2476 in_format=0
743cea45
NM
2477 out_ifindex=1004
2478 out_format=0
8073dd31
NM
2479 hdr_prot=1
2480 pkt_len=64
2481 stripped=4
2482 hdr_len=60
743cea45 2483 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
2484HEADER
2485 dgramSeqNo=1
743cea45
NM
2486 ds=127.0.0.1>2:1000
2487 fsSeqNo=5
8073dd31
NM
2488 in_vlan=0
2489 in_priority=0
2490 out_vlan=0
2491 out_priority=0
2492 meanSkip=1
743cea45 2493 samplePool=5
8073dd31 2494 dropEvents=0
743cea45 2495 in_ifindex=1003
8073dd31 2496 in_format=0
743cea45 2497 out_ifindex=1004
8073dd31
NM
2498 out_format=0
2499 hdr_prot=1
2500 pkt_len=64
2501 stripped=4
2502 hdr_len=60
52105b67 2503 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
2504])
2505
e731d71b 2506 AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'IFCOUNTERS|ERROR' | head -6 | sed 's/ /\
8073dd31
NM
2507 /g']], [0], [dnl
2508IFCOUNTERS
2509 dgramSeqNo=2
2510 ds=127.0.0.1>0:1002
2511 csSeqNo=1
2512 ifindex=1002
2513 type=6
2514 ifspeed=100000000
2515 direction=0
2516 status=3
2517 in_octets=0
2518 in_unicasts=0
2519 in_multicasts=0
2520 in_broadcasts=4294967295
2521 in_discards=0
2522 in_errors=0
2523 in_unknownprotos=4294967295
2524 out_octets=120
2525 out_unicasts=2
2526 out_multicasts=4294967295
2527 out_broadcasts=4294967295
2528 out_discards=0
2529 out_errors=0
2530 promiscuous=0
2531IFCOUNTERS
2532 dgramSeqNo=2
2533 ds=127.0.0.1>0:1003
2534 csSeqNo=1
2535 ifindex=1003
2536 type=6
2537 ifspeed=100000000
2538 direction=0
2539 status=0
52105b67 2540 in_octets=138
8073dd31
NM
2541 in_unicasts=3
2542 in_multicasts=0
2543 in_broadcasts=4294967295
2544 in_discards=0
2545 in_errors=0
2546 in_unknownprotos=4294967295
2547 out_octets=120
2548 out_unicasts=2
2549 out_multicasts=4294967295
2550 out_broadcasts=4294967295
2551 out_discards=0
2552 out_errors=0
2553 promiscuous=0
2554IFCOUNTERS
2555 dgramSeqNo=2
2556 ds=127.0.0.1>0:1004
2557 csSeqNo=1
2558 ifindex=1004
2559 type=6
2560 ifspeed=100000000
2561 direction=0
2562 status=0
2563 in_octets=84
2564 in_unicasts=2
2565 in_multicasts=0
2566 in_broadcasts=4294967295
2567 in_discards=0
2568 in_errors=0
2569 in_unknownprotos=4294967295
2570 out_octets=180
2571 out_unicasts=3
2572 out_multicasts=4294967295
2573 out_broadcasts=4294967295
2574 out_discards=0
2575 out_errors=0
2576 promiscuous=0
2577IFCOUNTERS
2578 dgramSeqNo=3
2579 ds=127.0.0.1>0:1002
2580 csSeqNo=2
2581 ifindex=1002
2582 type=6
2583 ifspeed=100000000
2584 direction=0
2585 status=3
2586 in_octets=0
2587 in_unicasts=0
2588 in_multicasts=0
2589 in_broadcasts=4294967295
2590 in_discards=0
2591 in_errors=0
2592 in_unknownprotos=4294967295
2593 out_octets=120
2594 out_unicasts=2
2595 out_multicasts=4294967295
2596 out_broadcasts=4294967295
2597 out_discards=0
2598 out_errors=0
2599 promiscuous=0
2600IFCOUNTERS
2601 dgramSeqNo=3
2602 ds=127.0.0.1>0:1003
2603 csSeqNo=2
2604 ifindex=1003
2605 type=6
2606 ifspeed=100000000
2607 direction=0
2608 status=0
52105b67 2609 in_octets=138
8073dd31
NM
2610 in_unicasts=3
2611 in_multicasts=0
2612 in_broadcasts=4294967295
2613 in_discards=0
2614 in_errors=0
2615 in_unknownprotos=4294967295
2616 out_octets=120
2617 out_unicasts=2
2618 out_multicasts=4294967295
2619 out_broadcasts=4294967295
2620 out_discards=0
2621 out_errors=0
2622 promiscuous=0
2623IFCOUNTERS
2624 dgramSeqNo=3
2625 ds=127.0.0.1>0:1004
2626 csSeqNo=2
2627 ifindex=1004
2628 type=6
2629 ifspeed=100000000
2630 direction=0
2631 status=0
2632 in_octets=84
2633 in_unicasts=2
2634 in_multicasts=0
2635 in_broadcasts=4294967295
2636 in_discards=0
2637 in_errors=0
2638 in_unknownprotos=4294967295
2639 out_octets=180
2640 out_unicasts=3
2641 out_multicasts=4294967295
2642 out_broadcasts=4294967295
2643 out_discards=0
2644 out_errors=0
2645 promiscuous=0
2646])
e731d71b 2647 AT_CLEANUP])
17f7f7e0 2648
e731d71b
AS
2649CHECK_SFLOW_SAMPLING_PACKET([127.0.0.1], [IPv4])
2650CHECK_SFLOW_SAMPLING_PACKET([[[::1]]], [IPv6])
1e04fcc8 2651
e731d71b
AS
2652# CHECK_NETFLOW_EXPIRATION(LOOPBACK_ADDR, IP_VERSION_TYPE)
2653#
2654# Test that basic NetFlow reports flow statistics correctly:
2655# The initial packet of a flow are correctly accounted.
2656# Later packets within a flow are correctly accounted.
2657# Flow actions changing (in this case, due to MAC learning)
2658# cause a record to be sent.
2659#
2660# IP_VERSION_TYPE is used in AT_SETUP
2661m4_define([CHECK_NETFLOW_EXPIRATION],
2662 [AT_SETUP([ofproto-dpif - NetFlow flow expiration - $2 collector])
2663 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
2664 ADD_OF_PORTS([br0], 1, 2)
2665
2666 ovs-appctl time/stop
2667 ON_EXIT([kill `cat test-netflow.pid`])
2668 AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
2669 AT_CAPTURE_FILE([netflow.log])
2670 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
2671
2672 ovs-vsctl \
2673 set Bridge br0 netflow=@nf -- \
2674 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
2675 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
2676
2677 for delay in 1000 30000; do
2678 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)'
2679 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)'
2680
2681 ovs-appctl time/warp $delay
2682 done
17f7f7e0 2683
e731d71b
AS
2684 ovs-appctl time/warp 6000
2685 sleep 1
2686 OVS_VSWITCHD_STOP
2687 ovs-appctl -t test-netflow exit
e79a6c83 2688
e731d71b 2689 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 2690
e731d71b 2691 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 2692
e731d71b
AS
2693 combined=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 2 pkts, 120 bytes, ICMP 0:0" netflow.log | wc -l`
2694 separate=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 1 pkts, 60 bytes, ICMP 0:0" netflow.log | wc -l`
2695 AT_CHECK([test $separate = 2 || test $combined = 1], [0])
17f7f7e0 2696
e731d71b 2697 AT_CLEANUP])
17f7f7e0 2698
e731d71b
AS
2699CHECK_NETFLOW_EXPIRATION([127.0.0.1], [IPv4])
2700CHECK_NETFLOW_EXPIRATION([[[::1]]], [IPv6])
1e04fcc8 2701
e731d71b
AS
2702# CHECK_NETFLOW_ACTIVE_EXPIRATION(LOOPBACK_ADDR, IP_VERSION_TYPE)
2703#
2704# Test that basic NetFlow reports active expirations correctly.
2705#
2706# IP_VERSION_TYPE is used in AT_SETUP
2707m4_define([CHECK_NETFLOW_ACTIVE_EXPIRATION],
2708 [AT_SETUP([ofproto-dpif - NetFlow active expiration - $2 collector])
1e04fcc8 2709
e731d71b
AS
2710 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
2711 ADD_OF_PORTS([br0], 1, 2)
17f7f7e0 2712
e731d71b
AS
2713 ON_EXIT([kill `cat test-netflow.pid`])
2714 AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
2715 AT_CAPTURE_FILE([netflow.log])
2716 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
17f7f7e0 2717
e731d71b
AS
2718 ovs-vsctl \
2719 set Bridge br0 netflow=@nf -- \
2720 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
2721 engine_id=1 engine_type=2 active_timeout=10 add-id-to-interface=false
17f7f7e0 2722
e731d71b
AS
2723 AT_CHECK([ovs-appctl time/stop])
2724 n=1
2725 while test $n -le 60; do
2726 n=`expr $n + 1`
17f7f7e0 2727
e731d71b
AS
2728 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)'
2729 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 2730
e731d71b
AS
2731 ovs-appctl time/warp 1000
2732 done
17f7f7e0 2733
e731d71b
AS
2734 ovs-appctl time/warp 10000
2735
2736 sleep 1
2737 OVS_VSWITCHD_STOP
2738 ovs-appctl -t test-netflow exit
2739
2740 # Count the number of reported packets:
2741 # - From source to destination before MAC learning kicks in (just one).
2742 # - From source to destination after that.
2743 # - From destination to source.
2744 n_learn=0
2745 n_in=0
2746 n_out=0
2747 n_other=0
2748 n_recs=0
2749 none=0
2750 while read line; do
2751 pkts=`echo "$line" | sed 's/.*, \([[0-9]]*\) pkts,.*/\1/'`
2752 case $pkts in
2753 [[0-9]]*) ;;
2754 *) continue ;;
2755 esac
2756
2757 case $line in
2758 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 65535, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
2759 counter=n_learn
2760 ;;
2761 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 2, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
2762 counter=n_in
2763 ;;
2764 "seq "*": 192.168.0.2 > 192.168.0.1, if 2 > 1, "*" pkts, "*" bytes, TCP 80 > 1234, time "*)
2765 counter=n_out
2766 ;;
2767 *)
2768 counter=n_other
2769 ;;
2770 esac
2771 eval $counter=\`expr \$$counter + \$pkts\`
2772 n_recs=`expr $n_recs + 1`
2773 done < netflow.log
2774
2775 # There should be exactly 1 MAC learning packet,
2776 # exactly 59 other packets in that direction,
2777 # and exactly 60 packets in the other direction.
2778 AT_CHECK([echo $n_learn $n_in $n_out $n_other], [0], [1 59 60 0
2779])
2780
2781 AT_CLEANUP])
2782
2783CHECK_NETFLOW_ACTIVE_EXPIRATION([127.0.0.1], [IPv4])
2784CHECK_NETFLOW_ACTIVE_EXPIRATION([[[::1]]], [IPv6])
f27f2134 2785
23a7d252
JS
2786AT_SETUP([ofproto-dpif - flow stats])
2787OVS_VSWITCHD_START
2788AT_CHECK([ovs-ofctl add-flow br0 "ip,actions=NORMAL"])
2789AT_CHECK([ovs-ofctl add-flow br0 "icmp,actions=NORMAL"])
2790
2791ovs-appctl time/stop
2792
2793for i in `seq 1 10`; do
2794 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)'
2795done
2796
2797ovs-appctl time/warp 1000
2798
e96a5c24 2799AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
11f9de00 2800AT_CHECK([STRIP_XIDS stdout | sed -n 's/duration=[[0-9]]*\.[[0-9]]*s/duration=0.0s/p' | sort], [0], [dnl
e96a5c24 2801 cookie=0x0, duration=0.0s, table=0, n_packets=0, n_bytes=0, idle_age=1, icmp actions=NORMAL
11f9de00 2802 cookie=0x0, duration=0.0s, table=0, n_packets=10, n_bytes=600, idle_age=1, ip actions=NORMAL
e96a5c24
JS
2803])
2804OVS_VSWITCHD_STOP
2805AT_CLEANUP
2806
2807AT_SETUP([ofproto-dpif - flow stats, set-n-threads])
2808OVS_VSWITCHD_START
2809AT_CHECK([ovs-ofctl add-flow br0 "ip,actions=NORMAL"])
2810AT_CHECK([ovs-ofctl add-flow br0 "icmp,actions=NORMAL"])
2811
2812ovs-appctl time/stop
2813
2814for i in `seq 1 10`; do
2815 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)'
2816done
2817
2818ovs-appctl time/warp 100
2819AT_CHECK([ovs-vsctl set Open_vSwitch . other-config:n-revalidator-threads=2])
2820ovs-appctl time/warp 1000
2821
23a7d252 2822AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
11f9de00 2823AT_CHECK([STRIP_XIDS stdout | sed -n 's/duration=[[0-9]]*\.[[0-9]]*s/duration=0.0s/p' | sort], [0], [dnl
23a7d252 2824 cookie=0x0, duration=0.0s, table=0, n_packets=0, n_bytes=0, idle_age=1, icmp actions=NORMAL
11f9de00 2825 cookie=0x0, duration=0.0s, table=0, n_packets=10, n_bytes=600, idle_age=1, ip actions=NORMAL
23a7d252
JS
2826])
2827OVS_VSWITCHD_STOP
2828AT_CLEANUP
2829
f27f2134
BP
2830AT_SETUP([idle_age and hard_age increase over time])
2831OVS_VSWITCHD_START
2832
2833# get_ages DURATION HARD IDLE
2834#
2835# Fetch the flow duration, hard age, and idle age into the variables
2836# whose names are given as arguments. Rounds DURATION down to the
2837# nearest integer. If hard_age doesn't appear in the output, sets
2838# HARD to "none". If idle_age doesn't appear in the output, sets IDLE
2839# to 0.
2840get_ages () {
2841 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
2842
2843 duration=`sed -n 's/.*duration=\([[0-9]]*\)\(\.[[0-9]]*\)\{0,1\}s.*/\1/p' stdout`
2844 AT_CHECK([[expr X"$duration" : 'X[0-9][0-9]*$']], [0], [ignore])
2845 AS_VAR_COPY([$1], [duration])
2846
2847 hard=`sed -n 's/.*hard_age=\([[0-9]]*\),.*/\1/p' stdout`
2848 if test X"$hard" = X; then
2849 hard=none
2850 else
2851 AT_CHECK([[expr X"$hard" : 'X[0-9][0-9]*$']], [0], [ignore])
2852 fi
2853 AS_VAR_COPY([$2], [hard])
2854
2855 idle=`sed -n 's/.*idle_age=\([[0-9]]*\),.*/\1/p' stdout`
2856 if test X"$idle" = X; then
2857 idle=0
2858 else
2859 AT_CHECK([[expr X"$idle" : 'X[0-9][0-9]*$']], [0], [ignore])
2860 fi
2861 AS_VAR_COPY([$3], [idle])
2862}
2863
2864# Add a flow and get its initial hard and idle age.
2865AT_CHECK([ovs-ofctl add-flow br0 hard_timeout=199,idle_timeout=188,actions=drop])
2866get_ages duration1 hard1 idle1
2867
31ef9f51 2868ovs-appctl time/stop
f27f2134
BP
2869# Warp time forward by 10 seconds, then modify the flow's actions.
2870ovs-appctl time/warp 10000
2871get_ages duration2 hard2 idle2
2872AT_CHECK([ovs-ofctl mod-flows br0 actions=flood])
2873
2874# Warp time forward by 10 seconds.
2875ovs-appctl time/warp 10000
2876get_ages duration3 hard3 idle3
2877
2878# Warp time forward 10 more seconds, then pass some packets through the flow,
2879# then warp forward a few more times because idle times are only updated
2880# occasionally.
2881ovs-appctl time/warp 10000
2882ovs-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)'
2883ovs-appctl time/warp 1000
2884ovs-appctl time/warp 1000
2885ovs-appctl time/warp 1000
2886get_ages duration4 hard4 idle4
2887
2888printf "duration: %4s => %4s => %4s => %4s\n" $duration1 $duration2 $duration3 $duration4
2889printf "hard_age: %4s => %4s => %4s => %4s\n" $hard1 $hard2 $hard3 $hard4
2890printf "idle_age: %4s => %4s => %4s => %4s\n" $idle1 $idle2 $idle3 $idle4
2891
2892# Duration should increase steadily over time.
2893AT_CHECK([test $duration1 -lt $duration2])
2894AT_CHECK([test $duration2 -lt $duration3])
2895AT_CHECK([test $duration3 -lt $duration4])
2896
2897# Hard age should be "none" initially because it's the same as flow_duration,
2898# then it should increase.
2899AT_CHECK([test $hard1 = none])
2900AT_CHECK([test $hard2 = none])
2901AT_CHECK([test $hard3 != none])
2902AT_CHECK([test $hard4 != none])
2903AT_CHECK([test $hard3 -lt $hard4])
2904
2905# Idle age should increase from 1 to 2 to 3, then decrease.
2906AT_CHECK([test $idle1 -lt $idle2])
2907AT_CHECK([test $idle2 -lt $idle3])
2908AT_CHECK([test $idle3 -gt $idle4])
2909
2910# Check some invariant relationships.
2911AT_CHECK([test $duration1 = $idle1])
2912AT_CHECK([test $duration2 = $idle2])
2913AT_CHECK([test $duration3 = $idle3])
2914AT_CHECK([test $idle3 -gt $hard3])
2915AT_CHECK([test $idle4 -lt $hard4])
2916AT_CHECK([test $hard4 -lt $duration4])
2917
2918OVS_VSWITCHD_STOP
2919AT_CLEANUP
0e553d9c
BP
2920
2921AT_SETUP([ofproto-dpif - fin_timeout])
2922OVS_VSWITCHD_START
2923AT_DATA([flows.txt], [dnl
2924in_port=1 actions=output:2
2925in_port=2 actions=mod_vlan_vid:17,output:1
2926])
2927AT_CHECK([ovs-ofctl add-flow br0 'idle_timeout=60,actions=fin_timeout(idle_timeout=5)'])
2928AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
2929[NXST_FLOW reply:
2930 idle_timeout=60, actions=fin_timeout(idle_timeout=5)
2931])
31ef9f51
AW
2932
2933ovs-appctl time/stop
0e553d9c
BP
2934# Check that a TCP SYN packet does not change the timeout. (Because
2935# flow stats updates are mainly what implements the fin_timeout
2936# feature, we warp forward a couple of times to ensure that flow stats
2937# run before re-checking the flow table.)
323cc924 2938AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f908004500003c2e2440004006465dac11370dac11370b828b0016751e267b00000000a00216d017360000020405b40402080a2d25085f0000000001030307])
0e553d9c
BP
2939AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
2940warped
2941])
2942AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
2943[NXST_FLOW reply:
2944 n_packets=1, n_bytes=74, idle_timeout=60, actions=fin_timeout(idle_timeout=5)
2945])
2946# Check that a TCP FIN packet does change the timeout.
323cc924 2947AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f90800451000342e3e40004006463bac11370dac11370b828b0016751e319dfc96399b801100717ae800000101080a2d250a9408579588])
0e553d9c
BP
2948AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
2949warped
2950])
2951AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
2952[NXST_FLOW reply:
2953 n_packets=2, n_bytes=140, idle_timeout=5, actions=fin_timeout(idle_timeout=5)
2954])
2955OVS_VSWITCHD_STOP
2956AT_CLEANUP
27022416
JP
2957
2958AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-dps])
2959OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
2960ADD_OF_PORTS([br0], [1], [2])
2961ADD_OF_PORTS([br1], [3])
2962
2963AT_CHECK([ovs-appctl dpif/dump-dps], [0], [dnl
2964dummy@br0
2965dummy@br1
2966])
2967OVS_VSWITCHD_STOP
2968AT_CLEANUP
2969
2970AT_SETUP([ofproto-dpif - ovs-appctl dpif/show])
2971OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
2972ADD_OF_PORTS([br0], [1], [2])
2973ADD_OF_PORTS([br1], [3])
2974
2975AT_CHECK([ovs-appctl dpif/show], [0], [dnl
dc54ef36 2976dummy@ovs-dummy: hit:0 missed:0
e79a6c83 2977 br0:
dc54ef36
EJ
2978 br0 65534/100: (dummy)
2979 p1 1/1: (dummy)
2980 p2 2/2: (dummy)
e79a6c83 2981 br1:
dc54ef36
EJ
2982 br1 65534/101: (dummy)
2983 p3 3/3: (dummy)
27022416
JP
2984])
2985OVS_VSWITCHD_STOP
2986AT_CLEANUP
2987
2988AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows])
2989OVS_VSWITCHD_START([add-br br1 -- \
2990 set bridge br1 datapath-type=dummy fail-mode=secure])
2991ADD_OF_PORTS([br0], [1], [2])
2992ADD_OF_PORTS([br1], [3])
2993
323cc924
BP
2994AT_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)'])
2995AT_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)'])
2996AT_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
2997
2998AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
1b849273
JS
2999skb_priority(0),in_port(1),eth_type(0x0800),ipv4(src=192.168.0.1/0.0.0.0,dst=192.168.0.2/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions:userspace(pid=0,slow_path(controller))
3000skb_priority(0),in_port(2),eth_type(0x0800),ipv4(src=192.168.0.2/0.0.0.0,dst=192.168.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions:userspace(pid=0,slow_path(controller))
27022416
JP
3001])
3002
3003AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
1b849273 3004skb_priority(0),in_port(3),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions:userspace(pid=0,slow_path(controller))
27022416
JP
3005])
3006
04b541df
GS
3007AT_CHECK([ovs-appctl dpif/dump-flows -m br0 | sort | STRIP_USED], [0], [dnl
3008skb_priority(0),skb_mark(0/0),in_port(p1),eth(src=50:54:00:00:00:05/00:00:00:00:00:00,dst=50:54:00:00:00:07/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=192.168.0.1/0.0.0.0,dst=192.168.0.2/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), packets:0, bytes:0, used:never, actions:userspace(pid=0,slow_path(controller))
3009skb_priority(0),skb_mark(0/0),in_port(p2),eth(src=50:54:00:00:00:07/00:00:00:00:00:00,dst=50:54:00:00:00:05/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=192.168.0.2/0.0.0.0,dst=192.168.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=0/0,code=0/0), packets:0, bytes:0, used:never, actions:userspace(pid=0,slow_path(controller))
3010])
3011
3012AT_CHECK([ovs-appctl dpif/dump-flows -m br1 | sort | STRIP_USED], [0], [dnl
3013skb_priority(0),skb_mark(0/0),in_port(p3),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), packets:0, bytes:0, used:never, actions:userspace(pid=0,slow_path(controller))
3014])
3015
27022416
JP
3016OVS_VSWITCHD_STOP
3017AT_CLEANUP
3018
8bfd0fda
BP
3019AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows - MPLS actions that result in a userspace action])
3020OVS_VSWITCHD_START([dnl
3021 add-port br0 p1 -- set Interface p1 type=dummy
3022])
3023ON_EXIT([kill `cat ovs-ofctl.pid`])
3024
3025AT_CAPTURE_FILE([ofctl_monitor.log])
3026AT_DATA([flows.txt], [dnl
3027dl_src=60:66:66:66:66:00 actions=push_mpls:0x8847,controller
3028dl_src=60:66:66:66:66:01 actions=pop_mpls:0x8849,controller
3029])
3030AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3031
3032dnl Packet is sent to userspace because a MPLS push or pop action is applied to
47fb7f71 3033dnl a packet with 2 MPLS LSEs but dpif-netdev can't handle any labels.
8bfd0fda 3034dnl
47fb7f71 3035dnl The input is a frame with two MPLS labels which tcpdump -vve shows as:
8bfd0fda 3036dnl 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
3037dnl (label 20, exp 0, [S], ttl 32)
3038dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44, bad cksum 3b78 (->f978)!)
3039dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
3040
3041for dl_src in 00 01; do
47fb7f71 3042 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
3043
3044 AT_CHECK_UNQUOTED([ovs-appctl dpif/dump-flows br0 | grep ":$dl_src/" | STRIP_USED], [0], [dnl
47fb7f71 3045skb_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
3046])
3047done
3048
3049OVS_VSWITCHD_STOP
3050AT_CLEANUP
3051
3052
3053AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows - MPLS actions that result in a drop])
3054OVS_VSWITCHD_START([dnl
3055 add-port br0 p1 -- set Interface p1 type=dummy
3056])
3057ON_EXIT([kill `cat ovs-ofctl.pid`])
3058
3059AT_CAPTURE_FILE([ofctl_monitor.log])
3060AT_DATA([flows.txt], [dnl
3061dl_src=60:66:66:66:66:00 actions=push_mpls:0x8847,controller
3062dl_src=60:66:66:66:66:01 actions=pop_mpls:0x8849,controller
3063])
3064AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3065
3066dnl Packet is dropped because an MPLS PUSH action is applied to a packet with
3067dnl 4 MPLS LSEs but ovs-vswtichd can only handle up to 3 MPLS LSEs and thus
47fb7f71 3068dnl can't determine the resulting MPLS label after MPLS push/pop actions.
8bfd0fda
BP
3069dnl
3070dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
3071dnl 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)
3072dnl (label 20, exp 0, ttl 32)
3073dnl (label 20, exp 0, ttl 32)
3074dnl (label 20, exp 0, [S], ttl 32)
3075dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44, bad cksum 3b78 (->f978)!)
3076dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
8bfd0fda 3077
47fb7f71
JS
3078for dl_src in 00 01; do
3079 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"])
3080
3081 AT_CHECK_UNQUOTED([ovs-appctl dpif/dump-flows br0 | grep ":$dl_src/" | STRIP_USED], [0], [dnl
3082skb_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 3083])
47fb7f71 3084done
8bfd0fda
BP
3085
3086OVS_VSWITCHD_STOP
3087AT_CLEANUP
3088
0a740f48
EJ
3089AT_SETUP([ofproto-dpif - patch ports])
3090OVS_VSWITCHD_START([add-br br1 \
3091-- set bridge br1 datapath-type=dummy fail-mode=secure \
3092-- add-port br1 pbr1 -- set int pbr1 type=patch options:peer=pbr0 \
3093-- add-port br0 pbr0 -- set int pbr0 type=patch options:peer=pbr1])
3094
3095ADD_OF_PORTS([br0], [2])
3096ADD_OF_PORTS([br1], [3])
3097
aef0491b 3098AT_CHECK([ovs-appctl time/stop])
9fc0165a 3099
0a740f48
EJ
3100AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
3101AT_CHECK([ovs-ofctl add-flow br1 actions=LOCAL,output:1,output:3])
3102
3103for i in $(seq 1 10); do
3104 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
3105 if [[ $i -eq 1 ]]; then
3106 sleep 1
3107 fi
0a740f48
EJ
3108done
3109
3110for i in $(seq 1 5); do
3111 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
3112 if [[ $i -eq 1 ]]; then
3113 sleep 1
3114 fi
0a740f48
EJ
3115done
3116
0a8763fc
EJ
3117AT_CHECK([ovs-appctl time/warp 500], [0],
3118[warped
735d7efb
AZ
3119])
3120
0a740f48 3121AT_CHECK([ovs-appctl dpif/show], [0], [dnl
dc54ef36 3122dummy@ovs-dummy: hit:13 missed:2
e79a6c83 3123 br0:
dc54ef36
EJ
3124 br0 65534/100: (dummy)
3125 p2 2/2: (dummy)
3126 pbr0 1/none: (patch: peer=pbr1)
e79a6c83 3127 br1:
dc54ef36
EJ
3128 br1 65534/101: (dummy)
3129 p3 3/3: (dummy)
3130 pbr1 1/none: (patch: peer=pbr0)
0a740f48
EJ
3131])
3132
3133AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
54bb0348 3134skb_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
3135]),
3136AT_CHECK([ovs-appctl dpif/dump-flows br1 | STRIP_USED], [0], [dnl
54bb0348 3137skb_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
3138])
3139
3140AT_CHECK([ovs-ofctl dump-ports br0 pbr0], [0], [dnl
3141OFPST_PORT reply (xid=0x4): 1 ports
3142 port 1: rx pkts=5, bytes=300, drop=0, errs=0, frame=0, over=0, crc=0
3143 tx pkts=10, bytes=600, drop=0, errs=0, coll=0
3144])
3145
3146AT_CHECK([ovs-ofctl dump-ports br1 pbr1], [0], [dnl
3147OFPST_PORT reply (xid=0x4): 1 ports
3148 port 1: rx pkts=10, bytes=600, drop=0, errs=0, frame=0, over=0, crc=0
3149 tx pkts=5, bytes=300, drop=0, errs=0, coll=0
3150])
3151
3152OVS_VSWITCHD_STOP
3153AT_CLEANUP
655ab909 3154
65e0be10
BP
3155AT_SETUP([ofproto-dpif - port duration])
3156OVS_VSWITCHD_START([set Bridge br0 protocols=OpenFlow13])
3157ADD_OF_PORTS([br0], 1, 2)
3158
31ef9f51 3159ovs-appctl time/stop
65e0be10
BP
3160ovs-appctl time/warp 10000
3161
3162AT_CHECK([ovs-ofctl -O openflow13 dump-ports br0], [0], [stdout])
125bf01d 3163AT_CHECK([sed -n 's/=[[0-9]][[0-9]]\(\.[[0-9]][[0-9]]*\)\{0,1\}s/=?s/p' stdout], [0],
65e0be10 3164[dnl
65e0be10 3165 duration=?s
65e0be10 3166 duration=?s
65e0be10
BP
3167 duration=?s
3168])
3169OVS_VSWITCHD_STOP
3170AT_CLEANUP
bcd2633a
JP
3171
3172dnl ----------------------------------------------------------------------
3173AT_BANNER([ofproto-dpif -- megaflows])
3174
bcd2633a
JP
3175AT_SETUP([ofproto-dpif megaflow - port classification])
3176OVS_VSWITCHD_START
3177ADD_OF_PORTS([br0], [1], [2])
3178AT_DATA([flows.txt], [dnl
3179table=0 in_port=1 actions=output(2)
3180])
3181AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3182AT_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)'])
3183AT_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 3184sleep 1
2c0ea78f
GS
3185AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3186skb_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
3187])
3188OVS_VSWITCHD_STOP
3189AT_CLEANUP
3190
3191AT_SETUP([ofproto-dpif megaflow - L2 classification])
3192OVS_VSWITCHD_START
3193ADD_OF_PORTS([br0], [1], [2])
3194AT_DATA([flows.txt], [dnl
3195table=0 in_port=1,dl_src=50:54:00:00:00:09 actions=output(2)
3196])
3197AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3198AT_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)'])
3199AT_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 3200sleep 1
2c0ea78f 3201AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
1b849273
JS
3202skb_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>
3203skb_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
3204])
3205OVS_VSWITCHD_STOP
3206AT_CLEANUP
3207
3208AT_SETUP([ofproto-dpif megaflow - L3 classification])
3209OVS_VSWITCHD_START
3210ADD_OF_PORTS([br0], [1], [2])
13751fd8 3211AT_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
3212AT_DATA([flows.txt], [dnl
3213table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=output(2)
3214])
3215AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3216AT_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)'])
3217AT_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 3218sleep 1
2c0ea78f 3219AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
1b849273
JS
3220skb_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>
3221skb_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
3222])
3223OVS_VSWITCHD_STOP
3224AT_CLEANUP
3225
13751fd8
JR
3226AT_SETUP([ofproto-dpif megaflow - IPv6 classification])
3227OVS_VSWITCHD_START
3228ADD_OF_PORTS([br0], [1], [2])
3229AT_CHECK([ovs-vsctl set Bridge br0 flow_tables:0=@N1 -- --id=@N1 create Flow_Table name=t0 prefixes=ipv6_dst,ipv6_src], [0], [ignore], [])
3230AT_DATA([flows.txt], [dnl
3231table=0 in_port=1,ipv6,ipv6_src=2001:db8:3c4d:1:2:3:4:5 actions=output(2)
3232])
3233AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3234AT_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)'])
3235AT_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 3236sleep 1
13751fd8 3237AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
1b849273
JS
3238skb_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>
3239skb_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
3240])
3241OVS_VSWITCHD_STOP
3242AT_CLEANUP
3243
bcd2633a
JP
3244AT_SETUP([ofproto-dpif megaflow - L4 classification])
3245OVS_VSWITCHD_START
3246ADD_OF_PORTS([br0], [1], [2])
3247AT_DATA([flows.txt], [dnl
3248table=0 in_port=1,icmp,icmp_type=8 actions=output(2)
3249])
3250AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3251AT_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)'])
3252AT_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
3253AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3254skb_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
3255])
3256OVS_VSWITCHD_STOP
3257AT_CLEANUP
3258
3259AT_SETUP([ofproto-dpif megaflow - normal])
3260OVS_VSWITCHD_START
3261ADD_OF_PORTS([br0], [1], [2])
3262AT_CHECK([ovs-ofctl add-flow br0 action=normal])
3263AT_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)'])
3264AT_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 3265sleep 1
2c0ea78f 3266AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
1b849273
JS
3267skb_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>
3268skb_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
3269])
3270OVS_VSWITCHD_STOP
3271AT_CLEANUP
3272
3273AT_SETUP([ofproto-dpif megaflow - mpls])
3274OVS_VSWITCHD_START
3275ADD_OF_PORTS([br0], [1], [2])
3276AT_DATA([flows.txt], [dnl
3277table=0 dl_src=50:54:00:00:00:09 actions=push_mpls:0x8847,2
3278table=0 dl_src=50:54:00:00:00:0b actions=pop_mpls:0x0800,2
3279])
3280AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3281AT_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)'])
3282AT_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 3283sleep 1
2c0ea78f 3284AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
1b849273
JS
3285skb_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>
3286skb_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
3287])
3288OVS_VSWITCHD_STOP
3289AT_CLEANUP
3290
e731d71b
AS
3291# CHECK_MEGAFLOW_NETFLOW(LOOPBACK_ADDR, IP_VERSION_TYPE)
3292#
3293# IP_VERSION_TYPE is used in AT_SETUP
3294m4_define([CHECK_MEGAFLOW_NETFLOW],
3295 [AT_SETUP([ofproto-dpif megaflow - netflow - $2 collector])
3296 OVS_VSWITCHD_START
3297 ADD_OF_PORTS([br0], [1], [2])
3298
3299 dnl NetFlow configuration disables wildcarding relevant fields
3300 ON_EXIT([kill `cat test-netflow.pid`])
3301 AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
3302 AT_CAPTURE_FILE([netflow.log])
3303 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
3304 ovs-vsctl \
3305 set Bridge br0 netflow=@nf -- \
3306 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
3307 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
3308
3309 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
3310 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)'])
3311 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)'])
3312 sleep 1
3313 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
1b849273
JS
3314skb_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>
3315skb_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 3316])
e731d71b
AS
3317 OVS_VSWITCHD_STOP
3318 AT_CLEANUP])
3319
3320CHECK_MEGAFLOW_NETFLOW([127.0.0.1], [IPv4])
3321CHECK_MEGAFLOW_NETFLOW([[[::1]]], [IPv6])
bcd2633a
JP
3322
3323AT_SETUP([ofproto-dpif megaflow - normal, active-backup bonding])
3324OVS_VSWITCHD_START(
3325 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
3326 add-bond br0 bond0 p2 p3 bond_mode=active-backup -- \
3327 set interface p2 type=dummy ofport_request=2 -- \
3328 set interface p3 type=dummy ofport_request=3])
3329AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
3330])
3331
3332AT_CHECK([ovs-ofctl add-flow br0 action=normal])
3333AT_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)'])
3334AT_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 3335sleep 1
2c0ea78f 3336AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
1b849273
JS
3337skb_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>
3338skb_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
3339])
3340OVS_VSWITCHD_STOP
3341AT_CLEANUP
3342
3343AT_SETUP([ofproto-dpif megaflow - normal, balance-slb bonding])
3344OVS_VSWITCHD_START(
3345 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
3346 add-bond br0 bond0 p2 p3 bond_mode=balance-slb -- \
3347 set interface p2 type=dummy ofport_request=2 -- \
3348 set interface p3 type=dummy ofport_request=3])
3349AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
3350])
3351
3352AT_CHECK([ovs-ofctl add-flow br0 action=normal])
3353AT_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)'])
3354AT_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 3355sleep 1
2c0ea78f 3356AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
1b849273
JS
3357skb_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>
3358skb_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
3359])
3360OVS_VSWITCHD_STOP
3361AT_CLEANUP
3362
3363AT_SETUP([ofproto-dpif megaflow - normal, balance-tcp bonding])
3364# Create bond0 on br0 with interfaces p0 and p1
3365# and bond1 on br1 with interfaces p2 and p3
3366# with p0 patched to p2 and p1 patched to p3.
3367OVS_VSWITCHD_START(
3368 [add-bond br0 bond0 p0 p1 bond_mode=balance-tcp lacp=active \
3369 other-config:lacp-time=fast \
3370 other-config:bond-rebalance-interval=0 -- \
3371 set interface p0 type=patch options:peer=p2 ofport_request=1 -- \
3372 set interface p1 type=patch options:peer=p3 ofport_request=2 -- \
3373 add-br br1 -- \
3374 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
3375 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
3376 fail-mode=secure -- \
3377 add-bond br1 bond1 p2 p3 bond_mode=balance-tcp lacp=active \
3378 other-config:lacp-time=fast \
3379 other-config:bond-rebalance-interval=0 -- \
3380 set interface p2 type=patch options:peer=p0 ofport_request=3 -- \
3381 set interface p3 type=patch options:peer=p1 ofport_request=4 --])
3382
3383AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
3384])
3385ADD_OF_PORTS([br0], [7])
3386AT_CHECK([ovs-ofctl add-flow br0 action=normal])
3387AT_CHECK([ovs-ofctl add-flow br1 action=normal])
31ef9f51 3388ovs-appctl time/stop
bcd2633a
JP
3389ovs-appctl time/warp 5000
3390AT_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)'])
3391AT_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 3392sleep 1
2c0ea78f 3393AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
1b849273
JS
3394skb_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>
3395skb_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
3396])
3397OVS_VSWITCHD_STOP
3398AT_CLEANUP
3399
3400AT_SETUP([ofproto-dpif megaflow - resubmit port action])
3401OVS_VSWITCHD_START
3402ADD_OF_PORTS([br0], [1], [2])
3403AT_DATA([flows.txt], [dnl
3404table=0 in_port=1,ip actions=resubmit(90)
3405table=0 in_port=90,dl_src=50:54:00:00:00:09 actions=output(2)
3406])
3407AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3408AT_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)'])
3409AT_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 3410sleep 1
2c0ea78f 3411AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
1b849273
JS
3412skb_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>
3413skb_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
3414])
3415OVS_VSWITCHD_STOP
3416AT_CLEANUP
3417
3418AT_SETUP([ofproto-dpif megaflow - resubmit table action])
3419OVS_VSWITCHD_START
3420ADD_OF_PORTS([br0], [1], [2])
3421AT_DATA([flows.txt], [dnl
3422table=0 in_port=1,ip actions=resubmit(,1)
3423table=1 dl_src=50:54:00:00:00:09 actions=output(2)
3424])
3425AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3426AT_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)'])
3427AT_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=
34281,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
ae692725 3429sleep 1
2c0ea78f 3430AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
1b849273
JS
3431skb_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>
3432skb_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
3433])
3434OVS_VSWITCHD_STOP
3435AT_CLEANUP
3436
3437AT_SETUP([ofproto-dpif megaflow - goto_table action])
3438OVS_VSWITCHD_START
3439ADD_OF_PORTS([br0], [1], [2])
3440AT_DATA([flows.txt], [dnl
3441table=0 in_port=1,ip actions=goto_table(1)
3442table=1 dl_src=50:54:00:00:00:09 actions=output(2)
3443])
3444AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
3445AT_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)'])
3446AT_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 3447sleep 1
2c0ea78f 3448AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
1b849273
JS
3449skb_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>
3450skb_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
3451])
3452OVS_VSWITCHD_STOP
3453AT_CLEANUP
3454
3455AT_SETUP([ofproto-dpif megaflow - mirroring, select_all])
3456OVS_VSWITCHD_START
3457ADD_OF_PORTS([br0], [1], [2], [3])
3458ovs-vsctl \
3459 set Bridge br0 mirrors=@m --\
3460 --id=@p3 get Port p3 --\
3461 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
3462
3463AT_DATA([flows.txt], [dnl
3464in_port=1 actions=output:2
3465])
3466AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3467AT_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)'])
3468AT_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 3469sleep 1
2c0ea78f
GS
3470AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3471skb_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
3472])
3473OVS_VSWITCHD_STOP
3474AT_CLEANUP
3475
3476AT_SETUP([ofproto-dpif megaflow - mirroring, select_vlan])
3477OVS_VSWITCHD_START
3478ADD_OF_PORTS([br0], [1], [2], [3])
3479ovs-vsctl \
3480 set Bridge br0 mirrors=@m --\
3481 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
3482 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
3483
3484AT_DATA([flows.txt], [dnl
3485in_port=1 actions=output:2
3486])
3487AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3488AT_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))'])
3489AT_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 3490sleep 1
2c0ea78f 3491AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
1b849273
JS
3492skb_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>
3493skb_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
3494])
3495OVS_VSWITCHD_STOP
3496AT_CLEANUP
3497
3498AT_SETUP([ofproto-dpif megaflow - move action])
3499OVS_VSWITCHD_START
3500ADD_OF_PORTS([br0], [1], [2])
3501AT_DATA([flows.txt], [dnl
3502table=0 in_port=1 ip,actions=move:NXM_OF_IP_SRC[[]]->NXM_NX_REG0[[]],resubmit(90)
3503table=0 in_port=90 ip,actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]],resubmit(91)
3504table=0 in_port=91 reg0=0x0a000002,actions=output(2)
3505])
3506AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3507AT_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)'])
3508AT_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 3509sleep 1
2c0ea78f 3510AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
1b849273
JS
3511skb_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>
3512skb_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
3513])
3514OVS_VSWITCHD_STOP
3515AT_CLEANUP
3516
3517AT_SETUP([ofproto-dpif megaflow - push action])
3518OVS_VSWITCHD_START
3519ADD_OF_PORTS([br0], [1], [2])
3520AT_DATA([flows.txt], [dnl
3521table=0 in_port=1 ip,actions=push:NXM_OF_IP_SRC[[]],output(2)
3522])
3523AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3524AT_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)'])
3525AT_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 3526sleep 1
2c0ea78f 3527AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
1b849273
JS
3528skb_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>
3529skb_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
3530])
3531OVS_VSWITCHD_STOP
3532AT_CLEANUP
3533
3534AT_SETUP([ofproto-dpif megaflow - learning])
3535OVS_VSWITCHD_START
3536ADD_OF_PORTS([br0], [1], [2])
3537AT_DATA([flows.txt], [dnl
3538table=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
3539])
3540AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
31ef9f51 3541ovs-appctl time/stop
956f2bf0
BP
3542# We send each packet twice because the first packet in each flow causes the
3543# flow table to change and thus revalidations, which (depending on timing)
3544# can keep a megaflow from being installed. The revalidations are done by
3545# the second iteration, allowing the flows to be installed.
3546for i in 1 2; do
3547 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)'])
3548 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)'])
3549 ovs-appctl time/warp 100
3550done
ae692725 3551sleep 1
bcd2633a 3552dnl The original flow is missing due to a revalidation.
2c0ea78f
GS
3553AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3554skb_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>
3555skb_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
3556])
3557OVS_VSWITCHD_STOP
3558AT_CLEANUP
d4f4a9b2
JP
3559
3560AT_SETUP([ofproto-dpif megaflow - tunnels])
3561OVS_VSWITCHD_START(
2c0ea78f
GS
3562 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1])
3563AT_CHECK([ovs-vsctl add-port br0 p2 -- set Interface p2 type=gre \
3564 options:remote_ip=1.1.1.1 ofport_request=2 options:key=flow])
3565AT_CHECK([ovs-vsctl add-port br0 p3 -- set Interface p3 type=dummy \
3566 ofport_request=3])
3567AT_CHECK([ovs-vsctl add-port br0 p4 -- set Interface p4 type=gre \
3568 options:remote_ip=1.1.1.2 options:tos=inherit options:ttl=inherit \
3569 ofport_request=4 options:key=flow])
d4f4a9b2
JP
3570AT_DATA([flows.txt], [dnl
3571in_port=1,actions=output(2)
3572in_port=3,actions=output(4)
3573])
3574AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3575dnl ECN bits are always copied out, but don't use 0x3 (CE), since that
3576dnl will cause the packet to be dropped.
3577AT_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)'])
3578AT_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)'])
3579AT_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)'])
3580AT_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 3581sleep 1
2c0ea78f
GS
3582AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3583skb_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
3584skb_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>
3585skb_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
3586])
3587OVS_VSWITCHD_STOP
3588AT_CLEANUP
3589
3590AT_SETUP([ofproto-dpif megaflow - dec_ttl])
3591OVS_VSWITCHD_START
3592ADD_OF_PORTS([br0], [1], [2])
13751fd8 3593AT_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
3594AT_DATA([flows.txt], [dnl
3595table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=dec_ttl,output(2)
3596])
3597AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3598AT_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)'])
3599AT_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 3600sleep 1
2c0ea78f 3601AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
1b849273
JS
3602skb_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>
3603skb_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
3604])
3605OVS_VSWITCHD_STOP
3606AT_CLEANUP
74cc3969 3607
f74e7df7
JP
3608AT_SETUP([ofproto-dpif megaflow - set dl_dst])
3609OVS_VSWITCHD_START
3610ADD_OF_PORTS([br0], [1], [2])
3611AT_DATA([flows.txt], [dnl
3612table=0 in_port=1 actions=mod_dl_dst(50:54:00:00:00:0a),output(2)
3613])
3614AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3615AT_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)'])
3616AT_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 3617sleep 1
f74e7df7
JP
3618dnl The megaflows do not match the same fields, since the first packet
3619dnl is essentially a no-op. (The new destination MAC is the same as the
3620dnl original.) The ofproto-dpif library un-wildcards the destination MAC
3621dnl so that a packet that doesn't need its MAC address changed doesn't
3622dnl hide one that does. Since the first entry doesn't need to change,
3623dnl only the destination MAC address is matched (as decided by
3624dnl ofproto-dpif). The second entry actually updates the destination
3625dnl MAC, so both the source and destination MAC addresses are
3626dnl un-wildcarded, since the ODP commit functions update both the source
3627dnl and destination MAC addresses.
2c0ea78f 3628AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
1b849273
JS
3629skb_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
3630skb_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
3631])
3632OVS_VSWITCHD_STOP
3633AT_CLEANUP
3634
8c301900
JR
3635AT_SETUP([ofproto-dpif megaflow - disabled])
3636OVS_VSWITCHD_START
3637ADD_OF_PORTS([br0], [1], [2])
3638AT_DATA([flows.txt], [dnl
3639table=0 in_port=1,ip,nw_dst=10.0.0.1 actions=output(2)
3640table=0 in_port=1,ip,nw_dst=10.0.0.3 actions=drop
3641])
e79a6c83 3642AT_CHECK([ovs-appctl upcall/disable-megaflows], [0], [megaflows disabled
8c301900
JR
3643], [])
3644AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg], [0], [], [])
3645AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3646for i in 1 2 3 4; do
3647 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)'])
3648 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)'])
3649done
ae692725 3650sleep 1
8c301900 3651AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
c8abb8af
JR
3652skb_priority(0),skb_mark(0),in_port(1/0xffff),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0), packets:3, bytes:180, used:0.0s, actions:2
3653skb_priority(0),skb_mark(0),in_port(1/0xffff),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0), packets:3, bytes:180, used:0.0s, actions:drop
8c301900
JR
3654])
3655OVS_VSWITCHD_STOP
3656AT_CLEANUP
3657
74cc3969
BP
3658AT_SETUP([ofproto-dpif - datapath port number change])
3659OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
3660ADD_OF_PORTS([br0], 1)
3661
3662# Trace a flow that should output to p1.
3663AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
3664 [0], [stdout])
3665AT_CHECK([tail -1 stdout], [0], [Datapath actions: 1
3666])
3667
3668# Change p1's port number to 5.
3669AT_CHECK([ovs-appctl dpif-dummy/change-port-number ovs-dummy p1 5])
3670
3671# Trace a flow that should output to p1 in its new location.
3672AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
3673 [0], [stdout])
3674AT_CHECK([tail -1 stdout], [0], [Datapath actions: 5
3675])
3676OVS_VSWITCHD_STOP
3677AT_CLEANUP
2d344ba5
AW
3678
3679# Tests the bundling with various bfd and cfm configurations.
3680AT_SETUP([ofproto - bundle with variable bfd/cfm config])
3681OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy -- \
3682 add-bond br0 br0bond p0 p2 bond-mode=active-backup -- \
3683 add-bond br1 br1bond p1 p3 bond-mode=active-backup -- \
3684 set Interface p1 type=patch options:peer=p0 ofport_request=2 -- \
3685 set Interface p3 type=patch options:peer=p2 ofport_request=4 -- \
3686 set Interface p0 type=patch options:peer=p1 ofport_request=1 -- \
3687 set Interface p2 type=patch options:peer=p3 ofport_request=3 -- \
3688 set Interface p0 bfd:enable=true bfd:min_tx=300 bfd:min_rx=300 -- \
3689 set Interface p0 cfm_mpid=1 -- \
3690 set Interface p1 bfd:enable=true bfd:min_tx=500 bfd:min_rx=500])
3691
3692ovs-appctl time/stop
3693# advance the clock to stablize everything.
3694for i in `seq 0 49`; do ovs-appctl time/warp 100; done
3695# cfm/show should show 'recv' fault.
3696AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
3697 fault: recv
3698])
3699# bfd/show should show 'up'.
3700AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
3701 Local Session State: up
3702 Remote Session State: up
3703 Local Session State: up
3704 Remote Session State: up
3705])
3706# bond/show should show 'may-enable: true' for all slaves.
3707AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
3708 may_enable: true
3709 may_enable: true
3710 may_enable: true
3711 may_enable: true
3712])
3713
3714# now disable the bfd on p1.
3715AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=false])
3716# advance the clock to stablize everything.
3717for i in `seq 0 49`; do ovs-appctl time/warp 100; done
3718# cfm/show should show 'recv' fault.
3719AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
3720 fault: recv
3721])
3722# bfd/show should show 'down'.
3723AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
3724 Local Session State: down
3725 Remote Session State: down
3726])
3727# bond/show should show 'may-enable: false' for p0.
125bf01d 3728AT_CHECK([ovs-appctl bond/show br0bond | sed -n '/^.*may_enable:.*/p'], [0], [dnl
2d344ba5
AW
3729 may_enable: false
3730 may_enable: true
2d344ba5
AW
3731])
3732
3733# now enable the bfd on p1 and disable bfd on p0.
3734AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=true])
3735AT_CHECK([ovs-vsctl set Interface p0 bfd:enable=false])
3736# advance the clock to stablize everything.
3737for i in `seq 0 49`; do ovs-appctl time/warp 100; done
3738# cfm/show should show 'recv' fault.
3739AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
3740 fault: recv
3741])
3742# bfd/show should show 'down'.
3743AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
3744 Local Session State: down
3745 Remote Session State: down
3746])
3747# bond/show should show 'may-enable: false' for p0 and p1.
3748AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
3749 may_enable: false
3750 may_enable: true
3751 may_enable: false
3752 may_enable: true
3753])
3754
e441a806
AW
3755OVS_VSWITCHD_STOP
3756AT_CLEANUP
3757
3758AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 1])
3759OVS_VSWITCHD_START([add-port br0 p0 -- set interface p0 type=gre options:remote_ip=1.2.3.4])
3760
3761# enable bfd on p0.
3762AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
3763# check log.
3764AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3765monitor thread created
3766])
3767# disable bfd on p0.
3768AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
3769# check log.
3770AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3771monitor thread terminated
3772])
3773AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
3774
3775# enable cfm on p0.
3776AT_CHECK([ovs-vsctl set interface p0 cfm_mpid=10])
3777# check log.
3778AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3779monitor thread created
3780])
3781# disable cfm on p0.
3782AT_CHECK([ovs-vsctl remove interface p0 cfm_mpid 10])
3783# check log.
3784AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3785monitor thread terminated
3786])
3787AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
3788
3789# enable both bfd and cfm on p0.
3790AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true cfm_mpid=10])
3791# check log.
3792AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3793monitor thread created
3794])
3795# disable bfd on p0.
3796AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
3797# check log, there should not be the log of thread terminated.
3798AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3799])
3800# reenable bfd on p0.
3801AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
3802# check log, should still be on log of thread created.
3803AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3804monitor thread created
3805])
3806# disable bfd and cfm together.
3807AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false -- remove interface p0 cfm_mpid 10])
3808# check log.
3809AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3810monitor thread terminated
3811])
3812
3813OVS_VSWITCHD_STOP
3814AT_CLEANUP
3815
3816# this test helps avoid the deadlock between the main thread and monitor thread.
3817AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 2])
3818OVS_VSWITCHD_START
3819
3820for i in `seq 1 199`
3821do
3822 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])
3823done
3824
98cf638b
AW
3825OVS_VSWITCHD_STOP
3826AT_CLEANUP
98b07853
BP
3827\f
3828AT_BANNER([ofproto-dpif - flow translation resource limits])
3829
3830AT_SETUP([ofproto-dpif - infinite resubmit])
3831OVS_VSWITCHD_START
3832AT_CHECK([ovs-ofctl add-flow br0 actions=resubmit:1,resubmit:2,output:3])
3833AT_CHECK([ovs-appctl ofproto/trace br0 'eth_dst=ff:ff:ff:ff:ff:ff'],
3834 [0], [stdout])
3835AT_CHECK([tail -1 stdout], [0], [Datapath actions: drop
3836])
3837AT_CHECK([grep -c 'resubmit actions recursed over 64 times' ovs-vswitchd.log],
3838 [0], [1
3839])
3840OVS_VSWITCHD_STOP(["/resubmit actions recursed/d"])
3841AT_CLEANUP
3842
3843AT_SETUP([ofproto-dpif - exponential resubmit chain])
3844OVS_VSWITCHD_START
3845ADD_OF_PORTS([br0], 1)
3846(for i in `seq 1 64`; do
3847 j=`expr $i + 1`
3848 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
3849 done
3850 echo "in_port=65, actions=local") > flows
3851 AT_CHECK([ovs-ofctl add-flows br0 flows])
3852AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
3853AT_CHECK([grep -c 'over 4096 resubmit actions' ovs-vswitchd.log], [0], [1
3854])
3855OVS_VSWITCHD_STOP(["/over.*resubmit actions/d"])
3856AT_CLEANUP
3857
3858AT_SETUP([ofproto-dpif - too many output actions])
3859OVS_VSWITCHD_START
3860ADD_OF_PORTS([br0], 1)
3861(for i in `seq 1 12`; do
3862 j=`expr $i + 1`
3863 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
3864 done
3865 echo "in_port=13, actions=local,local,local,local,local,local,local,local") > flows
542024c4 3866AT_CHECK([ovs-ofctl add-flows br0 flows])
98b07853 3867AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
0f032e95
BP
3868AT_CHECK([grep -c -e '- Uses action(s) not supported by datapath' stdout],
3869 [0], [1
98b07853 3870])
0f032e95 3871AT_CHECK([grep -c 'resubmits yielded over 64 kB of actions' ovs-vswitchd.log], [0], [1
542024c4 3872])
0f032e95 3873OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of actions/d"])
98b07853
BP
3874AT_CLEANUP
3875
3876AT_SETUP([ofproto-dpif - stack too deep])
3877OVS_VSWITCHD_START
3878ADD_OF_PORTS([br0], 1)
3879(for i in `seq 1 12`; do
3880 j=`expr $i + 1`
3881 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
3882 done
3883 push="push:NXM_NX_REG0[[]]"
3884 echo "in_port=13, actions=$push,$push,$push,$push,$push,$push,$push,$push") > flows
3885 AT_CHECK([ovs-ofctl add-flows br0 flows])
3886AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
3887AT_CHECK([grep -c 'resubmits yielded over 64 kB of stack' ovs-vswitchd.log], [0], [1
3888])
3889OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of stack/d"])
3890AT_CLEANUP