]> git.proxmox.com Git - mirror_ovs.git/blame - tests/ofproto-dpif.at
nicira-ext: New action "exit".
[mirror_ovs.git] / tests / ofproto-dpif.at
CommitLineData
29901626
BP
1AT_BANNER([ofproto-dpif])
2
3AT_SETUP([ofproto-dpif - resubmit])
023e1e0a 4OVS_VSWITCHD_START
29901626
BP
5AT_DATA([flows.txt], [dnl
6table=0 in_port=1 priority=1000 icmp actions=output(10),resubmit(2),output(19),resubmit(3),output(21)
7table=0 in_port=2 priority=1500 icmp actions=output(11),resubmit(,1),output(16),resubmit(2,1),output(18)
8table=0 in_port=3 priority=2000 icmp actions=output(20)
9table=1 in_port=1 priority=1000 icmp actions=output(12),resubmit(4,1),output(13),resubmit(3),output(15)
10table=1 in_port=2 priority=1500 icmp actions=output(17),resubmit(,2)
11table=1 in_port=3 priority=1500 icmp actions=output(14),resubmit(,2)
12])
13AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
023e1e0a 14AT_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,frag=no),icmp(type=8,code=0)'], [0], [stdout])
29901626
BP
15AT_CHECK([tail -1 stdout], [0],
16 [Datapath actions: 10,11,12,13,14,15,16,17,18,19,20,21
17])
023e1e0a 18OVS_VSWITCHD_STOP
29901626 19AT_CLEANUP
58a89177
EJ
20
21AT_SETUP([ofproto-dpif - registers])
023e1e0a 22OVS_VSWITCHD_START
58a89177
EJ
23AT_DATA([flows.txt], [dnl
24in_port=90 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:91
25in_port=91 actions=resubmit:5,resubmit:6,resubmit:7,resubmit:92
26in_port=92 actions=resubmit:8,resubmit:9,resubmit:10,resubmit:11
27in_port=2 actions=load:0x000db000->NXM_NX_REG0[[]]
28in_port=3 actions=load:0xdea->NXM_NX_REG0[[20..31]]
29in_port=4 actions=load:0xeef->NXM_NX_REG0[[0..11]]
30in_port=5 actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]]
31in_port=6 actions=load:0x22222222->NXM_NX_REG2[[]]
32in_port=7 actions=move:NXM_NX_REG1[[20..31]]->NXM_NX_REG2[[0..11]]
33in_port=8 actions=move:NXM_NX_REG1[[0..11]]->NXM_NX_REG2[[20..31]]
34in_port=9,reg0=0xdeadbeef actions=output:20
35in_port=10,reg1=0xdeadbeef actions=output:21
36in_port=11,reg2=0xeef22dea actions=output:22
37])
38AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
023e1e0a 39AT_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,frag=no),icmp(type=8,code=0)'], [0], [stdout])
58a89177
EJ
40AT_CHECK([tail -1 stdout], [0],
41 [Datapath actions: 20,21,22
42])
023e1e0a 43OVS_VSWITCHD_STOP
58a89177 44AT_CLEANUP
f694937d
EJ
45
46AT_SETUP([ofproto-dpif - output])
023e1e0a 47OVS_VSWITCHD_START
f694937d
EJ
48AT_DATA([flows.txt], [dnl
49in_port=1 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:5,resubmit:6,resubmit:7
50in_port=2 actions=output:9
51in_port=3 actions=load:55->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]],load:66->NXM_NX_REG1[[]]
52in_port=4 actions=output:10,output:NXM_NX_REG0[[]],output:NXM_NX_REG1[[]],output:11
53in_port=5 actions=load:77->NXM_NX_REG0[[0..15]],load:88->NXM_NX_REG0[[16..31]]
54in_port=6 actions=output:NXM_NX_REG0[[0..15]],output:NXM_NX_REG0[[16..31]]
55in_port=7 actions=load:0x110000ff->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]]
56])
57AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
023e1e0a 58AT_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,frag=no),icmp(type=8,code=0)'], [0], [stdout])
f694937d
EJ
59AT_CHECK([tail -1 stdout], [0],
60 [Datapath actions: 9,55,10,55,66,11,77,88
61])
023e1e0a 62OVS_VSWITCHD_STOP
f694937d 63AT_CLEANUP
8e9ce036
EJ
64
65AT_SETUP([ofproto-dpif - set_tunnel])
023e1e0a 66OVS_VSWITCHD_START
8e9ce036
EJ
67AT_DATA([flows.txt], [dnl
68in_port=90 actions=resubmit:1,resubmit:2,resubmit:3,resubmit:4,resubmit:5
69in_port=1 actions=set_tunnel:1,output:1
70in_port=2 actions=set_tunnel:1,output:2
71in_port=3 actions=set_tunnel:2,set_tunnel:3,output:3
72in_port=4 actions=set_tunnel:4,set_tunnel:3,output:4
73in_port=5 actions=set_tunnel:5
74])
75AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
023e1e0a 76AT_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,frag=no),icmp(type=8,code=0)'], [0], [stdout])
8e9ce036 77AT_CHECK([tail -1 stdout], [0],
4edb9ae9 78 [Datapath actions: set(tun_id(0x1)),1,2,set(tun_id(0x3)),3,4
8e9ce036 79])
023e1e0a 80OVS_VSWITCHD_STOP
8e9ce036 81AT_CLEANUP
04c956fc 82
ecac4ebf 83AT_SETUP([ofproto-dpif - VLAN handling])
04c956fc 84OVS_VSWITCHD_START(
023e1e0a
BP
85 [set Bridge br0 fail-mode=standalone -- \
86 add-port br0 p1 trunks=10,12 -- \
ecac4ebf
BP
87 add-port br0 p2 tag=10 -- \
88 add-port br0 p3 tag=12 -- \
89 add-port br0 p4 tag=12 -- \
90 add-port br0 p5 vlan_mode=native-tagged tag=10 -- \
91 add-port br0 p6 vlan_mode=native-tagged tag=10 trunks=10,12 -- \
92 add-port br0 p7 vlan_mode=native-untagged tag=12 -- \
93 add-port br0 p8 vlan_mode=native-untagged tag=12 trunks=10,12 -- \
94 set Interface p1 type=dummy -- \
95 set Interface p2 type=dummy -- \
96 set Interface p3 type=dummy -- \
97 set Interface p4 type=dummy -- \
98 set Interface p5 type=dummy -- \
99 set Interface p6 type=dummy -- \
100 set Interface p7 type=dummy -- \
101 set Interface p8 type=dummy --])
04c956fc
BP
102
103AT_CHECK(
104 [ovs-vsctl \
105 -- get Interface p1 ofport \
106 -- get Interface p2 ofport \
107 -- get Interface p3 ofport \
ecac4ebf
BP
108 -- get Interface p4 ofport \
109 -- get Interface p5 ofport \
110 -- get Interface p6 ofport \
111 -- get Interface p7 ofport \
112 -- get Interface p8 ofport],
04c956fc
BP
113 [0], [stdout])
114set `cat stdout`
ecac4ebf 115br0=0 p1=$1 p2=$2 p3=$3 p4=$4 p5=$5 p6=$6 p7=$7 p8=$8
04c956fc 116
ecac4ebf
BP
117dnl Each of these specifies an in_port, a VLAN VID (or "none"), a VLAN
118dnl PCP (used if the VID isn't "none") and the expected set of datapath
119dnl actions.
120dnl
121dnl XXX Some of these actually output an 802.1Q header to an access port
122dnl (see for example the actions for in_port=p3, vlan=0) to qualify the
123dnl packet with a priority. That should be configurable.
04c956fc 124for tuple in \
ecac4ebf
BP
125 "br0 none 0 drop" \
126 "br0 0 0 drop" \
127 "br0 0 1 drop" \
4edb9ae9
PS
128 "br0 10 0 p1,p5,p6,p7,p8,pop(vlan),p2" \
129 "br0 10 1 p1,p5,p6,p7,p8,pop(vlan),push(vlan(vid=0,pcp=1)),p2" \
ecac4ebf
BP
130 "br0 11 0 p5,p7" \
131 "br0 11 1 p5,p7" \
4edb9ae9
PS
132 "br0 12 0 p1,p5,p6,pop(vlan),p3,p4,p7,p8" \
133 "br0 12 1 p1,p5,p6,pop(vlan),push(vlan(vid=0,pcp=1)),p3,p4,p7,p8" \
ecac4ebf
BP
134 "p1 none 0 drop" \
135 "p1 0 0 drop" \
136 "p1 0 1 drop" \
4edb9ae9
PS
137 "p1 10 0 br0,p5,p6,p7,p8,pop(vlan),p2" \
138 "p1 10 1 br0,p5,p6,p7,p8,pop(vlan),push(vlan(vid=0,pcp=1)),p2" \
ecac4ebf
BP
139 "p1 11 0 drop" \
140 "p1 11 1 drop" \
4edb9ae9
PS
141 "p1 12 0 br0,p5,p6,pop(vlan),p3,p4,p7,p8" \
142 "p1 12 1 br0,p5,p6,pop(vlan),push(vlan(vid=0,pcp=1)),p3,p4,p7,p8" \
143 "p2 none 0 push(vlan(vid=10,pcp=0)),br0,p1,p5,p6,p7,p8" \
144 "p2 0 0 pop(vlan),push(vlan(vid=10,pcp=0)),br0,p1,p5,p6,p7,p8" \
145 "p2 0 1 pop(vlan),push(vlan(vid=10,pcp=1)),br0,p1,p5,p6,p7,p8" \
ecac4ebf
BP
146 "p2 10 0 drop" \
147 "p2 10 1 drop" \
148 "p2 11 0 drop" \
149 "p2 11 1 drop" \
150 "p2 12 0 drop" \
151 "p2 12 1 drop" \
4edb9ae9
PS
152 "p3 none 0 p4,p7,p8,push(vlan(vid=12,pcp=0)),br0,p1,p5,p6" \
153 "p3 0 0 p4,p7,p8,pop(vlan),push(vlan(vid=12,pcp=0)),br0,p1,p5,p6" \
154 "p3 0 1 p4,p7,p8,pop(vlan),push(vlan(vid=12,pcp=1)),br0,p1,p5,p6" \
ecac4ebf
BP
155 "p3 10 0 drop" \
156 "p3 10 1 drop" \
157 "p3 11 0 drop" \
158 "p3 11 1 drop" \
159 "p3 12 0 drop" \
160 "p3 12 1 drop" \
4edb9ae9
PS
161 "p4 none 0 p3,p7,p8,push(vlan(vid=12,pcp=0)),br0,p1,p5,p6" \
162 "p4 0 0 p3,p7,p8,pop(vlan),push(vlan(vid=12,pcp=0)),br0,p1,p5,p6" \
163 "p4 0 1 p3,p7,p8,pop(vlan),push(vlan(vid=12,pcp=1)),br0,p1,p5,p6" \
ecac4ebf
BP
164 "p4 10 0 drop" \
165 "p4 10 1 drop" \
166 "p4 11 0 drop" \
167 "p4 11 1 drop" \
168 "p4 12 0 drop" \
169 "p4 12 1 drop" \
4edb9ae9
PS
170 "p5 none 0 p2,push(vlan(vid=10,pcp=0)),br0,p1,p6,p7,p8" \
171 "p5 0 0 p2,pop(vlan),push(vlan(vid=10,pcp=0)),br0,p1,p6,p7,p8" \
172 "p5 0 1 p2,pop(vlan),push(vlan(vid=10,pcp=1)),br0,p1,p6,p7,p8" \
173 "p5 10 0 br0,p1,p6,p7,p8,pop(vlan),p2" \
174 "p5 10 1 br0,p1,p6,p7,p8,pop(vlan),push(vlan(vid=0,pcp=1)),p2" \
ecac4ebf
BP
175 "p5 11 0 br0,p7" \
176 "p5 11 1 br0,p7" \
4edb9ae9
PS
177 "p5 12 0 br0,p1,p6,pop(vlan),p3,p4,p7,p8" \
178 "p5 12 1 br0,p1,p6,pop(vlan),push(vlan(vid=0,pcp=1)),p3,p4,p7,p8" \
179 "p6 none 0 p2,push(vlan(vid=10,pcp=0)),br0,p1,p5,p7,p8" \
180 "p6 0 0 p2,pop(vlan),push(vlan(vid=10,pcp=0)),br0,p1,p5,p7,p8" \
181 "p6 0 1 p2,pop(vlan),push(vlan(vid=10,pcp=1)),br0,p1,p5,p7,p8" \
182 "p6 10 0 br0,p1,p5,p7,p8,pop(vlan),p2" \
183 "p6 10 1 br0,p1,p5,p7,p8,pop(vlan),push(vlan(vid=0,pcp=1)),p2" \
ecac4ebf
BP
184 "p6 11 0 drop" \
185 "p6 11 1 drop" \
4edb9ae9
PS
186 "p6 12 0 br0,p1,p5,pop(vlan),p3,p4,p7,p8" \
187 "p6 12 1 br0,p1,p5,pop(vlan),push(vlan(vid=0,pcp=1)),p3,p4,p7,p8" \
188 "p7 none 0 p3,p4,p8,push(vlan(vid=12,pcp=0)),br0,p1,p5,p6" \
189 "p7 0 0 p3,p4,p8,pop(vlan),push(vlan(vid=12,pcp=0)),br0,p1,p5,p6" \
190 "p7 0 1 p3,p4,p8,pop(vlan),push(vlan(vid=12,pcp=1)),br0,p1,p5,p6" \
191 "p7 10 0 br0,p1,p5,p6,p8,pop(vlan),p2" \
192 "p7 10 1 br0,p1,p5,p6,p8,pop(vlan),push(vlan(vid=0,pcp=1)),p2" \
ecac4ebf
BP
193 "p7 11 0 br0,p5" \
194 "p7 11 1 br0,p5" \
4edb9ae9
PS
195 "p7 12 0 br0,p1,p5,p6,pop(vlan),p3,p4,p8" \
196 "p7 12 1 br0,p1,p5,p6,pop(vlan),push(vlan(vid=0,pcp=1)),p3,p4,p8" \
197 "p8 none 0 p3,p4,p7,push(vlan(vid=12,pcp=0)),br0,p1,p5,p6" \
198 "p8 0 0 p3,p4,p7,pop(vlan),push(vlan(vid=12,pcp=0)),br0,p1,p5,p6" \
199 "p8 0 1 p3,p4,p7,pop(vlan),push(vlan(vid=12,pcp=1)),br0,p1,p5,p6" \
200 "p8 10 0 br0,p1,p5,p6,p7,pop(vlan),p2" \
201 "p8 10 1 br0,p1,p5,p6,p7,pop(vlan),push(vlan(vid=0,pcp=1)),p2" \
ecac4ebf
BP
202 "p8 11 0 drop" \
203 "p8 11 1 drop" \
4edb9ae9
PS
204 "p8 12 0 br0,p1,p5,p6,pop(vlan),p3,p4,p7" \
205 "p8 12 1 br0,p1,p5,p6,pop(vlan),push(vlan(vid=0,pcp=1)),p3,p4,p7"
04c956fc
BP
206do
207 set $tuple
208 in_port=$1
209 vlan=$2
ecac4ebf
BP
210 pcp=$3
211 expected=$4
04c956fc 212
ecac4ebf 213 eval n_in_port=\$$in_port
04c956fc 214 if test $vlan = none; then
ecac4ebf 215 flow="in_port($n_in_port),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff),eth_type(0xabcd)"
04c956fc 216 else
ecac4ebf 217 flow="in_port($n_in_port),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff),vlan(vid=$vlan,pcp=$pcp),eth_type(0xabcd)"
04c956fc
BP
218 fi
219
ecac4ebf
BP
220 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
221 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
04c956fc 222
ecac4ebf
BP
223 AT_CHECK([echo "in_port=$in_port vlan=$vlan"
224 $PERL $srcdir/compare-odp-actions.pl "$expected" "$actual" br0=$br0 p1=$p1 p2=$p2 p3=$p3 p4=$p4 p5=$p5 p6=$p6 p7=$p7 p8=$p8], [0], [ignore])
04c956fc
BP
225done
226
227OVS_VSWITCHD_STOP
228AT_CLEANUP
7257b535
BP
229
230AT_SETUP([ofproto-dpif - fragment handling])
023e1e0a 231OVS_VSWITCHD_START
7257b535
BP
232AT_DATA([flows.txt], [dnl
233priority=75 tcp ip_frag=no tp_dst=80 actions=output:1
234priority=75 tcp ip_frag=first tp_dst=80 actions=output:2
235priority=75 tcp ip_frag=later tp_dst=80 actions=output:3
236priority=50 tcp ip_frag=no actions=output:4
237priority=50 tcp ip_frag=first actions=output:5
238priority=50 tcp ip_frag=later actions=output:6
239])
240AT_CHECK([ovs-ofctl replace-flows br0 flows.txt])
241
242base_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"
243no_flow="$base_flow,frag=no),tcp(src=12345,dst=80)"
244first_flow="$base_flow,frag=first),tcp(src=12345,dst=80)"
245later_flow="$base_flow,frag=later)"
246
247 # mode no first later
248for tuple in \
249 'normal 1 5 6' \
250 'drop 1 drop drop' \
251 'nx-match 1 2 6'
252do
253 set $tuple
254 mode=$1
255 no=$2
256 first=$3
257 later=$4
258
259 AT_CHECK([ovs-ofctl set-frags br0 $mode])
260 for type in no first later; do
261 eval flow=\$${type}_flow exp_output=\$$type
023e1e0a 262 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
7257b535
BP
263 AT_CHECK_UNQUOTED([tail -1 stdout], [0], [Datapath actions: $exp_output
264])
265 done
266done
023e1e0a 267OVS_VSWITCHD_STOP
7257b535 268AT_CLEANUP
848e8809
EJ
269
270AT_SETUP([ofproto-dpif - exit])
271OVS_VSWITCHD_START
272AT_DATA([flows.txt], [dnl
273in_port=1 actions=output:10,exit,output:11
274in_port=2 actions=output:12,resubmit:1,output:12
275in_port=3 actions=output:13,resubmit:2,output:14
276])
277AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
278AT_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,frag=no),icmp(type=8,code=0)'], [0], [stdout])
279AT_CHECK([tail -1 stdout], [0],
280 [Datapath actions: 10
281])
282AT_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,frag=no),icmp(type=8,code=0)'], [0], [stdout])
283AT_CHECK([tail -1 stdout], [0],
284 [Datapath actions: 12,10
285])
286AT_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,frag=no),icmp(type=8,code=0)'], [0], [stdout])
287AT_CHECK([tail -1 stdout], [0],
288 [Datapath actions: 13,12,10
289])
290OVS_VSWITCHD_STOP
291AT_CLEANUP