Merge lp:~gandelman-a/ubuntu/precise/openvswitch/ovs-ppc-ftbfs into lp:ubuntu/precise-proposed/openvswitch

Proposed by Adam Gandelman
Status: Merged
Merge reported by: James Page
Merged at revision: not available
Proposed branch: lp:~gandelman-a/ubuntu/precise/openvswitch/ovs-ppc-ftbfs
Merge into: lp:ubuntu/precise-proposed/openvswitch
Diff against target: 1093 lines (+984/-24)
6 files modified
.pc/applied-patches (+1/-0)
.pc/fix_ftbfs_big_endian.patch/tests/ofproto-dpif.at (+812/-0)
debian/changelog (+6/-0)
debian/patches/fix_ftbfs_big_endian.patch (+128/-0)
debian/patches/series (+1/-0)
tests/ofproto-dpif.at (+36/-24)
To merge this branch: bzr merge lp:~gandelman-a/ubuntu/precise/openvswitch/ovs-ppc-ftbfs
Reviewer Review Type Date Requested Status
Ubuntu Development Team Pending
Review via email: mp+116948@code.launchpad.net
To post a comment you must log in.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file '.pc/applied-patches'
2--- .pc/applied-patches 2012-07-16 11:06:23 +0000
3+++ .pc/applied-patches 2012-07-26 19:09:22 +0000
4@@ -1,1 +1,2 @@
5 update_odputil_key_bytes.patch
6+fix_ftbfs_big_endian.patch
7
8=== added directory '.pc/fix_ftbfs_big_endian.patch'
9=== added file '.pc/fix_ftbfs_big_endian.patch/.timestamp'
10=== added directory '.pc/fix_ftbfs_big_endian.patch/tests'
11=== added file '.pc/fix_ftbfs_big_endian.patch/tests/ofproto-dpif.at'
12--- .pc/fix_ftbfs_big_endian.patch/tests/ofproto-dpif.at 1970-01-01 00:00:00 +0000
13+++ .pc/fix_ftbfs_big_endian.patch/tests/ofproto-dpif.at 2012-07-26 19:09:22 +0000
14@@ -0,0 +1,812 @@
15+AT_BANNER([ofproto-dpif])
16+
17+AT_SETUP([ofproto-dpif - resubmit])
18+OVS_VSWITCHD_START
19+AT_DATA([flows.txt], [dnl
20+table=0 in_port=1 priority=1000 icmp actions=output(10),resubmit(2),output(19),resubmit(3),output(21)
21+table=0 in_port=2 priority=1500 icmp actions=output(11),resubmit(,1),output(16),resubmit(2,1),output(18)
22+table=0 in_port=3 priority=2000 icmp actions=output(20)
23+table=1 in_port=1 priority=1000 icmp actions=output(12),resubmit(4,1),output(13),resubmit(3),output(15)
24+table=1 in_port=2 priority=1500 icmp actions=output(17),resubmit(,2)
25+table=1 in_port=3 priority=1500 icmp actions=output(14),resubmit(,2)
26+])
27+AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
28+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])
29+AT_CHECK([tail -1 stdout], [0],
30+ [Datapath actions: 10,11,12,13,14,15,16,17,18,19,20,21
31+])
32+OVS_VSWITCHD_STOP
33+AT_CLEANUP
34+
35+AT_SETUP([ofproto-dpif - registers])
36+OVS_VSWITCHD_START
37+AT_DATA([flows.txt], [dnl
38+in_port=90 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:91
39+in_port=91 actions=resubmit:5,resubmit:6,resubmit:7,resubmit:92
40+in_port=92 actions=resubmit:8,resubmit:9,resubmit:10,resubmit:11
41+in_port=2 actions=load:0x000db000->NXM_NX_REG0[[]]
42+in_port=3 actions=load:0xdea->NXM_NX_REG0[[20..31]]
43+in_port=4 actions=load:0xeef->NXM_NX_REG0[[0..11]]
44+in_port=5 actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]]
45+in_port=6 actions=load:0x22222222->NXM_NX_REG2[[]]
46+in_port=7 actions=move:NXM_NX_REG1[[20..31]]->NXM_NX_REG2[[0..11]]
47+in_port=8 actions=move:NXM_NX_REG1[[0..11]]->NXM_NX_REG2[[20..31]]
48+in_port=9,reg0=0xdeadbeef actions=output:20
49+in_port=10,reg1=0xdeadbeef actions=output:21
50+in_port=11,reg2=0xeef22dea actions=output:22
51+])
52+AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
53+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])
54+AT_CHECK([tail -1 stdout], [0],
55+ [Datapath actions: 20,21,22
56+])
57+OVS_VSWITCHD_STOP
58+AT_CLEANUP
59+
60+AT_SETUP([ofproto-dpif - output])
61+OVS_VSWITCHD_START
62+AT_DATA([flows.txt], [dnl
63+in_port=1 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:5,resubmit:6,resubmit:7
64+in_port=2 actions=output:9
65+in_port=3 actions=load:55->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]],load:66->NXM_NX_REG1[[]]
66+in_port=4 actions=output:10,output:NXM_NX_REG0[[]],output:NXM_NX_REG1[[]],output:11
67+in_port=5 actions=load:77->NXM_NX_REG0[[0..15]],load:88->NXM_NX_REG0[[16..31]]
68+in_port=6 actions=output:NXM_NX_REG0[[0..15]],output:NXM_NX_REG0[[16..31]]
69+in_port=7 actions=load:0x110000ff->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]]
70+])
71+AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
72+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])
73+AT_CHECK([tail -1 stdout], [0],
74+ [Datapath actions: 9,55,10,55,66,11,77,88
75+])
76+OVS_VSWITCHD_STOP
77+AT_CLEANUP
78+
79+AT_SETUP([ofproto-dpif - DSCP])
80+dnl This test assumes port p1 is allocated OpenFlow port number 1.
81+OVS_VSWITCHD_START([add-port br0 p1 -- set Interface p1 type=dummy])
82+AT_DATA([flows.txt], [dnl
83+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
84+])
85+AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
86+AT_CHECK([ovs-vsctl -- \
87+ set Port p1 qos=@newqos --\
88+ --id=@newqos create QoS type=linux-htb queues=1=@q1,2=@q2 --\
89+ --id=@q1 create Queue dscp=1 --\
90+ --id=@q2 create Queue dscp=2], [0], [ignore])
91+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])
92+AT_CHECK([tail -1 stdout], [0],
93+ [Datapath actions: dnl
94+0,dnl
95+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
96+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
97+1,dnl
98+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
99+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
100+set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0x3,ttl=128,frag=no)),1,dnl
101+0
102+])
103+OVS_VSWITCHD_STOP
104+AT_CLEANUP
105+
106+AT_SETUP([ofproto-dpif - output/flood flags])
107+dnl This test assumes that OpenFlow port numbers are allocated in order
108+dnl starting from one. It does not necessarily require that they are allocated
109+dnl in the same order that they are named in the database. Just that the
110+dnl following command guarantees OpenFlow port 65534, and ports 1-7 exist in
111+dnl the bridge.
112+OVS_VSWITCHD_START([dnl
113+ add-port br0 p1 -- set Interface p1 type=dummy --\
114+ add-port br0 p2 -- set Interface p2 type=dummy --\
115+ add-port br0 p3 -- set Interface p3 type=dummy --\
116+ add-port br0 p4 -- set Interface p4 type=dummy --\
117+ add-port br0 p5 -- set Interface p5 type=dummy --\
118+ add-port br0 p6 -- set Interface p6 type=dummy --\
119+ add-port br0 p7 -- set Interface p7 type=dummy ])
120+
121+AT_DATA([flows.txt], [dnl
122+in_port=1 actions=flood
123+in_port=2 actions=all
124+in_port=3 actions=output:65534,output:1,output:2,output:3,output:4,output:5,output:6,output:7
125+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
126+])
127+AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
128+AT_CHECK([ovs-ofctl mod-port br0 5 noforward])
129+AT_CHECK([ovs-ofctl mod-port br0 6 noflood])
130+
131+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])
132+AT_CHECK([tail -1 stdout \
133+| sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
134+0
135+2
136+3
137+4
138+7
139+])
140+
141+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])
142+AT_CHECK([tail -1 stdout \
143+| sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
144+0
145+1
146+3
147+4
148+6
149+7
150+])
151+
152+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])
153+AT_CHECK([tail -1 stdout], [0],
154+ [Datapath actions: 0,1,2,4,6,7
155+])
156+
157+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])
158+AT_CHECK([tail -1 stdout], [0],
159+ [Datapath actions: set(priority(1)),0,1,2,set(priority(2)),3,set(priority(1)),6,7
160+])
161+OVS_VSWITCHD_STOP
162+AT_CLEANUP
163+
164+AT_SETUP([ofproto-dpif - set_tunnel])
165+OVS_VSWITCHD_START
166+AT_DATA([flows.txt], [dnl
167+in_port=90 actions=resubmit:1,resubmit:2,resubmit:3,resubmit:4,resubmit:5
168+in_port=1 actions=set_tunnel:1,output:1
169+in_port=2 actions=set_tunnel:1,output:2
170+in_port=3 actions=set_tunnel:2,set_tunnel:3,output:3
171+in_port=4 actions=set_tunnel:4,set_tunnel:3,output:4
172+in_port=5 actions=set_tunnel:5
173+])
174+AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
175+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])
176+AT_CHECK([tail -1 stdout], [0],
177+ [Datapath actions: set(tun_id(0x1)),1,2,set(tun_id(0x3)),3,4
178+])
179+OVS_VSWITCHD_STOP
180+AT_CLEANUP
181+
182+AT_SETUP([ofproto-dpif - VLAN handling])
183+OVS_VSWITCHD_START(
184+ [set Bridge br0 fail-mode=standalone -- \
185+ add-port br0 p1 trunks=10,12 -- \
186+ add-port br0 p2 tag=10 -- \
187+ add-port br0 p3 tag=12 \
188+ other-config:priority-tags=true -- \
189+ add-port br0 p4 tag=12 -- \
190+ add-port br0 p5 vlan_mode=native-tagged tag=10 -- \
191+ add-port br0 p6 vlan_mode=native-tagged tag=10 trunks=10,12 -- \
192+ add-port br0 p7 vlan_mode=native-untagged tag=12 -- \
193+ add-port br0 p8 vlan_mode=native-untagged tag=12 trunks=10,12 \
194+ other-config:priority-tags=true -- \
195+ set Interface p1 type=dummy -- \
196+ set Interface p2 type=dummy -- \
197+ set Interface p3 type=dummy -- \
198+ set Interface p4 type=dummy -- \
199+ set Interface p5 type=dummy -- \
200+ set Interface p6 type=dummy -- \
201+ set Interface p7 type=dummy -- \
202+ set Interface p8 type=dummy --])
203+
204+AT_CHECK(
205+ [ovs-vsctl \
206+ -- get Interface p1 ofport \
207+ -- get Interface p2 ofport \
208+ -- get Interface p3 ofport \
209+ -- get Interface p4 ofport \
210+ -- get Interface p5 ofport \
211+ -- get Interface p6 ofport \
212+ -- get Interface p7 ofport \
213+ -- get Interface p8 ofport],
214+ [0], [stdout])
215+set `cat stdout`
216+br0=0 p1=$1 p2=$2 p3=$3 p4=$4 p5=$5 p6=$6 p7=$7 p8=$8
217+
218+dnl Each of these specifies an in_port, a VLAN VID (or "none"), a VLAN
219+dnl PCP (used if the VID isn't "none") and the expected set of datapath
220+dnl actions.
221+for tuple in \
222+ "br0 none 0 drop" \
223+ "br0 0 0 drop" \
224+ "br0 0 1 drop" \
225+ "br0 10 0 p1,p5,p6,p7,p8,pop_vlan,p2" \
226+ "br0 10 1 p1,p5,p6,p7,p8,pop_vlan,p2" \
227+ "br0 11 0 p5,p7" \
228+ "br0 11 1 p5,p7" \
229+ "br0 12 0 p1,p5,p6,pop_vlan,p3,p4,p7,p8" \
230+ "br0 12 1 p1,p5,p6,pop_vlan,p4,p7,push_vlan(vid=0,pcp=1),p3,p8" \
231+ "p1 none 0 drop" \
232+ "p1 0 0 drop" \
233+ "p1 0 1 drop" \
234+ "p1 10 0 br0,p5,p6,p7,p8,pop_vlan,p2" \
235+ "p1 10 1 br0,p5,p6,p7,p8,pop_vlan,p2" \
236+ "p1 11 0 drop" \
237+ "p1 11 1 drop" \
238+ "p1 12 0 br0,p5,p6,pop_vlan,p3,p4,p7,p8" \
239+ "p1 12 1 br0,p5,p6,pop_vlan,p4,p7,push_vlan(vid=0,pcp=1),p3,p8" \
240+ "p2 none 0 push_vlan(vid=10,pcp=0),br0,p1,p5,p6,p7,p8" \
241+ "p2 0 0 pop_vlan,push_vlan(vid=10,pcp=0),br0,p1,p5,p6,p7,p8" \
242+ "p2 0 1 pop_vlan,push_vlan(vid=10,pcp=1),br0,p1,p5,p6,p7,p8" \
243+ "p2 10 0 drop" \
244+ "p2 10 1 drop" \
245+ "p2 11 0 drop" \
246+ "p2 11 1 drop" \
247+ "p2 12 0 drop" \
248+ "p2 12 1 drop" \
249+ "p3 none 0 p4,p7,p8,push_vlan(vid=12,pcp=0),br0,p1,p5,p6" \
250+ "p3 0 0 pop_vlan,p4,p7,p8,push_vlan(vid=12,pcp=0),br0,p1,p5,p6" \
251+ "p3 0 1 p8,pop_vlan,p4,p7,push_vlan(vid=12,pcp=1),br0,p1,p5,p6" \
252+ "p3 10 0 drop" \
253+ "p3 10 1 drop" \
254+ "p3 11 0 drop" \
255+ "p3 11 1 drop" \
256+ "p3 12 0 drop" \
257+ "p3 12 1 drop" \
258+ "p4 none 0 p3,p7,p8,push_vlan(vid=12,pcp=0),br0,p1,p5,p6" \
259+ "p4 0 0 pop_vlan,p3,p7,p8,push_vlan(vid=12,pcp=0),br0,p1,p5,p6" \
260+ "p4 0 1 p3,p8,pop_vlan,p7,push_vlan(vid=12,pcp=1),br0,p1,p5,p6" \
261+ "p4 10 0 drop" \
262+ "p4 10 1 drop" \
263+ "p4 11 0 drop" \
264+ "p4 11 1 drop" \
265+ "p4 12 0 drop" \
266+ "p4 12 1 drop" \
267+ "p5 none 0 p2,push_vlan(vid=10,pcp=0),br0,p1,p6,p7,p8" \
268+ "p5 0 0 pop_vlan,p2,push_vlan(vid=10,pcp=0),br0,p1,p6,p7,p8" \
269+ "p5 0 1 pop_vlan,p2,push_vlan(vid=10,pcp=1),br0,p1,p6,p7,p8" \
270+ "p5 10 0 br0,p1,p6,p7,p8,pop_vlan,p2" \
271+ "p5 10 1 br0,p1,p6,p7,p8,pop_vlan,p2" \
272+ "p5 11 0 br0,p7" \
273+ "p5 11 1 br0,p7" \
274+ "p5 12 0 br0,p1,p6,pop_vlan,p3,p4,p7,p8" \
275+ "p5 12 1 br0,p1,p6,pop_vlan,p4,p7,push_vlan(vid=0,pcp=1),p3,p8" \
276+ "p6 none 0 p2,push_vlan(vid=10,pcp=0),br0,p1,p5,p7,p8" \
277+ "p6 0 0 pop_vlan,p2,push_vlan(vid=10,pcp=0),br0,p1,p5,p7,p8" \
278+ "p6 0 1 pop_vlan,p2,push_vlan(vid=10,pcp=1),br0,p1,p5,p7,p8" \
279+ "p6 10 0 br0,p1,p5,p7,p8,pop_vlan,p2" \
280+ "p6 10 1 br0,p1,p5,p7,p8,pop_vlan,p2" \
281+ "p6 11 0 drop" \
282+ "p6 11 1 drop" \
283+ "p6 12 0 br0,p1,p5,pop_vlan,p3,p4,p7,p8" \
284+ "p6 12 1 br0,p1,p5,pop_vlan,p4,p7,push_vlan(vid=0,pcp=1),p3,p8" \
285+ "p7 none 0 p3,p4,p8,push_vlan(vid=12,pcp=0),br0,p1,p5,p6" \
286+ "p7 0 0 pop_vlan,p3,p4,p8,push_vlan(vid=12,pcp=0),br0,p1,p5,p6" \
287+ "p7 0 1 p3,p8,pop_vlan,p4,push_vlan(vid=12,pcp=1),br0,p1,p5,p6" \
288+ "p7 10 0 br0,p1,p5,p6,p8,pop_vlan,p2" \
289+ "p7 10 1 br0,p1,p5,p6,p8,pop_vlan,p2" \
290+ "p7 11 0 br0,p5" \
291+ "p7 11 1 br0,p5" \
292+ "p7 12 0 br0,p1,p5,p6,pop_vlan,p3,p4,p8" \
293+ "p7 12 1 br0,p1,p5,p6,pop_vlan,p4,push_vlan(vid=0,pcp=1),p3,p8" \
294+ "p8 none 0 p3,p4,p7,push_vlan(vid=12,pcp=0),br0,p1,p5,p6" \
295+ "p8 0 0 pop_vlan,p3,p4,p7,push_vlan(vid=12,pcp=0),br0,p1,p5,p6" \
296+ "p8 0 1 p3,pop_vlan,p4,p7,push_vlan(vid=12,pcp=1),br0,p1,p5,p6" \
297+ "p8 10 0 br0,p1,p5,p6,p7,pop_vlan,p2" \
298+ "p8 10 1 br0,p1,p5,p6,p7,pop_vlan,p2" \
299+ "p8 11 0 drop" \
300+ "p8 11 1 drop" \
301+ "p8 12 0 br0,p1,p5,p6,pop_vlan,p3,p4,p7" \
302+ "p8 12 1 br0,p1,p5,p6,pop_vlan,p4,p7,push_vlan(vid=0,pcp=1),p3"
303+do
304+ set $tuple
305+ in_port=$1
306+ vlan=$2
307+ pcp=$3
308+ expected=$4
309+
310+ eval n_in_port=\$$in_port
311+ if test $vlan = none; then
312+ flow="in_port($n_in_port),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff),eth_type(0xabcd)"
313+ else
314+ 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))"
315+ fi
316+
317+ echo "----------------------------------------------------------------------"
318+ echo "in_port=$in_port vlan=$vlan pcp=$pcp"
319+
320+ AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
321+ actual=`tail -1 stdout | sed 's/Datapath actions: //'`
322+
323+ 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])
324+ mv stdout expout
325+ 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])
326+done
327+
328+OVS_VSWITCHD_STOP
329+AT_CLEANUP
330+
331+AT_SETUP([ofproto-dpif - fragment handling])
332+OVS_VSWITCHD_START
333+AT_DATA([flows.txt], [dnl
334+priority=75 tcp ip_frag=no tp_dst=80 actions=output:1
335+priority=75 tcp ip_frag=first tp_dst=80 actions=output:2
336+priority=75 tcp ip_frag=later tp_dst=80 actions=output:3
337+priority=50 tcp ip_frag=no actions=output:4
338+priority=50 tcp ip_frag=first actions=output:5
339+priority=50 tcp ip_frag=later actions=output:6
340+])
341+AT_CHECK([ovs-ofctl replace-flows br0 flows.txt])
342+
343+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"
344+no_flow="$base_flow,frag=no),tcp(src=12345,dst=80)"
345+first_flow="$base_flow,frag=first),tcp(src=12345,dst=80)"
346+later_flow="$base_flow,frag=later)"
347+
348+ # mode no first later
349+for tuple in \
350+ 'normal 1 5 6' \
351+ 'drop 1 drop drop' \
352+ 'nx-match 1 2 6'
353+do
354+ set $tuple
355+ mode=$1
356+ no=$2
357+ first=$3
358+ later=$4
359+
360+ AT_CHECK([ovs-ofctl set-frags br0 $mode])
361+ for type in no first later; do
362+ eval flow=\$${type}_flow exp_output=\$$type
363+ AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
364+ AT_CHECK_UNQUOTED([tail -1 stdout], [0], [Datapath actions: $exp_output
365+])
366+ done
367+done
368+OVS_VSWITCHD_STOP
369+AT_CLEANUP
370+
371+AT_SETUP([ofproto-dpif - exit])
372+OVS_VSWITCHD_START
373+AT_DATA([flows.txt], [dnl
374+in_port=1 actions=output:10,exit,output:11
375+in_port=2 actions=output:12,resubmit:1,output:12
376+in_port=3 actions=output:13,resubmit:2,output:14
377+])
378+AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
379+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])
380+AT_CHECK([tail -1 stdout], [0],
381+ [Datapath actions: 10
382+])
383+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])
384+AT_CHECK([tail -1 stdout], [0],
385+ [Datapath actions: 12,10
386+])
387+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])
388+AT_CHECK([tail -1 stdout], [0],
389+ [Datapath actions: 13,12,10
390+])
391+OVS_VSWITCHD_STOP
392+AT_CLEANUP
393+
394+
395+AT_SETUP([ofproto-dpif - mirroring, select_all])
396+OVS_VSWITCHD_START
397+AT_CHECK([ovs-vsctl \
398+ add-port br0 p1 -- set Interface p1 type=dummy --\
399+ add-port br0 p2 -- set Interface p2 type=dummy --\
400+ add-port br0 p3 -- set Interface p3 type=dummy --\
401+ set Bridge br0 mirrors=@m --\
402+ --id=@p3 get Port p3 --\
403+ --id=@m create Mirror name=mymirror \
404+ select_all=true output_port=@p3 ], [0], [stdout])
405+AT_CHECK([perl $srcdir/uuidfilt.pl stdout], [0], [dnl
406+<0>
407+])
408+
409+AT_CHECK(
410+ [ovs-vsctl \
411+ -- get Interface p1 ofport \
412+ -- get Interface p2 ofport \
413+ -- get Interface p3 ofport],
414+ [0], [stdout])
415+set `cat stdout`
416+p1=$1 p2=$2 p3=$3
417+
418+AT_DATA([flows.txt], [dnl
419+in_port=1 actions=output:2
420+in_port=2 actions=output:1
421+])
422+AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
423+
424+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)"
425+AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
426+AT_CHECK_UNQUOTED([tail -1 stdout], [0],
427+ [Datapath actions: $p2,$p3
428+])
429+
430+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)"
431+AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
432+AT_CHECK_UNQUOTED([tail -1 stdout], [0],
433+ [Datapath actions: $p1,$p3
434+])
435+
436+OVS_VSWITCHD_STOP
437+AT_CLEANUP
438+
439+
440+AT_SETUP([ofproto-dpif - mirroring, select_src])
441+OVS_VSWITCHD_START
442+AT_CHECK([ovs-vsctl \
443+ add-port br0 p1 -- set Interface p1 type=dummy --\
444+ add-port br0 p2 -- set Interface p2 type=dummy --\
445+ add-port br0 p3 -- set Interface p3 type=dummy --\
446+ set Bridge br0 mirrors=@m --\
447+ --id=@p1 get Port p1 -- --id=@p3 get Port p3 --\
448+ --id=@m create Mirror name=mymirror \
449+ select_src_port=@p1 output_port=@p3 ], [0], [stdout])
450+AT_CHECK([perl $srcdir/uuidfilt.pl stdout], [0], [dnl
451+<0>
452+])
453+
454+AT_CHECK(
455+ [ovs-vsctl \
456+ -- get Interface p1 ofport \
457+ -- get Interface p2 ofport \
458+ -- get Interface p3 ofport],
459+ [0], [stdout])
460+set `cat stdout`
461+p1=$1 p2=$2 p3=$3
462+
463+AT_DATA([flows.txt], [dnl
464+in_port=1 actions=output:2
465+in_port=2 actions=output:1
466+])
467+AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
468+
469+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)"
470+AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
471+AT_CHECK_UNQUOTED([tail -1 stdout], [0],
472+ [Datapath actions: $p2,$p3
473+])
474+
475+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)"
476+AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
477+AT_CHECK_UNQUOTED([tail -1 stdout], [0],
478+ [Datapath actions: $p1
479+])
480+OVS_VSWITCHD_STOP
481+AT_CLEANUP
482+
483+AT_SETUP([ofproto-dpif - mirroring, OFPP_NONE ingress port])
484+OVS_VSWITCHD_START
485+AT_CHECK([ovs-vsctl \
486+ add-port br0 p1 -- set Interface p1 type=dummy --\
487+ add-port br0 p2 -- set Interface p2 type=dummy --\
488+ set Bridge br0 mirrors=@m --\
489+ --id=@p2 get Port p2 --\
490+ --id=@m create Mirror name=mymirror \
491+ select_all=true output_port=@p2 ], [0], [stdout])
492+AT_CHECK([perl $srcdir/uuidfilt.pl stdout], [0], [dnl
493+<0>
494+])
495+
496+AT_CHECK(
497+ [ovs-vsctl \
498+ -- get Interface p1 ofport \
499+ -- get Interface p2 ofport],
500+ [0], [stdout])
501+set `cat stdout`
502+p1=$1 p2=$2
503+
504+AT_CHECK([ovs-ofctl add-flow br0 action=output:1])
505+
506+# "in_port" defaults to OFPP_NONE if it's not specified.
507+flow="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)"
508+AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
509+AT_CHECK_UNQUOTED([tail -1 stdout], [0],
510+ [Datapath actions: $p1,$p2
511+])
512+
513+OVS_VSWITCHD_STOP
514+AT_CLEANUP
515+
516+
517+AT_SETUP([ofproto-dpif - mirroring, select_dst])
518+OVS_VSWITCHD_START
519+AT_CHECK([ovs-vsctl \
520+ add-port br0 p1 -- set Interface p1 type=dummy --\
521+ add-port br0 p2 -- set Interface p2 type=dummy --\
522+ add-port br0 p3 -- set Interface p3 type=dummy --\
523+ set Bridge br0 mirrors=@m --\
524+ --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
525+ --id=@m create Mirror name=mymirror \
526+ select_dst_port=@p2 output_port=@p3 ], [0], [stdout])
527+AT_CHECK([perl $srcdir/uuidfilt.pl stdout], [0], [dnl
528+<0>
529+])
530+
531+AT_CHECK(
532+ [ovs-vsctl \
533+ -- get Interface p1 ofport \
534+ -- get Interface p2 ofport \
535+ -- get Interface p3 ofport],
536+ [0], [stdout])
537+set `cat stdout`
538+p1=$1 p2=$2 p3=$3
539+
540+AT_DATA([flows.txt], [dnl
541+in_port=1 actions=output:2
542+in_port=2 actions=output:1
543+])
544+AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
545+
546+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)"
547+AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
548+AT_CHECK_UNQUOTED([tail -1 stdout], [0],
549+ [Datapath actions: $p2,$p3
550+])
551+
552+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)"
553+AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
554+AT_CHECK_UNQUOTED([tail -1 stdout], [0],
555+ [Datapath actions: $p1
556+])
557+
558+OVS_VSWITCHD_STOP
559+AT_CLEANUP
560+
561+
562+AT_SETUP([ofproto-dpif - mirroring, select_vlan])
563+OVS_VSWITCHD_START
564+AT_CHECK([ovs-vsctl \
565+ add-port br0 p1 -- set Interface p1 type=dummy --\
566+ add-port br0 p2 -- set Interface p2 type=dummy --\
567+ add-port br0 p3 -- set Interface p3 type=dummy --\
568+ set Bridge br0 mirrors=@m --\
569+ --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
570+ --id=@m create Mirror name=mymirror \
571+ select_all=true select_vlan=11 output_port=@p3 ], [0], [stdout])
572+AT_CHECK([perl $srcdir/uuidfilt.pl stdout], [0], [dnl
573+<0>
574+])
575+
576+AT_CHECK(
577+ [ovs-vsctl \
578+ -- get Interface p1 ofport \
579+ -- get Interface p2 ofport \
580+ -- get Interface p3 ofport],
581+ [0], [stdout])
582+set `cat stdout`
583+p1=$1 p2=$2 p3=$3
584+
585+AT_DATA([flows.txt], [dnl
586+in_port=1, actions=output:2
587+])
588+AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
589+
590+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)"
591+AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
592+AT_CHECK_UNQUOTED([tail -1 stdout], [0],
593+ [Datapath actions: $p2
594+])
595+
596+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))"
597+AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
598+AT_CHECK_UNQUOTED([tail -1 stdout], [0],
599+ [Datapath actions: $p2
600+])
601+
602+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))"
603+AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
604+AT_CHECK_UNQUOTED([tail -1 stdout], [0],
605+ [Datapath actions: $p2,$p3
606+])
607+
608+OVS_VSWITCHD_STOP
609+AT_CLEANUP
610+
611+
612+AT_SETUP([ofproto-dpif - mirroring, output_port])
613+OVS_VSWITCHD_START
614+AT_CHECK([ovs-vsctl \
615+ add-port br0 p1 -- set Interface p1 type=dummy --\
616+ add-port br0 p2 -- set Interface p2 type=dummy --\
617+ add-port br0 p3 -- set Interface p3 type=dummy --\
618+ set Bridge br0 mirrors=@m --\
619+ --id=@p3 get Port p3 --\
620+ --id=@m create Mirror name=mymirror \
621+ select_all=true output_port=@p3 ], [0], [stdout])
622+AT_CHECK([perl $srcdir/uuidfilt.pl stdout], [0], [dnl
623+<0>
624+])
625+
626+AT_CHECK(
627+ [ovs-vsctl \
628+ -- get Interface p1 ofport \
629+ -- get Interface p2 ofport \
630+ -- get Interface p3 ofport],
631+ [0], [stdout])
632+set `cat stdout`
633+p1=$1 p2=$2 p3=$3
634+
635+AT_DATA([flows.txt], [dnl
636+in_port=1 actions=mod_vlan_vid:17,output:2
637+in_port=2 actions=output:1
638+])
639+AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
640+
641+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)"
642+AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
643+AT_CHECK_UNQUOTED([tail -1 stdout], [0],
644+ [Datapath actions: push_vlan(vid=17,pcp=0),$p2,pop_vlan,$p3
645+])
646+
647+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)"
648+AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
649+AT_CHECK_UNQUOTED([tail -1 stdout], [0],
650+ [Datapath actions: $p1,$p3
651+])
652+
653+OVS_VSWITCHD_STOP
654+AT_CLEANUP
655+
656+
657+AT_SETUP([ofproto-dpif - mirroring, output_vlan])
658+OVS_VSWITCHD_START
659+AT_CHECK([ovs-vsctl \
660+ add-port br0 p1 -- set Interface p1 type=dummy --\
661+ add-port br0 p2 -- set Interface p2 type=dummy --\
662+ set Bridge br0 mirrors=@m --\
663+ --id=@m create Mirror name=mymirror \
664+ select_all=true output_vlan=12 ], [0], [stdout])
665+AT_CHECK([perl $srcdir/uuidfilt.pl stdout], [0], [dnl
666+<0>
667+])
668+
669+AT_CHECK(
670+ [ovs-vsctl \
671+ -- get Interface p1 ofport \
672+ -- get Interface p2 ofport],
673+ [0], [stdout])
674+set `cat stdout`
675+br0=0 p1=$1 p2=$2
676+
677+AT_DATA([flows.txt], [dnl
678+in_port=1 actions=output:2
679+in_port=2 actions=mod_vlan_vid:17,output:1
680+])
681+AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
682+
683+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)"
684+AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
685+actual=`tail -1 stdout | sed 's/Datapath actions: //'`
686+
687+expected="$p2,push_vlan(vid=12,pcp=0),$br0,$p1,$p2"
688+AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected" br0=$br0 p1=$p1 p2=$p2], [0], [stdout])
689+mv stdout expout
690+AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual" br0=$br0 p1=$p1 p2=$p2], [0], [expout])
691+
692+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)"
693+AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
694+actual=`tail -1 stdout | sed 's/Datapath actions: //'`
695+
696+expected="push_vlan(vid=17,pcp=0),$p1,pop_vlan,push_vlan(vid=12,pcp=0),$br0,$p1,$p2"
697+AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected" br0=$br0 p1=$p1 p2=$p2], [0], [stdout])
698+mv stdout expout
699+AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual" br0=$br0 p1=$p1 p2=$p2], [0], [expout])
700+
701+OVS_VSWITCHD_STOP
702+AT_CLEANUP
703+
704+m4_define([OFPROTO_TRACE],
705+ [flow="$2"
706+ AT_CHECK([ovs-appctl ofproto/trace $1 "$flow" $3], [0], [stdout])
707+ actual=`tail -1 stdout | sed 's/Datapath actions: //'`
708+ expected="$4"
709+ AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected" $5],
710+ [0], [stdout])
711+ mv stdout expout
712+ AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual" $5],
713+ [0], [expout])])
714+
715+AT_SETUP([ofproto-dpif - MAC learning])
716+OVS_VSWITCHD_START(
717+ [set bridge br0 fail-mode=standalone -- \
718+ add-port br0 p1 -- set Interface p1 type=dummy -- \
719+ add-port br0 p2 -- set Interface p2 type=dummy -- \
720+ add-port br0 p3 -- set Interface p3 type=dummy])
721+
722+AT_CHECK(
723+ [ovs-vsctl \
724+ -- get Interface p1 ofport \
725+ -- get Interface p2 ofport \
726+ -- get Interface p3 ofport],
727+ [0], [stdout])
728+set `cat stdout`
729+br0=0 p1=$1 p2=$2 p3=$3
730+arp='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)'
731+
732+# Trace an ARP packet arriving on p3, to create a MAC learning entry.
733+OFPROTO_TRACE(
734+ [br0],
735+ [in_port($p3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
736+ [-generate],
737+ [$br0,$p1,$p2],
738+ [br0=$br0 p1=$p1 p2=$p2 p3=$p3])
739+
740+# Check for the MAC learning entry.
741+AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]$/?/'], [0], [dnl
742+ port VLAN MAC Age
743+ $p3 0 50:54:00:00:00:05 ?
744+])
745+
746+# Trace a packet arrival destined for the learned MAC.
747+# (This will also learn a MAC.)
748+OFPROTO_TRACE(
749+ [br0],
750+ [in_port($p1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05),$arp],
751+ [-generate],
752+ [$p3],
753+ [br0=$br0 p1=$p1 p2=$p2 p3=$p3])
754+
755+# Check for both MAC learning entries.
756+AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]$/?/'], [0], [dnl
757+ port VLAN MAC Age
758+ $p3 0 50:54:00:00:00:05 ?
759+ $p1 0 50:54:00:00:00:06 ?
760+])
761+
762+# Trace a packet arrival that updates the first learned MAC entry.
763+OFPROTO_TRACE(
764+ [br0],
765+ [in_port($p2),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
766+ [-generate],
767+ [$br0,$p1,$p3],
768+ [br0=$br0 p1=$p1 p2=$p2 p3=$p3])
769+
770+# Check that the MAC learning entry was updated.
771+AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]$/?/'], [0], [dnl
772+ port VLAN MAC Age
773+ $p1 0 50:54:00:00:00:06 ?
774+ $p2 0 50:54:00:00:00:05 ?
775+])
776+
777+# Add another bridge.
778+AT_CHECK(
779+ [ovs-vsctl \
780+ -- add-br br1 \
781+ -- set bridge br1 datapath-type=dummy \
782+ -- add-port br1 p4 -- set interface p4 type=dummy \
783+ -- add-port br1 p5 -- set interface p5 type=dummy])
784+AT_CHECK(
785+ [ovs-vsctl \
786+ -- get Interface p4 ofport \
787+ -- get Interface p5 ofport],
788+ [0], [stdout])
789+set `cat stdout`
790+br1=0 p4=$1 p5=$2
791+
792+# Trace some packet arrivals in br1 to create MAC learning entries there too.
793+OFPROTO_TRACE(
794+ [br1],
795+ [in_port($p4),eth(src=50:54:00:00:00:06,dst=ff:ff:ff:ff:ff:ff),$arp],
796+ [-generate],
797+ [$br1,$p5],
798+ [br1=$br1 p4=$p4 p5=$p5])
799+OFPROTO_TRACE(
800+ [br1],
801+ [in_port($p5),eth(src=50:54:00:00:00:07,dst=ff:ff:ff:ff:ff:ff),$arp],
802+ [-generate],
803+ [$br1,$p4],
804+ [br1=$br1 p4=$p4 p5=$p5])
805+
806+# Check that the MAC learning entries were added.
807+AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]$/?/'], [0], [dnl
808+ port VLAN MAC Age
809+ $p4 0 50:54:00:00:00:06 ?
810+ $p5 0 50:54:00:00:00:07 ?
811+])
812+
813+# Delete port p1 and see that its MAC learning entry disappeared, and
814+# that the MAC learning entry for the same MAC was also deleted from br1.
815+AT_CHECK([ovs-vsctl del-port p1])
816+AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]$/?/'], [0], [dnl
817+ port VLAN MAC Age
818+ $p2 0 50:54:00:00:00:05 ?
819+])
820+AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]$/?/'], [0], [dnl
821+ port VLAN MAC Age
822+ $p5 0 50:54:00:00:00:07 ?
823+])
824+
825+OVS_VSWITCHD_STOP
826+AT_CLEANUP
827
828=== modified file 'debian/changelog'
829--- debian/changelog 2012-07-16 11:06:23 +0000
830+++ debian/changelog 2012-07-26 19:09:22 +0000
831@@ -1,3 +1,9 @@
832+openvswitch (1.4.0-1ubuntu1.2) precise; urgency=low
833+
834+ * debian/patches/fix_ftbfs_big_endian.patch: Fix FTBFS on PPC.
835+
836+ -- Adam Gandelman <adamg@canonical.com> Thu, 26 Jul 2012 11:23:06 -0700
837+
838 openvswitch (1.4.0-1ubuntu1.1) precise-proposed; urgency=low
839
840 * debian/patches/update_odputil_key_bytes.patch: Update odp-util flow
841
842=== added file 'debian/patches/fix_ftbfs_big_endian.patch'
843--- debian/patches/fix_ftbfs_big_endian.patch 1970-01-01 00:00:00 +0000
844+++ debian/patches/fix_ftbfs_big_endian.patch 2012-07-26 19:09:22 +0000
845@@ -0,0 +1,128 @@
846+From f79982ba930364f2d3935196dc13b422ba711ef2 Mon Sep 17 00:00:00 2001
847+From: Ben Pfaff <blp@nicira.com>
848+Date: Thu, 26 Apr 2012 10:57:14 -0700
849+Subject: [PATCH] tests: Fix mirroring tests on big-endian architectures.
850+
851+These tests had a hidden dependency on the hash function in use,
852+which yields different results on big-endian and little-endian
853+architectures. This commit fixes the problem by properly
854+parameterizing the parts that can differ.
855+
856+Signed-off-by: Ben Pfaff <blp@nicira.com>
857+---
858+ tests/ofproto-dpif.at | 60 +++++++++++++++++++++++++++++-------------------
859+ 1 files changed, 36 insertions(+), 24 deletions(-)
860+
861+Index: openvswitch/tests/ofproto-dpif.at
862+===================================================================
863+--- openvswitch.orig/tests/ofproto-dpif.at 2012-07-26 10:55:16.435782799 -0700
864++++ openvswitch/tests/ofproto-dpif.at 2012-07-26 10:55:18.051782728 -0700
865+@@ -401,10 +401,12 @@
866+ set `cat stdout`
867+ p1=$1 p2=$2 p3=$3
868+
869+-AT_DATA([flows.txt], [dnl
870+-in_port=1 actions=output:2
871+-in_port=2 actions=output:1
872+-])
873++cat > flows.txt <<EOF
874++in_port=$p1 actions=output:$p2
875++in_port=$p2 actions=output:$p1
876++EOF
877++AT
878++AT_CAPTURE_FILE([flows.txt])
879+ AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
880+
881+ 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)"
882+@@ -446,10 +448,12 @@
883+ set `cat stdout`
884+ p1=$1 p2=$2 p3=$3
885+
886+-AT_DATA([flows.txt], [dnl
887+-in_port=1 actions=output:2
888+-in_port=2 actions=output:1
889+-])
890++cat > flows.txt <<EOF
891++in_port=$p1 actions=output:$p2
892++in_port=$p2 actions=output:$p1
893++EOF
894++AT
895++AT_CAPTURE_FILE([flows.txt])
896+ AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
897+
898+ 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)"
899+@@ -487,7 +491,7 @@
900+ set `cat stdout`
901+ p1=$1 p2=$2
902+
903+-AT_CHECK([ovs-ofctl add-flow br0 action=output:1])
904++AT_CHECK([ovs-ofctl add-flow br0 action=output:$p1])
905+
906+ # "in_port" defaults to OFPP_NONE if it's not specified.
907+ flow="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)"
908+@@ -523,10 +527,12 @@
909+ set `cat stdout`
910+ p1=$1 p2=$2 p3=$3
911+
912+-AT_DATA([flows.txt], [dnl
913+-in_port=1 actions=output:2
914+-in_port=2 actions=output:1
915+-])
916++cat > flows.txt <<EOF
917++in_port=$p1 actions=output:$p2
918++in_port=$p2 actions=output:$p1
919++EOF
920++AT
921++AT_CAPTURE_FILE([flows.txt])
922+ AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
923+
924+ 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)"
925+@@ -568,9 +574,11 @@
926+ set `cat stdout`
927+ p1=$1 p2=$2 p3=$3
928+
929+-AT_DATA([flows.txt], [dnl
930+-in_port=1, actions=output:2
931+-])
932++cat > flows.txt <<EOF
933++in_port=$p1 actions=output:$p2
934++EOF
935++AT
936++AT_CAPTURE_FILE([flows.txt])
937+ AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
938+
939+ 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)"
940+@@ -618,10 +626,12 @@
941+ set `cat stdout`
942+ p1=$1 p2=$2 p3=$3
943+
944+-AT_DATA([flows.txt], [dnl
945+-in_port=1 actions=mod_vlan_vid:17,output:2
946+-in_port=2 actions=output:1
947+-])
948++cat > flows.txt <<EOF
949++in_port=$p1 actions=mod_vlan_vid:17,output:$p2
950++in_port=$p2 actions=output:$p1
951++EOF
952++AT
953++AT_CAPTURE_FILE([flows.txt])
954+ AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
955+
956+ 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)"
957+@@ -660,10 +670,12 @@
958+ set `cat stdout`
959+ br0=0 p1=$1 p2=$2
960+
961+-AT_DATA([flows.txt], [dnl
962+-in_port=1 actions=output:2
963+-in_port=2 actions=mod_vlan_vid:17,output:1
964+-])
965++cat > flows.txt <<EOF
966++in_port=$p1 actions=output:$p2
967++in_port=$p2 actions=mod_vlan_vid:17,output:$p1
968++EOF
969++AT
970++AT_CAPTURE_FILE([flows.txt])
971+ AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
972+
973+ 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)"
974
975=== modified file 'debian/patches/series'
976--- debian/patches/series 2012-07-16 11:06:23 +0000
977+++ debian/patches/series 2012-07-26 19:09:22 +0000
978@@ -1,1 +1,2 @@
979 update_odputil_key_bytes.patch
980+fix_ftbfs_big_endian.patch
981
982=== modified file 'tests/ofproto-dpif.at'
983--- tests/ofproto-dpif.at 2012-01-30 23:36:00 +0000
984+++ tests/ofproto-dpif.at 2012-07-26 19:09:22 +0000
985@@ -401,10 +401,12 @@
986 set `cat stdout`
987 p1=$1 p2=$2 p3=$3
988
989-AT_DATA([flows.txt], [dnl
990-in_port=1 actions=output:2
991-in_port=2 actions=output:1
992-])
993+cat > flows.txt <<EOF
994+in_port=$p1 actions=output:$p2
995+in_port=$p2 actions=output:$p1
996+EOF
997+AT
998+AT_CAPTURE_FILE([flows.txt])
999 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1000
1001 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)"
1002@@ -446,10 +448,12 @@
1003 set `cat stdout`
1004 p1=$1 p2=$2 p3=$3
1005
1006-AT_DATA([flows.txt], [dnl
1007-in_port=1 actions=output:2
1008-in_port=2 actions=output:1
1009-])
1010+cat > flows.txt <<EOF
1011+in_port=$p1 actions=output:$p2
1012+in_port=$p2 actions=output:$p1
1013+EOF
1014+AT
1015+AT_CAPTURE_FILE([flows.txt])
1016 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1017
1018 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)"
1019@@ -487,7 +491,7 @@
1020 set `cat stdout`
1021 p1=$1 p2=$2
1022
1023-AT_CHECK([ovs-ofctl add-flow br0 action=output:1])
1024+AT_CHECK([ovs-ofctl add-flow br0 action=output:$p1])
1025
1026 # "in_port" defaults to OFPP_NONE if it's not specified.
1027 flow="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)"
1028@@ -523,10 +527,12 @@
1029 set `cat stdout`
1030 p1=$1 p2=$2 p3=$3
1031
1032-AT_DATA([flows.txt], [dnl
1033-in_port=1 actions=output:2
1034-in_port=2 actions=output:1
1035-])
1036+cat > flows.txt <<EOF
1037+in_port=$p1 actions=output:$p2
1038+in_port=$p2 actions=output:$p1
1039+EOF
1040+AT
1041+AT_CAPTURE_FILE([flows.txt])
1042 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1043
1044 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)"
1045@@ -568,9 +574,11 @@
1046 set `cat stdout`
1047 p1=$1 p2=$2 p3=$3
1048
1049-AT_DATA([flows.txt], [dnl
1050-in_port=1, actions=output:2
1051-])
1052+cat > flows.txt <<EOF
1053+in_port=$p1 actions=output:$p2
1054+EOF
1055+AT
1056+AT_CAPTURE_FILE([flows.txt])
1057 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1058
1059 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)"
1060@@ -618,10 +626,12 @@
1061 set `cat stdout`
1062 p1=$1 p2=$2 p3=$3
1063
1064-AT_DATA([flows.txt], [dnl
1065-in_port=1 actions=mod_vlan_vid:17,output:2
1066-in_port=2 actions=output:1
1067-])
1068+cat > flows.txt <<EOF
1069+in_port=$p1 actions=mod_vlan_vid:17,output:$p2
1070+in_port=$p2 actions=output:$p1
1071+EOF
1072+AT
1073+AT_CAPTURE_FILE([flows.txt])
1074 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1075
1076 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)"
1077@@ -660,10 +670,12 @@
1078 set `cat stdout`
1079 br0=0 p1=$1 p2=$2
1080
1081-AT_DATA([flows.txt], [dnl
1082-in_port=1 actions=output:2
1083-in_port=2 actions=mod_vlan_vid:17,output:1
1084-])
1085+cat > flows.txt <<EOF
1086+in_port=$p1 actions=output:$p2
1087+in_port=$p2 actions=mod_vlan_vid:17,output:$p1
1088+EOF
1089+AT
1090+AT_CAPTURE_FILE([flows.txt])
1091 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1092
1093 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)"

Subscribers

People subscribed via source and target branches