Lines Matching +full:receive +full:- +full:eq +full:- +full:mdb
2 # SPDX-License-Identifier: GPL-2.0
4 # This test is for checking VXLAN MDB functionality. The topology consists of
12 # +------------------------------------+ +------------------------------------+
19 # | +---------+---------+ | | +---------+---------+ |
33 # +-----------------|------------------+ +-----------------|------------------+
35 # +-----------------|------------------+ +-----------------|------------------+
49 # | +---------+---------+ | | +---------+---------+ |
56 # +------------------------------------+ +------------------------------------+
122 # All tests in this script. Can be overridden with -t option.
140 if [ ${rc} -eq ${expected} ]; then
141 printf "TEST: %-60s [ OK ]\n" "${msg}"
146 printf "TEST: %-60s [FAIL]\n" "${msg}"
182 if [ "$VERBOSE" = "1" -a -n "$out" ]; then
198 pkts=$(tc -n $ns -j -s filter show $id \
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
222 ip -n $ns link set dev lo up
223 ip -n $ns address add $local_addr dev lo
225 ip -n $ns link set dev veth0 up
227 ip -n $ns link add name br0 up type bridge vlan_filtering 1 \
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
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
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
239 ip -n $ns link add name vx0 up master br0 type vxlan \
241 bridge -n $ns link set dev vx0 vlan_tunnel on
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
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
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
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
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
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
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
307 set -e
324 # Tests - Control path
332 # Test basic control path operations common to all MDB entry types.
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"
337 run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 $grp_key src_vni 10010"
338 log_test $? 0 "MDB entry presence after addition"
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"
342 run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 $grp_key src_vni 10010"
343 log_test $? 0 "MDB entry presence after replacement"
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"
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"
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"
354 run_cmd "bridge -n $ns1 mdb add dev vx0 port vx0 $grp_key permanent dst $vtep_ip src_vni 10010"
355 run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 $grp_key src_vni 10010 | grep \"proto static\""
356 log_test $? 0 "MDB entry default protocol"
358 …run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 $grp_key permanent proto 123 dst $vtep_ip src…
359 run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 $grp_key src_vni 10010 | grep \"proto 123\""
360 log_test $? 0 "MDB entry protocol replacement"
362 run_cmd "bridge -n $ns1 mdb del dev vx0 port vx0 $grp_key dst $vtep_ip src_vni 10010"
365 run_cmd "bridge -n $ns1 mdb add dev vx0 port vx0 $grp_key permanent dst $vtep_ip src_vni 10010"
366 run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 $grp_key src_vni 10010 | grep \" dst_port \""
367 log_test $? 1 "MDB entry default destination port"
369 …run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 $grp_key permanent dst $vtep_ip dst_port 1234…
370 run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 $grp_key src_vni 10010 | grep \"dst_port 1234\""
371 log_test $? 0 "MDB entry destination port replacement"
373 run_cmd "bridge -n $ns1 mdb del dev vx0 port vx0 $grp_key dst $vtep_ip src_vni 10010"
376 run_cmd "bridge -n $ns1 mdb add dev vx0 port vx0 $grp_key permanent dst $vtep_ip src_vni 10010"
377 run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 $grp_key src_vni 10010 | grep \" vni \""
378 log_test $? 1 "MDB entry default destination VNI"
380 …run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 $grp_key permanent dst $vtep_ip vni 1234 src_…
381 run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 $grp_key src_vni 10010 | grep \"vni 1234\""
382 log_test $? 0 "MDB entry destination VNI replacement"
384 run_cmd "bridge -n $ns1 mdb del dev vx0 port vx0 $grp_key dst $vtep_ip src_vni 10010"
387 run_cmd "bridge -n $ns1 mdb add dev vx0 port vx0 $grp_key permanent dst $vtep_ip src_vni 10010"
388 run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 $grp_key src_vni 10010 | grep \" via \""
389 log_test $? 1 "MDB entry default outgoing interface"
391 …run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 $grp_key permanent dst $vtep_ip src_vni 10010…
392 run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 $grp_key src_vni 10010 | grep \"via veth0\""
393 log_test $? 0 "MDB entry outgoing interface replacement"
395 run_cmd "bridge -n $ns1 mdb del dev vx0 port vx0 $grp_key dst $vtep_ip src_vni 10010"
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"
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"
404 …run_cmd "bridge -n $ns1 mdb add dev vx0 port vx0 $grp_key permanent vid 10 dst $vtep_ip src_vni 10…
405 log_test $? 255 "MDB entry with VLAN"
407 …run_cmd "bridge -n $ns1 mdb add dev vx0 port vx0 grp 01:02:03:04:05:06 permanent dst $vtep_ip src_…
408 log_test $? 255 "MDB entry MAC address"
410 run_cmd "bridge -n $ns1 mdb add dev vx0 port vx0 $grp_key permanent"
411 log_test $? 255 "MDB entry without extended parameters"
413 …run_cmd "bridge -n $ns1 mdb add dev vx0 port vx0 $grp_key permanent proto 3 dst $vtep_ip src_vni 1…
414 log_test $? 255 "MDB entry with an invalid protocol"
416 …run_cmd "bridge -n $ns1 mdb add dev vx0 port vx0 $grp_key permanent dst $vtep_ip vni $((2 ** 24)) …
417 log_test $? 255 "MDB entry with an invalid destination VNI"
419 …run_cmd "bridge -n $ns1 mdb add dev vx0 port vx0 $grp_key permanent dst $vtep_ip src_vni $((2 ** 2…
420 log_test $? 255 "MDB entry with an invalid source VNI"
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"
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"
438 echo "Control path: Basic (*, G) operations - IPv4 overlay / IPv4 underlay"
439 echo "--------------------------------------------------------------------"
451 echo "Control path: Basic (*, G) operations - IPv6 overlay / IPv4 underlay"
452 echo "--------------------------------------------------------------------"
464 echo "Control path: Basic (*, G) operations - IPv4 overlay / IPv6 underlay"
465 echo "--------------------------------------------------------------------"
477 echo "Control path: Basic (*, G) operations - IPv6 overlay / IPv6 underlay"
478 echo "--------------------------------------------------------------------"
490 echo "Control path: Basic (S, G) operations - IPv4 overlay / IPv4 underlay"
491 echo "--------------------------------------------------------------------"
503 echo "Control path: Basic (S, G) operations - IPv6 overlay / IPv4 underlay"
504 echo "---------------------------------------------------------------------"
516 echo "Control path: Basic (S, G) operations - IPv4 overlay / IPv6 underlay"
517 echo "--------------------------------------------------------------------"
529 echo "Control path: Basic (S, G) operations - IPv6 overlay / IPv6 underlay"
530 echo "--------------------------------------------------------------------"
548 …run_cmd "bridge -n $ns1 mdb add dev vx0 port vx0 grp $grp permanent filter_mode exclude source_lis…
549 log_test $? 0 "(*, G) MDB entry addition with source list"
550 run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grp $grp src_vni 10010"
551 log_test $? 0 "(*, G) MDB entry presence after addition"
552 run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grp $grp src $src1 src_vni 10010"
553 log_test $? 0 "(S, G) MDB entry presence after addition"
555 …run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 grp $grp permanent filter_mode exclude source…
556 log_test $? 0 "(*, G) MDB entry replacement with source list"
557 run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grp $grp src_vni 10010"
558 log_test $? 0 "(*, G) MDB entry presence after replacement"
559 run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grp $grp src $src1 src_vni 10010"
560 log_test $? 0 "(S, G) MDB entry presence after replacement"
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"
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"
570 run_cmd "bridge -n $ns1 mdb add dev vx0 port vx0 grp $grp permanent dst $vtep_ip src_vni 10010"
571 run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grp $grp src_vni 10010 | grep exclude"
572 log_test $? 0 "(*, G) MDB entry default filter mode"
574 …run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 grp $grp permanent filter_mode include source…
575 run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grp $grp src_vni 10010 | grep include"
576 log_test $? 0 "(*, G) MDB entry after replacing filter mode to \"include\""
577 run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grp $grp src $src1 src_vni 10010"
578 log_test $? 0 "(S, G) MDB entry after replacing filter mode to \"include\""
579 run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grp $grp src $src1 src_vni 10010 | grep blocked"
582 …run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 grp $grp permanent filter_mode exclude source…
583 run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grp $grp src_vni 10010 | grep exclude"
584 log_test $? 0 "(*, G) MDB entry after replacing filter mode to \"exclude\""
585 run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grep grp $grp src $src1 src_vni 10010"
586 log_test $? 0 "(S, G) MDB entry after replacing filter mode to \"exclude\""
587 run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grp $grp src $src1 src_vni 10010 | grep blocked"
590 run_cmd "bridge -n $ns1 mdb del dev vx0 port vx0 grp $grp dst $vtep_ip src_vni 10010"
593 run_cmd "bridge -n $ns1 mdb add dev vx0 port vx0 grp $grp permanent dst $vtep_ip src_vni 10010"
594 run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grp $grp src_vni 10010 | grep source_list"
595 log_test $? 1 "(*, G) MDB entry default source list"
597 …run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 grp $grp permanent filter_mode exclude source…
598 run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grp $grp src $src1 src_vni 10010"
599 log_test $? 0 "(S, G) MDB entry of 1st source after replacing source list"
600 run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grp $grp src $src2 src_vni 10010"
601 log_test $? 0 "(S, G) MDB entry of 2nd source after replacing source list"
602 run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grp $grp src $src3 src_vni 10010"
603 log_test $? 0 "(S, G) MDB entry of 3rd source after replacing source list"
605 …run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 grp $grp permanent filter_mode exclude source…
606 run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grp $grp src $src1 src_vni 10010"
607 log_test $? 0 "(S, G) MDB entry of 1st source after removing source"
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"
611 log_test $? 0 "(S, G) MDB entry of 3rd source after removing source"
613 run_cmd "bridge -n $ns1 mdb del dev vx0 port vx0 grp $grp dst $vtep_ip src_vni 10010"
616 …run_cmd "bridge -n $ns1 mdb add dev vx0 port vx0 grp $grp permanent filter_mode exclude source_lis…
617 run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grp $grp src_vni 10010 | grep \"proto static\""
618 log_test $? 0 "(*, G) MDB entry default protocol"
619 …run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grp $grp src $src1 src_vni 10010 | grep \"proto stat…
620 log_test $? 0 "(S, G) MDB entry default protocol"
622 …run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 grp $grp permanent filter_mode exclude source…
623 run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grp $grp src_vni 10010 | grep \"proto bgp\""
624 log_test $? 0 "(*, G) MDB entry protocol after replacement"
625 …run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grp $grp src $src1 src_vni 10010 | grep \"proto bgp\…
626 log_test $? 0 "(S, G) MDB entry protocol after replacement"
628 run_cmd "bridge -n $ns1 mdb del dev vx0 port vx0 grp $grp dst $vtep_ip src_vni 10010"
631 …run_cmd "bridge -n $ns1 mdb add dev vx0 port vx0 grp $grp permanent filter_mode exclude source_lis…
632 run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grp $grp src_vni 10010 | grep \" dst_port \""
633 log_test $? 1 "(*, G) MDB entry default destination port"
634 …run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grp $grp src $src1 src_vni 10010 | grep \" dst_port …
635 log_test $? 1 "(S, G) MDB entry default destination port"
637 …run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 grp $grp permanent filter_mode exclude source…
638 run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grp $grp src_vni 10010 | grep \" dst_port 1234 \""
639 log_test $? 0 "(*, G) MDB entry destination port after replacement"
640 …run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grp $grp src $src1 src_vni 10010 | grep \" dst_port …
641 log_test $? 0 "(S, G) MDB entry destination port after replacement"
643 run_cmd "bridge -n $ns1 mdb del dev vx0 port vx0 grp $grp dst $vtep_ip src_vni 10010"
646 …run_cmd "bridge -n $ns1 mdb add dev vx0 port vx0 grp $grp permanent filter_mode exclude source_lis…
647 run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grp $grp src_vni 10010 | grep \" vni \""
648 log_test $? 1 "(*, G) MDB entry default destination VNI"
649 run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grp $grp src $src1 src_vni 10010 | grep \" vni \""
650 log_test $? 1 "(S, G) MDB entry default destination VNI"
652 …run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 grp $grp permanent filter_mode exclude source…
653 run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grp $grp src_vni 10010 | grep \" vni 1234 \""
654 log_test $? 0 "(*, G) MDB entry destination VNI after replacement"
655 …run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grp $grp src $src1 src_vni 10010 | grep \" vni 1234 …
656 log_test $? 0 "(S, G) MDB entry destination VNI after replacement"
658 run_cmd "bridge -n $ns1 mdb del dev vx0 port vx0 grp $grp dst $vtep_ip src_vni 10010"
661 …run_cmd "bridge -n $ns1 mdb add dev vx0 port vx0 grp $grp permanent filter_mode exclude source_lis…
662 run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grp $grp src_vni 10010 | grep \" via \""
663 log_test $? 1 "(*, G) MDB entry default outgoing interface"
664 run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grp $grp src $src1 src_vni 10010 | grep \" via \""
665 log_test $? 1 "(S, G) MDB entry default outgoing interface"
667 …run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 grp $grp permanent filter_mode exclude source…
668 run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grp $grp src_vni 10010 | grep \" via veth0 \""
669 log_test $? 0 "(*, G) MDB entry outgoing interface after replacement"
670 …run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grp $grp src $src1 src_vni 10010 | grep \" via veth0…
671 log_test $? 0 "(S, G) MDB entry outgoing interface after replacement"
673 run_cmd "bridge -n $ns1 mdb del dev vx0 port vx0 grp $grp dst $vtep_ip src_vni 10010"
676 …run_cmd "bridge -n $ns1 mdb add dev vx0 port vx0 grp $all_zeros_grp permanent filter_mode exclude …
677 log_test $? 255 "All-zeros group with filter mode"
679 …run_cmd "bridge -n $ns1 mdb add dev vx0 port vx0 grp $all_zeros_grp permanent source_list $src1 ds…
680 log_test $? 255 "All-zeros group with source list"
682 …run_cmd "bridge -n $ns1 mdb add dev vx0 port vx0 grp $grp permanent filter_mode include dst $vtep_…
685 …run_cmd "bridge -n $ns1 mdb add dev vx0 port vx0 grp $grp permanent filter_mode exclude source_lis…
688 …run_cmd "bridge -n $ns1 mdb add dev vx0 port vx0 grp $grp permanent source_list $src1 dst $vtep_ip…
703 echo "Control path: (*, G) operations - IPv4 overlay / IPv4 underlay"
704 echo "--------------------------------------------------------------"
720 echo "Control path: (*, G) operations - IPv6 overlay / IPv4 underlay"
721 echo "--------------------------------------------------------------"
737 echo "Control path: (*, G) operations - IPv4 overlay / IPv6 underlay"
738 echo "--------------------------------------------------------------"
754 echo "Control path: (*, G) operations - IPv6 overlay / IPv6 underlay"
755 echo "--------------------------------------------------------------"
771 …run_cmd "bridge -n $ns1 mdb add dev vx0 port vx0 grp $grp src $src permanent dst $vtep_ip src_vni …
772 run_cmd "bridge -n $ns1 -d -s mdb get dev vx0 grp $grp src $src src_vni 10010 | grep include"
773 log_test $? 0 "(S, G) MDB entry default filter mode"
775 …run_cmd "bridge -n $ns1 mdb del dev vx0 port vx0 grp $grp src $src permanent dst $vtep_ip src_vni …
778 …run_cmd "bridge -n $ns1 mdb add dev vx0 port vx0 grp $grp src $src permanent filter_mode include d…
781 …run_cmd "bridge -n $ns1 mdb add dev vx0 port vx0 grp $grp src $src permanent source_list $src dst …
784 …run_cmd "bridge -n $ns1 mdb add dev vx0 port vx0 grp $grp src $grp permanent dst $vtep_ip src_vni …
787 …run_cmd "bridge -n $ns1 mdb add dev vx0 port vx0 grp $all_zeros_grp src $src permanent dst $vtep_i…
788 log_test $? 255 "All-zeros group with source"
800 echo "Control path: (S, G) operations - IPv4 overlay / IPv4 underlay"
801 echo "--------------------------------------------------------------"
815 echo "Control path: (S, G) operations - IPv6 overlay / IPv4 underlay"
816 echo "--------------------------------------------------------------"
830 echo "Control path: (S, G) operations - IPv4 overlay / IPv6 underlay"
831 echo "--------------------------------------------------------------"
845 echo "Control path: (S, G) operations - IPv6 overlay / IPv6 underlay"
846 echo "--------------------------------------------------------------"
856 for i in $(seq 0 $((max_grps - 1))); do
866 for i in $(seq 0 $((max_grps - 1))); do
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
891 ip -n $ns1 link add name vx-test${i} up type vxlan \
895 # Create batch file with MDB entries.
900 …echo "mdb add dev vx-test${i} port vx-test${i} grp $grp permanent dst ${remote_prefix}${j}" >> $ba…
906 bridge -n $ns1 -b $batch_file
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"
913 rm -rf $batch_file
924 echo "Control path: Large scale MDB dump - IPv4 overlay / IPv4 underlay"
925 echo "-----------------------------------------------------------------"
938 echo "Control path: Large scale MDB dump - IPv6 overlay / IPv4 underlay"
939 echo "-----------------------------------------------------------------"
952 echo "Control path: Large scale MDB dump - IPv4 overlay / IPv6 underlay"
953 echo "-----------------------------------------------------------------"
966 echo "Control path: Large scale MDB dump - IPv6 overlay / IPv6 underlay"
967 echo "-----------------------------------------------------------------"
978 echo "-------------------"
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_v…
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_v…
988 …run_cmd "bridge -n $ns1_v4 mdb add dev vx0 port vx0 grp 239.1.1.3 permanent proto bgp dst 198.51.1…
989 …run_cmd "bridge -n $ns1_v4 mdb add dev vx0 port vx0 grp 239.1.1.4 permanent proto zebra dst 198.51…
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_v…
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_v…
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_p…
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_p…
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 1…
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 …
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 ]]
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_v…
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_v…
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"
1019 run_cmd "bridge -n $ns1_v4 mdb flush dev vx0 port veth0"
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_v…
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_v…
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_v…
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_v…
1030 run_cmd "bridge -n $ns1_v4 mdb flush dev vx0 src_vni 10010"
1032 run_cmd "bridge -n $ns1_v4 -d -s mdb get dev vx0 grp 239.1.1.1 src_vni 10010"
1034 run_cmd "bridge -n $ns1_v4 -d -s mdb get dev vx0 grp 239.1.1.1 src_vni 10011"
1037 run_cmd "bridge -n $ns1_v4 mdb flush dev vx0"
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_v…
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_v…
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"
1049 run_cmd "bridge -n $ns1_v4 mdb flush dev vx0 nopermanent"
1055 …run_cmd "bridge -n $ns1_v4 mdb add dev vx0 port vx0 grp 239.1.1.1 permanent proto bgp dst 198.51.1…
1056 …run_cmd "bridge -n $ns1_v4 mdb add dev vx0 port vx0 grp 239.1.1.1 permanent proto zebra dst 198.51…
1058 run_cmd "bridge -n $ns1_v4 mdb flush dev vx0 proto bgp"
1060 run_cmd "bridge -n $ns1_v4 -d -s mdb get dev vx0 grp 239.1.1.1 src_vni 10010 | grep \"proto bgp\""
1062 …run_cmd "bridge -n $ns1_v4 -d -s mdb get dev vx0 grp 239.1.1.1 src_vni 10010 | grep \"proto zebra\…
1065 run_cmd "bridge -n $ns1_v4 mdb flush dev vx0"
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_v…
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_v…
1075 run_cmd "bridge -n $ns1_v4 mdb flush dev vx0 dst 198.51.100.2"
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"
1078 log_test $? 1 "Flush by specified destination IP - IPv4"
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"
1080 log_test $? 0 "Flush by unspecified destination IP - IPv4"
1082 run_cmd "bridge -n $ns1_v4 mdb flush dev vx0"
1086 …run_cmd "bridge -n $ns1_v4 mdb add dev vx0 port vx0 grp 239.1.1.1 permanent dst 2001:db8:1000::1 s…
1087 …run_cmd "bridge -n $ns1_v4 mdb add dev vx0 port vx0 grp 239.1.1.1 permanent dst 2001:db8:1000::2 s…
1089 run_cmd "bridge -n $ns1_v4 mdb flush dev vx0 dst 2001:db8:1000::2"
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:…
1092 log_test $? 1 "Flush by specified destination IP - IPv6"
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:…
1094 log_test $? 0 "Flush by unspecified destination IP - IPv6"
1096 run_cmd "bridge -n $ns1_v4 mdb flush dev vx0"
1101 …run_cmd "bridge -n $ns1_v4 mdb add dev vx0 port vx0 grp 239.1.1.1 permanent dst_port 11111 dst 198…
1102 …run_cmd "bridge -n $ns1_v4 mdb add dev vx0 port vx0 grp 239.1.1.1 permanent dst_port 22222 dst 198…
1104 run_cmd "bridge -n $ns1_v4 mdb flush dev vx0 dst_port 11111"
1106 …run_cmd "bridge -n $ns1_v4 -d -s mdb get dev vx0 grp 239.1.1.1 src_vni 10010 | grep \"dst_port 111…
1108 …run_cmd "bridge -n $ns1_v4 -d -s mdb get dev vx0 grp 239.1.1.1 src_vni 10010 | grep \"dst_port 222…
1111 run_cmd "bridge -n $ns1_v4 mdb flush dev vx0"
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_v…
1119 …run_cmd "bridge -n $ns1_v4 mdb add dev vx0 port vx0 grp 239.1.1.1 permanent dst_port 22222 dst 198…
1121 run_cmd "bridge -n $ns1_v4 mdb flush dev vx0 dst_port 4789"
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"
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"
1128 run_cmd "bridge -n $ns1_v4 mdb flush dev vx0"
1133 …run_cmd "bridge -n $ns1_v4 mdb add dev vx0 port vx0 grp 239.1.1.1 permanent vni 20010 dst 198.51.1…
1134 …run_cmd "bridge -n $ns1_v4 mdb add dev vx0 port vx0 grp 239.1.1.1 permanent vni 20011 dst 198.51.1…
1136 run_cmd "bridge -n $ns1_v4 mdb flush dev vx0 vni 20010"
1138 run_cmd "bridge -n $ns1_v4 -d -s mdb get dev vx0 grp 239.1.1.1 src_vni 10010 | grep \" vni 20010\""
1140 run_cmd "bridge -n $ns1_v4 -d -s mdb get dev vx0 grp 239.1.1.1 src_vni 10010 | grep \" vni 20011\""
1143 run_cmd "bridge -n $ns1_v4 mdb flush dev vx0"
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_v…
1151 …run_cmd "bridge -n $ns1_v4 mdb add dev vx0 port vx0 grp 239.1.1.1 permanent vni 20010 dst 198.51.1…
1153 run_cmd "bridge -n $ns1_v4 mdb flush dev vx0 vni 10010"
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"
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"
1160 run_cmd "bridge -n $ns1_v4 mdb flush dev vx0"
1164 run_cmd "bridge -n $ns1_v4 mdb flush dev vx0 vid 10"
1169 # Tests - Data path
1183 # Test that packets forwarded by the VXLAN MDB are encapsulated with
1188 run_cmd "tc -n $ns2 qdisc replace dev veth0 clsact"
1189 run_cmd "tc -n $ns2 qdisc replace dev vx0 clsact"
1190 run_cmd "ip -n $ns2 address replace $vtep1_ip/$plen dev lo"
1191 run_cmd "ip -n $ns2 address replace $vtep2_ip/$plen dev lo"
1194 …run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 grp $grp permanent dst $vtep1_ip src_vni 1001…
1195 …run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 grp $grp permanent dst $vtep2_ip src_vni 1002…
1197 …run_cmd "tc -n $ns2 filter replace dev vx0 ingress pref 1 handle 101 proto all flower enc_dst_ip $…
1198 run_cmd "ip netns exec $ns1 $mz br0.10 -A $src -B $grp -t udp sp=12345,dp=54321 -p 100 -c 1 -q"
1200 log_test $? 0 "Destination IP - match"
1202 run_cmd "ip netns exec $ns1 $mz br0.20 -A $src -B $grp -t udp sp=12345,dp=54321 -p 100 -c 1 -q"
1204 log_test $? 0 "Destination IP - no match"
1206 run_cmd "tc -n $ns2 filter del dev vx0 ingress pref 1 handle 101 flower"
1207 run_cmd "bridge -n $ns1 mdb del dev vx0 port vx0 grp $grp dst $vtep2_ip src_vni 10020"
1208 run_cmd "bridge -n $ns1 mdb del dev vx0 port vx0 grp $grp dst $vtep1_ip src_vni 10010"
1211 …run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 grp $grp permanent dst $vtep1_ip src_vni 1001…
1212 …run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 grp $grp permanent dst $vtep1_ip dst_port 111…
1214 …run_cmd "tc -n $ns2 filter replace dev veth0 ingress pref 1 handle 101 proto $enc_ethtype flower i…
1215 run_cmd "ip netns exec $ns1 $mz br0.10 -A $src -B $grp -t udp sp=12345,dp=54321 -p 100 -c 1 -q"
1217 log_test $? 0 "Default destination port - match"
1219 run_cmd "ip netns exec $ns1 $mz br0.20 -A $src -B $grp -t udp sp=12345,dp=54321 -p 100 -c 1 -q"
1221 log_test $? 0 "Default destination port - no match"
1223 …run_cmd "tc -n $ns2 filter replace dev veth0 ingress pref 1 handle 101 proto $enc_ethtype flower i…
1224 run_cmd "ip netns exec $ns1 $mz br0.20 -A $src -B $grp -t udp sp=12345,dp=54321 -p 100 -c 1 -q"
1226 log_test $? 0 "Non-default destination port - match"
1228 run_cmd "ip netns exec $ns1 $mz br0.10 -A $src -B $grp -t udp sp=12345,dp=54321 -p 100 -c 1 -q"
1230 log_test $? 0 "Non-default destination port - no match"
1232 run_cmd "tc -n $ns2 filter del dev veth0 ingress pref 1 handle 101 flower"
1233 run_cmd "bridge -n $ns1 mdb del dev vx0 port vx0 grp $grp dst $vtep1_ip src_vni 10020"
1234 run_cmd "bridge -n $ns1 mdb del dev vx0 port vx0 grp $grp dst $vtep1_ip src_vni 10010"
1237 …run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 grp $grp permanent dst $vtep1_ip src_vni 1001…
1238 …run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 grp $grp permanent dst $vtep1_ip src_vni 1002…
1240 …run_cmd "tc -n $ns2 filter replace dev vx0 ingress pref 1 handle 101 proto all flower enc_key_id 1…
1241 run_cmd "ip netns exec $ns1 $mz br0.10 -A $src -B $grp -t udp sp=12345,dp=54321 -p 100 -c 1 -q"
1243 log_test $? 0 "Default destination VNI - match"
1245 run_cmd "ip netns exec $ns1 $mz br0.20 -A $src -B $grp -t udp sp=12345,dp=54321 -p 100 -c 1 -q"
1247 log_test $? 0 "Default destination VNI - no match"
1249 …run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 grp $grp permanent dst $vtep1_ip vni 10020 sr…
1250 …run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 grp $grp permanent dst $vtep1_ip vni 10010 sr…
1252 …run_cmd "tc -n $ns2 filter replace dev vx0 ingress pref 1 handle 101 proto all flower enc_key_id 1…
1253 run_cmd "ip netns exec $ns1 $mz br0.10 -A $src -B $grp -t udp sp=12345,dp=54321 -p 100 -c 1 -q"
1255 log_test $? 0 "Non-default destination VNI - match"
1257 run_cmd "ip netns exec $ns1 $mz br0.20 -A $src -B $grp -t udp sp=12345,dp=54321 -p 100 -c 1 -q"
1259 log_test $? 0 "Non-default destination VNI - no match"
1261 run_cmd "tc -n $ns2 filter del dev vx0 ingress pref 1 handle 101 flower"
1262 run_cmd "bridge -n $ns1 mdb del dev vx0 port vx0 grp $grp dst $vtep1_ip src_vni 10020"
1263 run_cmd "bridge -n $ns1 mdb del dev vx0 port vx0 grp $grp dst $vtep1_ip src_vni 10010"
1278 echo "Data path: Encapsulation parameters - IPv4 overlay / IPv4 underlay"
1279 echo "------------------------------------------------------------------"
1297 echo "Data path: Encapsulation parameters - IPv6 overlay / IPv4 underlay"
1298 echo "------------------------------------------------------------------"
1301 $grp $src "mausezahn -6"
1316 echo "Data path: Encapsulation parameters - IPv4 overlay / IPv6 underlay"
1317 echo "------------------------------------------------------------------"
1335 echo "Data path: Encapsulation parameters - IPv6 overlay / IPv6 underlay"
1336 echo "------------------------------------------------------------------"
1339 $grp $src "mausezahn -6"
1354 # Install a (*, G) EXCLUDE MDB entry with one source and two remote
1360 run_cmd "tc -n $ns2 qdisc replace dev vx0 clsact"
1361 run_cmd "ip -n $ns2 address replace $vtep1_ip/$plen dev lo"
1362 run_cmd "ip -n $ns2 address replace $vtep2_ip/$plen dev lo"
1364 …run_cmd "tc -n $ns2 filter replace dev vx0 ingress pref 1 handle 101 proto all flower enc_dst_ip $…
1365 …run_cmd "tc -n $ns2 filter replace dev vx0 ingress pref 1 handle 102 proto all flower enc_dst_ip $…
1367 …run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 grp $grp permanent filter_mode exclude source…
1368 …run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 grp $grp permanent filter_mode exclude source…
1371 …run_cmd "ip netns exec $ns1 $mz br0.10 -A $invalid_src -B $grp -t udp sp=12345,dp=54321 -p 100 -c …
1373 log_test $? 0 "Block excluded source - first VTEP"
1375 log_test $? 0 "Block excluded source - second VTEP"
1378 …run_cmd "ip netns exec $ns1 $mz br0.10 -A $valid_src -B $grp -t udp sp=12345,dp=54321 -p 100 -c 1 …
1380 log_test $? 0 "Forward valid source - first VTEP"
1382 log_test $? 0 "Forward valid source - second VTEP"
1385 run_cmd "bridge -n $ns1 mdb del dev vx0 port vx0 grp $grp dst $vtep2_ip src_vni 10010"
1388 …run_cmd "ip netns exec $ns1 $mz br0.10 -A $invalid_src -B $grp -t udp sp=12345,dp=54321 -p 100 -c …
1390 log_test $? 0 "Block excluded source after removal - first VTEP"
1392 log_test $? 0 "Block excluded source after removal - second VTEP"
1395 …run_cmd "ip netns exec $ns1 $mz br0.10 -A $valid_src -B $grp -t udp sp=12345,dp=54321 -p 100 -c 1 …
1397 log_test $? 0 "Forward valid source after removal - first VTEP"
1399 log_test $? 0 "Forward valid source after removal - second VTEP"
1414 echo "Data path: (*, G) EXCLUDE - IR - IPv4 overlay / IPv4 underlay"
1415 echo "-------------------------------------------------------------"
1433 echo "Data path: (*, G) EXCLUDE - IR - IPv6 overlay / IPv4 underlay"
1434 echo "-------------------------------------------------------------"
1437 $valid_src $invalid_src "mausezahn -6"
1452 echo "Data path: (*, G) EXCLUDE - IR - IPv4 overlay / IPv6 underlay"
1453 echo "-------------------------------------------------------------"
1471 echo "Data path: (*, G) EXCLUDE - IR - IPv6 overlay / IPv6 underlay"
1472 echo "-------------------------------------------------------------"
1475 $valid_src $invalid_src "mausezahn -6"
1490 # Install a (*, G) INCLUDE MDB entry with one source and two remote
1496 run_cmd "tc -n $ns2 qdisc replace dev vx0 clsact"
1497 run_cmd "ip -n $ns2 address replace $vtep1_ip/$plen dev lo"
1498 run_cmd "ip -n $ns2 address replace $vtep2_ip/$plen dev lo"
1500 …run_cmd "tc -n $ns2 filter replace dev vx0 ingress pref 1 handle 101 proto all flower enc_dst_ip $…
1501 …run_cmd "tc -n $ns2 filter replace dev vx0 ingress pref 1 handle 102 proto all flower enc_dst_ip $…
1503 …run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 grp $grp permanent filter_mode include source…
1504 …run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 grp $grp permanent filter_mode include source…
1507 …run_cmd "ip netns exec $ns1 $mz br0.10 -A $invalid_src -B $grp -t udp sp=12345,dp=54321 -p 100 -c …
1509 log_test $? 0 "Block excluded source - first VTEP"
1511 log_test $? 0 "Block excluded source - second VTEP"
1514 …run_cmd "ip netns exec $ns1 $mz br0.10 -A $valid_src -B $grp -t udp sp=12345,dp=54321 -p 100 -c 1 …
1516 log_test $? 0 "Forward valid source - first VTEP"
1518 log_test $? 0 "Forward valid source - second VTEP"
1521 run_cmd "bridge -n $ns1 mdb del dev vx0 port vx0 grp $grp dst $vtep2_ip src_vni 10010"
1524 …run_cmd "ip netns exec $ns1 $mz br0.10 -A $invalid_src -B $grp -t udp sp=12345,dp=54321 -p 100 -c …
1526 log_test $? 0 "Block excluded source after removal - first VTEP"
1528 log_test $? 0 "Block excluded source after removal - second VTEP"
1531 …run_cmd "ip netns exec $ns1 $mz br0.10 -A $valid_src -B $grp -t udp sp=12345,dp=54321 -p 100 -c 1 …
1533 log_test $? 0 "Forward valid source after removal - first VTEP"
1535 log_test $? 0 "Forward valid source after removal - second VTEP"
1550 echo "Data path: (*, G) INCLUDE - IR - IPv4 overlay / IPv4 underlay"
1551 echo "-------------------------------------------------------------"
1569 echo "Data path: (*, G) INCLUDE - IR - IPv6 overlay / IPv4 underlay"
1570 echo "-------------------------------------------------------------"
1573 $valid_src $invalid_src "mausezahn -6"
1588 echo "Data path: (*, G) INCLUDE - IR - IPv4 overlay / IPv6 underlay"
1589 echo "-------------------------------------------------------------"
1607 echo "Data path: (*, G) INCLUDE - IR - IPv6 overlay / IPv6 underlay"
1608 echo "-------------------------------------------------------------"
1611 $valid_src $invalid_src "mausezahn -6"
1625 # Install a (*, G) EXCLUDE MDB entry with one source and one multicast
1630 run_cmd "tc -n $ns2 qdisc replace dev vx0 clsact"
1631 run_cmd "ip -n $ns2 address replace $mcast_grp/$plen dev veth0 autojoin"
1633 …run_cmd "tc -n $ns2 filter replace dev vx0 ingress pref 1 handle 101 proto all flower enc_dst_ip $…
1635 …run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 grp $grp permanent filter_mode exclude source…
1638 …run_cmd "ip netns exec $ns1 $mz br0.10 -A $invalid_src -B $grp -t udp sp=12345,dp=54321 -p 100 -c …
1643 …run_cmd "ip netns exec $ns1 $mz br0.10 -A $valid_src -B $grp -t udp sp=12345,dp=54321 -p 100 -c 1 …
1648 run_cmd "ip -n $ns2 address del $mcast_grp/$plen dev veth0"
1651 …run_cmd "ip netns exec $ns1 $mz br0.10 -A $valid_src -B $grp -t udp sp=12345,dp=54321 -p 100 -c 1 …
1653 log_test $? 0 "Receive of valid source after removal from group"
1667 echo "Data path: (*, G) EXCLUDE - P2MP - IPv4 overlay / IPv4 underlay"
1668 echo "---------------------------------------------------------------"
1685 echo "Data path: (*, G) EXCLUDE - P2MP - IPv6 overlay / IPv4 underlay"
1686 echo "---------------------------------------------------------------"
1689 $valid_src $invalid_src "mausezahn -6"
1703 echo "Data path: (*, G) EXCLUDE - P2MP - IPv4 overlay / IPv6 underlay"
1704 echo "---------------------------------------------------------------"
1721 echo "Data path: (*, G) EXCLUDE - P2MP - IPv6 overlay / IPv6 underlay"
1722 echo "---------------------------------------------------------------"
1725 $valid_src $invalid_src "mausezahn -6"
1739 # Install a (*, G) INCLUDE MDB entry with one source and one multicast
1744 run_cmd "tc -n $ns2 qdisc replace dev vx0 clsact"
1745 run_cmd "ip -n $ns2 address replace $mcast_grp/$plen dev veth0 autojoin"
1747 …run_cmd "tc -n $ns2 filter replace dev vx0 ingress pref 1 handle 101 proto all flower enc_dst_ip $…
1749 …run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 grp $grp permanent filter_mode include source…
1752 …run_cmd "ip netns exec $ns1 $mz br0.10 -A $invalid_src -B $grp -t udp sp=12345,dp=54321 -p 100 -c …
1757 …run_cmd "ip netns exec $ns1 $mz br0.10 -A $valid_src -B $grp -t udp sp=12345,dp=54321 -p 100 -c 1 …
1762 run_cmd "ip -n $ns2 address del $mcast_grp/$plen dev veth0"
1765 …run_cmd "ip netns exec $ns1 $mz br0.10 -A $valid_src -B $grp -t udp sp=12345,dp=54321 -p 100 -c 1 …
1767 log_test $? 0 "Receive of valid source after removal from group"
1781 echo "Data path: (*, G) INCLUDE - P2MP - IPv4 overlay / IPv4 underlay"
1782 echo "---------------------------------------------------------------"
1799 echo "Data path: (*, G) INCLUDE - P2MP - IPv6 overlay / IPv4 underlay"
1800 echo "---------------------------------------------------------------"
1803 $valid_src $invalid_src "mausezahn -6"
1817 echo "Data path: (*, G) INCLUDE - P2MP - IPv4 overlay / IPv6 underlay"
1818 echo "---------------------------------------------------------------"
1835 echo "Data path: (*, G) INCLUDE - P2MP - IPv6 overlay / IPv6 underlay"
1836 echo "---------------------------------------------------------------"
1839 $valid_src $invalid_src "mausezahn -6"
1853 # When P2MP tunnels are used with optimized inter-subnet multicast
1871 # [1] https://datatracker.ietf.org/doc/html/draft-ietf-bess-evpn-irb-mcast
1873 run_cmd "tc -n $ns2 qdisc replace dev br0.4000 clsact"
1874 run_cmd "ip -n $ns2 address replace $mcast_grp/$plen dev veth0 autojoin"
1875 …run_cmd "tc -n $ns2 filter replace dev br0.4000 ingress pref 1 handle 101 proto $proto flower src_…
1877 …run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 grp $grp src $src permanent dst $mcast_grp sr…
1880 run_cmd "bridge -n $ns2 vlan del vid 10 dev vx0"
1885 run_cmd "ip netns exec $ns1 $mz br0.10 -A $src -B $grp -t udp sp=12345,dp=54321 -p 100 -c 1 -q"
1887 log_test $? 0 "Egress VNI translation - PVID configured"
1891 run_cmd "bridge -n $ns2 vlan add vid 4000 dev vx0"
1892 run_cmd "ip netns exec $ns1 $mz br0.10 -A $src -B $grp -t udp sp=12345,dp=54321 -p 100 -c 1 -q"
1894 log_test $? 0 "Egress VNI translation - no PVID configured"
1897 run_cmd "bridge -n $ns2 vlan add vid 4000 dev vx0 pvid"
1898 run_cmd "ip netns exec $ns1 $mz br0.10 -A $src -B $grp -t udp sp=12345,dp=54321 -p 100 -c 1 -q"
1900 log_test $? 0 "Egress VNI translation - PVID reconfigured"
1914 echo "Data path: Egress VNI translation - IPv4 overlay / IPv4 underlay"
1915 echo "----------------------------------------------------------------"
1932 echo "Data path: Egress VNI translation - IPv6 overlay / IPv4 underlay"
1933 echo "----------------------------------------------------------------"
1936 $src "mausezahn -6"
1950 echo "Data path: Egress VNI translation - IPv4 overlay / IPv6 underlay"
1951 echo "----------------------------------------------------------------"
1968 echo "Data path: Egress VNI translation - IPv6 overlay / IPv6 underlay"
1969 echo "----------------------------------------------------------------"
1972 $src "mausezahn -6"
1993 # Install all-zeros (catchall) MDB entries for IPv4 and IPv6 traffic
1995 # which is not link-local. Also make sure that each entry only forwards
1998 # Associate two different VTEPs with one all-zeros MDB entry: Two with
2000 …run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 grp 0.0.0.0 permanent dst $vtep1_ip src_vni 1…
2001 …run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 grp 0.0.0.0 permanent dst $vtep2_ip src_vni 1…
2002 run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 grp :: permanent dst $vtep3_ip src_vni 10010"
2003 run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 grp :: permanent dst $vtep4_ip src_vni 10010"
2005 # Associate one VTEP from each set with a regular MDB entry: One with
2007 …run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 grp $ipv4_grp permanent dst $vtep1_ip src_vni…
2008 …run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 grp $ipv6_grp permanent dst $vtep3_ip src_vni…
2011 run_cmd "tc -n $ns2 qdisc replace dev vx0 clsact"
2012 …run_cmd "tc -n $ns2 filter replace dev vx0 ingress pref 1 handle 101 proto all flower enc_dst_ip $…
2013 …run_cmd "tc -n $ns2 filter replace dev vx0 ingress pref 1 handle 102 proto all flower enc_dst_ip $…
2014 …run_cmd "tc -n $ns2 filter replace dev vx0 ingress pref 1 handle 103 proto all flower enc_dst_ip $…
2015 …run_cmd "tc -n $ns2 filter replace dev vx0 ingress pref 1 handle 104 proto all flower enc_dst_ip $…
2019 run_cmd "ip -n $ns2 address replace $vtep1_ip/$plen dev lo"
2020 run_cmd "ip -n $ns2 address replace $vtep2_ip/$plen dev lo"
2021 run_cmd "ip -n $ns2 address replace $vtep3_ip/$plen dev lo"
2022 run_cmd "ip -n $ns2 address replace $vtep4_ip/$plen dev lo"
2026 …un_cmd "ip netns exec $ns1 mausezahn br0.10 -A $ipv4_src -B $ipv4_grp -t udp sp=12345,dp=54321 -p …
2028 log_test $? 0 "Registered IPv4 multicast - first VTEP"
2030 log_test $? 0 "Registered IPv4 multicast - second VTEP"
2032 # Send unregistered IPv4 multicast that is not link-local and make sure
2034 …cmd "ip netns exec $ns1 mausezahn br0.10 -A $ipv4_src -B $ipv4_unreg_grp -t udp sp=12345,dp=54321 …
2036 log_test $? 0 "Unregistered IPv4 multicast - first VTEP"
2038 log_test $? 0 "Unregistered IPv4 multicast - second VTEP"
2040 # Send IPv4 link-local multicast traffic and make sure it does not
2042 …n_cmd "ip netns exec $ns1 mausezahn br0.10 -A $ipv4_src -B $ipv4_ll_grp -t udp sp=12345,dp=54321 -…
2044 log_test $? 0 "Link-local IPv4 multicast - first VTEP"
2046 log_test $? 0 "Link-local IPv4 multicast - second VTEP"
2050 …ns exec $ns1 mausezahn br0.10 -a own -b 00:11:22:33:44:55 -A $ipv4_src -B $ipv4_grp -t udp sp=1234…
2052 log_test $? 0 "Registered IPv4 multicast with a unicast MAC - first VTEP"
2054 log_test $? 0 "Registered IPv4 multicast with a unicast MAC - second VTEP"
2058 …ip netns exec $ns1 mausezahn br0.10 -a own -b bcast -A $ipv4_src -B $ipv4_grp -t udp sp=12345,dp=5…
2060 log_test $? 0 "Registered IPv4 multicast with a broadcast MAC - first VTEP"
2062 log_test $? 0 "Registered IPv4 multicast with a broadcast MAC - second VTEP"
2067 log_test $? 0 "IPv4 traffic - third VTEP"
2069 log_test $? 0 "IPv4 traffic - fourth VTEP"
2072 …run_cmd "tc -n $ns2 filter replace dev vx0 ingress pref 1 handle 101 proto all flower enc_dst_ip $…
2073 …run_cmd "tc -n $ns2 filter replace dev vx0 ingress pref 1 handle 102 proto all flower enc_dst_ip $…
2077 …run_cmd "ip netns exec $ns1 mausezahn -6 br0.10 -A $ipv6_src -B $ipv6_grp -t udp sp=12345,dp=54321…
2079 log_test $? 0 "Registered IPv6 multicast - third VTEP"
2081 log_test $? 0 "Registered IPv6 multicast - fourth VTEP"
2083 # Send unregistered IPv6 multicast that is not link-local and make sure
2085 …n_cmd "ip netns exec $ns1 mausezahn -6 br0.10 -A $ipv6_src -B $ipv6_unreg_grp -t udp sp=12345,dp=5…
2087 log_test $? 0 "Unregistered IPv6 multicast - third VTEP"
2089 log_test $? 0 "Unregistered IPv6 multicast - fourth VTEP"
2091 # Send IPv6 link-local multicast traffic and make sure it does not
2093 …run_cmd "ip netns exec $ns1 mausezahn -6 br0.10 -A $ipv6_src -B $ipv6_ll_grp -t udp sp=12345,dp=54…
2095 log_test $? 0 "Link-local IPv6 multicast - third VTEP"
2097 log_test $? 0 "Link-local IPv6 multicast - fourth VTEP"
2101 …etns exec $ns1 mausezahn -6 br0.10 -a own -b 00:11:22:33:44:55 -A $ipv6_src -B $ipv6_grp -t udp sp…
2103 log_test $? 0 "Registered IPv6 multicast with a unicast MAC - third VTEP"
2105 log_test $? 0 "Registered IPv6 multicast with a unicast MAC - fourth VTEP"
2109 … "ip netns exec $ns1 mausezahn -6 br0.10 -a own -b bcast -A $ipv6_src -B $ipv6_grp -t udp sp=12345…
2111 log_test $? 0 "Registered IPv6 multicast with a broadcast MAC - third VTEP"
2113 log_test $? 0 "Registered IPv6 multicast with a broadcast MAC - fourth VTEP"
2118 log_test $? 0 "IPv6 traffic - first VTEP"
2120 log_test $? 0 "IPv6 traffic - second VTEP"
2134 echo "Data path: All-zeros MDB entry - IPv4 underlay"
2135 echo "----------------------------------------------"
2152 echo "Data path: All-zeros MDB entry - IPv6 underlay"
2153 echo "----------------------------------------------"
2171 # Install an MDB entry and an FDB entry and make sure that the FDB
2172 # entry only forwards traffic that was not forwarded by the MDB.
2174 # Associate the MDB entry with one VTEP and the FDB entry with another
2176 …run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 grp $grp permanent dst $vtep1_ip src_vni 1001…
2177 run_cmd "bridge -n $ns1 fdb add 00:00:00:00:00:00 dev vx0 self static dst $vtep2_ip src_vni 10010"
2180 run_cmd "tc -n $ns2 qdisc replace dev vx0 clsact"
2181 …run_cmd "tc -n $ns2 filter replace dev vx0 ingress pref 1 handle 101 proto $proto flower ip_proto …
2182 …run_cmd "tc -n $ns2 filter replace dev vx0 ingress pref 1 handle 102 proto $proto flower ip_proto …
2186 run_cmd "ip -n $ns2 address replace $vtep1_ip/$plen dev lo"
2187 run_cmd "ip -n $ns2 address replace $vtep2_ip/$plen dev lo"
2189 # Send IP multicast traffic and make sure it is forwarded by the MDB
2191 run_cmd "ip netns exec $ns1 $mz br0.10 -A $src -B $grp -t udp sp=12345,dp=54321 -p 100 -c 1 -q"
2193 log_test $? 0 "IP multicast - first VTEP"
2195 log_test $? 0 "IP multicast - second VTEP"
2199 …run_cmd "ip netns exec $ns1 $mz br0.10 -a own -b bcast -A $src -B $grp -t udp sp=12345,dp=54321 -p…
2201 log_test $? 0 "Broadcast - first VTEP"
2203 log_test $? 0 "Broadcast - second VTEP"
2205 # Remove the MDB entry and make sure that IP multicast is now forwarded
2207 run_cmd "bridge -n $ns1 mdb del dev vx0 port vx0 grp $grp dst $vtep1_ip src_vni 10010"
2208 run_cmd "ip netns exec $ns1 $mz br0.10 -A $src -B $grp -t udp sp=12345,dp=54321 -p 100 -c 1 -q"
2210 log_test $? 0 "IP multicast after removal - first VTEP"
2212 log_test $? 0 "IP multicast after removal - second VTEP"
2227 echo "Data path: MDB with FDB - IPv4 overlay / IPv4 underlay"
2228 echo "------------------------------------------------------"
2246 echo "Data path: MDB with FDB - IPv6 overlay / IPv4 underlay"
2247 echo "------------------------------------------------------"
2250 "mausezahn -6"
2265 echo "Data path: MDB with FDB - IPv4 overlay / IPv6 underlay"
2266 echo "------------------------------------------------------"
2284 echo "Data path: MDB with FDB - IPv6 overlay / IPv6 underlay"
2285 echo "------------------------------------------------------"
2288 "mausezahn -6"
2298 bridge -n $ns1 mdb del dev vx0 port vx0 grp $grp1 dst $vtep1_ip src_vni 10010
2299 bridge -n $ns1 mdb add dev vx0 port vx0 grp $grp1 permanent dst $vtep1_ip src_vni 10010
2311 bridge -n $ns1 mdb del dev vx0 port vx0 grp $grp2 dst $vtep1_ip src_vni 10010
2312 bridge -n $ns1 mdb add dev vx0 port vx0 grp $grp2 permanent dst $vtep1_ip src_vni 10010
2313 bridge -n $ns1 mdb replace dev vx0 port vx0 grp $grp2 permanent dst $vtep2_ip src_vni 10010
2331 # Continuously send two streams that are forwarded by two different MDB
2333 # allows us to test that the data path does not use freed MDB entry
2339 # Create the MDB entries that will be continuously deleted / replaced.
2340 …run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 grp $grp1 permanent dst $vtep1_ip src_vni 100…
2341 …run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 grp $grp2 permanent dst $vtep1_ip src_vni 100…
2342 …run_cmd "bridge -n $ns1 mdb replace dev vx0 port vx0 grp $grp2 permanent dst $vtep2_ip src_vni 100…
2348 ip netns exec $ns1 $mz br0.10 -A $src -B $grp1 -t udp sp=12345,dp=54321 -p 100 -c 0 -q &
2350 ip netns exec $ns1 $mz br0.10 -A $src -B $grp2 -t udp sp=12345,dp=54321 -p 100 -c 0 -q &
2354 kill -9 $pid1 $pid2 $pid3 $pid4
2370 echo "Data path: MDB torture test - IPv4 overlay / IPv4 underlay"
2371 echo "----------------------------------------------------------"
2387 echo "Data path: MDB torture test - IPv6 overlay / IPv4 underlay"
2388 echo "----------------------------------------------------------"
2391 "mausezahn -6"
2404 echo "Data path: MDB torture test - IPv4 overlay / IPv6 underlay"
2405 echo "----------------------------------------------------------"
2421 echo "Data path: MDB torture test - IPv6 overlay / IPv6 underlay"
2422 echo "----------------------------------------------------------"
2425 "mausezahn -6"
2436 -t <test> Test(s) to run (default: all)
2438 -c Control path tests only
2439 -d Data path tests only
2440 -p Pause on fail
2441 -P Pause after each test before cleanup
2442 -v Verbose mode (show commands and output)
2467 if [ "$(id -u)" -ne 0 ];then
2472 if [ ! -x "$(command -v ip)" ]; then
2477 if [ ! -x "$(command -v bridge)" ]; then
2482 if [ ! -x "$(command -v mausezahn)" ]; then
2487 if [ ! -x "$(command -v jq)" ]; then
2492 bridge mdb help 2>&1 | grep -q "flush"
2493 if [ $? -ne 0 ]; then
2494 echo "SKIP: iproute2 bridge too old, missing VXLAN MDB flush support"