Commit | Line | Data |
---|---|---|
62199e3f IS |
1 | #!/bin/bash |
2 | # SPDX-License-Identifier: GPL-2.0 | |
3 | # | |
4 | # This test is for checking VXLAN MDB functionality. The topology consists of | |
5 | # two sets of namespaces: One for the testing of IPv4 underlay and another for | |
6 | # IPv6. In both cases, both IPv4 and IPv6 overlay traffic are tested. | |
7 | # | |
8 | # Data path functionality is tested by sending traffic from one of the upper | |
9 | # namespaces and checking using ingress tc filters that the expected traffic | |
10 | # was received by one of the lower namespaces. | |
11 | # | |
12 | # +------------------------------------+ +------------------------------------+ | |
13 | # | ns1_v4 | | ns1_v6 | | |
14 | # | | | | | |
15 | # | br0.10 br0.4000 br0.20 | | br0.10 br0.4000 br0.20 | | |
16 | # | + + + | | + + + | | |
17 | # | | | | | | | | | | | |
18 | # | | | | | | | | | | | |
19 | # | +---------+---------+ | | +---------+---------+ | | |
20 | # | | | | | | | |
21 | # | | | | | | | |
22 | # | + | | + | | |
23 | # | br0 | | br0 | | |
24 | # | + | | + | | |
25 | # | | | | | | | |
26 | # | | | | | | | |
27 | # | + | | + | | |
28 | # | vx0 | | vx0 | | |
29 | # | | | | | |
30 | # | | | | | |
31 | # | veth0 | | veth0 | | |
32 | # | + | | + | | |
33 | # +-----------------|------------------+ +-----------------|------------------+ | |
34 | # | | | |
35 | # +-----------------|------------------+ +-----------------|------------------+ | |
36 | # | + | | + | | |
37 | # | veth0 | | veth0 | | |
38 | # | | | | | |
39 | # | | | | | |
40 | # | vx0 | | vx0 | | |
41 | # | + | | + | | |
42 | # | | | | | | | |
43 | # | | | | | | | |
44 | # | + | | + | | |
45 | # | br0 | | br0 | | |
46 | # | + | | + | | |
47 | # | | | | | | | |
48 | # | | | | | | | |
49 | # | +---------+---------+ | | +---------+---------+ | | |
50 | # | | | | | | | | | | | |
51 | # | | | | | | | | | | | |
52 | # | + + + | | + + + | | |
53 | # | br0.10 br0.4000 br0.10 | | br0.10 br0.4000 br0.20 | | |
54 | # | | | | | |
55 | # | ns2_v4 | | ns2_v6 | | |
56 | # +------------------------------------+ +------------------------------------+ | |
57 | ||
a8258e64 | 58 | source lib.sh |
62199e3f | 59 | ret=0 |
62199e3f IS |
60 | |
61 | CONTROL_PATH_TESTS=" | |
62 | basic_star_g_ipv4_ipv4 | |
63 | basic_star_g_ipv6_ipv4 | |
64 | basic_star_g_ipv4_ipv6 | |
65 | basic_star_g_ipv6_ipv6 | |
66 | basic_sg_ipv4_ipv4 | |
67 | basic_sg_ipv6_ipv4 | |
68 | basic_sg_ipv4_ipv6 | |
69 | basic_sg_ipv6_ipv6 | |
70 | star_g_ipv4_ipv4 | |
71 | star_g_ipv6_ipv4 | |
72 | star_g_ipv4_ipv6 | |
73 | star_g_ipv6_ipv6 | |
74 | sg_ipv4_ipv4 | |
75 | sg_ipv6_ipv4 | |
76 | sg_ipv4_ipv6 | |
77 | sg_ipv6_ipv6 | |
78 | dump_ipv4_ipv4 | |
79 | dump_ipv6_ipv4 | |
80 | dump_ipv4_ipv6 | |
81 | dump_ipv6_ipv6 | |
c3e87a7f | 82 | flush |
62199e3f IS |
83 | " |
84 | ||
85 | DATA_PATH_TESTS=" | |
86 | encap_params_ipv4_ipv4 | |
87 | encap_params_ipv6_ipv4 | |
88 | encap_params_ipv4_ipv6 | |
89 | encap_params_ipv6_ipv6 | |
90 | starg_exclude_ir_ipv4_ipv4 | |
91 | starg_exclude_ir_ipv6_ipv4 | |
92 | starg_exclude_ir_ipv4_ipv6 | |
93 | starg_exclude_ir_ipv6_ipv6 | |
94 | starg_include_ir_ipv4_ipv4 | |
95 | starg_include_ir_ipv6_ipv4 | |
96 | starg_include_ir_ipv4_ipv6 | |
97 | starg_include_ir_ipv6_ipv6 | |
98 | starg_exclude_p2mp_ipv4_ipv4 | |
99 | starg_exclude_p2mp_ipv6_ipv4 | |
100 | starg_exclude_p2mp_ipv4_ipv6 | |
101 | starg_exclude_p2mp_ipv6_ipv6 | |
102 | starg_include_p2mp_ipv4_ipv4 | |
103 | starg_include_p2mp_ipv6_ipv4 | |
104 | starg_include_p2mp_ipv4_ipv6 | |
105 | starg_include_p2mp_ipv6_ipv6 | |
106 | egress_vni_translation_ipv4_ipv4 | |
107 | egress_vni_translation_ipv6_ipv4 | |
108 | egress_vni_translation_ipv4_ipv6 | |
109 | egress_vni_translation_ipv6_ipv6 | |
110 | all_zeros_mdb_ipv4 | |
111 | all_zeros_mdb_ipv6 | |
112 | mdb_fdb_ipv4_ipv4 | |
113 | mdb_fdb_ipv6_ipv4 | |
114 | mdb_fdb_ipv4_ipv6 | |
115 | mdb_fdb_ipv6_ipv6 | |
116 | mdb_torture_ipv4_ipv4 | |
117 | mdb_torture_ipv6_ipv4 | |
118 | mdb_torture_ipv4_ipv6 | |
119 | mdb_torture_ipv6_ipv6 | |
120 | " | |
121 | ||
122 | # All tests in this script. Can be overridden with -t option. | |
123 | TESTS=" | |
124 | $CONTROL_PATH_TESTS | |
125 | $DATA_PATH_TESTS | |
126 | " | |
127 | VERBOSE=0 | |
128 | PAUSE_ON_FAIL=no | |
129 | PAUSE=no | |
130 | ||
131 | ################################################################################ | |
132 | # Utilities | |
133 | ||
134 | log_test() | |
135 | { | |
136 | local rc=$1 | |
137 | local expected=$2 | |
138 | local msg="$3" | |
139 | ||
140 | if [ ${rc} -eq ${expected} ]; then | |
141 | printf "TEST: %-60s [ OK ]\n" "${msg}" | |
142 | nsuccess=$((nsuccess+1)) | |
143 | else | |
144 | ret=1 | |
145 | nfail=$((nfail+1)) | |
146 | printf "TEST: %-60s [FAIL]\n" "${msg}" | |
147 | if [ "$VERBOSE" = "1" ]; then | |
148 | echo " rc=$rc, expected $expected" | |
149 | fi | |
150 | ||
151 | if [ "${PAUSE_ON_FAIL}" = "yes" ]; then | |
152 | echo | |
153 | echo "hit enter to continue, 'q' to quit" | |
154 | read a | |
155 | [ "$a" = "q" ] && exit 1 | |
156 | fi | |
157 | fi | |
158 | ||
159 | if [ "${PAUSE}" = "yes" ]; then | |
160 | echo | |
161 | echo "hit enter to continue, 'q' to quit" | |
162 | read a | |
163 | [ "$a" = "q" ] && exit 1 | |
164 | fi | |
165 | ||
166 | [ "$VERBOSE" = "1" ] && echo | |
167 | } | |
168 | ||
169 | run_cmd() | |
170 | { | |
171 | local cmd="$1" | |
172 | local out | |
173 | local stderr="2>/dev/null" | |
174 | ||
175 | if [ "$VERBOSE" = "1" ]; then | |
176 | printf "COMMAND: $cmd\n" | |
177 | stderr= | |
178 | fi | |
179 | ||
180 | out=$(eval $cmd $stderr) | |
181 | rc=$? | |
182 | if [ "$VERBOSE" = "1" -a -n "$out" ]; then | |
183 | echo " $out" | |
184 | fi | |
185 | ||
186 | return $rc | |
187 | } | |
188 | ||
189 | tc_check_packets() | |
190 | { | |
191 | local ns=$1; shift | |
192 | local id=$1; shift | |
193 | local handle=$1; shift | |
194 | local count=$1; shift | |
195 | local pkts | |
196 | ||
197 | sleep 0.1 | |
198 | pkts=$(tc -n $ns -j -s filter show $id \ | |
199 | | jq ".[] | select(.options.handle == $handle) | \ | |
200 | .options.actions[0].stats.packets") | |
201 | [[ $pkts == $count ]] | |
202 | } | |
203 | ||
204 | ################################################################################ | |
205 | # Setup | |
206 | ||
207 | setup_common_ns() | |
208 | { | |
209 | local ns=$1; shift | |
210 | local local_addr=$1; shift | |
211 | ||
212 | ip netns exec $ns sysctl -qw net.ipv4.ip_forward=1 | |
213 | ip netns exec $ns sysctl -qw net.ipv4.fib_multipath_use_neigh=1 | |
214 | ip netns exec $ns sysctl -qw net.ipv4.conf.default.ignore_routes_with_linkdown=1 | |
215 | ip netns exec $ns sysctl -qw net.ipv6.conf.all.keep_addr_on_down=1 | |
216 | ip netns exec $ns sysctl -qw net.ipv6.conf.all.forwarding=1 | |
217 | ip netns exec $ns sysctl -qw net.ipv6.conf.default.forwarding=1 | |
218 | ip netns exec $ns sysctl -qw net.ipv6.conf.default.ignore_routes_with_linkdown=1 | |
219 | ip netns exec $ns sysctl -qw net.ipv6.conf.all.accept_dad=0 | |
220 | ip netns exec $ns sysctl -qw net.ipv6.conf.default.accept_dad=0 | |
221 | ||
222 | ip -n $ns link set dev lo up | |
223 | ip -n $ns address add $local_addr dev lo | |
224 | ||
225 | ip -n $ns link set dev veth0 up | |
226 | ||
227 | ip -n $ns link add name br0 up type bridge vlan_filtering 1 \ | |
228 | vlan_default_pvid 0 mcast_snooping 0 | |
229 | ||
230 | ip -n $ns link add link br0 name br0.10 up type vlan id 10 | |
231 | bridge -n $ns vlan add vid 10 dev br0 self | |
232 | ||
233 | ip -n $ns link add link br0 name br0.20 up type vlan id 20 | |
234 | bridge -n $ns vlan add vid 20 dev br0 self | |
235 | ||
236 | ip -n $ns link add link br0 name br0.4000 up type vlan id 4000 | |
237 | bridge -n $ns vlan add vid 4000 dev br0 self | |
238 | ||
239 | ip -n $ns link add name vx0 up master br0 type vxlan \ | |
240 | local $local_addr dstport 4789 external vnifilter | |
241 | bridge -n $ns link set dev vx0 vlan_tunnel on | |
242 | ||
243 | bridge -n $ns vlan add vid 10 dev vx0 | |
244 | bridge -n $ns vlan add vid 10 dev vx0 tunnel_info id 10010 | |
245 | bridge -n $ns vni add vni 10010 dev vx0 | |
246 | ||
247 | bridge -n $ns vlan add vid 20 dev vx0 | |
248 | bridge -n $ns vlan add vid 20 dev vx0 tunnel_info id 10020 | |
249 | bridge -n $ns vni add vni 10020 dev vx0 | |
250 | ||
251 | bridge -n $ns vlan add vid 4000 dev vx0 pvid | |
252 | bridge -n $ns vlan add vid 4000 dev vx0 tunnel_info id 14000 | |
253 | bridge -n $ns vni add vni 14000 dev vx0 | |
254 | } | |
255 | ||
256 | setup_common() | |
257 | { | |
258 | local ns1=$1; shift | |
259 | local ns2=$1; shift | |
260 | local local_addr1=$1; shift | |
261 | local local_addr2=$1; shift | |
262 | ||
62199e3f IS |
263 | ip link add name veth0 type veth peer name veth1 |
264 | ip link set dev veth0 netns $ns1 name veth0 | |
265 | ip link set dev veth1 netns $ns2 name veth0 | |
266 | ||
267 | setup_common_ns $ns1 $local_addr1 | |
268 | setup_common_ns $ns2 $local_addr2 | |
269 | } | |
270 | ||
271 | setup_v4() | |
272 | { | |
a8258e64 HL |
273 | setup_ns ns1_v4 ns2_v4 |
274 | setup_common $ns1_v4 $ns2_v4 192.0.2.1 192.0.2.2 | |
62199e3f | 275 | |
a8258e64 HL |
276 | ip -n $ns1_v4 address add 192.0.2.17/28 dev veth0 |
277 | ip -n $ns2_v4 address add 192.0.2.18/28 dev veth0 | |
62199e3f | 278 | |
a8258e64 HL |
279 | ip -n $ns1_v4 route add default via 192.0.2.18 |
280 | ip -n $ns2_v4 route add default via 192.0.2.17 | |
62199e3f IS |
281 | } |
282 | ||
283 | cleanup_v4() | |
284 | { | |
a8258e64 | 285 | cleanup_ns $ns2_v4 $ns1_v4 |
62199e3f IS |
286 | } |
287 | ||
288 | setup_v6() | |
289 | { | |
a8258e64 HL |
290 | setup_ns ns1_v6 ns2_v6 |
291 | setup_common $ns1_v6 $ns2_v6 2001:db8:1::1 2001:db8:1::2 | |
62199e3f | 292 | |
a8258e64 HL |
293 | ip -n $ns1_v6 address add 2001:db8:2::1/64 dev veth0 nodad |
294 | ip -n $ns2_v6 address add 2001:db8:2::2/64 dev veth0 nodad | |
62199e3f | 295 | |
a8258e64 HL |
296 | ip -n $ns1_v6 route add default via 2001:db8:2::2 |
297 | ip -n $ns2_v6 route add default via 2001:db8:2::1 | |
62199e3f IS |
298 | } |
299 | ||
300 | cleanup_v6() | |
301 | { | |
a8258e64 | 302 | cleanup_ns $ns2_v6 $ns1_v6 |
62199e3f IS |
303 | } |
304 | ||
305 | setup() | |
306 | { | |
307 | set -e | |
308 | ||
309 | setup_v4 | |
310 | setup_v6 | |
311 | ||
312 | sleep 5 | |
313 | ||
314 | set +e | |
315 | } | |
316 | ||
317 | cleanup() | |
318 | { | |
319 | cleanup_v6 &> /dev/null | |
320 | cleanup_v4 &> /dev/null | |
321 | } | |
322 | ||
323 | ################################################################################ | |
324 | # Tests - Control path | |
325 | ||
326 | basic_common() | |
327 | { | |
328 | local ns1=$1; shift | |
329 | local grp_key=$1; shift | |
330 | local vtep_ip=$1; shift | |
331 | ||
332 | # Test basic control path operations common to all MDB entry types. | |
333 | ||
334 | # Basic add, replace and delete behavior. | |
335 | run_cmd "bridge -n $ns1 mdb add dev vx0 port vx0 $grp_key permanent dst $vtep_ip src_vni 10010" | |
336 | log_test $? 0 "MDB entry addition" | |
0514dd05 | 337 | run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 $grp_key src_vni 10010" |
62199e3f IS |
338 | log_test $? 0 "MDB entry presence after addition" |
339 | ||
340 | run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 $grp_key permanent dst $vtep_ip src_vni 10010" | |
341 | log_test $? 0 "MDB entry replacement" | |
0514dd05 | 342 | run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 $grp_key src_vni 10010" |
62199e3f IS |
343 | log_test $? 0 "MDB entry presence after replacement" |
344 | ||
345 | run_cmd "bridge -n $ns1 mdb del dev vx0 port vx0 $grp_key dst $vtep_ip src_vni 10010" | |
346 | log_test $? 0 "MDB entry deletion" | |
0514dd05 IS |
347 | run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 $grp_key src_vni 10010" |
348 | log_test $? 254 "MDB entry presence after deletion" | |
62199e3f IS |
349 | |
350 | run_cmd "bridge -n $ns1 mdb del dev vx0 port vx0 $grp_key dst $vtep_ip src_vni 10010" | |
351 | log_test $? 255 "Non-existent MDB entry deletion" | |
352 | ||
353 | # Default protocol and replacement. | |
354 | run_cmd "bridge -n $ns1 mdb add dev vx0 port vx0 $grp_key permanent dst $vtep_ip src_vni 10010" | |
0514dd05 | 355 | run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 $grp_key src_vni 10010 | grep \"proto static\"" |
62199e3f IS |
356 | log_test $? 0 "MDB entry default protocol" |
357 | ||
358 | run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 $grp_key permanent proto 123 dst $vtep_ip src_vni 10010" | |
0514dd05 | 359 | run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 $grp_key src_vni 10010 | grep \"proto 123\"" |
62199e3f IS |
360 | log_test $? 0 "MDB entry protocol replacement" |
361 | ||
362 | run_cmd "bridge -n $ns1 mdb del dev vx0 port vx0 $grp_key dst $vtep_ip src_vni 10010" | |
363 | ||
364 | # Default destination port and replacement. | |
365 | run_cmd "bridge -n $ns1 mdb add dev vx0 port vx0 $grp_key permanent dst $vtep_ip src_vni 10010" | |
0514dd05 | 366 | run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 $grp_key src_vni 10010 | grep \" dst_port \"" |
62199e3f IS |
367 | log_test $? 1 "MDB entry default destination port" |
368 | ||
369 | run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 $grp_key permanent dst $vtep_ip dst_port 1234 src_vni 10010" | |
0514dd05 | 370 | run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 $grp_key src_vni 10010 | grep \"dst_port 1234\"" |
62199e3f IS |
371 | log_test $? 0 "MDB entry destination port replacement" |
372 | ||
373 | run_cmd "bridge -n $ns1 mdb del dev vx0 port vx0 $grp_key dst $vtep_ip src_vni 10010" | |
374 | ||
375 | # Default destination VNI and replacement. | |
376 | run_cmd "bridge -n $ns1 mdb add dev vx0 port vx0 $grp_key permanent dst $vtep_ip src_vni 10010" | |
0514dd05 | 377 | run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 $grp_key src_vni 10010 | grep \" vni \"" |
62199e3f IS |
378 | log_test $? 1 "MDB entry default destination VNI" |
379 | ||
380 | run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 $grp_key permanent dst $vtep_ip vni 1234 src_vni 10010" | |
0514dd05 | 381 | run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 $grp_key src_vni 10010 | grep \"vni 1234\"" |
62199e3f IS |
382 | log_test $? 0 "MDB entry destination VNI replacement" |
383 | ||
384 | run_cmd "bridge -n $ns1 mdb del dev vx0 port vx0 $grp_key dst $vtep_ip src_vni 10010" | |
385 | ||
386 | # Default outgoing interface and replacement. | |
387 | run_cmd "bridge -n $ns1 mdb add dev vx0 port vx0 $grp_key permanent dst $vtep_ip src_vni 10010" | |
0514dd05 | 388 | run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 $grp_key src_vni 10010 | grep \" via \"" |
62199e3f IS |
389 | log_test $? 1 "MDB entry default outgoing interface" |
390 | ||
391 | run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 $grp_key permanent dst $vtep_ip src_vni 10010 via veth0" | |
0514dd05 | 392 | run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 $grp_key src_vni 10010 | grep \"via veth0\"" |
62199e3f IS |
393 | log_test $? 0 "MDB entry outgoing interface replacement" |
394 | ||
395 | run_cmd "bridge -n $ns1 mdb del dev vx0 port vx0 $grp_key dst $vtep_ip src_vni 10010" | |
396 | ||
397 | # Common error cases. | |
398 | run_cmd "bridge -n $ns1 mdb add dev vx0 port veth0 $grp_key permanent dst $vtep_ip src_vni 10010" | |
399 | log_test $? 255 "MDB entry with mismatch between device and port" | |
400 | ||
401 | run_cmd "bridge -n $ns1 mdb add dev vx0 port vx0 $grp_key temp dst $vtep_ip src_vni 10010" | |
402 | log_test $? 255 "MDB entry with temp state" | |
403 | ||
404 | run_cmd "bridge -n $ns1 mdb add dev vx0 port vx0 $grp_key permanent vid 10 dst $vtep_ip src_vni 10010" | |
405 | log_test $? 255 "MDB entry with VLAN" | |
406 | ||
407 | run_cmd "bridge -n $ns1 mdb add dev vx0 port vx0 grp 01:02:03:04:05:06 permanent dst $vtep_ip src_vni 10010" | |
408 | log_test $? 255 "MDB entry MAC address" | |
409 | ||
410 | run_cmd "bridge -n $ns1 mdb add dev vx0 port vx0 $grp_key permanent" | |
411 | log_test $? 255 "MDB entry without extended parameters" | |
412 | ||
413 | run_cmd "bridge -n $ns1 mdb add dev vx0 port vx0 $grp_key permanent proto 3 dst $vtep_ip src_vni 10010" | |
414 | log_test $? 255 "MDB entry with an invalid protocol" | |
415 | ||
416 | run_cmd "bridge -n $ns1 mdb add dev vx0 port vx0 $grp_key permanent dst $vtep_ip vni $((2 ** 24)) src_vni 10010" | |
417 | log_test $? 255 "MDB entry with an invalid destination VNI" | |
418 | ||
419 | run_cmd "bridge -n $ns1 mdb add dev vx0 port vx0 $grp_key permanent dst $vtep_ip src_vni $((2 ** 24))" | |
420 | log_test $? 255 "MDB entry with an invalid source VNI" | |
421 | ||
422 | run_cmd "bridge -n $ns1 mdb add dev vx0 port vx0 $grp_key permanent src_vni 10010" | |
423 | log_test $? 255 "MDB entry without a remote destination IP" | |
424 | ||
425 | run_cmd "bridge -n $ns1 mdb add dev vx0 port vx0 $grp_key permanent dst $vtep_ip src_vni 10010" | |
426 | run_cmd "bridge -n $ns1 mdb add dev vx0 port vx0 $grp_key permanent dst $vtep_ip src_vni 10010" | |
427 | log_test $? 255 "Duplicate MDB entries" | |
428 | run_cmd "bridge -n $ns1 mdb del dev vx0 port vx0 $grp_key dst $vtep_ip src_vni 10010" | |
429 | } | |
430 | ||
431 | basic_star_g_ipv4_ipv4() | |
432 | { | |
a8258e64 | 433 | local ns1=$ns1_v4 |
62199e3f IS |
434 | local grp_key="grp 239.1.1.1" |
435 | local vtep_ip=198.51.100.100 | |
436 | ||
437 | echo | |
438 | echo "Control path: Basic (*, G) operations - IPv4 overlay / IPv4 underlay" | |
439 | echo "--------------------------------------------------------------------" | |
440 | ||
441 | basic_common $ns1 "$grp_key" $vtep_ip | |
442 | } | |
443 | ||
444 | basic_star_g_ipv6_ipv4() | |
445 | { | |
a8258e64 | 446 | local ns1=$ns1_v4 |
62199e3f IS |
447 | local grp_key="grp ff0e::1" |
448 | local vtep_ip=198.51.100.100 | |
449 | ||
450 | echo | |
451 | echo "Control path: Basic (*, G) operations - IPv6 overlay / IPv4 underlay" | |
452 | echo "--------------------------------------------------------------------" | |
453 | ||
454 | basic_common $ns1 "$grp_key" $vtep_ip | |
455 | } | |
456 | ||
457 | basic_star_g_ipv4_ipv6() | |
458 | { | |
a8258e64 | 459 | local ns1=$ns1_v6 |
62199e3f IS |
460 | local grp_key="grp 239.1.1.1" |
461 | local vtep_ip=2001:db8:1000::1 | |
462 | ||
463 | echo | |
464 | echo "Control path: Basic (*, G) operations - IPv4 overlay / IPv6 underlay" | |
465 | echo "--------------------------------------------------------------------" | |
466 | ||
467 | basic_common $ns1 "$grp_key" $vtep_ip | |
468 | } | |
469 | ||
470 | basic_star_g_ipv6_ipv6() | |
471 | { | |
a8258e64 | 472 | local ns1=$ns1_v6 |
62199e3f IS |
473 | local grp_key="grp ff0e::1" |
474 | local vtep_ip=2001:db8:1000::1 | |
475 | ||
476 | echo | |
477 | echo "Control path: Basic (*, G) operations - IPv6 overlay / IPv6 underlay" | |
478 | echo "--------------------------------------------------------------------" | |
479 | ||
480 | basic_common $ns1 "$grp_key" $vtep_ip | |
481 | } | |
482 | ||
483 | basic_sg_ipv4_ipv4() | |
484 | { | |
a8258e64 | 485 | local ns1=$ns1_v4 |
62199e3f IS |
486 | local grp_key="grp 239.1.1.1 src 192.0.2.129" |
487 | local vtep_ip=198.51.100.100 | |
488 | ||
489 | echo | |
490 | echo "Control path: Basic (S, G) operations - IPv4 overlay / IPv4 underlay" | |
491 | echo "--------------------------------------------------------------------" | |
492 | ||
493 | basic_common $ns1 "$grp_key" $vtep_ip | |
494 | } | |
495 | ||
496 | basic_sg_ipv6_ipv4() | |
497 | { | |
a8258e64 | 498 | local ns1=$ns1_v4 |
62199e3f IS |
499 | local grp_key="grp ff0e::1 src 2001:db8:100::1" |
500 | local vtep_ip=198.51.100.100 | |
501 | ||
502 | echo | |
503 | echo "Control path: Basic (S, G) operations - IPv6 overlay / IPv4 underlay" | |
504 | echo "---------------------------------------------------------------------" | |
505 | ||
506 | basic_common $ns1 "$grp_key" $vtep_ip | |
507 | } | |
508 | ||
509 | basic_sg_ipv4_ipv6() | |
510 | { | |
a8258e64 | 511 | local ns1=$ns1_v6 |
62199e3f IS |
512 | local grp_key="grp 239.1.1.1 src 192.0.2.129" |
513 | local vtep_ip=2001:db8:1000::1 | |
514 | ||
515 | echo | |
516 | echo "Control path: Basic (S, G) operations - IPv4 overlay / IPv6 underlay" | |
517 | echo "--------------------------------------------------------------------" | |
518 | ||
519 | basic_common $ns1 "$grp_key" $vtep_ip | |
520 | } | |
521 | ||
522 | basic_sg_ipv6_ipv6() | |
523 | { | |
a8258e64 | 524 | local ns1=$ns1_v6 |
62199e3f IS |
525 | local grp_key="grp ff0e::1 src 2001:db8:100::1" |
526 | local vtep_ip=2001:db8:1000::1 | |
527 | ||
528 | echo | |
529 | echo "Control path: Basic (S, G) operations - IPv6 overlay / IPv6 underlay" | |
530 | echo "--------------------------------------------------------------------" | |
531 | ||
532 | basic_common $ns1 "$grp_key" $vtep_ip | |
533 | } | |
534 | ||
535 | star_g_common() | |
536 | { | |
537 | local ns1=$1; shift | |
538 | local grp=$1; shift | |
539 | local src1=$1; shift | |
540 | local src2=$1; shift | |
541 | local src3=$1; shift | |
542 | local vtep_ip=$1; shift | |
543 | local all_zeros_grp=$1; shift | |
544 | ||
545 | # Test control path operations specific to (*, G) entries. | |
546 | ||
547 | # Basic add, replace and delete behavior. | |
548 | run_cmd "bridge -n $ns1 mdb add dev vx0 port vx0 grp $grp permanent filter_mode exclude source_list $src1 dst $vtep_ip src_vni 10010" | |
549 | log_test $? 0 "(*, G) MDB entry addition with source list" | |
0514dd05 | 550 | run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grp $grp src_vni 10010" |
62199e3f | 551 | log_test $? 0 "(*, G) MDB entry presence after addition" |
0514dd05 | 552 | run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grp $grp src $src1 src_vni 10010" |
62199e3f IS |
553 | log_test $? 0 "(S, G) MDB entry presence after addition" |
554 | ||
555 | run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 grp $grp permanent filter_mode exclude source_list $src1 dst $vtep_ip src_vni 10010" | |
556 | log_test $? 0 "(*, G) MDB entry replacement with source list" | |
0514dd05 | 557 | run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grp $grp src_vni 10010" |
62199e3f | 558 | log_test $? 0 "(*, G) MDB entry presence after replacement" |
0514dd05 | 559 | run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grp $grp src $src1 src_vni 10010" |
62199e3f IS |
560 | log_test $? 0 "(S, G) MDB entry presence after replacement" |
561 | ||
562 | run_cmd "bridge -n $ns1 mdb del dev vx0 port vx0 grp $grp dst $vtep_ip src_vni 10010" | |
563 | log_test $? 0 "(*, G) MDB entry deletion" | |
0514dd05 IS |
564 | run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grp $grp src_vni 10010" |
565 | log_test $? 254 "(*, G) MDB entry presence after deletion" | |
566 | run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grp $grp src $src1 src_vni 10010" | |
567 | log_test $? 254 "(S, G) MDB entry presence after deletion" | |
62199e3f IS |
568 | |
569 | # Default filter mode and replacement. | |
570 | run_cmd "bridge -n $ns1 mdb add dev vx0 port vx0 grp $grp permanent dst $vtep_ip src_vni 10010" | |
0514dd05 | 571 | run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grp $grp src_vni 10010 | grep exclude" |
62199e3f IS |
572 | log_test $? 0 "(*, G) MDB entry default filter mode" |
573 | ||
574 | run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 grp $grp permanent filter_mode include source_list $src1 dst $vtep_ip src_vni 10010" | |
0514dd05 | 575 | run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grp $grp src_vni 10010 | grep include" |
62199e3f | 576 | log_test $? 0 "(*, G) MDB entry after replacing filter mode to \"include\"" |
0514dd05 | 577 | run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grp $grp src $src1 src_vni 10010" |
62199e3f | 578 | log_test $? 0 "(S, G) MDB entry after replacing filter mode to \"include\"" |
0514dd05 | 579 | run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grp $grp src $src1 src_vni 10010 | grep blocked" |
62199e3f IS |
580 | log_test $? 1 "\"blocked\" flag after replacing filter mode to \"include\"" |
581 | ||
582 | run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 grp $grp permanent filter_mode exclude source_list $src1 dst $vtep_ip src_vni 10010" | |
0514dd05 | 583 | run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grp $grp src_vni 10010 | grep exclude" |
62199e3f | 584 | log_test $? 0 "(*, G) MDB entry after replacing filter mode to \"exclude\"" |
0514dd05 | 585 | run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grep grp $grp src $src1 src_vni 10010" |
62199e3f | 586 | log_test $? 0 "(S, G) MDB entry after replacing filter mode to \"exclude\"" |
0514dd05 | 587 | run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grp $grp src $src1 src_vni 10010 | grep blocked" |
62199e3f IS |
588 | log_test $? 0 "\"blocked\" flag after replacing filter mode to \"exclude\"" |
589 | ||
590 | run_cmd "bridge -n $ns1 mdb del dev vx0 port vx0 grp $grp dst $vtep_ip src_vni 10010" | |
591 | ||
592 | # Default source list and replacement. | |
593 | run_cmd "bridge -n $ns1 mdb add dev vx0 port vx0 grp $grp permanent dst $vtep_ip src_vni 10010" | |
0514dd05 | 594 | run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grp $grp src_vni 10010 | grep source_list" |
62199e3f IS |
595 | log_test $? 1 "(*, G) MDB entry default source list" |
596 | ||
597 | run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 grp $grp permanent filter_mode exclude source_list $src1,$src2,$src3 dst $vtep_ip src_vni 10010" | |
0514dd05 | 598 | run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grp $grp src $src1 src_vni 10010" |
62199e3f | 599 | log_test $? 0 "(S, G) MDB entry of 1st source after replacing source list" |
0514dd05 | 600 | run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grp $grp src $src2 src_vni 10010" |
62199e3f | 601 | log_test $? 0 "(S, G) MDB entry of 2nd source after replacing source list" |
0514dd05 | 602 | run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grp $grp src $src3 src_vni 10010" |
62199e3f IS |
603 | log_test $? 0 "(S, G) MDB entry of 3rd source after replacing source list" |
604 | ||
605 | run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 grp $grp permanent filter_mode exclude source_list $src1,$src3 dst $vtep_ip src_vni 10010" | |
0514dd05 | 606 | run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grp $grp src $src1 src_vni 10010" |
62199e3f | 607 | log_test $? 0 "(S, G) MDB entry of 1st source after removing source" |
0514dd05 IS |
608 | run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grp $grp src $src2 src_vni 10010" |
609 | log_test $? 254 "(S, G) MDB entry of 2nd source after removing source" | |
610 | run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grp $grp src $src3 src_vni 10010" | |
62199e3f IS |
611 | log_test $? 0 "(S, G) MDB entry of 3rd source after removing source" |
612 | ||
613 | run_cmd "bridge -n $ns1 mdb del dev vx0 port vx0 grp $grp dst $vtep_ip src_vni 10010" | |
614 | ||
615 | # Default protocol and replacement. | |
616 | run_cmd "bridge -n $ns1 mdb add dev vx0 port vx0 grp $grp permanent filter_mode exclude source_list $src1 dst $vtep_ip src_vni 10010" | |
0514dd05 | 617 | run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grp $grp src_vni 10010 | grep \"proto static\"" |
62199e3f | 618 | log_test $? 0 "(*, G) MDB entry default protocol" |
0514dd05 | 619 | run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grp $grp src $src1 src_vni 10010 | grep \"proto static\"" |
62199e3f IS |
620 | log_test $? 0 "(S, G) MDB entry default protocol" |
621 | ||
622 | run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 grp $grp permanent filter_mode exclude source_list $src1 proto bgp dst $vtep_ip src_vni 10010" | |
0514dd05 | 623 | run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grp $grp src_vni 10010 | grep \"proto bgp\"" |
62199e3f | 624 | log_test $? 0 "(*, G) MDB entry protocol after replacement" |
0514dd05 | 625 | run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grp $grp src $src1 src_vni 10010 | grep \"proto bgp\"" |
62199e3f IS |
626 | log_test $? 0 "(S, G) MDB entry protocol after replacement" |
627 | ||
628 | run_cmd "bridge -n $ns1 mdb del dev vx0 port vx0 grp $grp dst $vtep_ip src_vni 10010" | |
629 | ||
630 | # Default destination port and replacement. | |
631 | run_cmd "bridge -n $ns1 mdb add dev vx0 port vx0 grp $grp permanent filter_mode exclude source_list $src1 dst $vtep_ip src_vni 10010" | |
0514dd05 | 632 | run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grp $grp src_vni 10010 | grep \" dst_port \"" |
62199e3f | 633 | log_test $? 1 "(*, G) MDB entry default destination port" |
0514dd05 | 634 | run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grp $grp src $src1 src_vni 10010 | grep \" dst_port \"" |
62199e3f IS |
635 | log_test $? 1 "(S, G) MDB entry default destination port" |
636 | ||
637 | run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 grp $grp permanent filter_mode exclude source_list $src1 dst $vtep_ip dst_port 1234 src_vni 10010" | |
0514dd05 | 638 | run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grp $grp src_vni 10010 | grep \" dst_port 1234 \"" |
62199e3f | 639 | log_test $? 0 "(*, G) MDB entry destination port after replacement" |
0514dd05 | 640 | run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grp $grp src $src1 src_vni 10010 | grep \" dst_port 1234 \"" |
62199e3f IS |
641 | log_test $? 0 "(S, G) MDB entry destination port after replacement" |
642 | ||
643 | run_cmd "bridge -n $ns1 mdb del dev vx0 port vx0 grp $grp dst $vtep_ip src_vni 10010" | |
644 | ||
645 | # Default destination VNI and replacement. | |
646 | run_cmd "bridge -n $ns1 mdb add dev vx0 port vx0 grp $grp permanent filter_mode exclude source_list $src1 dst $vtep_ip src_vni 10010" | |
0514dd05 | 647 | run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grp $grp src_vni 10010 | grep \" vni \"" |
62199e3f | 648 | log_test $? 1 "(*, G) MDB entry default destination VNI" |
0514dd05 | 649 | run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grp $grp src $src1 src_vni 10010 | grep \" vni \"" |
62199e3f IS |
650 | log_test $? 1 "(S, G) MDB entry default destination VNI" |
651 | ||
652 | run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 grp $grp permanent filter_mode exclude source_list $src1 dst $vtep_ip vni 1234 src_vni 10010" | |
0514dd05 | 653 | run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grp $grp src_vni 10010 | grep \" vni 1234 \"" |
62199e3f | 654 | log_test $? 0 "(*, G) MDB entry destination VNI after replacement" |
0514dd05 | 655 | run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grp $grp src $src1 src_vni 10010 | grep \" vni 1234 \"" |
62199e3f IS |
656 | log_test $? 0 "(S, G) MDB entry destination VNI after replacement" |
657 | ||
658 | run_cmd "bridge -n $ns1 mdb del dev vx0 port vx0 grp $grp dst $vtep_ip src_vni 10010" | |
659 | ||
660 | # Default outgoing interface and replacement. | |
661 | run_cmd "bridge -n $ns1 mdb add dev vx0 port vx0 grp $grp permanent filter_mode exclude source_list $src1 dst $vtep_ip src_vni 10010" | |
0514dd05 | 662 | run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grp $grp src_vni 10010 | grep \" via \"" |
62199e3f | 663 | log_test $? 1 "(*, G) MDB entry default outgoing interface" |
0514dd05 | 664 | run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grp $grp src $src1 src_vni 10010 | grep \" via \"" |
62199e3f IS |
665 | log_test $? 1 "(S, G) MDB entry default outgoing interface" |
666 | ||
667 | run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 grp $grp permanent filter_mode exclude source_list $src1 dst $vtep_ip src_vni 10010 via veth0" | |
0514dd05 | 668 | run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grp $grp src_vni 10010 | grep \" via veth0 \"" |
62199e3f | 669 | log_test $? 0 "(*, G) MDB entry outgoing interface after replacement" |
0514dd05 | 670 | run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grp $grp src $src1 src_vni 10010 | grep \" via veth0 \"" |
62199e3f IS |
671 | log_test $? 0 "(S, G) MDB entry outgoing interface after replacement" |
672 | ||
673 | run_cmd "bridge -n $ns1 mdb del dev vx0 port vx0 grp $grp dst $vtep_ip src_vni 10010" | |
674 | ||
675 | # Error cases. | |
676 | run_cmd "bridge -n $ns1 mdb add dev vx0 port vx0 grp $all_zeros_grp permanent filter_mode exclude dst $vtep_ip src_vni 10010" | |
677 | log_test $? 255 "All-zeros group with filter mode" | |
678 | ||
679 | run_cmd "bridge -n $ns1 mdb add dev vx0 port vx0 grp $all_zeros_grp permanent source_list $src1 dst $vtep_ip src_vni 10010" | |
680 | log_test $? 255 "All-zeros group with source list" | |
681 | ||
682 | run_cmd "bridge -n $ns1 mdb add dev vx0 port vx0 grp $grp permanent filter_mode include dst $vtep_ip src_vni 10010" | |
683 | log_test $? 255 "(*, G) INCLUDE with an empty source list" | |
684 | ||
685 | run_cmd "bridge -n $ns1 mdb add dev vx0 port vx0 grp $grp permanent filter_mode exclude source_list $grp dst $vtep_ip src_vni 10010" | |
686 | log_test $? 255 "Invalid source in source list" | |
687 | ||
688 | run_cmd "bridge -n $ns1 mdb add dev vx0 port vx0 grp $grp permanent source_list $src1 dst $vtep_ip src_vni 10010" | |
689 | log_test $? 255 "Source list without filter mode" | |
690 | } | |
691 | ||
692 | star_g_ipv4_ipv4() | |
693 | { | |
a8258e64 | 694 | local ns1=$ns1_v4 |
62199e3f IS |
695 | local grp=239.1.1.1 |
696 | local src1=192.0.2.129 | |
697 | local src2=192.0.2.130 | |
698 | local src3=192.0.2.131 | |
699 | local vtep_ip=198.51.100.100 | |
700 | local all_zeros_grp=0.0.0.0 | |
701 | ||
702 | echo | |
703 | echo "Control path: (*, G) operations - IPv4 overlay / IPv4 underlay" | |
704 | echo "--------------------------------------------------------------" | |
705 | ||
706 | star_g_common $ns1 $grp $src1 $src2 $src3 $vtep_ip $all_zeros_grp | |
707 | } | |
708 | ||
709 | star_g_ipv6_ipv4() | |
710 | { | |
a8258e64 | 711 | local ns1=$ns1_v4 |
62199e3f IS |
712 | local grp=ff0e::1 |
713 | local src1=2001:db8:100::1 | |
714 | local src2=2001:db8:100::2 | |
715 | local src3=2001:db8:100::3 | |
716 | local vtep_ip=198.51.100.100 | |
717 | local all_zeros_grp=:: | |
718 | ||
719 | echo | |
720 | echo "Control path: (*, G) operations - IPv6 overlay / IPv4 underlay" | |
721 | echo "--------------------------------------------------------------" | |
722 | ||
723 | star_g_common $ns1 $grp $src1 $src2 $src3 $vtep_ip $all_zeros_grp | |
724 | } | |
725 | ||
726 | star_g_ipv4_ipv6() | |
727 | { | |
a8258e64 | 728 | local ns1=$ns1_v6 |
62199e3f IS |
729 | local grp=239.1.1.1 |
730 | local src1=192.0.2.129 | |
731 | local src2=192.0.2.130 | |
732 | local src3=192.0.2.131 | |
733 | local vtep_ip=2001:db8:1000::1 | |
734 | local all_zeros_grp=0.0.0.0 | |
735 | ||
736 | echo | |
737 | echo "Control path: (*, G) operations - IPv4 overlay / IPv6 underlay" | |
738 | echo "--------------------------------------------------------------" | |
739 | ||
740 | star_g_common $ns1 $grp $src1 $src2 $src3 $vtep_ip $all_zeros_grp | |
741 | } | |
742 | ||
743 | star_g_ipv6_ipv6() | |
744 | { | |
a8258e64 | 745 | local ns1=$ns1_v6 |
62199e3f IS |
746 | local grp=ff0e::1 |
747 | local src1=2001:db8:100::1 | |
748 | local src2=2001:db8:100::2 | |
749 | local src3=2001:db8:100::3 | |
750 | local vtep_ip=2001:db8:1000::1 | |
751 | local all_zeros_grp=:: | |
752 | ||
753 | echo | |
754 | echo "Control path: (*, G) operations - IPv6 overlay / IPv6 underlay" | |
755 | echo "--------------------------------------------------------------" | |
756 | ||
757 | star_g_common $ns1 $grp $src1 $src2 $src3 $vtep_ip $all_zeros_grp | |
758 | } | |
759 | ||
760 | sg_common() | |
761 | { | |
762 | local ns1=$1; shift | |
763 | local grp=$1; shift | |
764 | local src=$1; shift | |
765 | local vtep_ip=$1; shift | |
766 | local all_zeros_grp=$1; shift | |
767 | ||
768 | # Test control path operations specific to (S, G) entries. | |
769 | ||
770 | # Default filter mode. | |
771 | run_cmd "bridge -n $ns1 mdb add dev vx0 port vx0 grp $grp src $src permanent dst $vtep_ip src_vni 10010" | |
0514dd05 | 772 | run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grp $grp src $src src_vni 10010 | grep include" |
62199e3f IS |
773 | log_test $? 0 "(S, G) MDB entry default filter mode" |
774 | ||
775 | run_cmd "bridge -n $ns1 mdb del dev vx0 port vx0 grp $grp src $src permanent dst $vtep_ip src_vni 10010" | |
776 | ||
777 | # Error cases. | |
778 | run_cmd "bridge -n $ns1 mdb add dev vx0 port vx0 grp $grp src $src permanent filter_mode include dst $vtep_ip src_vni 10010" | |
779 | log_test $? 255 "(S, G) with filter mode" | |
780 | ||
781 | run_cmd "bridge -n $ns1 mdb add dev vx0 port vx0 grp $grp src $src permanent source_list $src dst $vtep_ip src_vni 10010" | |
782 | log_test $? 255 "(S, G) with source list" | |
783 | ||
784 | run_cmd "bridge -n $ns1 mdb add dev vx0 port vx0 grp $grp src $grp permanent dst $vtep_ip src_vni 10010" | |
785 | log_test $? 255 "(S, G) with an invalid source list" | |
786 | ||
787 | run_cmd "bridge -n $ns1 mdb add dev vx0 port vx0 grp $all_zeros_grp src $src permanent dst $vtep_ip src_vni 10010" | |
788 | log_test $? 255 "All-zeros group with source" | |
789 | } | |
790 | ||
791 | sg_ipv4_ipv4() | |
792 | { | |
a8258e64 | 793 | local ns1=$ns1_v4 |
62199e3f IS |
794 | local grp=239.1.1.1 |
795 | local src=192.0.2.129 | |
796 | local vtep_ip=198.51.100.100 | |
797 | local all_zeros_grp=0.0.0.0 | |
798 | ||
799 | echo | |
800 | echo "Control path: (S, G) operations - IPv4 overlay / IPv4 underlay" | |
801 | echo "--------------------------------------------------------------" | |
802 | ||
803 | sg_common $ns1 $grp $src $vtep_ip $all_zeros_grp | |
804 | } | |
805 | ||
806 | sg_ipv6_ipv4() | |
807 | { | |
a8258e64 | 808 | local ns1=$ns1_v4 |
62199e3f IS |
809 | local grp=ff0e::1 |
810 | local src=2001:db8:100::1 | |
811 | local vtep_ip=198.51.100.100 | |
812 | local all_zeros_grp=:: | |
813 | ||
814 | echo | |
815 | echo "Control path: (S, G) operations - IPv6 overlay / IPv4 underlay" | |
816 | echo "--------------------------------------------------------------" | |
817 | ||
818 | sg_common $ns1 $grp $src $vtep_ip $all_zeros_grp | |
819 | } | |
820 | ||
821 | sg_ipv4_ipv6() | |
822 | { | |
a8258e64 | 823 | local ns1=$ns1_v6 |
62199e3f IS |
824 | local grp=239.1.1.1 |
825 | local src=192.0.2.129 | |
826 | local vtep_ip=2001:db8:1000::1 | |
827 | local all_zeros_grp=0.0.0.0 | |
828 | ||
829 | echo | |
830 | echo "Control path: (S, G) operations - IPv4 overlay / IPv6 underlay" | |
831 | echo "--------------------------------------------------------------" | |
832 | ||
833 | sg_common $ns1 $grp $src $vtep_ip $all_zeros_grp | |
834 | } | |
835 | ||
836 | sg_ipv6_ipv6() | |
837 | { | |
a8258e64 | 838 | local ns1=$ns1_v6 |
62199e3f IS |
839 | local grp=ff0e::1 |
840 | local src=2001:db8:100::1 | |
841 | local vtep_ip=2001:db8:1000::1 | |
842 | local all_zeros_grp=:: | |
843 | ||
844 | echo | |
845 | echo "Control path: (S, G) operations - IPv6 overlay / IPv6 underlay" | |
846 | echo "--------------------------------------------------------------" | |
847 | ||
848 | sg_common $ns1 $grp $src $vtep_ip $all_zeros_grp | |
849 | } | |
850 | ||
851 | ipv4_grps_get() | |
852 | { | |
853 | local max_grps=$1; shift | |
854 | local i | |
855 | ||
856 | for i in $(seq 0 $((max_grps - 1))); do | |
857 | echo "239.1.1.$i" | |
858 | done | |
859 | } | |
860 | ||
861 | ipv6_grps_get() | |
862 | { | |
863 | local max_grps=$1; shift | |
864 | local i | |
865 | ||
866 | for i in $(seq 0 $((max_grps - 1))); do | |
867 | echo "ff0e::$(printf %x $i)" | |
868 | done | |
869 | } | |
870 | ||
871 | dump_common() | |
872 | { | |
873 | local ns1=$1; shift | |
874 | local local_addr=$1; shift | |
875 | local remote_prefix=$1; shift | |
876 | local fn=$1; shift | |
877 | local max_vxlan_devs=2 | |
878 | local max_remotes=64 | |
879 | local max_grps=256 | |
880 | local num_entries | |
881 | local batch_file | |
882 | local grp | |
883 | local i j | |
884 | ||
885 | # The kernel maintains various markers for the MDB dump. Add a test for | |
886 | # large scale MDB dump to make sure that all the configured entries are | |
887 | # dumped and that the markers are used correctly. | |
888 | ||
889 | # Create net devices. | |
890 | for i in $(seq 1 $max_vxlan_devs); do | |
891 | ip -n $ns1 link add name vx-test${i} up type vxlan \ | |
892 | local $local_addr dstport 4789 external vnifilter | |
893 | done | |
894 | ||
895 | # Create batch file with MDB entries. | |
896 | batch_file=$(mktemp) | |
897 | for i in $(seq 1 $max_vxlan_devs); do | |
898 | for j in $(seq 1 $max_remotes); do | |
899 | for grp in $($fn $max_grps); do | |
900 | echo "mdb add dev vx-test${i} port vx-test${i} grp $grp permanent dst ${remote_prefix}${j}" >> $batch_file | |
901 | done | |
902 | done | |
903 | done | |
904 | ||
905 | # Program the batch file and check for expected number of entries. | |
906 | bridge -n $ns1 -b $batch_file | |
907 | for i in $(seq 1 $max_vxlan_devs); do | |
908 | num_entries=$(bridge -n $ns1 mdb show dev vx-test${i} | grep "permanent" | wc -l) | |
909 | [[ $num_entries -eq $((max_grps * max_remotes)) ]] | |
910 | log_test $? 0 "Large scale dump - VXLAN device #$i" | |
911 | done | |
912 | ||
913 | rm -rf $batch_file | |
914 | } | |
915 | ||
916 | dump_ipv4_ipv4() | |
917 | { | |
a8258e64 | 918 | local ns1=$ns1_v4 |
62199e3f IS |
919 | local local_addr=192.0.2.1 |
920 | local remote_prefix=198.51.100. | |
921 | local fn=ipv4_grps_get | |
922 | ||
923 | echo | |
924 | echo "Control path: Large scale MDB dump - IPv4 overlay / IPv4 underlay" | |
925 | echo "-----------------------------------------------------------------" | |
926 | ||
927 | dump_common $ns1 $local_addr $remote_prefix $fn | |
928 | } | |
929 | ||
930 | dump_ipv6_ipv4() | |
931 | { | |
a8258e64 | 932 | local ns1=$ns1_v4 |
62199e3f IS |
933 | local local_addr=192.0.2.1 |
934 | local remote_prefix=198.51.100. | |
935 | local fn=ipv6_grps_get | |
936 | ||
937 | echo | |
938 | echo "Control path: Large scale MDB dump - IPv6 overlay / IPv4 underlay" | |
939 | echo "-----------------------------------------------------------------" | |
940 | ||
941 | dump_common $ns1 $local_addr $remote_prefix $fn | |
942 | } | |
943 | ||
944 | dump_ipv4_ipv6() | |
945 | { | |
a8258e64 | 946 | local ns1=$ns1_v6 |
62199e3f IS |
947 | local local_addr=2001:db8:1::1 |
948 | local remote_prefix=2001:db8:1000:: | |
949 | local fn=ipv4_grps_get | |
950 | ||
951 | echo | |
952 | echo "Control path: Large scale MDB dump - IPv4 overlay / IPv6 underlay" | |
953 | echo "-----------------------------------------------------------------" | |
954 | ||
955 | dump_common $ns1 $local_addr $remote_prefix $fn | |
956 | } | |
957 | ||
958 | dump_ipv6_ipv6() | |
959 | { | |
a8258e64 | 960 | local ns1=$ns1_v6 |
62199e3f IS |
961 | local local_addr=2001:db8:1::1 |
962 | local remote_prefix=2001:db8:1000:: | |
963 | local fn=ipv6_grps_get | |
964 | ||
965 | echo | |
966 | echo "Control path: Large scale MDB dump - IPv6 overlay / IPv6 underlay" | |
967 | echo "-----------------------------------------------------------------" | |
968 | ||
969 | dump_common $ns1 $local_addr $remote_prefix $fn | |
970 | } | |
971 | ||
c3e87a7f IS |
972 | flush() |
973 | { | |
974 | local num_entries | |
975 | ||
976 | echo | |
977 | echo "Control path: Flush" | |
978 | echo "-------------------" | |
979 | ||
980 | # Add entries with different attributes and check that they are all | |
981 | # flushed when the flush command is given with no parameters. | |
982 | ||
983 | # Different source VNI. | |
984 | run_cmd "bridge -n $ns1_v4 mdb add dev vx0 port vx0 grp 239.1.1.1 permanent dst 198.51.100.1 src_vni 10010" | |
985 | run_cmd "bridge -n $ns1_v4 mdb add dev vx0 port vx0 grp 239.1.1.2 permanent dst 198.51.100.1 src_vni 10011" | |
986 | ||
987 | # Different routing protocol. | |
988 | run_cmd "bridge -n $ns1_v4 mdb add dev vx0 port vx0 grp 239.1.1.3 permanent proto bgp dst 198.51.100.1 src_vni 10010" | |
989 | run_cmd "bridge -n $ns1_v4 mdb add dev vx0 port vx0 grp 239.1.1.4 permanent proto zebra dst 198.51.100.1 src_vni 10010" | |
990 | ||
991 | # Different destination IP. | |
992 | run_cmd "bridge -n $ns1_v4 mdb add dev vx0 port vx0 grp 239.1.1.5 permanent dst 198.51.100.1 src_vni 10010" | |
993 | run_cmd "bridge -n $ns1_v4 mdb add dev vx0 port vx0 grp 239.1.1.6 permanent dst 198.51.100.2 src_vni 10010" | |
994 | ||
995 | # Different destination port. | |
996 | run_cmd "bridge -n $ns1_v4 mdb add dev vx0 port vx0 grp 239.1.1.7 permanent dst 198.51.100.1 dst_port 11111 src_vni 10010" | |
997 | run_cmd "bridge -n $ns1_v4 mdb add dev vx0 port vx0 grp 239.1.1.8 permanent dst 198.51.100.1 dst_port 22222 src_vni 10010" | |
998 | ||
999 | # Different VNI. | |
1000 | run_cmd "bridge -n $ns1_v4 mdb add dev vx0 port vx0 grp 239.1.1.9 permanent dst 198.51.100.1 vni 10010 src_vni 10010" | |
1001 | run_cmd "bridge -n $ns1_v4 mdb add dev vx0 port vx0 grp 239.1.1.10 permanent dst 198.51.100.1 vni 10020 src_vni 10010" | |
1002 | ||
1003 | run_cmd "bridge -n $ns1_v4 mdb flush dev vx0" | |
1004 | num_entries=$(bridge -n $ns1_v4 mdb show dev vx0 | wc -l) | |
1005 | [[ $num_entries -eq 0 ]] | |
1006 | log_test $? 0 "Flush all" | |
1007 | ||
1008 | # Check that entries are flushed when port is specified as the VXLAN | |
1009 | # device and that an error is returned when port is specified as a | |
1010 | # different net device. | |
1011 | ||
1012 | run_cmd "bridge -n $ns1_v4 mdb add dev vx0 port vx0 grp 239.1.1.1 permanent dst 198.51.100.1 src_vni 10010" | |
1013 | run_cmd "bridge -n $ns1_v4 mdb add dev vx0 port vx0 grp 239.1.1.1 permanent dst 198.51.100.2 src_vni 10010" | |
1014 | ||
1015 | run_cmd "bridge -n $ns1_v4 mdb flush dev vx0 port vx0" | |
1016 | run_cmd "bridge -n $ns1_v4 -d -s mdb get dev vx0 grp 239.1.1.1 src_vni 10010" | |
8a774698 | 1017 | log_test $? 254 "Flush by port - matching" |
c3e87a7f IS |
1018 | |
1019 | run_cmd "bridge -n $ns1_v4 mdb flush dev vx0 port veth0" | |
8a774698 | 1020 | log_test $? 255 "Flush by port - non-matching" |
c3e87a7f IS |
1021 | |
1022 | # Check that when flushing by source VNI only entries programmed with | |
1023 | # the specified source VNI are flushed and the rest are not. | |
1024 | ||
1025 | run_cmd "bridge -n $ns1_v4 mdb add dev vx0 port vx0 grp 239.1.1.1 permanent dst 198.51.100.1 src_vni 10010" | |
1026 | run_cmd "bridge -n $ns1_v4 mdb add dev vx0 port vx0 grp 239.1.1.1 permanent dst 198.51.100.2 src_vni 10010" | |
1027 | run_cmd "bridge -n $ns1_v4 mdb add dev vx0 port vx0 grp 239.1.1.1 permanent dst 198.51.100.1 src_vni 10011" | |
1028 | run_cmd "bridge -n $ns1_v4 mdb add dev vx0 port vx0 grp 239.1.1.1 permanent dst 198.51.100.2 src_vni 10011" | |
1029 | ||
1030 | run_cmd "bridge -n $ns1_v4 mdb flush dev vx0 src_vni 10010" | |
1031 | ||
1032 | run_cmd "bridge -n $ns1_v4 -d -s mdb get dev vx0 grp 239.1.1.1 src_vni 10010" | |
8a774698 | 1033 | log_test $? 254 "Flush by source VNI - matching" |
c3e87a7f | 1034 | run_cmd "bridge -n $ns1_v4 -d -s mdb get dev vx0 grp 239.1.1.1 src_vni 10011" |
8a774698 | 1035 | log_test $? 0 "Flush by source VNI - non-matching" |
c3e87a7f IS |
1036 | |
1037 | run_cmd "bridge -n $ns1_v4 mdb flush dev vx0" | |
1038 | ||
1039 | # Check that all entries are flushed when "permanent" is specified and | |
1040 | # that an error is returned when "nopermanent" is specified. | |
1041 | ||
1042 | run_cmd "bridge -n $ns1_v4 mdb add dev vx0 port vx0 grp 239.1.1.1 permanent dst 198.51.100.1 src_vni 10010" | |
1043 | run_cmd "bridge -n $ns1_v4 mdb add dev vx0 port vx0 grp 239.1.1.1 permanent dst 198.51.100.2 src_vni 10010" | |
1044 | ||
1045 | run_cmd "bridge -n $ns1_v4 mdb flush dev vx0 permanent" | |
1046 | run_cmd "bridge -n $ns1_v4 -d -s mdb get dev vx0 grp 239.1.1.1 src_vni 10010" | |
1047 | log_test $? 254 "Flush by \"permanent\" state" | |
1048 | ||
1049 | run_cmd "bridge -n $ns1_v4 mdb flush dev vx0 nopermanent" | |
1050 | log_test $? 255 "Flush by \"nopermanent\" state" | |
1051 | ||
1052 | # Check that when flushing by routing protocol only entries programmed | |
1053 | # with the specified routing protocol are flushed and the rest are not. | |
1054 | ||
1055 | run_cmd "bridge -n $ns1_v4 mdb add dev vx0 port vx0 grp 239.1.1.1 permanent proto bgp dst 198.51.100.1 src_vni 10010" | |
1056 | run_cmd "bridge -n $ns1_v4 mdb add dev vx0 port vx0 grp 239.1.1.1 permanent proto zebra dst 198.51.100.2 src_vni 10010" | |
1057 | ||
1058 | run_cmd "bridge -n $ns1_v4 mdb flush dev vx0 proto bgp" | |
1059 | ||
1060 | run_cmd "bridge -n $ns1_v4 -d -s mdb get dev vx0 grp 239.1.1.1 src_vni 10010 | grep \"proto bgp\"" | |
8a774698 | 1061 | log_test $? 1 "Flush by routing protocol - matching" |
c3e87a7f | 1062 | run_cmd "bridge -n $ns1_v4 -d -s mdb get dev vx0 grp 239.1.1.1 src_vni 10010 | grep \"proto zebra\"" |
8a774698 | 1063 | log_test $? 0 "Flush by routing protocol - non-matching" |
c3e87a7f IS |
1064 | |
1065 | run_cmd "bridge -n $ns1_v4 mdb flush dev vx0" | |
1066 | ||
1067 | # Check that when flushing by destination IP only entries programmed | |
1068 | # with the specified destination IP are flushed and the rest are not. | |
1069 | ||
1070 | # IPv4. | |
1071 | ||
1072 | run_cmd "bridge -n $ns1_v4 mdb add dev vx0 port vx0 grp 239.1.1.1 permanent dst 198.51.100.1 src_vni 10010" | |
1073 | run_cmd "bridge -n $ns1_v4 mdb add dev vx0 port vx0 grp 239.1.1.1 permanent dst 198.51.100.2 src_vni 10010" | |
1074 | ||
1075 | run_cmd "bridge -n $ns1_v4 mdb flush dev vx0 dst 198.51.100.2" | |
1076 | ||
1077 | run_cmd "bridge -n $ns1_v4 -d -s mdb get dev vx0 grp 239.1.1.1 src_vni 10010 | grep 198.51.100.2" | |
8a774698 | 1078 | log_test $? 1 "Flush by IPv4 destination IP - matching" |
c3e87a7f | 1079 | run_cmd "bridge -n $ns1_v4 -d -s mdb get dev vx0 grp 239.1.1.1 src_vni 10010 | grep 198.51.100.1" |
8a774698 | 1080 | log_test $? 0 "Flush by IPv4 destination IP - non-matching" |
c3e87a7f IS |
1081 | |
1082 | run_cmd "bridge -n $ns1_v4 mdb flush dev vx0" | |
1083 | ||
1084 | # IPv6. | |
1085 | ||
1086 | run_cmd "bridge -n $ns1_v4 mdb add dev vx0 port vx0 grp 239.1.1.1 permanent dst 2001:db8:1000::1 src_vni 10010" | |
1087 | run_cmd "bridge -n $ns1_v4 mdb add dev vx0 port vx0 grp 239.1.1.1 permanent dst 2001:db8:1000::2 src_vni 10010" | |
1088 | ||
1089 | run_cmd "bridge -n $ns1_v4 mdb flush dev vx0 dst 2001:db8:1000::2" | |
1090 | ||
1091 | run_cmd "bridge -n $ns1_v4 -d -s mdb get dev vx0 grp 239.1.1.1 src_vni 10010 | grep 2001:db8:1000::2" | |
8a774698 | 1092 | log_test $? 1 "Flush by IPv6 destination IP - matching" |
c3e87a7f | 1093 | run_cmd "bridge -n $ns1_v4 -d -s mdb get dev vx0 grp 239.1.1.1 src_vni 10010 | grep 2001:db8:1000::1" |
8a774698 | 1094 | log_test $? 0 "Flush by IPv6 destination IP - non-matching" |
c3e87a7f IS |
1095 | |
1096 | run_cmd "bridge -n $ns1_v4 mdb flush dev vx0" | |
1097 | ||
1098 | # Check that when flushing by UDP destination port only entries | |
1099 | # programmed with the specified port are flushed and the rest are not. | |
1100 | ||
1101 | run_cmd "bridge -n $ns1_v4 mdb add dev vx0 port vx0 grp 239.1.1.1 permanent dst_port 11111 dst 198.51.100.1 src_vni 10010" | |
1102 | run_cmd "bridge -n $ns1_v4 mdb add dev vx0 port vx0 grp 239.1.1.1 permanent dst_port 22222 dst 198.51.100.2 src_vni 10010" | |
1103 | ||
1104 | run_cmd "bridge -n $ns1_v4 mdb flush dev vx0 dst_port 11111" | |
1105 | ||
1106 | run_cmd "bridge -n $ns1_v4 -d -s mdb get dev vx0 grp 239.1.1.1 src_vni 10010 | grep \"dst_port 11111\"" | |
8a774698 | 1107 | log_test $? 1 "Flush by UDP destination port - matching" |
c3e87a7f | 1108 | run_cmd "bridge -n $ns1_v4 -d -s mdb get dev vx0 grp 239.1.1.1 src_vni 10010 | grep \"dst_port 22222\"" |
8a774698 | 1109 | log_test $? 0 "Flush by UDP destination port - non-matching" |
c3e87a7f IS |
1110 | |
1111 | run_cmd "bridge -n $ns1_v4 mdb flush dev vx0" | |
1112 | ||
1113 | # When not specifying a UDP destination port for an entry, traffic is | |
1114 | # encapsulated with the device's UDP destination port. Check that when | |
1115 | # flushing by the device's UDP destination port only entries programmed | |
1116 | # with this port are flushed and the rest are not. | |
1117 | ||
1118 | run_cmd "bridge -n $ns1_v4 mdb add dev vx0 port vx0 grp 239.1.1.1 permanent dst 198.51.100.1 src_vni 10010" | |
1119 | run_cmd "bridge -n $ns1_v4 mdb add dev vx0 port vx0 grp 239.1.1.1 permanent dst_port 22222 dst 198.51.100.2 src_vni 10010" | |
1120 | ||
1121 | run_cmd "bridge -n $ns1_v4 mdb flush dev vx0 dst_port 4789" | |
1122 | ||
1123 | run_cmd "bridge -n $ns1_v4 -d -s mdb get dev vx0 grp 239.1.1.1 src_vni 10010 | grep 198.51.100.1" | |
8a774698 | 1124 | log_test $? 1 "Flush by device's UDP destination port - matching" |
c3e87a7f | 1125 | run_cmd "bridge -n $ns1_v4 -d -s mdb get dev vx0 grp 239.1.1.1 src_vni 10010 | grep 198.51.100.2" |
8a774698 | 1126 | log_test $? 0 "Flush by device's UDP destination port - non-matching" |
c3e87a7f IS |
1127 | |
1128 | run_cmd "bridge -n $ns1_v4 mdb flush dev vx0" | |
1129 | ||
1130 | # Check that when flushing by destination VNI only entries programmed | |
1131 | # with the specified destination VNI are flushed and the rest are not. | |
1132 | ||
1133 | run_cmd "bridge -n $ns1_v4 mdb add dev vx0 port vx0 grp 239.1.1.1 permanent vni 20010 dst 198.51.100.1 src_vni 10010" | |
1134 | run_cmd "bridge -n $ns1_v4 mdb add dev vx0 port vx0 grp 239.1.1.1 permanent vni 20011 dst 198.51.100.2 src_vni 10010" | |
1135 | ||
1136 | run_cmd "bridge -n $ns1_v4 mdb flush dev vx0 vni 20010" | |
1137 | ||
1138 | run_cmd "bridge -n $ns1_v4 -d -s mdb get dev vx0 grp 239.1.1.1 src_vni 10010 | grep \" vni 20010\"" | |
8a774698 | 1139 | log_test $? 1 "Flush by destination VNI - matching" |
c3e87a7f | 1140 | run_cmd "bridge -n $ns1_v4 -d -s mdb get dev vx0 grp 239.1.1.1 src_vni 10010 | grep \" vni 20011\"" |
8a774698 | 1141 | log_test $? 0 "Flush by destination VNI - non-matching" |
c3e87a7f IS |
1142 | |
1143 | run_cmd "bridge -n $ns1_v4 mdb flush dev vx0" | |
1144 | ||
1145 | # When not specifying a destination VNI for an entry, traffic is | |
1146 | # encapsulated with the source VNI. Check that when flushing by a | |
1147 | # destination VNI that is equal to the source VNI only such entries are | |
1148 | # flushed and the rest are not. | |
1149 | ||
1150 | run_cmd "bridge -n $ns1_v4 mdb add dev vx0 port vx0 grp 239.1.1.1 permanent dst 198.51.100.1 src_vni 10010" | |
1151 | run_cmd "bridge -n $ns1_v4 mdb add dev vx0 port vx0 grp 239.1.1.1 permanent vni 20010 dst 198.51.100.2 src_vni 10010" | |
1152 | ||
1153 | run_cmd "bridge -n $ns1_v4 mdb flush dev vx0 vni 10010" | |
1154 | ||
1155 | run_cmd "bridge -n $ns1_v4 -d -s mdb get dev vx0 grp 239.1.1.1 src_vni 10010 | grep 198.51.100.1" | |
8a774698 | 1156 | log_test $? 1 "Flush by destination VNI equal to source VNI - matching" |
c3e87a7f | 1157 | run_cmd "bridge -n $ns1_v4 -d -s mdb get dev vx0 grp 239.1.1.1 src_vni 10010 | grep 198.51.100.2" |
8a774698 | 1158 | log_test $? 0 "Flush by destination VNI equal to source VNI - non-matching" |
c3e87a7f IS |
1159 | |
1160 | run_cmd "bridge -n $ns1_v4 mdb flush dev vx0" | |
1161 | ||
1162 | # Test that an error is returned when trying to flush using VLAN ID. | |
1163 | ||
1164 | run_cmd "bridge -n $ns1_v4 mdb flush dev vx0 vid 10" | |
1165 | log_test $? 255 "Flush by VLAN ID" | |
1166 | } | |
1167 | ||
62199e3f IS |
1168 | ################################################################################ |
1169 | # Tests - Data path | |
1170 | ||
1171 | encap_params_common() | |
1172 | { | |
1173 | local ns1=$1; shift | |
1174 | local ns2=$1; shift | |
1175 | local vtep1_ip=$1; shift | |
1176 | local vtep2_ip=$1; shift | |
1177 | local plen=$1; shift | |
1178 | local enc_ethtype=$1; shift | |
1179 | local grp=$1; shift | |
f1425529 | 1180 | local grp_dmac=$1; shift |
62199e3f IS |
1181 | local src=$1; shift |
1182 | local mz=$1; shift | |
1183 | ||
1184 | # Test that packets forwarded by the VXLAN MDB are encapsulated with | |
1185 | # the correct parameters. Transmit packets from the first namespace and | |
1186 | # check that they hit the corresponding filters on the ingress of the | |
1187 | # second namespace. | |
1188 | ||
1189 | run_cmd "tc -n $ns2 qdisc replace dev veth0 clsact" | |
1190 | run_cmd "tc -n $ns2 qdisc replace dev vx0 clsact" | |
1191 | run_cmd "ip -n $ns2 address replace $vtep1_ip/$plen dev lo" | |
1192 | run_cmd "ip -n $ns2 address replace $vtep2_ip/$plen dev lo" | |
1193 | ||
1194 | # Check destination IP. | |
1195 | run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 grp $grp permanent dst $vtep1_ip src_vni 10010" | |
1196 | run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 grp $grp permanent dst $vtep2_ip src_vni 10020" | |
1197 | ||
1198 | run_cmd "tc -n $ns2 filter replace dev vx0 ingress pref 1 handle 101 proto all flower enc_dst_ip $vtep1_ip action pass" | |
f1425529 | 1199 | run_cmd "ip netns exec $ns1 $mz br0.10 -a own -b $grp_dmac -A $src -B $grp -t udp sp=12345,dp=54321 -p 100 -c 1 -q" |
62199e3f IS |
1200 | tc_check_packets "$ns2" "dev vx0 ingress" 101 1 |
1201 | log_test $? 0 "Destination IP - match" | |
1202 | ||
f1425529 | 1203 | run_cmd "ip netns exec $ns1 $mz br0.20 -a own -b $grp_dmac -A $src -B $grp -t udp sp=12345,dp=54321 -p 100 -c 1 -q" |
62199e3f IS |
1204 | tc_check_packets "$ns2" "dev vx0 ingress" 101 1 |
1205 | log_test $? 0 "Destination IP - no match" | |
1206 | ||
1207 | run_cmd "tc -n $ns2 filter del dev vx0 ingress pref 1 handle 101 flower" | |
1208 | run_cmd "bridge -n $ns1 mdb del dev vx0 port vx0 grp $grp dst $vtep2_ip src_vni 10020" | |
1209 | run_cmd "bridge -n $ns1 mdb del dev vx0 port vx0 grp $grp dst $vtep1_ip src_vni 10010" | |
1210 | ||
1211 | # Check destination port. | |
1212 | run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 grp $grp permanent dst $vtep1_ip src_vni 10010" | |
1213 | run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 grp $grp permanent dst $vtep1_ip dst_port 1111 src_vni 10020" | |
1214 | ||
1215 | run_cmd "tc -n $ns2 filter replace dev veth0 ingress pref 1 handle 101 proto $enc_ethtype flower ip_proto udp dst_port 4789 action pass" | |
f1425529 | 1216 | run_cmd "ip netns exec $ns1 $mz br0.10 -a own -b $grp_dmac -A $src -B $grp -t udp sp=12345,dp=54321 -p 100 -c 1 -q" |
62199e3f IS |
1217 | tc_check_packets "$ns2" "dev veth0 ingress" 101 1 |
1218 | log_test $? 0 "Default destination port - match" | |
1219 | ||
f1425529 | 1220 | run_cmd "ip netns exec $ns1 $mz br0.20 -a own -b $grp_dmac -A $src -B $grp -t udp sp=12345,dp=54321 -p 100 -c 1 -q" |
62199e3f IS |
1221 | tc_check_packets "$ns2" "dev veth0 ingress" 101 1 |
1222 | log_test $? 0 "Default destination port - no match" | |
1223 | ||
1224 | run_cmd "tc -n $ns2 filter replace dev veth0 ingress pref 1 handle 101 proto $enc_ethtype flower ip_proto udp dst_port 1111 action pass" | |
f1425529 | 1225 | run_cmd "ip netns exec $ns1 $mz br0.20 -a own -b $grp_dmac -A $src -B $grp -t udp sp=12345,dp=54321 -p 100 -c 1 -q" |
62199e3f IS |
1226 | tc_check_packets "$ns2" "dev veth0 ingress" 101 1 |
1227 | log_test $? 0 "Non-default destination port - match" | |
1228 | ||
f1425529 | 1229 | run_cmd "ip netns exec $ns1 $mz br0.10 -a own -b $grp_dmac -A $src -B $grp -t udp sp=12345,dp=54321 -p 100 -c 1 -q" |
62199e3f IS |
1230 | tc_check_packets "$ns2" "dev veth0 ingress" 101 1 |
1231 | log_test $? 0 "Non-default destination port - no match" | |
1232 | ||
1233 | run_cmd "tc -n $ns2 filter del dev veth0 ingress pref 1 handle 101 flower" | |
1234 | run_cmd "bridge -n $ns1 mdb del dev vx0 port vx0 grp $grp dst $vtep1_ip src_vni 10020" | |
1235 | run_cmd "bridge -n $ns1 mdb del dev vx0 port vx0 grp $grp dst $vtep1_ip src_vni 10010" | |
1236 | ||
1237 | # Check default VNI. | |
1238 | run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 grp $grp permanent dst $vtep1_ip src_vni 10010" | |
1239 | run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 grp $grp permanent dst $vtep1_ip src_vni 10020" | |
1240 | ||
1241 | run_cmd "tc -n $ns2 filter replace dev vx0 ingress pref 1 handle 101 proto all flower enc_key_id 10010 action pass" | |
f1425529 | 1242 | run_cmd "ip netns exec $ns1 $mz br0.10 -a own -b $grp_dmac -A $src -B $grp -t udp sp=12345,dp=54321 -p 100 -c 1 -q" |
62199e3f IS |
1243 | tc_check_packets "$ns2" "dev vx0 ingress" 101 1 |
1244 | log_test $? 0 "Default destination VNI - match" | |
1245 | ||
f1425529 | 1246 | run_cmd "ip netns exec $ns1 $mz br0.20 -a own -b $grp_dmac -A $src -B $grp -t udp sp=12345,dp=54321 -p 100 -c 1 -q" |
62199e3f IS |
1247 | tc_check_packets "$ns2" "dev vx0 ingress" 101 1 |
1248 | log_test $? 0 "Default destination VNI - no match" | |
1249 | ||
1250 | run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 grp $grp permanent dst $vtep1_ip vni 10020 src_vni 10010" | |
1251 | run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 grp $grp permanent dst $vtep1_ip vni 10010 src_vni 10020" | |
1252 | ||
1253 | run_cmd "tc -n $ns2 filter replace dev vx0 ingress pref 1 handle 101 proto all flower enc_key_id 10020 action pass" | |
f1425529 | 1254 | run_cmd "ip netns exec $ns1 $mz br0.10 -a own -b $grp_dmac -A $src -B $grp -t udp sp=12345,dp=54321 -p 100 -c 1 -q" |
62199e3f IS |
1255 | tc_check_packets "$ns2" "dev vx0 ingress" 101 1 |
1256 | log_test $? 0 "Non-default destination VNI - match" | |
1257 | ||
f1425529 | 1258 | run_cmd "ip netns exec $ns1 $mz br0.20 -a own -b $grp_dmac -A $src -B $grp -t udp sp=12345,dp=54321 -p 100 -c 1 -q" |
62199e3f IS |
1259 | tc_check_packets "$ns2" "dev vx0 ingress" 101 1 |
1260 | log_test $? 0 "Non-default destination VNI - no match" | |
1261 | ||
1262 | run_cmd "tc -n $ns2 filter del dev vx0 ingress pref 1 handle 101 flower" | |
1263 | run_cmd "bridge -n $ns1 mdb del dev vx0 port vx0 grp $grp dst $vtep1_ip src_vni 10020" | |
1264 | run_cmd "bridge -n $ns1 mdb del dev vx0 port vx0 grp $grp dst $vtep1_ip src_vni 10010" | |
1265 | } | |
1266 | ||
1267 | encap_params_ipv4_ipv4() | |
1268 | { | |
a8258e64 HL |
1269 | local ns1=$ns1_v4 |
1270 | local ns2=$ns2_v4 | |
62199e3f IS |
1271 | local vtep1_ip=198.51.100.100 |
1272 | local vtep2_ip=198.51.100.200 | |
1273 | local plen=32 | |
1274 | local enc_ethtype="ip" | |
1275 | local grp=239.1.1.1 | |
f1425529 | 1276 | local grp_dmac=01:00:5e:01:01:01 |
62199e3f IS |
1277 | local src=192.0.2.129 |
1278 | ||
1279 | echo | |
1280 | echo "Data path: Encapsulation parameters - IPv4 overlay / IPv4 underlay" | |
1281 | echo "------------------------------------------------------------------" | |
1282 | ||
1283 | encap_params_common $ns1 $ns2 $vtep1_ip $vtep2_ip $plen $enc_ethtype \ | |
f1425529 | 1284 | $grp $grp_dmac $src "mausezahn" |
62199e3f IS |
1285 | } |
1286 | ||
1287 | encap_params_ipv6_ipv4() | |
1288 | { | |
a8258e64 HL |
1289 | local ns1=$ns1_v4 |
1290 | local ns2=$ns2_v4 | |
62199e3f IS |
1291 | local vtep1_ip=198.51.100.100 |
1292 | local vtep2_ip=198.51.100.200 | |
1293 | local plen=32 | |
1294 | local enc_ethtype="ip" | |
1295 | local grp=ff0e::1 | |
f1425529 | 1296 | local grp_dmac=33:33:00:00:00:01 |
62199e3f IS |
1297 | local src=2001:db8:100::1 |
1298 | ||
1299 | echo | |
1300 | echo "Data path: Encapsulation parameters - IPv6 overlay / IPv4 underlay" | |
1301 | echo "------------------------------------------------------------------" | |
1302 | ||
1303 | encap_params_common $ns1 $ns2 $vtep1_ip $vtep2_ip $plen $enc_ethtype \ | |
f1425529 | 1304 | $grp $grp_dmac $src "mausezahn -6" |
62199e3f IS |
1305 | } |
1306 | ||
1307 | encap_params_ipv4_ipv6() | |
1308 | { | |
a8258e64 HL |
1309 | local ns1=$ns1_v6 |
1310 | local ns2=$ns2_v6 | |
62199e3f IS |
1311 | local vtep1_ip=2001:db8:1000::1 |
1312 | local vtep2_ip=2001:db8:2000::1 | |
1313 | local plen=128 | |
1314 | local enc_ethtype="ipv6" | |
1315 | local grp=239.1.1.1 | |
f1425529 | 1316 | local grp_dmac=01:00:5e:01:01:01 |
62199e3f IS |
1317 | local src=192.0.2.129 |
1318 | ||
1319 | echo | |
1320 | echo "Data path: Encapsulation parameters - IPv4 overlay / IPv6 underlay" | |
1321 | echo "------------------------------------------------------------------" | |
1322 | ||
1323 | encap_params_common $ns1 $ns2 $vtep1_ip $vtep2_ip $plen $enc_ethtype \ | |
f1425529 | 1324 | $grp $grp_dmac $src "mausezahn" |
62199e3f IS |
1325 | } |
1326 | ||
1327 | encap_params_ipv6_ipv6() | |
1328 | { | |
a8258e64 HL |
1329 | local ns1=$ns1_v6 |
1330 | local ns2=$ns2_v6 | |
62199e3f IS |
1331 | local vtep1_ip=2001:db8:1000::1 |
1332 | local vtep2_ip=2001:db8:2000::1 | |
1333 | local plen=128 | |
1334 | local enc_ethtype="ipv6" | |
1335 | local grp=ff0e::1 | |
f1425529 | 1336 | local grp_dmac=33:33:00:00:00:01 |
62199e3f IS |
1337 | local src=2001:db8:100::1 |
1338 | ||
1339 | echo | |
1340 | echo "Data path: Encapsulation parameters - IPv6 overlay / IPv6 underlay" | |
1341 | echo "------------------------------------------------------------------" | |
1342 | ||
1343 | encap_params_common $ns1 $ns2 $vtep1_ip $vtep2_ip $plen $enc_ethtype \ | |
f1425529 | 1344 | $grp $grp_dmac $src "mausezahn -6" |
62199e3f IS |
1345 | } |
1346 | ||
1347 | starg_exclude_ir_common() | |
1348 | { | |
1349 | local ns1=$1; shift | |
1350 | local ns2=$1; shift | |
1351 | local vtep1_ip=$1; shift | |
1352 | local vtep2_ip=$1; shift | |
1353 | local plen=$1; shift | |
1354 | local grp=$1; shift | |
f1425529 | 1355 | local grp_dmac=$1; shift |
62199e3f IS |
1356 | local valid_src=$1; shift |
1357 | local invalid_src=$1; shift | |
1358 | local mz=$1; shift | |
1359 | ||
1360 | # Install a (*, G) EXCLUDE MDB entry with one source and two remote | |
1361 | # VTEPs. Make sure that the source in the source list is not forwarded | |
1362 | # and that a source not in the list is forwarded. Remove one of the | |
1363 | # VTEPs from the entry and make sure that packets are only forwarded to | |
1364 | # the remaining VTEP. | |
1365 | ||
1366 | run_cmd "tc -n $ns2 qdisc replace dev vx0 clsact" | |
1367 | run_cmd "ip -n $ns2 address replace $vtep1_ip/$plen dev lo" | |
1368 | run_cmd "ip -n $ns2 address replace $vtep2_ip/$plen dev lo" | |
1369 | ||
1370 | run_cmd "tc -n $ns2 filter replace dev vx0 ingress pref 1 handle 101 proto all flower enc_dst_ip $vtep1_ip action pass" | |
1371 | run_cmd "tc -n $ns2 filter replace dev vx0 ingress pref 1 handle 102 proto all flower enc_dst_ip $vtep2_ip action pass" | |
1372 | ||
1373 | run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 grp $grp permanent filter_mode exclude source_list $invalid_src dst $vtep1_ip src_vni 10010" | |
1374 | run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 grp $grp permanent filter_mode exclude source_list $invalid_src dst $vtep2_ip src_vni 10010" | |
1375 | ||
1376 | # Check that invalid source is not forwarded to any VTEP. | |
f1425529 | 1377 | run_cmd "ip netns exec $ns1 $mz br0.10 -a own -b $grp_dmac -A $invalid_src -B $grp -t udp sp=12345,dp=54321 -p 100 -c 1 -q" |
62199e3f IS |
1378 | tc_check_packets "$ns2" "dev vx0 ingress" 101 0 |
1379 | log_test $? 0 "Block excluded source - first VTEP" | |
1380 | tc_check_packets "$ns2" "dev vx0 ingress" 102 0 | |
1381 | log_test $? 0 "Block excluded source - second VTEP" | |
1382 | ||
1383 | # Check that valid source is forwarded to both VTEPs. | |
f1425529 | 1384 | run_cmd "ip netns exec $ns1 $mz br0.10 -a own -b $grp_dmac -A $valid_src -B $grp -t udp sp=12345,dp=54321 -p 100 -c 1 -q" |
62199e3f IS |
1385 | tc_check_packets "$ns2" "dev vx0 ingress" 101 1 |
1386 | log_test $? 0 "Forward valid source - first VTEP" | |
1387 | tc_check_packets "$ns2" "dev vx0 ingress" 102 1 | |
1388 | log_test $? 0 "Forward valid source - second VTEP" | |
1389 | ||
1390 | # Remove second VTEP. | |
1391 | run_cmd "bridge -n $ns1 mdb del dev vx0 port vx0 grp $grp dst $vtep2_ip src_vni 10010" | |
1392 | ||
1393 | # Check that invalid source is not forwarded to any VTEP. | |
f1425529 | 1394 | run_cmd "ip netns exec $ns1 $mz br0.10 -a own -b $grp_dmac -A $invalid_src -B $grp -t udp sp=12345,dp=54321 -p 100 -c 1 -q" |
62199e3f IS |
1395 | tc_check_packets "$ns2" "dev vx0 ingress" 101 1 |
1396 | log_test $? 0 "Block excluded source after removal - first VTEP" | |
1397 | tc_check_packets "$ns2" "dev vx0 ingress" 102 1 | |
1398 | log_test $? 0 "Block excluded source after removal - second VTEP" | |
1399 | ||
1400 | # Check that valid source is forwarded to the remaining VTEP. | |
f1425529 | 1401 | run_cmd "ip netns exec $ns1 $mz br0.10 -a own -b $grp_dmac -A $valid_src -B $grp -t udp sp=12345,dp=54321 -p 100 -c 1 -q" |
62199e3f IS |
1402 | tc_check_packets "$ns2" "dev vx0 ingress" 101 2 |
1403 | log_test $? 0 "Forward valid source after removal - first VTEP" | |
1404 | tc_check_packets "$ns2" "dev vx0 ingress" 102 1 | |
1405 | log_test $? 0 "Forward valid source after removal - second VTEP" | |
1406 | } | |
1407 | ||
1408 | starg_exclude_ir_ipv4_ipv4() | |
1409 | { | |
a8258e64 HL |
1410 | local ns1=$ns1_v4 |
1411 | local ns2=$ns2_v4 | |
62199e3f IS |
1412 | local vtep1_ip=198.51.100.100 |
1413 | local vtep2_ip=198.51.100.200 | |
1414 | local plen=32 | |
1415 | local grp=239.1.1.1 | |
f1425529 | 1416 | local grp_dmac=01:00:5e:01:01:01 |
62199e3f IS |
1417 | local valid_src=192.0.2.129 |
1418 | local invalid_src=192.0.2.145 | |
1419 | ||
1420 | echo | |
1421 | echo "Data path: (*, G) EXCLUDE - IR - IPv4 overlay / IPv4 underlay" | |
1422 | echo "-------------------------------------------------------------" | |
1423 | ||
1424 | starg_exclude_ir_common $ns1 $ns2 $vtep1_ip $vtep2_ip $plen $grp \ | |
f1425529 | 1425 | $grp_dmac $valid_src $invalid_src "mausezahn" |
62199e3f IS |
1426 | } |
1427 | ||
1428 | starg_exclude_ir_ipv6_ipv4() | |
1429 | { | |
a8258e64 HL |
1430 | local ns1=$ns1_v4 |
1431 | local ns2=$ns2_v4 | |
62199e3f IS |
1432 | local vtep1_ip=198.51.100.100 |
1433 | local vtep2_ip=198.51.100.200 | |
1434 | local plen=32 | |
1435 | local grp=ff0e::1 | |
f1425529 | 1436 | local grp_dmac=33:33:00:00:00:01 |
62199e3f IS |
1437 | local valid_src=2001:db8:100::1 |
1438 | local invalid_src=2001:db8:200::1 | |
1439 | ||
1440 | echo | |
1441 | echo "Data path: (*, G) EXCLUDE - IR - IPv6 overlay / IPv4 underlay" | |
1442 | echo "-------------------------------------------------------------" | |
1443 | ||
1444 | starg_exclude_ir_common $ns1 $ns2 $vtep1_ip $vtep2_ip $plen $grp \ | |
f1425529 | 1445 | $grp_dmac $valid_src $invalid_src "mausezahn -6" |
62199e3f IS |
1446 | } |
1447 | ||
1448 | starg_exclude_ir_ipv4_ipv6() | |
1449 | { | |
a8258e64 HL |
1450 | local ns1=$ns1_v6 |
1451 | local ns2=$ns2_v6 | |
62199e3f IS |
1452 | local vtep1_ip=2001:db8:1000::1 |
1453 | local vtep2_ip=2001:db8:2000::1 | |
1454 | local plen=128 | |
1455 | local grp=239.1.1.1 | |
f1425529 | 1456 | local grp_dmac=01:00:5e:01:01:01 |
62199e3f IS |
1457 | local valid_src=192.0.2.129 |
1458 | local invalid_src=192.0.2.145 | |
1459 | ||
1460 | echo | |
1461 | echo "Data path: (*, G) EXCLUDE - IR - IPv4 overlay / IPv6 underlay" | |
1462 | echo "-------------------------------------------------------------" | |
1463 | ||
1464 | starg_exclude_ir_common $ns1 $ns2 $vtep1_ip $vtep2_ip $plen $grp \ | |
f1425529 | 1465 | $grp_dmac $valid_src $invalid_src "mausezahn" |
62199e3f IS |
1466 | } |
1467 | ||
1468 | starg_exclude_ir_ipv6_ipv6() | |
1469 | { | |
a8258e64 HL |
1470 | local ns1=$ns1_v6 |
1471 | local ns2=$ns2_v6 | |
62199e3f IS |
1472 | local vtep1_ip=2001:db8:1000::1 |
1473 | local vtep2_ip=2001:db8:2000::1 | |
1474 | local plen=128 | |
1475 | local grp=ff0e::1 | |
f1425529 | 1476 | local grp_dmac=33:33:00:00:00:01 |
62199e3f IS |
1477 | local valid_src=2001:db8:100::1 |
1478 | local invalid_src=2001:db8:200::1 | |
1479 | ||
1480 | echo | |
1481 | echo "Data path: (*, G) EXCLUDE - IR - IPv6 overlay / IPv6 underlay" | |
1482 | echo "-------------------------------------------------------------" | |
1483 | ||
1484 | starg_exclude_ir_common $ns1 $ns2 $vtep1_ip $vtep2_ip $plen $grp \ | |
f1425529 | 1485 | $grp_dmac $valid_src $invalid_src "mausezahn -6" |
62199e3f IS |
1486 | } |
1487 | ||
1488 | starg_include_ir_common() | |
1489 | { | |
1490 | local ns1=$1; shift | |
1491 | local ns2=$1; shift | |
1492 | local vtep1_ip=$1; shift | |
1493 | local vtep2_ip=$1; shift | |
1494 | local plen=$1; shift | |
1495 | local grp=$1; shift | |
f1425529 | 1496 | local grp_dmac=$1; shift |
62199e3f IS |
1497 | local valid_src=$1; shift |
1498 | local invalid_src=$1; shift | |
1499 | local mz=$1; shift | |
1500 | ||
1501 | # Install a (*, G) INCLUDE MDB entry with one source and two remote | |
1502 | # VTEPs. Make sure that the source in the source list is forwarded and | |
1503 | # that a source not in the list is not forwarded. Remove one of the | |
1504 | # VTEPs from the entry and make sure that packets are only forwarded to | |
1505 | # the remaining VTEP. | |
1506 | ||
1507 | run_cmd "tc -n $ns2 qdisc replace dev vx0 clsact" | |
1508 | run_cmd "ip -n $ns2 address replace $vtep1_ip/$plen dev lo" | |
1509 | run_cmd "ip -n $ns2 address replace $vtep2_ip/$plen dev lo" | |
1510 | ||
1511 | run_cmd "tc -n $ns2 filter replace dev vx0 ingress pref 1 handle 101 proto all flower enc_dst_ip $vtep1_ip action pass" | |
1512 | run_cmd "tc -n $ns2 filter replace dev vx0 ingress pref 1 handle 102 proto all flower enc_dst_ip $vtep2_ip action pass" | |
1513 | ||
1514 | run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 grp $grp permanent filter_mode include source_list $valid_src dst $vtep1_ip src_vni 10010" | |
1515 | run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 grp $grp permanent filter_mode include source_list $valid_src dst $vtep2_ip src_vni 10010" | |
1516 | ||
1517 | # Check that invalid source is not forwarded to any VTEP. | |
f1425529 | 1518 | run_cmd "ip netns exec $ns1 $mz br0.10 -a own -b $grp_dmac -A $invalid_src -B $grp -t udp sp=12345,dp=54321 -p 100 -c 1 -q" |
62199e3f IS |
1519 | tc_check_packets "$ns2" "dev vx0 ingress" 101 0 |
1520 | log_test $? 0 "Block excluded source - first VTEP" | |
1521 | tc_check_packets "$ns2" "dev vx0 ingress" 102 0 | |
1522 | log_test $? 0 "Block excluded source - second VTEP" | |
1523 | ||
1524 | # Check that valid source is forwarded to both VTEPs. | |
f1425529 | 1525 | run_cmd "ip netns exec $ns1 $mz br0.10 -a own -b $grp_dmac -A $valid_src -B $grp -t udp sp=12345,dp=54321 -p 100 -c 1 -q" |
62199e3f IS |
1526 | tc_check_packets "$ns2" "dev vx0 ingress" 101 1 |
1527 | log_test $? 0 "Forward valid source - first VTEP" | |
1528 | tc_check_packets "$ns2" "dev vx0 ingress" 102 1 | |
1529 | log_test $? 0 "Forward valid source - second VTEP" | |
1530 | ||
1531 | # Remove second VTEP. | |
1532 | run_cmd "bridge -n $ns1 mdb del dev vx0 port vx0 grp $grp dst $vtep2_ip src_vni 10010" | |
1533 | ||
1534 | # Check that invalid source is not forwarded to any VTEP. | |
f1425529 | 1535 | run_cmd "ip netns exec $ns1 $mz br0.10 -a own -b $grp_dmac -A $invalid_src -B $grp -t udp sp=12345,dp=54321 -p 100 -c 1 -q" |
62199e3f IS |
1536 | tc_check_packets "$ns2" "dev vx0 ingress" 101 1 |
1537 | log_test $? 0 "Block excluded source after removal - first VTEP" | |
1538 | tc_check_packets "$ns2" "dev vx0 ingress" 102 1 | |
1539 | log_test $? 0 "Block excluded source after removal - second VTEP" | |
1540 | ||
1541 | # Check that valid source is forwarded to the remaining VTEP. | |
f1425529 | 1542 | run_cmd "ip netns exec $ns1 $mz br0.10 -a own -b $grp_dmac -A $valid_src -B $grp -t udp sp=12345,dp=54321 -p 100 -c 1 -q" |
62199e3f IS |
1543 | tc_check_packets "$ns2" "dev vx0 ingress" 101 2 |
1544 | log_test $? 0 "Forward valid source after removal - first VTEP" | |
1545 | tc_check_packets "$ns2" "dev vx0 ingress" 102 1 | |
1546 | log_test $? 0 "Forward valid source after removal - second VTEP" | |
1547 | } | |
1548 | ||
1549 | starg_include_ir_ipv4_ipv4() | |
1550 | { | |
a8258e64 HL |
1551 | local ns1=$ns1_v4 |
1552 | local ns2=$ns2_v4 | |
62199e3f IS |
1553 | local vtep1_ip=198.51.100.100 |
1554 | local vtep2_ip=198.51.100.200 | |
1555 | local plen=32 | |
1556 | local grp=239.1.1.1 | |
f1425529 | 1557 | local grp_dmac=01:00:5e:01:01:01 |
62199e3f IS |
1558 | local valid_src=192.0.2.129 |
1559 | local invalid_src=192.0.2.145 | |
1560 | ||
1561 | echo | |
1562 | echo "Data path: (*, G) INCLUDE - IR - IPv4 overlay / IPv4 underlay" | |
1563 | echo "-------------------------------------------------------------" | |
1564 | ||
1565 | starg_include_ir_common $ns1 $ns2 $vtep1_ip $vtep2_ip $plen $grp \ | |
f1425529 | 1566 | $grp_dmac $valid_src $invalid_src "mausezahn" |
62199e3f IS |
1567 | } |
1568 | ||
1569 | starg_include_ir_ipv6_ipv4() | |
1570 | { | |
a8258e64 HL |
1571 | local ns1=$ns1_v4 |
1572 | local ns2=$ns2_v4 | |
62199e3f IS |
1573 | local vtep1_ip=198.51.100.100 |
1574 | local vtep2_ip=198.51.100.200 | |
1575 | local plen=32 | |
1576 | local grp=ff0e::1 | |
f1425529 | 1577 | local grp_dmac=33:33:00:00:00:01 |
62199e3f IS |
1578 | local valid_src=2001:db8:100::1 |
1579 | local invalid_src=2001:db8:200::1 | |
1580 | ||
1581 | echo | |
1582 | echo "Data path: (*, G) INCLUDE - IR - IPv6 overlay / IPv4 underlay" | |
1583 | echo "-------------------------------------------------------------" | |
1584 | ||
1585 | starg_include_ir_common $ns1 $ns2 $vtep1_ip $vtep2_ip $plen $grp \ | |
f1425529 | 1586 | $grp_dmac $valid_src $invalid_src "mausezahn -6" |
62199e3f IS |
1587 | } |
1588 | ||
1589 | starg_include_ir_ipv4_ipv6() | |
1590 | { | |
a8258e64 HL |
1591 | local ns1=$ns1_v6 |
1592 | local ns2=$ns2_v6 | |
62199e3f IS |
1593 | local vtep1_ip=2001:db8:1000::1 |
1594 | local vtep2_ip=2001:db8:2000::1 | |
1595 | local plen=128 | |
1596 | local grp=239.1.1.1 | |
f1425529 | 1597 | local grp_dmac=01:00:5e:01:01:01 |
62199e3f IS |
1598 | local valid_src=192.0.2.129 |
1599 | local invalid_src=192.0.2.145 | |
1600 | ||
1601 | echo | |
1602 | echo "Data path: (*, G) INCLUDE - IR - IPv4 overlay / IPv6 underlay" | |
1603 | echo "-------------------------------------------------------------" | |
1604 | ||
1605 | starg_include_ir_common $ns1 $ns2 $vtep1_ip $vtep2_ip $plen $grp \ | |
f1425529 | 1606 | $grp_dmac $valid_src $invalid_src "mausezahn" |
62199e3f IS |
1607 | } |
1608 | ||
1609 | starg_include_ir_ipv6_ipv6() | |
1610 | { | |
a8258e64 HL |
1611 | local ns1=$ns1_v6 |
1612 | local ns2=$ns2_v6 | |
62199e3f IS |
1613 | local vtep1_ip=2001:db8:1000::1 |
1614 | local vtep2_ip=2001:db8:2000::1 | |
1615 | local plen=128 | |
1616 | local grp=ff0e::1 | |
f1425529 | 1617 | local grp_dmac=33:33:00:00:00:01 |
62199e3f IS |
1618 | local valid_src=2001:db8:100::1 |
1619 | local invalid_src=2001:db8:200::1 | |
1620 | ||
1621 | echo | |
1622 | echo "Data path: (*, G) INCLUDE - IR - IPv6 overlay / IPv6 underlay" | |
1623 | echo "-------------------------------------------------------------" | |
1624 | ||
1625 | starg_include_ir_common $ns1 $ns2 $vtep1_ip $vtep2_ip $plen $grp \ | |
f1425529 | 1626 | $grp_dmac $valid_src $invalid_src "mausezahn -6" |
62199e3f IS |
1627 | } |
1628 | ||
1629 | starg_exclude_p2mp_common() | |
1630 | { | |
1631 | local ns1=$1; shift | |
1632 | local ns2=$1; shift | |
1633 | local mcast_grp=$1; shift | |
1634 | local plen=$1; shift | |
1635 | local grp=$1; shift | |
f1425529 | 1636 | local grp_dmac=$1; shift |
62199e3f IS |
1637 | local valid_src=$1; shift |
1638 | local invalid_src=$1; shift | |
1639 | local mz=$1; shift | |
1640 | ||
1641 | # Install a (*, G) EXCLUDE MDB entry with one source and one multicast | |
1642 | # group to which packets are sent. Make sure that the source in the | |
1643 | # source list is not forwarded and that a source not in the list is | |
1644 | # forwarded. | |
1645 | ||
1646 | run_cmd "tc -n $ns2 qdisc replace dev vx0 clsact" | |
1647 | run_cmd "ip -n $ns2 address replace $mcast_grp/$plen dev veth0 autojoin" | |
1648 | ||
1649 | run_cmd "tc -n $ns2 filter replace dev vx0 ingress pref 1 handle 101 proto all flower enc_dst_ip $mcast_grp action pass" | |
1650 | ||
1651 | run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 grp $grp permanent filter_mode exclude source_list $invalid_src dst $mcast_grp src_vni 10010 via veth0" | |
1652 | ||
1653 | # Check that invalid source is not forwarded. | |
f1425529 | 1654 | run_cmd "ip netns exec $ns1 $mz br0.10 -a own -b $grp_dmac -A $invalid_src -B $grp -t udp sp=12345,dp=54321 -p 100 -c 1 -q" |
62199e3f IS |
1655 | tc_check_packets "$ns2" "dev vx0 ingress" 101 0 |
1656 | log_test $? 0 "Block excluded source" | |
1657 | ||
1658 | # Check that valid source is forwarded. | |
f1425529 | 1659 | run_cmd "ip netns exec $ns1 $mz br0.10 -a own -b $grp_dmac -A $valid_src -B $grp -t udp sp=12345,dp=54321 -p 100 -c 1 -q" |
62199e3f IS |
1660 | tc_check_packets "$ns2" "dev vx0 ingress" 101 1 |
1661 | log_test $? 0 "Forward valid source" | |
1662 | ||
1663 | # Remove the VTEP from the multicast group. | |
1664 | run_cmd "ip -n $ns2 address del $mcast_grp/$plen dev veth0" | |
1665 | ||
1666 | # Check that valid source is not received anymore. | |
f1425529 | 1667 | run_cmd "ip netns exec $ns1 $mz br0.10 -a own -b $grp_dmac -A $valid_src -B $grp -t udp sp=12345,dp=54321 -p 100 -c 1 -q" |
62199e3f IS |
1668 | tc_check_packets "$ns2" "dev vx0 ingress" 101 1 |
1669 | log_test $? 0 "Receive of valid source after removal from group" | |
1670 | } | |
1671 | ||
1672 | starg_exclude_p2mp_ipv4_ipv4() | |
1673 | { | |
a8258e64 HL |
1674 | local ns1=$ns1_v4 |
1675 | local ns2=$ns2_v4 | |
62199e3f IS |
1676 | local mcast_grp=238.1.1.1 |
1677 | local plen=32 | |
1678 | local grp=239.1.1.1 | |
f1425529 | 1679 | local grp_dmac=01:00:5e:01:01:01 |
62199e3f IS |
1680 | local valid_src=192.0.2.129 |
1681 | local invalid_src=192.0.2.145 | |
1682 | ||
1683 | echo | |
1684 | echo "Data path: (*, G) EXCLUDE - P2MP - IPv4 overlay / IPv4 underlay" | |
1685 | echo "---------------------------------------------------------------" | |
1686 | ||
f1425529 | 1687 | starg_exclude_p2mp_common $ns1 $ns2 $mcast_grp $plen $grp $grp_dmac \ |
62199e3f IS |
1688 | $valid_src $invalid_src "mausezahn" |
1689 | } | |
1690 | ||
1691 | starg_exclude_p2mp_ipv6_ipv4() | |
1692 | { | |
a8258e64 HL |
1693 | local ns1=$ns1_v4 |
1694 | local ns2=$ns2_v4 | |
62199e3f IS |
1695 | local mcast_grp=238.1.1.1 |
1696 | local plen=32 | |
1697 | local grp=ff0e::1 | |
f1425529 | 1698 | local grp_dmac=33:33:00:00:00:01 |
62199e3f IS |
1699 | local valid_src=2001:db8:100::1 |
1700 | local invalid_src=2001:db8:200::1 | |
1701 | ||
1702 | echo | |
1703 | echo "Data path: (*, G) EXCLUDE - P2MP - IPv6 overlay / IPv4 underlay" | |
1704 | echo "---------------------------------------------------------------" | |
1705 | ||
f1425529 | 1706 | starg_exclude_p2mp_common $ns1 $ns2 $mcast_grp $plen $grp $grp_dmac \ |
62199e3f IS |
1707 | $valid_src $invalid_src "mausezahn -6" |
1708 | } | |
1709 | ||
1710 | starg_exclude_p2mp_ipv4_ipv6() | |
1711 | { | |
a8258e64 HL |
1712 | local ns1=$ns1_v6 |
1713 | local ns2=$ns2_v6 | |
62199e3f IS |
1714 | local mcast_grp=ff0e::2 |
1715 | local plen=128 | |
1716 | local grp=239.1.1.1 | |
f1425529 | 1717 | local grp_dmac=01:00:5e:01:01:01 |
62199e3f IS |
1718 | local valid_src=192.0.2.129 |
1719 | local invalid_src=192.0.2.145 | |
1720 | ||
1721 | echo | |
1722 | echo "Data path: (*, G) EXCLUDE - P2MP - IPv4 overlay / IPv6 underlay" | |
1723 | echo "---------------------------------------------------------------" | |
1724 | ||
f1425529 | 1725 | starg_exclude_p2mp_common $ns1 $ns2 $mcast_grp $plen $grp $grp_dmac \ |
62199e3f IS |
1726 | $valid_src $invalid_src "mausezahn" |
1727 | } | |
1728 | ||
1729 | starg_exclude_p2mp_ipv6_ipv6() | |
1730 | { | |
a8258e64 HL |
1731 | local ns1=$ns1_v6 |
1732 | local ns2=$ns2_v6 | |
62199e3f IS |
1733 | local mcast_grp=ff0e::2 |
1734 | local plen=128 | |
1735 | local grp=ff0e::1 | |
f1425529 | 1736 | local grp_dmac=33:33:00:00:00:01 |
62199e3f IS |
1737 | local valid_src=2001:db8:100::1 |
1738 | local invalid_src=2001:db8:200::1 | |
1739 | ||
1740 | echo | |
1741 | echo "Data path: (*, G) EXCLUDE - P2MP - IPv6 overlay / IPv6 underlay" | |
1742 | echo "---------------------------------------------------------------" | |
1743 | ||
f1425529 | 1744 | starg_exclude_p2mp_common $ns1 $ns2 $mcast_grp $plen $grp $grp_dmac \ |
62199e3f IS |
1745 | $valid_src $invalid_src "mausezahn -6" |
1746 | } | |
1747 | ||
1748 | starg_include_p2mp_common() | |
1749 | { | |
1750 | local ns1=$1; shift | |
1751 | local ns2=$1; shift | |
1752 | local mcast_grp=$1; shift | |
1753 | local plen=$1; shift | |
1754 | local grp=$1; shift | |
f1425529 | 1755 | local grp_dmac=$1; shift |
62199e3f IS |
1756 | local valid_src=$1; shift |
1757 | local invalid_src=$1; shift | |
1758 | local mz=$1; shift | |
1759 | ||
1760 | # Install a (*, G) INCLUDE MDB entry with one source and one multicast | |
1761 | # group to which packets are sent. Make sure that the source in the | |
1762 | # source list is forwarded and that a source not in the list is not | |
1763 | # forwarded. | |
1764 | ||
1765 | run_cmd "tc -n $ns2 qdisc replace dev vx0 clsact" | |
1766 | run_cmd "ip -n $ns2 address replace $mcast_grp/$plen dev veth0 autojoin" | |
1767 | ||
1768 | run_cmd "tc -n $ns2 filter replace dev vx0 ingress pref 1 handle 101 proto all flower enc_dst_ip $mcast_grp action pass" | |
1769 | ||
1770 | run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 grp $grp permanent filter_mode include source_list $valid_src dst $mcast_grp src_vni 10010 via veth0" | |
1771 | ||
1772 | # Check that invalid source is not forwarded. | |
f1425529 | 1773 | run_cmd "ip netns exec $ns1 $mz br0.10 -a own -b $grp_dmac -A $invalid_src -B $grp -t udp sp=12345,dp=54321 -p 100 -c 1 -q" |
62199e3f IS |
1774 | tc_check_packets "$ns2" "dev vx0 ingress" 101 0 |
1775 | log_test $? 0 "Block excluded source" | |
1776 | ||
1777 | # Check that valid source is forwarded. | |
f1425529 | 1778 | run_cmd "ip netns exec $ns1 $mz br0.10 -a own -b $grp_dmac -A $valid_src -B $grp -t udp sp=12345,dp=54321 -p 100 -c 1 -q" |
62199e3f IS |
1779 | tc_check_packets "$ns2" "dev vx0 ingress" 101 1 |
1780 | log_test $? 0 "Forward valid source" | |
1781 | ||
1782 | # Remove the VTEP from the multicast group. | |
1783 | run_cmd "ip -n $ns2 address del $mcast_grp/$plen dev veth0" | |
1784 | ||
1785 | # Check that valid source is not received anymore. | |
f1425529 | 1786 | run_cmd "ip netns exec $ns1 $mz br0.10 -a own -b $grp_dmac -A $valid_src -B $grp -t udp sp=12345,dp=54321 -p 100 -c 1 -q" |
62199e3f IS |
1787 | tc_check_packets "$ns2" "dev vx0 ingress" 101 1 |
1788 | log_test $? 0 "Receive of valid source after removal from group" | |
1789 | } | |
1790 | ||
1791 | starg_include_p2mp_ipv4_ipv4() | |
1792 | { | |
a8258e64 HL |
1793 | local ns1=$ns1_v4 |
1794 | local ns2=$ns2_v4 | |
62199e3f IS |
1795 | local mcast_grp=238.1.1.1 |
1796 | local plen=32 | |
1797 | local grp=239.1.1.1 | |
f1425529 | 1798 | local grp_dmac=01:00:5e:01:01:01 |
62199e3f IS |
1799 | local valid_src=192.0.2.129 |
1800 | local invalid_src=192.0.2.145 | |
1801 | ||
1802 | echo | |
1803 | echo "Data path: (*, G) INCLUDE - P2MP - IPv4 overlay / IPv4 underlay" | |
1804 | echo "---------------------------------------------------------------" | |
1805 | ||
f1425529 | 1806 | starg_include_p2mp_common $ns1 $ns2 $mcast_grp $plen $grp $grp_dmac \ |
62199e3f IS |
1807 | $valid_src $invalid_src "mausezahn" |
1808 | } | |
1809 | ||
1810 | starg_include_p2mp_ipv6_ipv4() | |
1811 | { | |
a8258e64 HL |
1812 | local ns1=$ns1_v4 |
1813 | local ns2=$ns2_v4 | |
62199e3f IS |
1814 | local mcast_grp=238.1.1.1 |
1815 | local plen=32 | |
1816 | local grp=ff0e::1 | |
f1425529 | 1817 | local grp_dmac=33:33:00:00:00:01 |
62199e3f IS |
1818 | local valid_src=2001:db8:100::1 |
1819 | local invalid_src=2001:db8:200::1 | |
1820 | ||
1821 | echo | |
1822 | echo "Data path: (*, G) INCLUDE - P2MP - IPv6 overlay / IPv4 underlay" | |
1823 | echo "---------------------------------------------------------------" | |
1824 | ||
f1425529 | 1825 | starg_include_p2mp_common $ns1 $ns2 $mcast_grp $plen $grp $grp_dmac \ |
62199e3f IS |
1826 | $valid_src $invalid_src "mausezahn -6" |
1827 | } | |
1828 | ||
1829 | starg_include_p2mp_ipv4_ipv6() | |
1830 | { | |
a8258e64 HL |
1831 | local ns1=$ns1_v6 |
1832 | local ns2=$ns2_v6 | |
62199e3f IS |
1833 | local mcast_grp=ff0e::2 |
1834 | local plen=128 | |
1835 | local grp=239.1.1.1 | |
f1425529 | 1836 | local grp_dmac=01:00:5e:01:01:01 |
62199e3f IS |
1837 | local valid_src=192.0.2.129 |
1838 | local invalid_src=192.0.2.145 | |
1839 | ||
1840 | echo | |
1841 | echo "Data path: (*, G) INCLUDE - P2MP - IPv4 overlay / IPv6 underlay" | |
1842 | echo "---------------------------------------------------------------" | |
1843 | ||
f1425529 | 1844 | starg_include_p2mp_common $ns1 $ns2 $mcast_grp $plen $grp $grp_dmac \ |
62199e3f IS |
1845 | $valid_src $invalid_src "mausezahn" |
1846 | } | |
1847 | ||
1848 | starg_include_p2mp_ipv6_ipv6() | |
1849 | { | |
a8258e64 HL |
1850 | local ns1=$ns1_v6 |
1851 | local ns2=$ns2_v6 | |
62199e3f IS |
1852 | local mcast_grp=ff0e::2 |
1853 | local plen=128 | |
1854 | local grp=ff0e::1 | |
f1425529 | 1855 | local grp_dmac=33:33:00:00:00:01 |
62199e3f IS |
1856 | local valid_src=2001:db8:100::1 |
1857 | local invalid_src=2001:db8:200::1 | |
1858 | ||
1859 | echo | |
1860 | echo "Data path: (*, G) INCLUDE - P2MP - IPv6 overlay / IPv6 underlay" | |
1861 | echo "---------------------------------------------------------------" | |
1862 | ||
f1425529 | 1863 | starg_include_p2mp_common $ns1 $ns2 $mcast_grp $plen $grp $grp_dmac \ |
62199e3f IS |
1864 | $valid_src $invalid_src "mausezahn -6" |
1865 | } | |
1866 | ||
1867 | egress_vni_translation_common() | |
1868 | { | |
1869 | local ns1=$1; shift | |
1870 | local ns2=$1; shift | |
1871 | local mcast_grp=$1; shift | |
1872 | local plen=$1; shift | |
1873 | local proto=$1; shift | |
1874 | local grp=$1; shift | |
f1425529 | 1875 | local grp_dmac=$1; shift |
62199e3f IS |
1876 | local src=$1; shift |
1877 | local mz=$1; shift | |
1878 | ||
1879 | # When P2MP tunnels are used with optimized inter-subnet multicast | |
1880 | # (OISM) [1], the ingress VTEP does not perform VNI translation and | |
1881 | # uses the VNI of the source broadcast domain (BD). If the egress VTEP | |
1882 | # is a member in the source BD, then no VNI translation is needed. | |
1883 | # Otherwise, the egress VTEP needs to translate the VNI to the | |
1884 | # supplementary broadcast domain (SBD) VNI, which is usually the L3VNI. | |
1885 | # | |
1886 | # In this test, remove the VTEP in the second namespace from VLAN 10 | |
1887 | # (VNI 10010) and make sure that a packet sent from this VLAN on the | |
1888 | # first VTEP is received by the SVI corresponding to the L3VNI (14000 / | |
1889 | # VLAN 4000) on the second VTEP. | |
1890 | # | |
1891 | # The second VTEP will be able to decapsulate the packet with VNI 10010 | |
1892 | # because this VNI is configured on its shared VXLAN device. Later, | |
1893 | # when ingressing the bridge, the VNI to VLAN lookup will fail because | |
1894 | # the VTEP is not a member in VLAN 10, which will cause the packet to | |
1895 | # be tagged with VLAN 4000 since it is configured as PVID. | |
1896 | # | |
1897 | # [1] https://datatracker.ietf.org/doc/html/draft-ietf-bess-evpn-irb-mcast | |
1898 | ||
1899 | run_cmd "tc -n $ns2 qdisc replace dev br0.4000 clsact" | |
1900 | run_cmd "ip -n $ns2 address replace $mcast_grp/$plen dev veth0 autojoin" | |
1901 | run_cmd "tc -n $ns2 filter replace dev br0.4000 ingress pref 1 handle 101 proto $proto flower src_ip $src dst_ip $grp action pass" | |
1902 | ||
1903 | run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 grp $grp src $src permanent dst $mcast_grp src_vni 10010 via veth0" | |
1904 | ||
1905 | # Remove the second VTEP from VLAN 10. | |
1906 | run_cmd "bridge -n $ns2 vlan del vid 10 dev vx0" | |
1907 | ||
1908 | # Make sure that packets sent from the first VTEP over VLAN 10 are | |
1909 | # received by the SVI corresponding to the L3VNI (14000 / VLAN 4000) on | |
1910 | # the second VTEP, since it is configured as PVID. | |
f1425529 | 1911 | run_cmd "ip netns exec $ns1 $mz br0.10 -a own -b $grp_dmac -A $src -B $grp -t udp sp=12345,dp=54321 -p 100 -c 1 -q" |
62199e3f IS |
1912 | tc_check_packets "$ns2" "dev br0.4000 ingress" 101 1 |
1913 | log_test $? 0 "Egress VNI translation - PVID configured" | |
1914 | ||
1915 | # Remove PVID flag from VLAN 4000 on the second VTEP and make sure | |
1916 | # packets are no longer received by the SVI interface. | |
1917 | run_cmd "bridge -n $ns2 vlan add vid 4000 dev vx0" | |
f1425529 | 1918 | run_cmd "ip netns exec $ns1 $mz br0.10 -a own -b $grp_dmac -A $src -B $grp -t udp sp=12345,dp=54321 -p 100 -c 1 -q" |
62199e3f IS |
1919 | tc_check_packets "$ns2" "dev br0.4000 ingress" 101 1 |
1920 | log_test $? 0 "Egress VNI translation - no PVID configured" | |
1921 | ||
1922 | # Reconfigure the PVID and make sure packets are received again. | |
1923 | run_cmd "bridge -n $ns2 vlan add vid 4000 dev vx0 pvid" | |
f1425529 | 1924 | run_cmd "ip netns exec $ns1 $mz br0.10 -a own -b $grp_dmac -A $src -B $grp -t udp sp=12345,dp=54321 -p 100 -c 1 -q" |
62199e3f IS |
1925 | tc_check_packets "$ns2" "dev br0.4000 ingress" 101 2 |
1926 | log_test $? 0 "Egress VNI translation - PVID reconfigured" | |
1927 | } | |
1928 | ||
1929 | egress_vni_translation_ipv4_ipv4() | |
1930 | { | |
a8258e64 HL |
1931 | local ns1=$ns1_v4 |
1932 | local ns2=$ns2_v4 | |
62199e3f IS |
1933 | local mcast_grp=238.1.1.1 |
1934 | local plen=32 | |
1935 | local proto="ipv4" | |
1936 | local grp=239.1.1.1 | |
f1425529 | 1937 | local grp_dmac=01:00:5e:01:01:01 |
62199e3f IS |
1938 | local src=192.0.2.129 |
1939 | ||
1940 | echo | |
1941 | echo "Data path: Egress VNI translation - IPv4 overlay / IPv4 underlay" | |
1942 | echo "----------------------------------------------------------------" | |
1943 | ||
1944 | egress_vni_translation_common $ns1 $ns2 $mcast_grp $plen $proto $grp \ | |
f1425529 | 1945 | $grp_dmac $src "mausezahn" |
62199e3f IS |
1946 | } |
1947 | ||
1948 | egress_vni_translation_ipv6_ipv4() | |
1949 | { | |
a8258e64 HL |
1950 | local ns1=$ns1_v4 |
1951 | local ns2=$ns2_v4 | |
62199e3f IS |
1952 | local mcast_grp=238.1.1.1 |
1953 | local plen=32 | |
1954 | local proto="ipv6" | |
1955 | local grp=ff0e::1 | |
f1425529 | 1956 | local grp_dmac=33:33:00:00:00:01 |
62199e3f IS |
1957 | local src=2001:db8:100::1 |
1958 | ||
1959 | echo | |
1960 | echo "Data path: Egress VNI translation - IPv6 overlay / IPv4 underlay" | |
1961 | echo "----------------------------------------------------------------" | |
1962 | ||
1963 | egress_vni_translation_common $ns1 $ns2 $mcast_grp $plen $proto $grp \ | |
f1425529 | 1964 | $grp_dmac $src "mausezahn -6" |
62199e3f IS |
1965 | } |
1966 | ||
1967 | egress_vni_translation_ipv4_ipv6() | |
1968 | { | |
a8258e64 HL |
1969 | local ns1=$ns1_v6 |
1970 | local ns2=$ns2_v6 | |
62199e3f IS |
1971 | local mcast_grp=ff0e::2 |
1972 | local plen=128 | |
1973 | local proto="ipv4" | |
1974 | local grp=239.1.1.1 | |
f1425529 | 1975 | local grp_dmac=01:00:5e:01:01:01 |
62199e3f IS |
1976 | local src=192.0.2.129 |
1977 | ||
1978 | echo | |
1979 | echo "Data path: Egress VNI translation - IPv4 overlay / IPv6 underlay" | |
1980 | echo "----------------------------------------------------------------" | |
1981 | ||
1982 | egress_vni_translation_common $ns1 $ns2 $mcast_grp $plen $proto $grp \ | |
f1425529 | 1983 | $grp_dmac $src "mausezahn" |
62199e3f IS |
1984 | } |
1985 | ||
1986 | egress_vni_translation_ipv6_ipv6() | |
1987 | { | |
a8258e64 HL |
1988 | local ns1=$ns1_v6 |
1989 | local ns2=$ns2_v6 | |
62199e3f IS |
1990 | local mcast_grp=ff0e::2 |
1991 | local plen=128 | |
1992 | local proto="ipv6" | |
1993 | local grp=ff0e::1 | |
f1425529 | 1994 | local grp_dmac=33:33:00:00:00:01 |
62199e3f IS |
1995 | local src=2001:db8:100::1 |
1996 | ||
1997 | echo | |
1998 | echo "Data path: Egress VNI translation - IPv6 overlay / IPv6 underlay" | |
1999 | echo "----------------------------------------------------------------" | |
2000 | ||
2001 | egress_vni_translation_common $ns1 $ns2 $mcast_grp $plen $proto $grp \ | |
f1425529 | 2002 | $grp_dmac $src "mausezahn -6" |
62199e3f IS |
2003 | } |
2004 | ||
2005 | all_zeros_mdb_common() | |
2006 | { | |
2007 | local ns1=$1; shift | |
2008 | local ns2=$1; shift | |
2009 | local vtep1_ip=$1; shift | |
2010 | local vtep2_ip=$1; shift | |
2011 | local vtep3_ip=$1; shift | |
2012 | local vtep4_ip=$1; shift | |
2013 | local plen=$1; shift | |
2014 | local ipv4_grp=239.1.1.1 | |
f1425529 | 2015 | local ipv4_grp_dmac=01:00:5e:01:01:01 |
62199e3f | 2016 | local ipv4_unreg_grp=239.2.2.2 |
f1425529 | 2017 | local ipv4_unreg_grp_dmac=01:00:5e:02:02:02 |
62199e3f | 2018 | local ipv4_ll_grp=224.0.0.100 |
f1425529 | 2019 | local ipv4_ll_grp_dmac=01:00:5e:00:00:64 |
62199e3f IS |
2020 | local ipv4_src=192.0.2.129 |
2021 | local ipv6_grp=ff0e::1 | |
f1425529 | 2022 | local ipv6_grp_dmac=33:33:00:00:00:01 |
62199e3f | 2023 | local ipv6_unreg_grp=ff0e::2 |
f1425529 | 2024 | local ipv6_unreg_grp_dmac=33:33:00:00:00:02 |
62199e3f | 2025 | local ipv6_ll_grp=ff02::1 |
f1425529 | 2026 | local ipv6_ll_grp_dmac=33:33:00:00:00:01 |
62199e3f IS |
2027 | local ipv6_src=2001:db8:100::1 |
2028 | ||
2029 | # Install all-zeros (catchall) MDB entries for IPv4 and IPv6 traffic | |
2030 | # and make sure they only forward unregistered IP multicast traffic | |
2031 | # which is not link-local. Also make sure that each entry only forwards | |
2032 | # traffic from the matching address family. | |
2033 | ||
2034 | # Associate two different VTEPs with one all-zeros MDB entry: Two with | |
2035 | # the IPv4 entry (0.0.0.0) and another two with the IPv6 one (::). | |
2036 | run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 grp 0.0.0.0 permanent dst $vtep1_ip src_vni 10010" | |
2037 | run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 grp 0.0.0.0 permanent dst $vtep2_ip src_vni 10010" | |
2038 | run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 grp :: permanent dst $vtep3_ip src_vni 10010" | |
2039 | run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 grp :: permanent dst $vtep4_ip src_vni 10010" | |
2040 | ||
2041 | # Associate one VTEP from each set with a regular MDB entry: One with | |
2042 | # an IPv4 entry and another with an IPv6 one. | |
2043 | run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 grp $ipv4_grp permanent dst $vtep1_ip src_vni 10010" | |
2044 | run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 grp $ipv6_grp permanent dst $vtep3_ip src_vni 10010" | |
2045 | ||
2046 | # Add filters to match on decapsulated traffic in the second namespace. | |
2047 | run_cmd "tc -n $ns2 qdisc replace dev vx0 clsact" | |
2048 | run_cmd "tc -n $ns2 filter replace dev vx0 ingress pref 1 handle 101 proto all flower enc_dst_ip $vtep1_ip action pass" | |
2049 | run_cmd "tc -n $ns2 filter replace dev vx0 ingress pref 1 handle 102 proto all flower enc_dst_ip $vtep2_ip action pass" | |
2050 | run_cmd "tc -n $ns2 filter replace dev vx0 ingress pref 1 handle 103 proto all flower enc_dst_ip $vtep3_ip action pass" | |
2051 | run_cmd "tc -n $ns2 filter replace dev vx0 ingress pref 1 handle 104 proto all flower enc_dst_ip $vtep4_ip action pass" | |
2052 | ||
2053 | # Configure the VTEP addresses in the second namespace to enable | |
2054 | # decapsulation. | |
2055 | run_cmd "ip -n $ns2 address replace $vtep1_ip/$plen dev lo" | |
2056 | run_cmd "ip -n $ns2 address replace $vtep2_ip/$plen dev lo" | |
2057 | run_cmd "ip -n $ns2 address replace $vtep3_ip/$plen dev lo" | |
2058 | run_cmd "ip -n $ns2 address replace $vtep4_ip/$plen dev lo" | |
2059 | ||
2060 | # Send registered IPv4 multicast and make sure it only arrives to the | |
2061 | # first VTEP. | |
f1425529 | 2062 | run_cmd "ip netns exec $ns1 mausezahn br0.10 -a own -b $ipv4_grp_dmac -A $ipv4_src -B $ipv4_grp -t udp sp=12345,dp=54321 -p 100 -c 1 -q" |
62199e3f IS |
2063 | tc_check_packets "$ns2" "dev vx0 ingress" 101 1 |
2064 | log_test $? 0 "Registered IPv4 multicast - first VTEP" | |
2065 | tc_check_packets "$ns2" "dev vx0 ingress" 102 0 | |
2066 | log_test $? 0 "Registered IPv4 multicast - second VTEP" | |
2067 | ||
2068 | # Send unregistered IPv4 multicast that is not link-local and make sure | |
2069 | # it arrives to the first and second VTEPs. | |
f1425529 | 2070 | run_cmd "ip netns exec $ns1 mausezahn br0.10 -a own -b $ipv4_unreg_grp_dmac -A $ipv4_src -B $ipv4_unreg_grp -t udp sp=12345,dp=54321 -p 100 -c 1 -q" |
62199e3f IS |
2071 | tc_check_packets "$ns2" "dev vx0 ingress" 101 2 |
2072 | log_test $? 0 "Unregistered IPv4 multicast - first VTEP" | |
2073 | tc_check_packets "$ns2" "dev vx0 ingress" 102 1 | |
2074 | log_test $? 0 "Unregistered IPv4 multicast - second VTEP" | |
2075 | ||
2076 | # Send IPv4 link-local multicast traffic and make sure it does not | |
2077 | # arrive to any VTEP. | |
f1425529 | 2078 | run_cmd "ip netns exec $ns1 mausezahn br0.10 -a own -b $ipv4_ll_grp_dmac -A $ipv4_src -B $ipv4_ll_grp -t udp sp=12345,dp=54321 -p 100 -c 1 -q" |
62199e3f IS |
2079 | tc_check_packets "$ns2" "dev vx0 ingress" 101 2 |
2080 | log_test $? 0 "Link-local IPv4 multicast - first VTEP" | |
2081 | tc_check_packets "$ns2" "dev vx0 ingress" 102 1 | |
2082 | log_test $? 0 "Link-local IPv4 multicast - second VTEP" | |
2083 | ||
2084 | # Send registered IPv4 multicast using a unicast MAC address and make | |
2085 | # sure it does not arrive to any VTEP. | |
2086 | run_cmd "ip netns exec $ns1 mausezahn br0.10 -a own -b 00:11:22:33:44:55 -A $ipv4_src -B $ipv4_grp -t udp sp=12345,dp=54321 -p 100 -c 1 -q" | |
2087 | tc_check_packets "$ns2" "dev vx0 ingress" 101 2 | |
2088 | log_test $? 0 "Registered IPv4 multicast with a unicast MAC - first VTEP" | |
2089 | tc_check_packets "$ns2" "dev vx0 ingress" 102 1 | |
2090 | log_test $? 0 "Registered IPv4 multicast with a unicast MAC - second VTEP" | |
2091 | ||
2092 | # Send registered IPv4 multicast using a broadcast MAC address and make | |
2093 | # sure it does not arrive to any VTEP. | |
2094 | run_cmd "ip netns exec $ns1 mausezahn br0.10 -a own -b bcast -A $ipv4_src -B $ipv4_grp -t udp sp=12345,dp=54321 -p 100 -c 1 -q" | |
2095 | tc_check_packets "$ns2" "dev vx0 ingress" 101 2 | |
2096 | log_test $? 0 "Registered IPv4 multicast with a broadcast MAC - first VTEP" | |
2097 | tc_check_packets "$ns2" "dev vx0 ingress" 102 1 | |
2098 | log_test $? 0 "Registered IPv4 multicast with a broadcast MAC - second VTEP" | |
2099 | ||
2100 | # Make sure IPv4 traffic did not reach the VTEPs associated with | |
2101 | # IPv6 entries. | |
2102 | tc_check_packets "$ns2" "dev vx0 ingress" 103 0 | |
2103 | log_test $? 0 "IPv4 traffic - third VTEP" | |
2104 | tc_check_packets "$ns2" "dev vx0 ingress" 104 0 | |
2105 | log_test $? 0 "IPv4 traffic - fourth VTEP" | |
2106 | ||
2107 | # Reset IPv4 filters before testing IPv6 traffic. | |
2108 | run_cmd "tc -n $ns2 filter replace dev vx0 ingress pref 1 handle 101 proto all flower enc_dst_ip $vtep1_ip action pass" | |
2109 | run_cmd "tc -n $ns2 filter replace dev vx0 ingress pref 1 handle 102 proto all flower enc_dst_ip $vtep2_ip action pass" | |
2110 | ||
2111 | # Send registered IPv6 multicast and make sure it only arrives to the | |
2112 | # third VTEP. | |
f1425529 | 2113 | run_cmd "ip netns exec $ns1 mausezahn -6 br0.10 -a own -b $ipv6_grp_dmac -A $ipv6_src -B $ipv6_grp -t udp sp=12345,dp=54321 -p 100 -c 1 -q" |
62199e3f IS |
2114 | tc_check_packets "$ns2" "dev vx0 ingress" 103 1 |
2115 | log_test $? 0 "Registered IPv6 multicast - third VTEP" | |
2116 | tc_check_packets "$ns2" "dev vx0 ingress" 104 0 | |
2117 | log_test $? 0 "Registered IPv6 multicast - fourth VTEP" | |
2118 | ||
2119 | # Send unregistered IPv6 multicast that is not link-local and make sure | |
2120 | # it arrives to the third and fourth VTEPs. | |
f1425529 | 2121 | run_cmd "ip netns exec $ns1 mausezahn -6 br0.10 -a own -b $ipv6_unreg_grp_dmac -A $ipv6_src -B $ipv6_unreg_grp -t udp sp=12345,dp=54321 -p 100 -c 1 -q" |
62199e3f IS |
2122 | tc_check_packets "$ns2" "dev vx0 ingress" 103 2 |
2123 | log_test $? 0 "Unregistered IPv6 multicast - third VTEP" | |
2124 | tc_check_packets "$ns2" "dev vx0 ingress" 104 1 | |
2125 | log_test $? 0 "Unregistered IPv6 multicast - fourth VTEP" | |
2126 | ||
2127 | # Send IPv6 link-local multicast traffic and make sure it does not | |
2128 | # arrive to any VTEP. | |
f1425529 | 2129 | run_cmd "ip netns exec $ns1 mausezahn -6 br0.10 -a own -b $ipv6_ll_grp_dmac -A $ipv6_src -B $ipv6_ll_grp -t udp sp=12345,dp=54321 -p 100 -c 1 -q" |
62199e3f IS |
2130 | tc_check_packets "$ns2" "dev vx0 ingress" 103 2 |
2131 | log_test $? 0 "Link-local IPv6 multicast - third VTEP" | |
2132 | tc_check_packets "$ns2" "dev vx0 ingress" 104 1 | |
2133 | log_test $? 0 "Link-local IPv6 multicast - fourth VTEP" | |
2134 | ||
2135 | # Send registered IPv6 multicast using a unicast MAC address and make | |
2136 | # sure it does not arrive to any VTEP. | |
2137 | run_cmd "ip netns exec $ns1 mausezahn -6 br0.10 -a own -b 00:11:22:33:44:55 -A $ipv6_src -B $ipv6_grp -t udp sp=12345,dp=54321 -p 100 -c 1 -q" | |
2138 | tc_check_packets "$ns2" "dev vx0 ingress" 103 2 | |
2139 | log_test $? 0 "Registered IPv6 multicast with a unicast MAC - third VTEP" | |
2140 | tc_check_packets "$ns2" "dev vx0 ingress" 104 1 | |
2141 | log_test $? 0 "Registered IPv6 multicast with a unicast MAC - fourth VTEP" | |
2142 | ||
2143 | # Send registered IPv6 multicast using a broadcast MAC address and make | |
2144 | # sure it does not arrive to any VTEP. | |
2145 | run_cmd "ip netns exec $ns1 mausezahn -6 br0.10 -a own -b bcast -A $ipv6_src -B $ipv6_grp -t udp sp=12345,dp=54321 -p 100 -c 1 -q" | |
2146 | tc_check_packets "$ns2" "dev vx0 ingress" 103 2 | |
2147 | log_test $? 0 "Registered IPv6 multicast with a broadcast MAC - third VTEP" | |
2148 | tc_check_packets "$ns2" "dev vx0 ingress" 104 1 | |
2149 | log_test $? 0 "Registered IPv6 multicast with a broadcast MAC - fourth VTEP" | |
2150 | ||
2151 | # Make sure IPv6 traffic did not reach the VTEPs associated with | |
2152 | # IPv4 entries. | |
2153 | tc_check_packets "$ns2" "dev vx0 ingress" 101 0 | |
2154 | log_test $? 0 "IPv6 traffic - first VTEP" | |
2155 | tc_check_packets "$ns2" "dev vx0 ingress" 102 0 | |
2156 | log_test $? 0 "IPv6 traffic - second VTEP" | |
2157 | } | |
2158 | ||
2159 | all_zeros_mdb_ipv4() | |
2160 | { | |
a8258e64 HL |
2161 | local ns1=$ns1_v4 |
2162 | local ns2=$ns2_v4 | |
62199e3f IS |
2163 | local vtep1_ip=198.51.100.101 |
2164 | local vtep2_ip=198.51.100.102 | |
2165 | local vtep3_ip=198.51.100.103 | |
2166 | local vtep4_ip=198.51.100.104 | |
2167 | local plen=32 | |
2168 | ||
2169 | echo | |
2170 | echo "Data path: All-zeros MDB entry - IPv4 underlay" | |
2171 | echo "----------------------------------------------" | |
2172 | ||
2173 | all_zeros_mdb_common $ns1 $ns2 $vtep1_ip $vtep2_ip $vtep3_ip \ | |
2174 | $vtep4_ip $plen | |
2175 | } | |
2176 | ||
2177 | all_zeros_mdb_ipv6() | |
2178 | { | |
a8258e64 HL |
2179 | local ns1=$ns1_v6 |
2180 | local ns2=$ns2_v6 | |
62199e3f IS |
2181 | local vtep1_ip=2001:db8:1000::1 |
2182 | local vtep2_ip=2001:db8:2000::1 | |
2183 | local vtep3_ip=2001:db8:3000::1 | |
2184 | local vtep4_ip=2001:db8:4000::1 | |
2185 | local plen=128 | |
2186 | ||
2187 | echo | |
2188 | echo "Data path: All-zeros MDB entry - IPv6 underlay" | |
2189 | echo "----------------------------------------------" | |
2190 | ||
2191 | all_zeros_mdb_common $ns1 $ns2 $vtep1_ip $vtep2_ip $vtep3_ip \ | |
2192 | $vtep4_ip $plen | |
2193 | } | |
2194 | ||
2195 | mdb_fdb_common() | |
2196 | { | |
2197 | local ns1=$1; shift | |
2198 | local ns2=$1; shift | |
2199 | local vtep1_ip=$1; shift | |
2200 | local vtep2_ip=$1; shift | |
2201 | local plen=$1; shift | |
2202 | local proto=$1; shift | |
2203 | local grp=$1; shift | |
f1425529 | 2204 | local grp_dmac=$1; shift |
62199e3f IS |
2205 | local src=$1; shift |
2206 | local mz=$1; shift | |
2207 | ||
2208 | # Install an MDB entry and an FDB entry and make sure that the FDB | |
2209 | # entry only forwards traffic that was not forwarded by the MDB. | |
2210 | ||
2211 | # Associate the MDB entry with one VTEP and the FDB entry with another | |
2212 | # VTEP. | |
2213 | run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 grp $grp permanent dst $vtep1_ip src_vni 10010" | |
2214 | run_cmd "bridge -n $ns1 fdb add 00:00:00:00:00:00 dev vx0 self static dst $vtep2_ip src_vni 10010" | |
2215 | ||
2216 | # Add filters to match on decapsulated traffic in the second namespace. | |
2217 | run_cmd "tc -n $ns2 qdisc replace dev vx0 clsact" | |
2218 | run_cmd "tc -n $ns2 filter replace dev vx0 ingress pref 1 handle 101 proto $proto flower ip_proto udp dst_port 54321 enc_dst_ip $vtep1_ip action pass" | |
2219 | run_cmd "tc -n $ns2 filter replace dev vx0 ingress pref 1 handle 102 proto $proto flower ip_proto udp dst_port 54321 enc_dst_ip $vtep2_ip action pass" | |
2220 | ||
2221 | # Configure the VTEP addresses in the second namespace to enable | |
2222 | # decapsulation. | |
2223 | run_cmd "ip -n $ns2 address replace $vtep1_ip/$plen dev lo" | |
2224 | run_cmd "ip -n $ns2 address replace $vtep2_ip/$plen dev lo" | |
2225 | ||
2226 | # Send IP multicast traffic and make sure it is forwarded by the MDB | |
2227 | # and only arrives to the first VTEP. | |
f1425529 | 2228 | run_cmd "ip netns exec $ns1 $mz br0.10 -a own -b $grp_dmac -A $src -B $grp -t udp sp=12345,dp=54321 -p 100 -c 1 -q" |
62199e3f IS |
2229 | tc_check_packets "$ns2" "dev vx0 ingress" 101 1 |
2230 | log_test $? 0 "IP multicast - first VTEP" | |
2231 | tc_check_packets "$ns2" "dev vx0 ingress" 102 0 | |
2232 | log_test $? 0 "IP multicast - second VTEP" | |
2233 | ||
2234 | # Send broadcast traffic and make sure it is forwarded by the FDB and | |
2235 | # only arrives to the second VTEP. | |
2236 | run_cmd "ip netns exec $ns1 $mz br0.10 -a own -b bcast -A $src -B $grp -t udp sp=12345,dp=54321 -p 100 -c 1 -q" | |
2237 | tc_check_packets "$ns2" "dev vx0 ingress" 101 1 | |
2238 | log_test $? 0 "Broadcast - first VTEP" | |
2239 | tc_check_packets "$ns2" "dev vx0 ingress" 102 1 | |
2240 | log_test $? 0 "Broadcast - second VTEP" | |
2241 | ||
2242 | # Remove the MDB entry and make sure that IP multicast is now forwarded | |
2243 | # by the FDB to the second VTEP. | |
2244 | run_cmd "bridge -n $ns1 mdb del dev vx0 port vx0 grp $grp dst $vtep1_ip src_vni 10010" | |
f1425529 | 2245 | run_cmd "ip netns exec $ns1 $mz br0.10 -a own -b $grp_dmac -A $src -B $grp -t udp sp=12345,dp=54321 -p 100 -c 1 -q" |
62199e3f IS |
2246 | tc_check_packets "$ns2" "dev vx0 ingress" 101 1 |
2247 | log_test $? 0 "IP multicast after removal - first VTEP" | |
2248 | tc_check_packets "$ns2" "dev vx0 ingress" 102 2 | |
2249 | log_test $? 0 "IP multicast after removal - second VTEP" | |
2250 | } | |
2251 | ||
2252 | mdb_fdb_ipv4_ipv4() | |
2253 | { | |
a8258e64 HL |
2254 | local ns1=$ns1_v4 |
2255 | local ns2=$ns2_v4 | |
62199e3f IS |
2256 | local vtep1_ip=198.51.100.100 |
2257 | local vtep2_ip=198.51.100.200 | |
2258 | local plen=32 | |
2259 | local proto="ipv4" | |
2260 | local grp=239.1.1.1 | |
f1425529 | 2261 | local grp_dmac=01:00:5e:01:01:01 |
62199e3f IS |
2262 | local src=192.0.2.129 |
2263 | ||
2264 | echo | |
2265 | echo "Data path: MDB with FDB - IPv4 overlay / IPv4 underlay" | |
2266 | echo "------------------------------------------------------" | |
2267 | ||
f1425529 IS |
2268 | mdb_fdb_common $ns1 $ns2 $vtep1_ip $vtep2_ip $plen $proto $grp \ |
2269 | $grp_dmac $src "mausezahn" | |
62199e3f IS |
2270 | } |
2271 | ||
2272 | mdb_fdb_ipv6_ipv4() | |
2273 | { | |
a8258e64 HL |
2274 | local ns1=$ns1_v4 |
2275 | local ns2=$ns2_v4 | |
62199e3f IS |
2276 | local vtep1_ip=198.51.100.100 |
2277 | local vtep2_ip=198.51.100.200 | |
2278 | local plen=32 | |
2279 | local proto="ipv6" | |
2280 | local grp=ff0e::1 | |
f1425529 | 2281 | local grp_dmac=33:33:00:00:00:01 |
62199e3f IS |
2282 | local src=2001:db8:100::1 |
2283 | ||
2284 | echo | |
2285 | echo "Data path: MDB with FDB - IPv6 overlay / IPv4 underlay" | |
2286 | echo "------------------------------------------------------" | |
2287 | ||
f1425529 IS |
2288 | mdb_fdb_common $ns1 $ns2 $vtep1_ip $vtep2_ip $plen $proto $grp \ |
2289 | $grp_dmac $src "mausezahn -6" | |
62199e3f IS |
2290 | } |
2291 | ||
2292 | mdb_fdb_ipv4_ipv6() | |
2293 | { | |
a8258e64 HL |
2294 | local ns1=$ns1_v6 |
2295 | local ns2=$ns2_v6 | |
62199e3f IS |
2296 | local vtep1_ip=2001:db8:1000::1 |
2297 | local vtep2_ip=2001:db8:2000::1 | |
2298 | local plen=128 | |
2299 | local proto="ipv4" | |
2300 | local grp=239.1.1.1 | |
f1425529 | 2301 | local grp_dmac=01:00:5e:01:01:01 |
62199e3f IS |
2302 | local src=192.0.2.129 |
2303 | ||
2304 | echo | |
2305 | echo "Data path: MDB with FDB - IPv4 overlay / IPv6 underlay" | |
2306 | echo "------------------------------------------------------" | |
2307 | ||
f1425529 IS |
2308 | mdb_fdb_common $ns1 $ns2 $vtep1_ip $vtep2_ip $plen $proto $grp \ |
2309 | $grp_dmac $src "mausezahn" | |
62199e3f IS |
2310 | } |
2311 | ||
2312 | mdb_fdb_ipv6_ipv6() | |
2313 | { | |
a8258e64 HL |
2314 | local ns1=$ns1_v6 |
2315 | local ns2=$ns2_v6 | |
62199e3f IS |
2316 | local vtep1_ip=2001:db8:1000::1 |
2317 | local vtep2_ip=2001:db8:2000::1 | |
2318 | local plen=128 | |
2319 | local proto="ipv6" | |
2320 | local grp=ff0e::1 | |
f1425529 | 2321 | local grp_dmac=33:33:00:00:00:01 |
62199e3f IS |
2322 | local src=2001:db8:100::1 |
2323 | ||
2324 | echo | |
2325 | echo "Data path: MDB with FDB - IPv6 overlay / IPv6 underlay" | |
2326 | echo "------------------------------------------------------" | |
2327 | ||
f1425529 IS |
2328 | mdb_fdb_common $ns1 $ns2 $vtep1_ip $vtep2_ip $plen $proto $grp \ |
2329 | $grp_dmac $src "mausezahn -6" | |
62199e3f IS |
2330 | } |
2331 | ||
2332 | mdb_grp1_loop() | |
2333 | { | |
2334 | local ns1=$1; shift | |
2335 | local vtep1_ip=$1; shift | |
2336 | local grp1=$1; shift | |
2337 | ||
2338 | while true; do | |
2339 | bridge -n $ns1 mdb del dev vx0 port vx0 grp $grp1 dst $vtep1_ip src_vni 10010 | |
2340 | bridge -n $ns1 mdb add dev vx0 port vx0 grp $grp1 permanent dst $vtep1_ip src_vni 10010 | |
2341 | done >/dev/null 2>&1 | |
2342 | } | |
2343 | ||
2344 | mdb_grp2_loop() | |
2345 | { | |
2346 | local ns1=$1; shift | |
2347 | local vtep1_ip=$1; shift | |
2348 | local vtep2_ip=$1; shift | |
2349 | local grp2=$1; shift | |
2350 | ||
2351 | while true; do | |
2352 | bridge -n $ns1 mdb del dev vx0 port vx0 grp $grp2 dst $vtep1_ip src_vni 10010 | |
2353 | bridge -n $ns1 mdb add dev vx0 port vx0 grp $grp2 permanent dst $vtep1_ip src_vni 10010 | |
2354 | bridge -n $ns1 mdb replace dev vx0 port vx0 grp $grp2 permanent dst $vtep2_ip src_vni 10010 | |
2355 | done >/dev/null 2>&1 | |
2356 | } | |
2357 | ||
2358 | mdb_torture_common() | |
2359 | { | |
2360 | local ns1=$1; shift | |
2361 | local vtep1_ip=$1; shift | |
2362 | local vtep2_ip=$1; shift | |
2363 | local grp1=$1; shift | |
f1425529 | 2364 | local grp1_dmac=$1; shift |
62199e3f | 2365 | local grp2=$1; shift |
f1425529 | 2366 | local grp2_dmac=$1; shift |
62199e3f IS |
2367 | local src=$1; shift |
2368 | local mz=$1; shift | |
2369 | local pid1 | |
2370 | local pid2 | |
2371 | local pid3 | |
2372 | local pid4 | |
2373 | ||
2374 | # Continuously send two streams that are forwarded by two different MDB | |
2375 | # entries. The first entry will be added and deleted in a loop. This | |
2376 | # allows us to test that the data path does not use freed MDB entry | |
2377 | # memory. The second entry will have two remotes, one that is added and | |
2378 | # deleted in a loop and another that is replaced in a loop. This allows | |
2379 | # us to test that the data path does not use freed remote entry memory. | |
2380 | # The test is considered successful if nothing crashed. | |
2381 | ||
2382 | # Create the MDB entries that will be continuously deleted / replaced. | |
2383 | run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 grp $grp1 permanent dst $vtep1_ip src_vni 10010" | |
2384 | run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 grp $grp2 permanent dst $vtep1_ip src_vni 10010" | |
2385 | run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 grp $grp2 permanent dst $vtep2_ip src_vni 10010" | |
2386 | ||
2387 | mdb_grp1_loop $ns1 $vtep1_ip $grp1 & | |
2388 | pid1=$! | |
2389 | mdb_grp2_loop $ns1 $vtep1_ip $vtep2_ip $grp2 & | |
2390 | pid2=$! | |
f1425529 | 2391 | ip netns exec $ns1 $mz br0.10 -a own -b $grp1_dmac -A $src -B $grp1 -t udp sp=12345,dp=54321 -p 100 -c 0 -q & |
62199e3f | 2392 | pid3=$! |
f1425529 | 2393 | ip netns exec $ns1 $mz br0.10 -a own -b $grp2_dmac -A $src -B $grp2 -t udp sp=12345,dp=54321 -p 100 -c 0 -q & |
62199e3f IS |
2394 | pid4=$! |
2395 | ||
2396 | sleep 30 | |
2397 | kill -9 $pid1 $pid2 $pid3 $pid4 | |
2398 | wait $pid1 $pid2 $pid3 $pid4 2>/dev/null | |
2399 | ||
2400 | log_test 0 0 "Torture test" | |
2401 | } | |
2402 | ||
2403 | mdb_torture_ipv4_ipv4() | |
2404 | { | |
a8258e64 | 2405 | local ns1=$ns1_v4 |
62199e3f IS |
2406 | local vtep1_ip=198.51.100.100 |
2407 | local vtep2_ip=198.51.100.200 | |
2408 | local grp1=239.1.1.1 | |
f1425529 | 2409 | local grp1_dmac=01:00:5e:01:01:01 |
62199e3f | 2410 | local grp2=239.2.2.2 |
f1425529 | 2411 | local grp2_dmac=01:00:5e:02:02:02 |
62199e3f IS |
2412 | local src=192.0.2.129 |
2413 | ||
2414 | echo | |
2415 | echo "Data path: MDB torture test - IPv4 overlay / IPv4 underlay" | |
2416 | echo "----------------------------------------------------------" | |
2417 | ||
f1425529 IS |
2418 | mdb_torture_common $ns1 $vtep1_ip $vtep2_ip $grp1 $grp1_dmac $grp2 \ |
2419 | $grp2_dmac $src "mausezahn" | |
62199e3f IS |
2420 | } |
2421 | ||
2422 | mdb_torture_ipv6_ipv4() | |
2423 | { | |
a8258e64 | 2424 | local ns1=$ns1_v4 |
62199e3f IS |
2425 | local vtep1_ip=198.51.100.100 |
2426 | local vtep2_ip=198.51.100.200 | |
2427 | local grp1=ff0e::1 | |
f1425529 | 2428 | local grp1_dmac=33:33:00:00:00:01 |
62199e3f | 2429 | local grp2=ff0e::2 |
f1425529 | 2430 | local grp2_dmac=33:33:00:00:00:02 |
62199e3f IS |
2431 | local src=2001:db8:100::1 |
2432 | ||
2433 | echo | |
2434 | echo "Data path: MDB torture test - IPv6 overlay / IPv4 underlay" | |
2435 | echo "----------------------------------------------------------" | |
2436 | ||
f1425529 IS |
2437 | mdb_torture_common $ns1 $vtep1_ip $vtep2_ip $grp1 $grp1_dmac $grp2 \ |
2438 | $grp2_dmac $src "mausezahn -6" | |
62199e3f IS |
2439 | } |
2440 | ||
2441 | mdb_torture_ipv4_ipv6() | |
2442 | { | |
a8258e64 | 2443 | local ns1=$ns1_v6 |
62199e3f IS |
2444 | local vtep1_ip=2001:db8:1000::1 |
2445 | local vtep2_ip=2001:db8:2000::1 | |
2446 | local grp1=239.1.1.1 | |
f1425529 | 2447 | local grp1_dmac=01:00:5e:01:01:01 |
62199e3f | 2448 | local grp2=239.2.2.2 |
f1425529 | 2449 | local grp2_dmac=01:00:5e:02:02:02 |
62199e3f IS |
2450 | local src=192.0.2.129 |
2451 | ||
2452 | echo | |
2453 | echo "Data path: MDB torture test - IPv4 overlay / IPv6 underlay" | |
2454 | echo "----------------------------------------------------------" | |
2455 | ||
f1425529 IS |
2456 | mdb_torture_common $ns1 $vtep1_ip $vtep2_ip $grp1 $grp1_dmac $grp2 \ |
2457 | $grp2_dmac $src "mausezahn" | |
62199e3f IS |
2458 | } |
2459 | ||
2460 | mdb_torture_ipv6_ipv6() | |
2461 | { | |
a8258e64 | 2462 | local ns1=$ns1_v6 |
62199e3f IS |
2463 | local vtep1_ip=2001:db8:1000::1 |
2464 | local vtep2_ip=2001:db8:2000::1 | |
2465 | local grp1=ff0e::1 | |
f1425529 | 2466 | local grp1_dmac=33:33:00:00:00:01 |
62199e3f | 2467 | local grp2=ff0e::2 |
f1425529 | 2468 | local grp2_dmac=33:33:00:00:00:02 |
62199e3f IS |
2469 | local src=2001:db8:100::1 |
2470 | ||
2471 | echo | |
2472 | echo "Data path: MDB torture test - IPv6 overlay / IPv6 underlay" | |
2473 | echo "----------------------------------------------------------" | |
2474 | ||
f1425529 IS |
2475 | mdb_torture_common $ns1 $vtep1_ip $vtep2_ip $grp1 $grp1_dmac $grp2 \ |
2476 | $grp2_dmac $src "mausezahn -6" | |
62199e3f IS |
2477 | } |
2478 | ||
2479 | ################################################################################ | |
2480 | # Usage | |
2481 | ||
2482 | usage() | |
2483 | { | |
2484 | cat <<EOF | |
2485 | usage: ${0##*/} OPTS | |
2486 | ||
2487 | -t <test> Test(s) to run (default: all) | |
2488 | (options: $TESTS) | |
2489 | -c Control path tests only | |
2490 | -d Data path tests only | |
2491 | -p Pause on fail | |
2492 | -P Pause after each test before cleanup | |
2493 | -v Verbose mode (show commands and output) | |
2494 | EOF | |
2495 | } | |
2496 | ||
2497 | ################################################################################ | |
2498 | # Main | |
2499 | ||
2500 | trap cleanup EXIT | |
2501 | ||
2502 | while getopts ":t:cdpPvh" opt; do | |
2503 | case $opt in | |
2504 | t) TESTS=$OPTARG;; | |
2505 | c) TESTS=${CONTROL_PATH_TESTS};; | |
2506 | d) TESTS=${DATA_PATH_TESTS};; | |
2507 | p) PAUSE_ON_FAIL=yes;; | |
2508 | P) PAUSE=yes;; | |
2509 | v) VERBOSE=$(($VERBOSE + 1));; | |
2510 | h) usage; exit 0;; | |
2511 | *) usage; exit 1;; | |
2512 | esac | |
2513 | done | |
2514 | ||
2515 | # Make sure we don't pause twice. | |
2516 | [ "${PAUSE}" = "yes" ] && PAUSE_ON_FAIL=no | |
2517 | ||
2518 | if [ "$(id -u)" -ne 0 ];then | |
2519 | echo "SKIP: Need root privileges" | |
2520 | exit $ksft_skip; | |
2521 | fi | |
2522 | ||
2523 | if [ ! -x "$(command -v ip)" ]; then | |
2524 | echo "SKIP: Could not run test without ip tool" | |
2525 | exit $ksft_skip | |
2526 | fi | |
2527 | ||
2528 | if [ ! -x "$(command -v bridge)" ]; then | |
2529 | echo "SKIP: Could not run test without bridge tool" | |
2530 | exit $ksft_skip | |
2531 | fi | |
2532 | ||
2533 | if [ ! -x "$(command -v mausezahn)" ]; then | |
2534 | echo "SKIP: Could not run test without mausezahn tool" | |
2535 | exit $ksft_skip | |
2536 | fi | |
2537 | ||
2538 | if [ ! -x "$(command -v jq)" ]; then | |
2539 | echo "SKIP: Could not run test without jq tool" | |
2540 | exit $ksft_skip | |
2541 | fi | |
2542 | ||
c3e87a7f | 2543 | bridge mdb help 2>&1 | grep -q "flush" |
62199e3f | 2544 | if [ $? -ne 0 ]; then |
c3e87a7f | 2545 | echo "SKIP: iproute2 bridge too old, missing VXLAN MDB flush support" |
62199e3f IS |
2546 | exit $ksft_skip |
2547 | fi | |
2548 | ||
2549 | # Start clean. | |
2550 | cleanup | |
2551 | ||
2552 | for t in $TESTS | |
2553 | do | |
2554 | setup; $t; cleanup; | |
2555 | done | |
2556 | ||
2557 | if [ "$TESTS" != "none" ]; then | |
2558 | printf "\nTests passed: %3d\n" ${nsuccess} | |
2559 | printf "Tests failed: %3d\n" ${nfail} | |
2560 | fi | |
2561 | ||
2562 | exit $ret |