| #!/bin/bash |
| # SPDX-License-Identifier: GPL-2.0 |
| |
| # Test that a link aggregation device (bonding, team) removes the hardware |
| # addresses that it adds on its underlying devices. |
| test_LAG_cleanup() |
| { |
| local driver=$1 |
| local mode=$2 |
| local ucaddr="02:00:00:12:34:56" |
| local addr6="fe80::78:9abc/64" |
| local mcaddr="33:33:ff:78:9a:bc" |
| local name |
| |
| ip link add dummy1 type dummy |
| ip link add dummy2 type dummy |
| if [ "$driver" = "bonding" ]; then |
| name="bond1" |
| ip link add "$name" up type bond mode "$mode" |
| ip link set dev dummy1 master "$name" |
| ip link set dev dummy2 master "$name" |
| elif [ "$driver" = "team" ]; then |
| name="team0" |
| teamd -d -c ' |
| { |
| "device": "'"$name"'", |
| "runner": { |
| "name": "'"$mode"'" |
| }, |
| "ports": { |
| "dummy1": |
| {}, |
| "dummy2": |
| {} |
| } |
| } |
| ' |
| ip link set dev "$name" up |
| else |
| check_err 1 |
| log_test test_LAG_cleanup ": unknown driver \"$driver\"" |
| return |
| fi |
| |
| # Used to test dev->uc handling |
| ip link add mv0 link "$name" up address "$ucaddr" type macvlan |
| # Used to test dev->mc handling |
| ip address add "$addr6" dev "$name" |
| |
| # Check that addresses were added as expected |
| (grep_bridge_fdb "$ucaddr" bridge fdb show dev dummy1 || |
| grep_bridge_fdb "$ucaddr" bridge fdb show dev dummy2) >/dev/null |
| check_err $? "macvlan unicast address not found on a slave" |
| |
| # mcaddr is added asynchronously by addrconf_dad_work(), use busywait |
| (busywait 10000 grep_bridge_fdb "$mcaddr" bridge fdb show dev dummy1 || |
| grep_bridge_fdb "$mcaddr" bridge fdb show dev dummy2) >/dev/null |
| check_err $? "IPv6 solicited-node multicast mac address not found on a slave" |
| |
| ip link set dev "$name" down |
| ip link del "$name" |
| |
| not grep_bridge_fdb "$ucaddr" bridge fdb show >/dev/null |
| check_err $? "macvlan unicast address still present on a slave" |
| |
| not grep_bridge_fdb "$mcaddr" bridge fdb show >/dev/null |
| check_err $? "IPv6 solicited-node multicast mac address still present on a slave" |
| |
| cleanup |
| |
| log_test "$driver cleanup mode $mode" |
| } |