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