1#!/bin/bash 2# SPDX-License-Identifier: GPL-2.0 3# 4# Test bond device handling of addr lists (dev->uc, mc) 5# 6 7ALL_TESTS=" 8 bond_cleanup_mode1 9 bond_cleanup_mode4 10 bond_listen_lacpdu_multicast_case_down 11 bond_listen_lacpdu_multicast_case_up 12" 13 14REQUIRE_MZ=no 15NUM_NETIFS=0 16lib_dir=$(dirname "$0") 17source "$lib_dir"/net_forwarding_lib.sh 18 19source "$lib_dir"/lag_lib.sh 20 21 22destroy() 23{ 24 local ifnames=(dummy1 dummy2 bond1 mv0) 25 local ifname 26 27 for ifname in "${ifnames[@]}"; do 28 ip link del "$ifname" &>/dev/null 29 done 30} 31 32cleanup() 33{ 34 pre_cleanup 35 36 destroy 37} 38 39 40# bond driver control paths vary between modes that have a primary slave 41# (bond_uses_primary()) and others. Test both kinds of modes. 42 43bond_cleanup_mode1() 44{ 45 RET=0 46 47 test_LAG_cleanup "bonding" "active-backup" 48} 49 50bond_cleanup_mode4() { 51 RET=0 52 53 test_LAG_cleanup "bonding" "802.3ad" 54} 55 56bond_listen_lacpdu_multicast() 57{ 58 # Initial state of bond device, up | down 59 local init_state=$1 60 local lacpdu_mc="01:80:c2:00:00:02" 61 62 ip link add dummy1 type dummy 63 ip link add bond1 "$init_state" type bond mode 802.3ad 64 ip link set dev dummy1 master bond1 65 if [ "$init_state" = "down" ]; then 66 ip link set dev bond1 up 67 fi 68 69 grep_bridge_fdb "$lacpdu_mc" bridge fdb show brport dummy1 >/dev/null 70 check_err $? "LACPDU multicast address not present on slave (1)" 71 72 ip link set dev bond1 down 73 74 not grep_bridge_fdb "$lacpdu_mc" bridge fdb show brport dummy1 >/dev/null 75 check_err $? "LACPDU multicast address still present on slave" 76 77 ip link set dev bond1 up 78 79 grep_bridge_fdb "$lacpdu_mc" bridge fdb show brport dummy1 >/dev/null 80 check_err $? "LACPDU multicast address not present on slave (2)" 81 82 cleanup 83 84 log_test "bonding LACPDU multicast address to slave (from bond $init_state)" 85} 86 87# The LACPDU mc addr is added by different paths depending on the initial state 88# of the bond when enslaving a device. Test both cases. 89 90bond_listen_lacpdu_multicast_case_down() 91{ 92 RET=0 93 94 bond_listen_lacpdu_multicast "down" 95} 96 97bond_listen_lacpdu_multicast_case_up() 98{ 99 RET=0 100 101 bond_listen_lacpdu_multicast "up" 102} 103 104 105trap cleanup EXIT 106 107tests_run 108 109exit "$EXIT_STATUS" 110