]> git.proxmox.com Git - mirror_ovs.git/blob - tests/system-userspace-packet-type-aware.at
dpctl: Add the option 'pmd' for dump-flows.
[mirror_ovs.git] / tests / system-userspace-packet-type-aware.at
1 AT_BANNER([packet-type-aware pipeline])
2
3 AT_SETUP([ptap - triangle bridge setup with L2 and L3 GRE tunnels])
4
5 ########################
6 # GRE tunneling test setup for PTAP bridge
7 #
8 # 192.168.10.10 192.168.10.20 192.168.10.30
9 # n1 n2 n3
10 # |ovs-n1 |ovs-n2 |ovs-n3
11 # +------o------+ +------o------+ +------o------+
12 # | br-in1 | | br-in2 | | br-in3 |
13 # | | | (PTAP) | | |
14 # +------o------+ +------o------+ +------o------+
15 # gre gre gre
16 # 10.0.0.1 (10.0.0.2) (10.0.0.3)
17 # (20.0.0.1) 20.0.0.2 (20.0.0.3)
18 # (30.0.0.1) LOCAL (30.0.0.2) LOCAL 30.0.0.3 LOCAL
19 # +-----------o-+ +-----------o-+ +-----------o-+
20 # | br-p1 | | br-p2 | | br-p3 |
21 # +------o------+ +------o------+ +------o------+
22 # p1-0 | | p2-0 | p3-0
23 # p0-1 | | p0-2 | p0-3
24 # +--o------------------------o-------------------------o--+
25 # | br0 |
26 # +--------------------------------------------------------+
27 #"
28 # GRE tunnel ports:
29 # No Bridge Name Packet-type Remote bridge & ports
30 # -----------------------------------------------------------------------
31 # 1020 br-in1 gre-12 l2 br-in2 2010 (ptap)
32 # 1021 br-in1 gre-12_l3 l3 same
33 # 1030 br-in1 gre-13 l2 br-in3 3010 (l2)
34 # 2010 br-in2 gre-21 ptap br-in1 1020 (l2), 1021 (l3)
35 # 2030 br-in2 gre-23 ptap br-in3 3020 (l2), 3021 (l3)
36 # 3010 br-in3 gre-31 l2 br-in1 1030 (l2)
37 # 3020 br-in3 gre-32 l2 br-in2 2010 (ptap)
38 # 3021 br-in3 gre-32_l3 l3 same
39
40
41 AT_SKIP_IF([test $HAVE_NC = no])
42 OVS_TRAFFIC_VSWITCHD_START()
43
44 HWADDR_BRP1=aa:55:00:00:00:01
45 HWADDR_BRP2=aa:55:00:00:00:02
46 HWADDR_BRP3=aa:55:00:00:00:03
47
48 dnl Create veth ports to connect br0 with br-p1, br-p2 and br-p3
49 AT_CHECK([ip link add p1-0 type veth peer name p0-1])
50 AT_CHECK([ip link set p1-0 up])
51 AT_CHECK([ip link set p0-1 up])
52 AT_CHECK([ip link set dev p1-0 mtu 3300])
53 AT_CHECK([ip link set dev p0-1 mtu 3300])
54 on_exit 'ip link del p0-1'
55
56 AT_CHECK([ip link add p2-0 type veth peer name p0-2])
57 AT_CHECK([ip link set p2-0 up])
58 AT_CHECK([ip link set p0-2 up])
59 AT_CHECK([ip link set dev p2-0 mtu 3300])
60 AT_CHECK([ip link set dev p0-2 mtu 3300])
61 on_exit 'ip link del p0-2'
62
63 AT_CHECK([ip link add p3-0 type veth peer name p0-3])
64 AT_CHECK([ip link set p3-0 up])
65 AT_CHECK([ip link set p0-3 up])
66 AT_CHECK([ip link set dev p3-0 mtu 3300])
67 AT_CHECK([ip link set dev p0-3 mtu 3300])
68 on_exit 'ip link del p0-3'
69
70 # Setup bridge infrastructure
71 AT_CHECK([
72 ovs-vsctl add-br br-in1 -- \
73 set bridge br-in1 datapath_type=netdev fail-mode=standalone
74 ovs-vsctl add-br br-in2 -- \
75 set bridge br-in2 datapath_type=netdev fail-mode=standalone
76 ovs-vsctl add-br br-in3 -- \
77 set bridge br-in3 datapath_type=netdev fail-mode=standalone
78 ovs-vsctl add-br br-p1 -- \
79 set bridge br-p1 datapath_type=netdev fail-mode=standalone other-config:hwaddr=$HWADDR_BRP1
80 ovs-vsctl add-br br-p2 -- \
81 set bridge br-p2 datapath_type=netdev fail-mode=standalone other-config:hwaddr=$HWADDR_BRP2
82 ovs-vsctl add-br br-p3 -- \
83 set bridge br-p3 datapath_type=netdev fail-mode=standalone other-config:hwaddr=$HWADDR_BRP3
84
85 ovs-vsctl add-port br-p1 p1-0 -- set interface p1-0 ofport_request=2
86 ovs-vsctl add-port br-p2 p2-0 -- set interface p2-0 ofport_request=2
87 ovs-vsctl add-port br-p3 p3-0 -- set interface p3-0 ofport_request=2
88 ovs-vsctl add-port br0 p0-1 -- set interface p0-1 ofport_request=10
89 ovs-vsctl add-port br0 p0-2 -- set interface p0-2 ofport_request=20
90 ovs-vsctl add-port br0 p0-3 -- set interface p0-3 ofport_request=30
91
92 # Populate the MAC table of br0
93 ovs-ofctl del-flows br0
94 ovs-ofctl add-flow br0 dl_dst=$HWADDR_BRP1,actions=10
95 ovs-ofctl add-flow br0 dl_dst=$HWADDR_BRP2,actions=20
96 ovs-ofctl add-flow br0 dl_dst=$HWADDR_BRP3,actions=30
97
98 ovs-ofctl del-flows br-in1
99 ovs-ofctl del-flows br-in2
100 ovs-ofctl del-flows br-in3
101 ovs-ofctl del-flows br-p1
102 ovs-ofctl del-flows br-p2
103 ovs-ofctl del-flows br-p3
104 ], [0])
105
106 ### Setup GRE tunnels
107 AT_CHECK([
108 ovs-vsctl add-port br-in1 gre12 -- \
109 set interface gre12 type=gre options:remote_ip=10.0.0.2 ofport_request=1020
110 ovs-vsctl add-port br-in1 gre12_l3 -- \
111 set interface gre12_l3 type=gre options:remote_ip=10.0.0.2 ofport_request=1021 options:packet_type=legacy_l3
112 ovs-vsctl add-port br-in1 gre13 -- \
113 set interface gre13 type=gre options:remote_ip=10.0.0.3 ofport_request=1030
114
115 ovs-vsctl add-port br-in2 gre21 -- \
116 set interface gre21 type=gre options:remote_ip=20.0.0.1 ofport_request=2010 options:packet_type=ptap
117 ovs-vsctl add-port br-in2 gre23 -- \
118 set interface gre23 type=gre options:remote_ip=20.0.0.3 ofport_request=2030 options:packet_type=ptap
119
120 ovs-vsctl add-port br-in3 gre31 -- \
121 set interface gre31 type=gre options:remote_ip=30.0.0.1 ofport_request=3010
122 ovs-vsctl add-port br-in3 gre32 -- \
123 set interface gre32 type=gre options:remote_ip=30.0.0.2 ofport_request=3020
124 ovs-vsctl add-port br-in3 gre32_l3 -- \
125 set interface gre32_l3 type=gre options:remote_ip=30.0.0.2 ofport_request=3021 options:packet_type=legacy_l3
126 ], [0], [stdout])
127
128 AT_CHECK([
129 ip addr add 10.0.0.1/24 dev br-p1
130 ip link set br-p1 up
131 ], [0], [stdout])
132 OVS_WAIT_UNTIL([ovs-appctl ovs/route/show | grep -q br-p1])
133
134 AT_CHECK([
135 ovs-appctl ovs/route/add 10.0.0.0/24 br-p1
136 ovs-appctl tnl/arp/set br-p1 10.0.0.1 $HWADDR_BRP1
137 ovs-appctl tnl/arp/set br-p1 10.0.0.2 $HWADDR_BRP2
138 ovs-appctl tnl/arp/set br-p1 10.0.0.3 $HWADDR_BRP3
139 ], [0], [stdout])
140
141 AT_CHECK([
142 ip addr add 20.0.0.2/24 dev br-p2
143 ip link set br-p2 up
144 ], [0], [stdout])
145 OVS_WAIT_UNTIL([ovs-appctl ovs/route/show | grep -q br-p2])
146
147 AT_CHECK([
148 ovs-appctl ovs/route/add 20.0.0.0/24 br-p2
149 ovs-appctl tnl/arp/set br-p2 20.0.0.1 $HWADDR_BRP1
150 ovs-appctl tnl/arp/set br-p2 20.0.0.2 $HWADDR_BRP2
151 ovs-appctl tnl/arp/set br-p2 20.0.0.3 $HWADDR_BRP3
152 ], [0], [stdout])
153
154 AT_CHECK([
155 ip addr add 30.0.0.3/24 dev br-p3
156 ip link set br-p3 up
157 ], [0], [stdout])
158 OVS_WAIT_UNTIL([ovs-appctl ovs/route/show | grep -q br-p3])
159
160 AT_CHECK([
161 ovs-appctl ovs/route/add 30.0.0.0/24 br-p3
162 ovs-appctl tnl/arp/set br-p3 30.0.0.1 $HWADDR_BRP1
163 ovs-appctl tnl/arp/set br-p3 30.0.0.2 $HWADDR_BRP2
164 ovs-appctl tnl/arp/set br-p3 30.0.0.3 $HWADDR_BRP3
165 ], [0], [stdout])
166
167 AT_CHECK([
168 ovs-appctl ovs/route/show | grep User:
169 ], [0], [dnl
170 User: 10.0.0.0/24 dev br-p1 SRC 10.0.0.1
171 User: 20.0.0.0/24 dev br-p2 SRC 20.0.0.2
172 User: 30.0.0.0/24 dev br-p3 SRC 30.0.0.3
173 ])
174
175 AT_CHECK([
176 ovs-appctl tnl/neigh/show | grep br-p | sort
177 ], [0], [stdout])
178
179
180 ### Flows in br-p<x>to twist TEP IP addresses in tunnel IP headers
181 AT_CHECK([
182 ovs-ofctl add-flow br-p1 in_port:LOCAL,ip,actions=2
183 ovs-ofctl add-flow br-p1 in_port:2,ip,nw_dst:20.0.0.1,actions=mod_nw_dst:10.0.0.1,mod_nw_src:10.0.0.2,LOCAL
184 ovs-ofctl add-flow br-p1 in_port:2,ip,nw_dst:30.0.0.1,actions=mod_nw_dst:10.0.0.1,mod_nw_src:10.0.0.3,LOCAL
185
186 ovs-ofctl add-flow br-p2 in_port:LOCAL,ip,actions=2
187 ovs-ofctl add-flow br-p2 in_port:2,ip,nw_dst:10.0.0.2,actions=mod_nw_dst:20.0.0.2,mod_nw_src:20.0.0.1,LOCAL
188 ovs-ofctl add-flow br-p2 in_port:2,ip,nw_dst:30.0.0.2,actions=mod_nw_dst:20.0.0.2,mod_nw_src:20.0.0.3,LOCAL
189
190 ovs-ofctl add-flow br-p3 in_port:LOCAL,ip,actions=2
191 ovs-ofctl add-flow br-p3 in_port:2,ip,nw_dst:10.0.0.3,actions=mod_nw_dst:30.0.0.3,mod_nw_src:30.0.0.1,LOCAL
192 ovs-ofctl add-flow br-p3 in_port:2,ip,nw_dst:20.0.0.3,actions=mod_nw_dst:30.0.0.3,mod_nw_src:30.0.0.2,LOCAL
193 ], [0])
194
195 # Strips 'n_packets=...' from ovs-ofctl output.
196 strip_n_packets () {
197 sed 's/n_packets=[[0-9]]*, //'
198 }
199
200 # Strips 'n_bytes=...' from ovs-ofctl output.
201 strip_n_bytes () {
202 sed 's/n_bytes=[[0-9]]*, //'
203 }
204
205 AT_CHECK([
206 ovs-ofctl dump-flows br-p1 | ofctl_strip | strip_n_packets | strip_n_bytes | sort | grep actions
207 ovs-ofctl dump-flows br-p2 | ofctl_strip | strip_n_packets | strip_n_bytes | sort | grep actions
208 ovs-ofctl dump-flows br-p3 | ofctl_strip | strip_n_packets | strip_n_bytes | sort | grep actions
209 ], [0], [dnl
210 ip,in_port=2,nw_dst=20.0.0.1 actions=mod_nw_dst:10.0.0.1,mod_nw_src:10.0.0.2,LOCAL
211 ip,in_port=2,nw_dst=30.0.0.1 actions=mod_nw_dst:10.0.0.1,mod_nw_src:10.0.0.3,LOCAL
212 ip,in_port=LOCAL actions=output:2
213 ip,in_port=2,nw_dst=10.0.0.2 actions=mod_nw_dst:20.0.0.2,mod_nw_src:20.0.0.1,LOCAL
214 ip,in_port=2,nw_dst=30.0.0.2 actions=mod_nw_dst:20.0.0.2,mod_nw_src:20.0.0.3,LOCAL
215 ip,in_port=LOCAL actions=output:2
216 ip,in_port=2,nw_dst=10.0.0.3 actions=mod_nw_dst:30.0.0.3,mod_nw_src:30.0.0.1,LOCAL
217 ip,in_port=2,nw_dst=20.0.0.3 actions=mod_nw_dst:30.0.0.3,mod_nw_src:30.0.0.2,LOCAL
218 ip,in_port=LOCAL actions=output:2
219 ])
220
221 ### Setup test ports for traffic injection
222 N1_IP=192.168.10.10
223 N2_IP=192.168.10.20
224 N3_IP=192.168.10.30
225 N1_MAC=aa:55:aa:55:00:01
226 N2_MAC=aa:55:aa:55:00:02
227 N3_MAC=aa:55:aa:55:00:03
228 N1_OFPORT=10
229 N2_OFPORT=20
230 N3_OFPORT=30
231
232 ADD_NAMESPACES(ns1, ns2, ns3)
233 ADD_VETH(n1, ns1, br-in1, "$N1_IP/24", $N1_MAC)
234 ADD_VETH(n2, ns2, br-in2, "$N2_IP/24", $N2_MAC)
235 ADD_VETH(n3, ns3, br-in3, "$N3_IP/24", $N3_MAC)
236
237 NS_EXEC([ns1], [arp -s $N2_IP $N2_MAC])
238 NS_EXEC([ns1], [arp -s $N3_IP $N3_MAC])
239
240 NS_EXEC([ns2], [arp -s $N1_IP $N1_MAC])
241 NS_EXEC([ns2], [arp -s $N3_IP $N3_MAC])
242
243 NS_EXEC([ns3], [arp -s $N2_IP $N2_MAC])
244 NS_EXEC([ns3], [arp -s $N1_IP $N1_MAC])
245
246 AT_CHECK([
247 ovs-vsctl set interface ovs-n1 ofport_request=$N1_OFPORT
248 ovs-vsctl set interface ovs-n2 ofport_request=$N2_OFPORT
249 ovs-vsctl set interface ovs-n3 ofport_request=$N3_OFPORT
250 ], [0])
251
252 #N1_DPPORT=$(ovs-appctl dpif/show | grep "n1 10" | sed 's|.*/\([[0-9]]*\):.*|\1|')
253 #N2_DPPORT=$(ovs-appctl dpif/show | grep "n2 20" | sed 's|.*/\([[0-9]]*\):.*|\1|')
254 #N3_DPPORT=$(ovs-appctl dpif/show | grep "n3 30" | sed 's|.*/\([[0-9]]*\):.*|\1|')
255
256 ### Verify datapath configuration
257 AT_CHECK([
258 ovs-appctl dpif/show | grep -v hit
259 ], [0], [dnl
260 br-in1:
261 br-in1 65534/2: (tap)
262 gre12 1020/14: (gre: remote_ip=10.0.0.2)
263 gre12_l3 1021/14: (gre: packet_type=legacy_l3, remote_ip=10.0.0.2)
264 gre13 1030/14: (gre: remote_ip=10.0.0.3)
265 ovs-n1 10/15: (system)
266 br-in2:
267 br-in2 65534/3: (tap)
268 gre21 2010/14: (gre: packet_type=ptap, remote_ip=20.0.0.1)
269 gre23 2030/14: (gre: packet_type=ptap, remote_ip=20.0.0.3)
270 ovs-n2 20/16: (system)
271 br-in3:
272 br-in3 65534/4: (tap)
273 gre31 3010/14: (gre: remote_ip=30.0.0.1)
274 gre32 3020/14: (gre: remote_ip=30.0.0.2)
275 gre32_l3 3021/14: (gre: packet_type=legacy_l3, remote_ip=30.0.0.2)
276 ovs-n3 30/17: (system)
277 br-p1:
278 br-p1 65534/5: (tap)
279 p1-0 2/8: (system)
280 br-p2:
281 br-p2 65534/6: (tap)
282 p2-0 2/9: (system)
283 br-p3:
284 br-p3 65534/7: (tap)
285 p3-0 2/10: (system)
286 br0:
287 br0 65534/1: (tap)
288 p0-1 10/11: (system)
289 p0-2 20/12: (system)
290 p0-3 30/13: (system)
291 ])
292
293 ### Test L3 forwarding flows
294 AT_CHECK([
295 ovs-ofctl add-flow br-in1 ip,nw_dst=$N1_IP,actions=mod_dl_dst:$N1_MAC,$N1_OFPORT # Local route to N1
296 ovs-ofctl add-flow br-in1 ip,nw_dst=$N2_IP,actions=1020 # Route to N2 via the L2 tunnel to br-in2
297 ovs-ofctl add-flow br-in1 ip,nw_dst=$N3_IP,actions=1030 # Route to N3 direct through L2 tunnel
298
299 ovs-ofctl add-flow br-in2 ip,nw_dst=$N2_IP,actions=mod_dl_dst:$N2_MAC,$N2_OFPORT # Local route to N2 for ethernet packets
300 ovs-ofctl add-flow br-in2 ip,nw_dst=$N1_IP,actions=2010 # Route to N1 for ethernet packet
301 ovs-ofctl add-flow br-in2 packet_type=\(1,0x800\),nw_dst=$N1_IP,actions=2010 # Route to N1 for IP packets
302 ovs-ofctl add-flow br-in2 ip,nw_dst=$N3_IP,actions=2010 # Indirect route to N3 via br-in1 for ethernet packet
303 ovs-ofctl add-flow br-in2 packet_type=\(1,0x800\),nw_dst=$N3_IP,actions=2030 # Direct route to N3 for IP packets
304
305 ovs-ofctl add-flow br-in3 ip,nw_dst=$N3_IP,actions=mod_dl_dst:$N3_MAC,$N3_OFPORT # Local route to N1
306 ovs-ofctl add-flow br-in3 ip,nw_dst=$N2_IP,actions=3020 # Route to N2 via the L2 tunnel
307 ovs-ofctl add-flow br-in3 ip,nw_dst=$N1_IP,actions=3021 # Route to N1 via br-in2 through L3 tunnel
308 ], [0])
309
310 AT_CHECK([
311 ovs-ofctl dump-flows br-in1 | ofctl_strip | strip_n_packets | strip_n_bytes | sort | grep actions
312 ], [0], [dnl
313 ip,nw_dst=192.168.10.10 actions=mod_dl_dst:aa:55:aa:55:00:01,output:10
314 ip,nw_dst=192.168.10.20 actions=output:1020
315 ip,nw_dst=192.168.10.30 actions=output:1030
316 ])
317
318 AT_CHECK([
319 ovs-ofctl dump-flows br-in2 | ofctl_strip | strip_n_packets | strip_n_bytes | sort | grep actions
320 ], [0], [dnl
321 ip,nw_dst=192.168.10.10 actions=output:2010
322 ip,nw_dst=192.168.10.20 actions=mod_dl_dst:aa:55:aa:55:00:02,output:20
323 ip,nw_dst=192.168.10.30 actions=output:2010
324 packet_type=(1,0x800),nw_dst=192.168.10.10 actions=output:2010
325 packet_type=(1,0x800),nw_dst=192.168.10.30 actions=output:2030
326 ])
327
328 AT_CHECK([
329 ovs-ofctl dump-flows br-in3 | ofctl_strip | strip_n_packets | strip_n_bytes | sort | grep actions
330 ], [0], [dnl
331 ip,nw_dst=192.168.10.10 actions=output:3021
332 ip,nw_dst=192.168.10.20 actions=output:3020
333 ip,nw_dst=192.168.10.30 actions=mod_dl_dst:aa:55:aa:55:00:03,output:30
334 ])
335
336
337 # Ping between N1 and N3, via the L2 GRE tunnel between br-in1 and br-in3
338 NS_CHECK_EXEC([ns1], [ping -q -c 3 -i 0.3 -w 2 $N3_IP | FORMAT_PING], [0], [dnl
339 3 packets transmitted, 3 received, 0% packet loss, time 0ms
340 ])
341
342 sleep 1
343
344 AT_CHECK([
345 ovs-ofctl dump-flows br-in1 | ofctl_strip | sort | grep n_packets
346 ], [0], [dnl
347 n_packets=3, n_bytes=252, ip,nw_dst=192.168.10.10 actions=mod_dl_dst:aa:55:aa:55:00:01,output:10
348 n_packets=3, n_bytes=294, ip,nw_dst=192.168.10.30 actions=output:1030
349 ])
350
351 AT_CHECK([
352 ovs-ofctl dump-flows br-in2 | ofctl_strip | sort | grep n_packets
353 ], [0], [dnl
354 n_packets=3, n_bytes=252, packet_type=(1,0x800),nw_dst=192.168.10.10 actions=output:2010
355 ])
356
357 AT_CHECK([
358 ovs-ofctl dump-flows br-in3 | ofctl_strip | sort | grep n_packets
359 ], [0], [dnl
360 n_packets=3, n_bytes=294, ip,nw_dst=192.168.10.10 actions=output:3021
361 n_packets=3, n_bytes=294, ip,nw_dst=192.168.10.30 actions=mod_dl_dst:aa:55:aa:55:00:03,output:30
362 ])
363
364
365 # Ping between N1 and N2, via the L2 GRE tunnel between br-in1 and br-in2
366 NS_CHECK_EXEC([ns1], [ping -q -c 3 -i 0.3 -w 2 $N2_IP | FORMAT_PING], [0], [dnl
367 3 packets transmitted, 3 received, 0% packet loss, time 0ms
368 ])
369
370 sleep 1
371
372 AT_CHECK([
373 ovs-ofctl dump-flows br-in1 | ofctl_strip | sort | grep n_packets
374 ], [0], [dnl
375 n_packets=3, n_bytes=294, ip,nw_dst=192.168.10.20 actions=output:1020
376 n_packets=3, n_bytes=294, ip,nw_dst=192.168.10.30 actions=output:1030
377 n_packets=6, n_bytes=546, ip,nw_dst=192.168.10.10 actions=mod_dl_dst:aa:55:aa:55:00:01,output:10
378 ])
379
380 AT_CHECK([
381 ovs-ofctl dump-flows br-in2 | ofctl_strip | sort | grep n_packets
382 ], [0], [dnl
383 n_packets=3, n_bytes=252, packet_type=(1,0x800),nw_dst=192.168.10.10 actions=output:2010
384 n_packets=3, n_bytes=294, ip,nw_dst=192.168.10.10 actions=output:2010
385 n_packets=3, n_bytes=294, ip,nw_dst=192.168.10.20 actions=mod_dl_dst:aa:55:aa:55:00:02,output:20
386 ])
387
388 AT_CHECK([
389 ovs-ofctl dump-flows br-in3 | ofctl_strip | sort | grep n_packets
390 ], [0], [dnl
391 n_packets=3, n_bytes=294, ip,nw_dst=192.168.10.10 actions=output:3021
392 n_packets=3, n_bytes=294, ip,nw_dst=192.168.10.30 actions=mod_dl_dst:aa:55:aa:55:00:03,output:30
393 ])
394
395
396 # Ping between N3 and N2, via the L3 GRE tunnel between br-in3 and br-in2
397 NS_CHECK_EXEC([ns3], [ping -q -c 3 -i 0.3 -w 2 $N1_IP | FORMAT_PING], [0], [dnl
398 3 packets transmitted, 3 received, 0% packet loss, time 0ms
399 ])
400
401 sleep 1
402
403 AT_CHECK([
404 ovs-ofctl dump-flows br-in1 | ofctl_strip | sort | grep n_packets
405 ], [0], [dnl
406 n_packets=3, n_bytes=294, ip,nw_dst=192.168.10.20 actions=output:1020
407 n_packets=6, n_bytes=588, ip,nw_dst=192.168.10.30 actions=output:1030
408 n_packets=9, n_bytes=798, ip,nw_dst=192.168.10.10 actions=mod_dl_dst:aa:55:aa:55:00:01,output:10
409 ])
410
411 AT_CHECK([
412 ovs-ofctl dump-flows br-in2 | ofctl_strip | sort | grep n_packets
413 ], [0], [dnl
414 n_packets=3, n_bytes=294, ip,nw_dst=192.168.10.10 actions=output:2010
415 n_packets=3, n_bytes=294, ip,nw_dst=192.168.10.20 actions=mod_dl_dst:aa:55:aa:55:00:02,output:20
416 n_packets=6, n_bytes=504, packet_type=(1,0x800),nw_dst=192.168.10.10 actions=output:2010
417 ])
418
419 AT_CHECK([
420 ovs-ofctl dump-flows br-in3 | ofctl_strip | sort | grep n_packets
421 ], [0], [dnl
422 n_packets=6, n_bytes=588, ip,nw_dst=192.168.10.10 actions=output:3021
423 n_packets=6, n_bytes=588, ip,nw_dst=192.168.10.30 actions=mod_dl_dst:aa:55:aa:55:00:03,output:30
424 ])
425
426
427 OVS_TRAFFIC_VSWITCHD_STOP
428 AT_CLEANUP