1 AT_BANNER([ofproto-dpif])
3 AT_SETUP([ofproto-dpif - resubmit])
5 AT_DATA([flows.txt], [dnl
6 table=0 in_port=1 priority=1000 icmp actions=output(10),resubmit(2),output(19),resubmit(3),output(21)
7 table=0 in_port=2 priority=1500 icmp actions=output(11),resubmit(,1),output(16),resubmit(2,1),output(18)
8 table=0 in_port=3 priority=2000 icmp actions=output(20)
9 table=1 in_port=1 priority=1000 icmp actions=output(12),resubmit(4,1),output(13),resubmit(3),output(15)
10 table=1 in_port=2 priority=1500 icmp actions=output(17),resubmit(,2)
11 table=1 in_port=3 priority=1500 icmp actions=output(14),resubmit(,2)
13 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
14 AT_CHECK([ovs-appctl ofproto/trace br0 '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])
15 AT_CHECK([tail -1 stdout], [0],
16 [Datapath actions: 10,11,12,13,14,15,16,17,18,19,20,21
21 AT_SETUP([ofproto-dpif - registers])
23 AT_DATA([flows.txt], [dnl
24 in_port=90 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:91
25 in_port=91 actions=resubmit:5,resubmit:6,resubmit:7,resubmit:92
26 in_port=92 actions=resubmit:8,resubmit:9,resubmit:10,resubmit:11
27 in_port=2 actions=load:0x000db000->NXM_NX_REG0[[]]
28 in_port=3 actions=load:0xdea->NXM_NX_REG0[[20..31]]
29 in_port=4 actions=load:0xeef->NXM_NX_REG0[[0..11]]
30 in_port=5 actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]]
31 in_port=6 actions=load:0x22222222->NXM_NX_REG2[[]]
32 in_port=7 actions=move:NXM_NX_REG1[[20..31]]->NXM_NX_REG2[[0..11]]
33 in_port=8 actions=move:NXM_NX_REG1[[0..11]]->NXM_NX_REG2[[20..31]]
34 in_port=9,reg0=0xdeadbeef actions=output:20
35 in_port=10,reg1=0xdeadbeef actions=output:21
36 in_port=11,reg2=0xeef22dea actions=output:22
38 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
39 AT_CHECK([ovs-appctl ofproto/trace br0 '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])
40 AT_CHECK([tail -1 stdout], [0],
41 [Datapath actions: 20,21,22
46 AT_SETUP([ofproto-dpif - output])
48 AT_DATA([flows.txt], [dnl
49 in_port=1 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:5,resubmit:6,resubmit:7
50 in_port=2 actions=output:9
51 in_port=3 actions=load:55->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]],load:66->NXM_NX_REG1[[]]
52 in_port=4 actions=output:10,output:NXM_NX_REG0[[]],output:NXM_NX_REG1[[]],output:11
53 in_port=5 actions=load:77->NXM_NX_REG0[[0..15]],load:88->NXM_NX_REG0[[16..31]]
54 in_port=6 actions=output:NXM_NX_REG0[[0..15]],output:NXM_NX_REG0[[16..31]]
55 in_port=7 actions=load:0x110000ff->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]]
57 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
58 AT_CHECK([ovs-appctl ofproto/trace br0 '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])
59 AT_CHECK([tail -1 stdout], [0],
60 [Datapath actions: 9,55,10,55,66,11,77,88
65 AT_SETUP([ofproto-dpif - DSCP])
66 dnl This test assumes port p1 is allocated OpenFlow port number 1.
67 OVS_VSWITCHD_START([add-port br0 p1 -- set Interface p1 type=dummy])
68 AT_DATA([flows.txt], [dnl
69 actions=output:65534,enqueue:1:1,enqueue:1:2,enqueue:1:2,enqueue:1:1,output:1,mod_nw_tos:0,output:1,output:65534
71 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
72 AT_CHECK([ovs-vsctl -- \
73 set Port p1 qos=@newqos --\
74 --id=@newqos create QoS type=linux-htb queues=1=@q1,2=@q2 --\
75 --id=@q1 create Queue dscp=1 --\
76 --id=@q2 create Queue dscp=2], [0], [ignore])
77 AT_CHECK([ovs-appctl ofproto/trace br0 '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])
78 AT_CHECK([tail -1 stdout], [0],
79 [Datapath actions: dnl
81 set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0x7,ttl=128,frag=no)),set(priority(1)),1,dnl
82 set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0xb,ttl=128,frag=no)),set(priority(2)),1,dnl
84 set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0x7,ttl=128,frag=no)),set(priority(1)),1,dnl
85 set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0xff,ttl=128,frag=no)),set(priority(0)),1,dnl
86 set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0x3,ttl=128,frag=no)),1,dnl
92 AT_SETUP([ofproto-dpif - output/flood flags])
93 dnl This test assumes that OpenFlow port numbers are allocated in order
94 dnl starting from one. It does not necessarily require that they are allocated
95 dnl in the same order that they are named in the database. Just that the
96 dnl following command guarantees OpenFlow port 65534, and ports 1-7 exist in
98 OVS_VSWITCHD_START([dnl
99 add-port br0 p1 -- set Interface p1 type=dummy --\
100 add-port br0 p2 -- set Interface p2 type=dummy --\
101 add-port br0 p3 -- set Interface p3 type=dummy --\
102 add-port br0 p4 -- set Interface p4 type=dummy --\
103 add-port br0 p5 -- set Interface p5 type=dummy --\
104 add-port br0 p6 -- set Interface p6 type=dummy --\
105 add-port br0 p7 -- set Interface p7 type=dummy ])
107 AT_DATA([flows.txt], [dnl
108 in_port=1 actions=flood
109 in_port=2 actions=all
110 in_port=3 actions=output:65534,output:1,output:2,output:3,output:4,output:5,output:6,output:7
111 in_port=4 actions=enqueue:65534:1,enqueue:1:1,enqueue:2:1,enqueue:3:2,enqueue:4:1,enqueue:5:1,enqueue:6:1,enqueue:7:1
113 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
114 AT_CHECK([ovs-ofctl mod-port br0 5 noforward])
115 AT_CHECK([ovs-ofctl mod-port br0 6 noflood])
117 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port(1),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
118 AT_CHECK([tail -1 stdout \
119 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
127 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port(2),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
128 AT_CHECK([tail -1 stdout \
129 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
138 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port(3),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
139 AT_CHECK([tail -1 stdout], [0],
140 [Datapath actions: 0,1,2,4,6,7
143 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port(4),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
144 AT_CHECK([tail -1 stdout], [0],
145 [Datapath actions: set(priority(1)),0,1,2,set(priority(2)),3,set(priority(1)),6,7
150 AT_SETUP([ofproto-dpif - set_tunnel])
152 AT_DATA([flows.txt], [dnl
153 in_port=90 actions=resubmit:1,resubmit:2,resubmit:3,resubmit:4,resubmit:5
154 in_port=1 actions=set_tunnel:1,output:1
155 in_port=2 actions=set_tunnel:1,output:2
156 in_port=3 actions=set_tunnel:2,set_tunnel:3,output:3
157 in_port=4 actions=set_tunnel:4,set_tunnel:3,output:4
158 in_port=5 actions=set_tunnel:5
160 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
161 AT_CHECK([ovs-appctl ofproto/trace br0 'tun_id(0x1),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])
162 AT_CHECK([tail -1 stdout], [0],
163 [Datapath actions: set(tun_id(0x1)),1,2,set(tun_id(0x3)),3,4
168 AT_SETUP([ofproto-dpif - VLAN handling])
170 [set Bridge br0 fail-mode=standalone -- \
171 add-port br0 p1 trunks=10,12 -- \
172 add-port br0 p2 tag=10 -- \
173 add-port br0 p3 tag=12 \
174 other-config:priority-tags=true -- \
175 add-port br0 p4 tag=12 -- \
176 add-port br0 p5 vlan_mode=native-tagged tag=10 -- \
177 add-port br0 p6 vlan_mode=native-tagged tag=10 trunks=10,12 -- \
178 add-port br0 p7 vlan_mode=native-untagged tag=12 -- \
179 add-port br0 p8 vlan_mode=native-untagged tag=12 trunks=10,12 \
180 other-config:priority-tags=true -- \
181 set Interface p1 type=dummy -- \
182 set Interface p2 type=dummy -- \
183 set Interface p3 type=dummy -- \
184 set Interface p4 type=dummy -- \
185 set Interface p5 type=dummy -- \
186 set Interface p6 type=dummy -- \
187 set Interface p7 type=dummy -- \
188 set Interface p8 type=dummy --])
192 -- get Interface p1 ofport \
193 -- get Interface p2 ofport \
194 -- get Interface p3 ofport \
195 -- get Interface p4 ofport \
196 -- get Interface p5 ofport \
197 -- get Interface p6 ofport \
198 -- get Interface p7 ofport \
199 -- get Interface p8 ofport],
202 br0=0 p1=$1 p2=$2 p3=$3 p4=$4 p5=$5 p6=$6 p7=$7 p8=$8
204 dnl Each of these specifies an in_port, a VLAN VID (or "none"), a VLAN
205 dnl PCP (used if the VID isn't "none") and the expected set of datapath
211 "br0 10 0 p1,p5,p6,p7,p8,pop_vlan,p2" \
212 "br0 10 1 p1,p5,p6,p7,p8,pop_vlan,p2" \
215 "br0 12 0 p1,p5,p6,pop_vlan,p3,p4,p7,p8" \
216 "br0 12 1 p1,p5,p6,pop_vlan,p4,p7,push_vlan(vid=0,pcp=1),p3,p8" \
220 "p1 10 0 br0,p5,p6,p7,p8,pop_vlan,p2" \
221 "p1 10 1 br0,p5,p6,p7,p8,pop_vlan,p2" \
224 "p1 12 0 br0,p5,p6,pop_vlan,p3,p4,p7,p8" \
225 "p1 12 1 br0,p5,p6,pop_vlan,p4,p7,push_vlan(vid=0,pcp=1),p3,p8" \
226 "p2 none 0 push_vlan(vid=10,pcp=0),br0,p1,p5,p6,p7,p8" \
227 "p2 0 0 pop_vlan,push_vlan(vid=10,pcp=0),br0,p1,p5,p6,p7,p8" \
228 "p2 0 1 pop_vlan,push_vlan(vid=10,pcp=1),br0,p1,p5,p6,p7,p8" \
235 "p3 none 0 p4,p7,p8,push_vlan(vid=12,pcp=0),br0,p1,p5,p6" \
236 "p3 0 0 pop_vlan,p4,p7,p8,push_vlan(vid=12,pcp=0),br0,p1,p5,p6" \
237 "p3 0 1 p8,pop_vlan,p4,p7,push_vlan(vid=12,pcp=1),br0,p1,p5,p6" \
244 "p4 none 0 p3,p7,p8,push_vlan(vid=12,pcp=0),br0,p1,p5,p6" \
245 "p4 0 0 pop_vlan,p3,p7,p8,push_vlan(vid=12,pcp=0),br0,p1,p5,p6" \
246 "p4 0 1 p3,p8,pop_vlan,p7,push_vlan(vid=12,pcp=1),br0,p1,p5,p6" \
253 "p5 none 0 p2,push_vlan(vid=10,pcp=0),br0,p1,p6,p7,p8" \
254 "p5 0 0 pop_vlan,p2,push_vlan(vid=10,pcp=0),br0,p1,p6,p7,p8" \
255 "p5 0 1 pop_vlan,p2,push_vlan(vid=10,pcp=1),br0,p1,p6,p7,p8" \
256 "p5 10 0 br0,p1,p6,p7,p8,pop_vlan,p2" \
257 "p5 10 1 br0,p1,p6,p7,p8,pop_vlan,p2" \
260 "p5 12 0 br0,p1,p6,pop_vlan,p3,p4,p7,p8" \
261 "p5 12 1 br0,p1,p6,pop_vlan,p4,p7,push_vlan(vid=0,pcp=1),p3,p8" \
262 "p6 none 0 p2,push_vlan(vid=10,pcp=0),br0,p1,p5,p7,p8" \
263 "p6 0 0 pop_vlan,p2,push_vlan(vid=10,pcp=0),br0,p1,p5,p7,p8" \
264 "p6 0 1 pop_vlan,p2,push_vlan(vid=10,pcp=1),br0,p1,p5,p7,p8" \
265 "p6 10 0 br0,p1,p5,p7,p8,pop_vlan,p2" \
266 "p6 10 1 br0,p1,p5,p7,p8,pop_vlan,p2" \
269 "p6 12 0 br0,p1,p5,pop_vlan,p3,p4,p7,p8" \
270 "p6 12 1 br0,p1,p5,pop_vlan,p4,p7,push_vlan(vid=0,pcp=1),p3,p8" \
271 "p7 none 0 p3,p4,p8,push_vlan(vid=12,pcp=0),br0,p1,p5,p6" \
272 "p7 0 0 pop_vlan,p3,p4,p8,push_vlan(vid=12,pcp=0),br0,p1,p5,p6" \
273 "p7 0 1 p3,p8,pop_vlan,p4,push_vlan(vid=12,pcp=1),br0,p1,p5,p6" \
274 "p7 10 0 br0,p1,p5,p6,p8,pop_vlan,p2" \
275 "p7 10 1 br0,p1,p5,p6,p8,pop_vlan,p2" \
278 "p7 12 0 br0,p1,p5,p6,pop_vlan,p3,p4,p8" \
279 "p7 12 1 br0,p1,p5,p6,pop_vlan,p4,push_vlan(vid=0,pcp=1),p3,p8" \
280 "p8 none 0 p3,p4,p7,push_vlan(vid=12,pcp=0),br0,p1,p5,p6" \
281 "p8 0 0 pop_vlan,p3,p4,p7,push_vlan(vid=12,pcp=0),br0,p1,p5,p6" \
282 "p8 0 1 p3,pop_vlan,p4,p7,push_vlan(vid=12,pcp=1),br0,p1,p5,p6" \
283 "p8 10 0 br0,p1,p5,p6,p7,pop_vlan,p2" \
284 "p8 10 1 br0,p1,p5,p6,p7,pop_vlan,p2" \
287 "p8 12 0 br0,p1,p5,p6,pop_vlan,p3,p4,p7" \
288 "p8 12 1 br0,p1,p5,p6,pop_vlan,p4,p7,push_vlan(vid=0,pcp=1),p3"
296 eval n_in_port=\$$in_port
297 if test $vlan = none; then
298 flow="in_port($n_in_port),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff),eth_type(0xabcd)"
300 flow="in_port($n_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))"
303 echo "----------------------------------------------------------------------"
304 echo "in_port=$in_port vlan=$vlan pcp=$pcp"
306 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
307 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
309 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected" br0=$br0 p1=$p1 p2=$p2 p3=$p3 p4=$p4 p5=$p5 p6=$p6 p7=$p7 p8=$p8], [0], [stdout])
311 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual" br0=$br0 p1=$p1 p2=$p2 p3=$p3 p4=$p4 p5=$p5 p6=$p6 p7=$p7 p8=$p8], [0], [expout])
317 AT_SETUP([ofproto-dpif - fragment handling])
319 AT_DATA([flows.txt], [dnl
320 priority=75 tcp ip_frag=no tp_dst=80 actions=output:1
321 priority=75 tcp ip_frag=first tp_dst=80 actions=output:2
322 priority=75 tcp ip_frag=later tp_dst=80 actions=output:3
323 priority=50 tcp ip_frag=no actions=output:4
324 priority=50 tcp ip_frag=first actions=output:5
325 priority=50 tcp ip_frag=later actions=output:6
327 AT_CHECK([ovs-ofctl replace-flows br0 flows.txt])
329 base_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"
330 no_flow="$base_flow,frag=no),tcp(src=12345,dst=80)"
331 first_flow="$base_flow,frag=first),tcp(src=12345,dst=80)"
332 later_flow="$base_flow,frag=later)"
334 # mode no first later
346 AT_CHECK([ovs-ofctl set-frags br0 $mode])
347 for type in no first later; do
348 eval flow=\$${type}_flow exp_output=\$$type
349 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
350 AT_CHECK_UNQUOTED([tail -1 stdout], [0], [Datapath actions: $exp_output
357 AT_SETUP([ofproto-dpif - exit])
359 AT_DATA([flows.txt], [dnl
360 in_port=1 actions=output:10,exit,output:11
361 in_port=2 actions=output:12,resubmit:1,output:12
362 in_port=3 actions=output:13,resubmit:2,output:14
364 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
365 AT_CHECK([ovs-appctl ofproto/trace br0 '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])
366 AT_CHECK([tail -1 stdout], [0],
367 [Datapath actions: 10
369 AT_CHECK([ovs-appctl ofproto/trace br0 '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])
370 AT_CHECK([tail -1 stdout], [0],
371 [Datapath actions: 12,10
373 AT_CHECK([ovs-appctl ofproto/trace br0 '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])
374 AT_CHECK([tail -1 stdout], [0],
375 [Datapath actions: 13,12,10
381 AT_SETUP([ofproto-dpif - mirroring, select_all])
383 AT_CHECK([ovs-vsctl \
384 add-port br0 p1 -- set Interface p1 type=dummy --\
385 add-port br0 p2 -- set Interface p2 type=dummy --\
386 add-port br0 p3 -- set Interface p3 type=dummy --\
387 set Bridge br0 mirrors=@m --\
388 --id=@p3 get Port p3 --\
389 --id=@m create Mirror name=mymirror \
390 select_all=true output_port=@p3 ], [0], [stdout])
391 AT_CHECK([perl $srcdir/uuidfilt.pl stdout], [0], [dnl
397 -- get Interface p1 ofport \
398 -- get Interface p2 ofport \
399 -- get Interface p3 ofport],
404 AT_DATA([flows.txt], [dnl
405 in_port=1 actions=output:2
406 in_port=2 actions=output:1
408 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
410 flow="in_port($p1),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)"
411 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
412 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
413 [Datapath actions: $p2,$p3
416 flow="in_port($p2),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)"
417 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
418 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
419 [Datapath actions: $p1,$p3
426 AT_SETUP([ofproto-dpif - mirroring, select_src])
428 AT_CHECK([ovs-vsctl \
429 add-port br0 p1 -- set Interface p1 type=dummy --\
430 add-port br0 p2 -- set Interface p2 type=dummy --\
431 add-port br0 p3 -- set Interface p3 type=dummy --\
432 set Bridge br0 mirrors=@m --\
433 --id=@p1 get Port p1 -- --id=@p3 get Port p3 --\
434 --id=@m create Mirror name=mymirror \
435 select_src_port=@p1 output_port=@p3 ], [0], [stdout])
436 AT_CHECK([perl $srcdir/uuidfilt.pl stdout], [0], [dnl
442 -- get Interface p1 ofport \
443 -- get Interface p2 ofport \
444 -- get Interface p3 ofport],
449 AT_DATA([flows.txt], [dnl
450 in_port=1 actions=output:2
451 in_port=2 actions=output:1
453 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
455 flow="in_port($p1),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)"
456 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
457 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
458 [Datapath actions: $p2,$p3
461 flow="in_port($p2),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)"
462 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
463 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
464 [Datapath actions: $p1
470 AT_SETUP([ofproto-dpif - mirroring, select_dst])
472 AT_CHECK([ovs-vsctl \
473 add-port br0 p1 -- set Interface p1 type=dummy --\
474 add-port br0 p2 -- set Interface p2 type=dummy --\
475 add-port br0 p3 -- set Interface p3 type=dummy --\
476 set Bridge br0 mirrors=@m --\
477 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
478 --id=@m create Mirror name=mymirror \
479 select_dst_port=@p2 output_port=@p3 ], [0], [stdout])
480 AT_CHECK([perl $srcdir/uuidfilt.pl stdout], [0], [dnl
486 -- get Interface p1 ofport \
487 -- get Interface p2 ofport \
488 -- get Interface p3 ofport],
493 AT_DATA([flows.txt], [dnl
494 in_port=1 actions=output:2
495 in_port=2 actions=output:1
497 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
499 flow="in_port($p1),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)"
500 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
501 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
502 [Datapath actions: $p2,$p3
505 flow="in_port($p2),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)"
506 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
507 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
508 [Datapath actions: $p1
515 AT_SETUP([ofproto-dpif - mirroring, select_vlan])
517 AT_CHECK([ovs-vsctl \
518 add-port br0 p1 -- set Interface p1 type=dummy --\
519 add-port br0 p2 -- set Interface p2 type=dummy --\
520 add-port br0 p3 -- set Interface p3 type=dummy --\
521 set Bridge br0 mirrors=@m --\
522 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
523 --id=@m create Mirror name=mymirror \
524 select_all=true select_vlan=11 output_port=@p3 ], [0], [stdout])
525 AT_CHECK([perl $srcdir/uuidfilt.pl stdout], [0], [dnl
531 -- get Interface p1 ofport \
532 -- get Interface p2 ofport \
533 -- get Interface p3 ofport],
538 AT_DATA([flows.txt], [dnl
539 in_port=1, actions=output:2
541 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
543 flow="in_port($p1),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)"
544 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
545 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
546 [Datapath actions: $p2
549 flow="in_port($p1),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))"
550 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
551 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
552 [Datapath actions: $p2
555 flow="in_port($p1),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))"
556 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
557 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
558 [Datapath actions: $p2,$p3
565 AT_SETUP([ofproto-dpif - mirroring, output_port])
567 AT_CHECK([ovs-vsctl \
568 add-port br0 p1 -- set Interface p1 type=dummy --\
569 add-port br0 p2 -- set Interface p2 type=dummy --\
570 add-port br0 p3 -- set Interface p3 type=dummy --\
571 set Bridge br0 mirrors=@m --\
572 --id=@p3 get Port p3 --\
573 --id=@m create Mirror name=mymirror \
574 select_all=true output_port=@p3 ], [0], [stdout])
575 AT_CHECK([perl $srcdir/uuidfilt.pl stdout], [0], [dnl
581 -- get Interface p1 ofport \
582 -- get Interface p2 ofport \
583 -- get Interface p3 ofport],
588 AT_DATA([flows.txt], [dnl
589 in_port=1 actions=mod_vlan_vid:17,output:2
590 in_port=2 actions=output:1
592 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
594 flow="in_port($p1),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)"
595 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
596 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
597 [Datapath actions: push_vlan(vid=17,pcp=0),$p2,pop_vlan,$p3
600 flow="in_port($p2),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)"
601 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
602 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
603 [Datapath actions: $p1,$p3
610 AT_SETUP([ofproto-dpif - mirroring, output_vlan])
612 AT_CHECK([ovs-vsctl \
613 add-port br0 p1 -- set Interface p1 type=dummy --\
614 add-port br0 p2 -- set Interface p2 type=dummy --\
615 set Bridge br0 mirrors=@m --\
616 --id=@m create Mirror name=mymirror \
617 select_all=true output_vlan=12 ], [0], [stdout])
618 AT_CHECK([perl $srcdir/uuidfilt.pl stdout], [0], [dnl
624 -- get Interface p1 ofport \
625 -- get Interface p2 ofport],
630 AT_DATA([flows.txt], [dnl
631 in_port=1 actions=output:2
632 in_port=2 actions=mod_vlan_vid:17,output:1
634 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
636 flow="in_port($p1),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)"
637 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
638 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
640 expected="$p2,push_vlan(vid=12,pcp=0),$br0,$p1,$p2"
641 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected" br0=$br0 p1=$p1 p2=$p2], [0], [stdout])
643 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual" br0=$br0 p1=$p1 p2=$p2], [0], [expout])
645 flow="in_port($p2),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)"
646 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
647 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
649 expected="push_vlan(vid=17,pcp=0),$p1,pop_vlan,push_vlan(vid=12,pcp=0),$br0,$p1,$p2"
650 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected" br0=$br0 p1=$p1 p2=$p2], [0], [stdout])
652 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual" br0=$br0 p1=$p1 p2=$p2], [0], [expout])