]>
Commit | Line | Data |
---|---|---|
29901626 BP |
1 | AT_BANNER([ofproto-dpif]) |
2 | ||
3 | AT_SETUP([ofproto-dpif - resubmit]) | |
023e1e0a | 4 | OVS_VSWITCHD_START |
29901626 BP |
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) | |
12 | ]) | |
13 | AT_CHECK([ovs-ofctl add-flows br0 flows.txt]) | |
023e1e0a | 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,frag=no),icmp(type=8,code=0)'], [0], [stdout]) |
29901626 BP |
15 | AT_CHECK([tail -1 stdout], [0], |
16 | [Datapath actions: 10,11,12,13,14,15,16,17,18,19,20,21 | |
17 | ]) | |
023e1e0a | 18 | OVS_VSWITCHD_STOP |
29901626 | 19 | AT_CLEANUP |
58a89177 EJ |
20 | |
21 | AT_SETUP([ofproto-dpif - registers]) | |
023e1e0a | 22 | OVS_VSWITCHD_START |
58a89177 EJ |
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 | |
37 | ]) | |
38 | AT_CHECK([ovs-ofctl add-flows br0 flows.txt]) | |
023e1e0a | 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,frag=no),icmp(type=8,code=0)'], [0], [stdout]) |
58a89177 EJ |
40 | AT_CHECK([tail -1 stdout], [0], |
41 | [Datapath actions: 20,21,22 | |
42 | ]) | |
023e1e0a | 43 | OVS_VSWITCHD_STOP |
58a89177 | 44 | AT_CLEANUP |
f694937d EJ |
45 | |
46 | AT_SETUP([ofproto-dpif - output]) | |
023e1e0a | 47 | OVS_VSWITCHD_START |
f694937d EJ |
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[[]] | |
56 | ]) | |
57 | AT_CHECK([ovs-ofctl add-flows br0 flows.txt]) | |
023e1e0a | 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,frag=no),icmp(type=8,code=0)'], [0], [stdout]) |
f694937d EJ |
59 | AT_CHECK([tail -1 stdout], [0], |
60 | [Datapath actions: 9,55,10,55,66,11,77,88 | |
61 | ]) | |
023e1e0a | 62 | OVS_VSWITCHD_STOP |
f694937d | 63 | AT_CLEANUP |
8e9ce036 EJ |
64 | |
65 | AT_SETUP([ofproto-dpif - set_tunnel]) | |
023e1e0a | 66 | OVS_VSWITCHD_START |
8e9ce036 EJ |
67 | AT_DATA([flows.txt], [dnl |
68 | in_port=90 actions=resubmit:1,resubmit:2,resubmit:3,resubmit:4,resubmit:5 | |
69 | in_port=1 actions=set_tunnel:1,output:1 | |
70 | in_port=2 actions=set_tunnel:1,output:2 | |
71 | in_port=3 actions=set_tunnel:2,set_tunnel:3,output:3 | |
72 | in_port=4 actions=set_tunnel:4,set_tunnel:3,output:4 | |
73 | in_port=5 actions=set_tunnel:5 | |
74 | ]) | |
75 | AT_CHECK([ovs-ofctl add-flows br0 flows.txt]) | |
023e1e0a | 76 | 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,frag=no),icmp(type=8,code=0)'], [0], [stdout]) |
8e9ce036 | 77 | AT_CHECK([tail -1 stdout], [0], |
4edb9ae9 | 78 | [Datapath actions: set(tun_id(0x1)),1,2,set(tun_id(0x3)),3,4 |
8e9ce036 | 79 | ]) |
023e1e0a | 80 | OVS_VSWITCHD_STOP |
8e9ce036 | 81 | AT_CLEANUP |
04c956fc | 82 | |
ecac4ebf | 83 | AT_SETUP([ofproto-dpif - VLAN handling]) |
04c956fc | 84 | OVS_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 | |
103 | AT_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]) |
114 | set `cat stdout` | |
ecac4ebf | 115 | br0=0 p1=$1 p2=$2 p3=$3 p4=$4 p5=$5 p6=$6 p7=$7 p8=$8 |
04c956fc | 116 | |
ecac4ebf BP |
117 | dnl Each of these specifies an in_port, a VLAN VID (or "none"), a VLAN |
118 | dnl PCP (used if the VID isn't "none") and the expected set of datapath | |
119 | dnl actions. | |
120 | dnl | |
121 | dnl XXX Some of these actually output an 802.1Q header to an access port | |
122 | dnl (see for example the actions for in_port=p3, vlan=0) to qualify the | |
123 | dnl packet with a priority. That should be configurable. | |
04c956fc | 124 | for 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 |
206 | do |
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 |
225 | done |
226 | ||
227 | OVS_VSWITCHD_STOP | |
228 | AT_CLEANUP | |
7257b535 BP |
229 | |
230 | AT_SETUP([ofproto-dpif - fragment handling]) | |
023e1e0a | 231 | OVS_VSWITCHD_START |
7257b535 BP |
232 | AT_DATA([flows.txt], [dnl |
233 | priority=75 tcp ip_frag=no tp_dst=80 actions=output:1 | |
234 | priority=75 tcp ip_frag=first tp_dst=80 actions=output:2 | |
235 | priority=75 tcp ip_frag=later tp_dst=80 actions=output:3 | |
236 | priority=50 tcp ip_frag=no actions=output:4 | |
237 | priority=50 tcp ip_frag=first actions=output:5 | |
238 | priority=50 tcp ip_frag=later actions=output:6 | |
239 | ]) | |
240 | AT_CHECK([ovs-ofctl replace-flows br0 flows.txt]) | |
241 | ||
242 | 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" | |
243 | no_flow="$base_flow,frag=no),tcp(src=12345,dst=80)" | |
244 | first_flow="$base_flow,frag=first),tcp(src=12345,dst=80)" | |
245 | later_flow="$base_flow,frag=later)" | |
246 | ||
247 | # mode no first later | |
248 | for tuple in \ | |
249 | 'normal 1 5 6' \ | |
250 | 'drop 1 drop drop' \ | |
251 | 'nx-match 1 2 6' | |
252 | do | |
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 | |
266 | done | |
023e1e0a | 267 | OVS_VSWITCHD_STOP |
7257b535 | 268 | AT_CLEANUP |
848e8809 EJ |
269 | |
270 | AT_SETUP([ofproto-dpif - exit]) | |
271 | OVS_VSWITCHD_START | |
272 | AT_DATA([flows.txt], [dnl | |
273 | in_port=1 actions=output:10,exit,output:11 | |
274 | in_port=2 actions=output:12,resubmit:1,output:12 | |
275 | in_port=3 actions=output:13,resubmit:2,output:14 | |
276 | ]) | |
277 | AT_CHECK([ovs-ofctl add-flows br0 flows.txt]) | |
278 | 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,frag=no),icmp(type=8,code=0)'], [0], [stdout]) | |
279 | AT_CHECK([tail -1 stdout], [0], | |
280 | [Datapath actions: 10 | |
281 | ]) | |
282 | 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,frag=no),icmp(type=8,code=0)'], [0], [stdout]) | |
283 | AT_CHECK([tail -1 stdout], [0], | |
284 | [Datapath actions: 12,10 | |
285 | ]) | |
286 | 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,frag=no),icmp(type=8,code=0)'], [0], [stdout]) | |
287 | AT_CHECK([tail -1 stdout], [0], | |
288 | [Datapath actions: 13,12,10 | |
289 | ]) | |
290 | OVS_VSWITCHD_STOP | |
291 | AT_CLEANUP |