mirror of
https://gitee.com/bianbu-linux/linux-6.6
synced 2025-04-24 14:07:52 -04:00
net: Add tests for bonding and team address list management
Test that the bonding and team drivers clean up an underlying device's address lists (dev->uc, dev->mc) when the aggregated device is deleted. Test addition and removal of the LACPDU multicast address on underlying devices by the bonding driver. v2: * add lag_lib.sh to TEST_FILES v3: * extend bond_listen_lacpdu_multicast test to init_state up and down cases * remove some superfluous shell syntax and 'set dev ... up' commands Signed-off-by: Benjamin Poirier <bpoirier@nvidia.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
bd60234222
commit
bbb774d921
9 changed files with 237 additions and 1 deletions
|
@ -19948,6 +19948,7 @@ S: Supported
|
||||||
F: drivers/net/team/
|
F: drivers/net/team/
|
||||||
F: include/linux/if_team.h
|
F: include/linux/if_team.h
|
||||||
F: include/uapi/linux/if_team.h
|
F: include/uapi/linux/if_team.h
|
||||||
|
F: tools/testing/selftests/net/team/
|
||||||
|
|
||||||
TECHNOLOGIC SYSTEMS TS-5500 PLATFORM SUPPORT
|
TECHNOLOGIC SYSTEMS TS-5500 PLATFORM SUPPORT
|
||||||
M: "Savoir-faire Linux Inc." <kernel@savoirfairelinux.com>
|
M: "Savoir-faire Linux Inc." <kernel@savoirfairelinux.com>
|
||||||
|
|
|
@ -13,6 +13,7 @@ TARGETS += damon
|
||||||
TARGETS += drivers/dma-buf
|
TARGETS += drivers/dma-buf
|
||||||
TARGETS += drivers/s390x/uvdevice
|
TARGETS += drivers/s390x/uvdevice
|
||||||
TARGETS += drivers/net/bonding
|
TARGETS += drivers/net/bonding
|
||||||
|
TARGETS += drivers/net/team
|
||||||
TARGETS += efivarfs
|
TARGETS += efivarfs
|
||||||
TARGETS += exec
|
TARGETS += exec
|
||||||
TARGETS += filesystems
|
TARGETS += filesystems
|
||||||
|
|
|
@ -1,6 +1,9 @@
|
||||||
# SPDX-License-Identifier: GPL-2.0
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
# Makefile for net selftests
|
# Makefile for net selftests
|
||||||
|
|
||||||
TEST_PROGS := bond-break-lacpdu-tx.sh
|
TEST_PROGS := bond-break-lacpdu-tx.sh \
|
||||||
|
dev_addr_lists.sh
|
||||||
|
|
||||||
|
TEST_FILES := lag_lib.sh
|
||||||
|
|
||||||
include ../../../lib.mk
|
include ../../../lib.mk
|
||||||
|
|
|
@ -1 +1,2 @@
|
||||||
CONFIG_BONDING=y
|
CONFIG_BONDING=y
|
||||||
|
CONFIG_MACVLAN=y
|
||||||
|
|
109
tools/testing/selftests/drivers/net/bonding/dev_addr_lists.sh
Executable file
109
tools/testing/selftests/drivers/net/bonding/dev_addr_lists.sh
Executable file
|
@ -0,0 +1,109 @@
|
||||||
|
#!/bin/bash
|
||||||
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
|
#
|
||||||
|
# Test bond device handling of addr lists (dev->uc, mc)
|
||||||
|
#
|
||||||
|
|
||||||
|
ALL_TESTS="
|
||||||
|
bond_cleanup_mode1
|
||||||
|
bond_cleanup_mode4
|
||||||
|
bond_listen_lacpdu_multicast_case_down
|
||||||
|
bond_listen_lacpdu_multicast_case_up
|
||||||
|
"
|
||||||
|
|
||||||
|
REQUIRE_MZ=no
|
||||||
|
NUM_NETIFS=0
|
||||||
|
lib_dir=$(dirname "$0")
|
||||||
|
source "$lib_dir"/../../../net/forwarding/lib.sh
|
||||||
|
|
||||||
|
source "$lib_dir"/lag_lib.sh
|
||||||
|
|
||||||
|
|
||||||
|
destroy()
|
||||||
|
{
|
||||||
|
local ifnames=(dummy1 dummy2 bond1 mv0)
|
||||||
|
local ifname
|
||||||
|
|
||||||
|
for ifname in "${ifnames[@]}"; do
|
||||||
|
ip link del "$ifname" &>/dev/null
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
cleanup()
|
||||||
|
{
|
||||||
|
pre_cleanup
|
||||||
|
|
||||||
|
destroy
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# bond driver control paths vary between modes that have a primary slave
|
||||||
|
# (bond_uses_primary()) and others. Test both kinds of modes.
|
||||||
|
|
||||||
|
bond_cleanup_mode1()
|
||||||
|
{
|
||||||
|
RET=0
|
||||||
|
|
||||||
|
test_LAG_cleanup "bonding" "active-backup"
|
||||||
|
}
|
||||||
|
|
||||||
|
bond_cleanup_mode4() {
|
||||||
|
RET=0
|
||||||
|
|
||||||
|
test_LAG_cleanup "bonding" "802.3ad"
|
||||||
|
}
|
||||||
|
|
||||||
|
bond_listen_lacpdu_multicast()
|
||||||
|
{
|
||||||
|
# Initial state of bond device, up | down
|
||||||
|
local init_state=$1
|
||||||
|
local lacpdu_mc="01:80:c2:00:00:02"
|
||||||
|
|
||||||
|
ip link add dummy1 type dummy
|
||||||
|
ip link add bond1 "$init_state" type bond mode 802.3ad
|
||||||
|
ip link set dev dummy1 master bond1
|
||||||
|
if [ "$init_state" = "down" ]; then
|
||||||
|
ip link set dev bond1 up
|
||||||
|
fi
|
||||||
|
|
||||||
|
grep_bridge_fdb "$lacpdu_mc" bridge fdb show brport dummy1 >/dev/null
|
||||||
|
check_err $? "LACPDU multicast address not present on slave (1)"
|
||||||
|
|
||||||
|
ip link set dev bond1 down
|
||||||
|
|
||||||
|
not grep_bridge_fdb "$lacpdu_mc" bridge fdb show brport dummy1 >/dev/null
|
||||||
|
check_err $? "LACPDU multicast address still present on slave"
|
||||||
|
|
||||||
|
ip link set dev bond1 up
|
||||||
|
|
||||||
|
grep_bridge_fdb "$lacpdu_mc" bridge fdb show brport dummy1 >/dev/null
|
||||||
|
check_err $? "LACPDU multicast address not present on slave (2)"
|
||||||
|
|
||||||
|
cleanup
|
||||||
|
|
||||||
|
log_test "bonding LACPDU multicast address to slave (from bond $init_state)"
|
||||||
|
}
|
||||||
|
|
||||||
|
# The LACPDU mc addr is added by different paths depending on the initial state
|
||||||
|
# of the bond when enslaving a device. Test both cases.
|
||||||
|
|
||||||
|
bond_listen_lacpdu_multicast_case_down()
|
||||||
|
{
|
||||||
|
RET=0
|
||||||
|
|
||||||
|
bond_listen_lacpdu_multicast "down"
|
||||||
|
}
|
||||||
|
|
||||||
|
bond_listen_lacpdu_multicast_case_up()
|
||||||
|
{
|
||||||
|
RET=0
|
||||||
|
|
||||||
|
bond_listen_lacpdu_multicast "up"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
trap cleanup EXIT
|
||||||
|
|
||||||
|
tests_run
|
||||||
|
|
||||||
|
exit "$EXIT_STATUS"
|
61
tools/testing/selftests/drivers/net/bonding/lag_lib.sh
Normal file
61
tools/testing/selftests/drivers/net/bonding/lag_lib.sh
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
#!/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"
|
||||||
|
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"
|
||||||
|
}
|
6
tools/testing/selftests/drivers/net/team/Makefile
Normal file
6
tools/testing/selftests/drivers/net/team/Makefile
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
|
# Makefile for net selftests
|
||||||
|
|
||||||
|
TEST_PROGS := dev_addr_lists.sh
|
||||||
|
|
||||||
|
include ../../../lib.mk
|
3
tools/testing/selftests/drivers/net/team/config
Normal file
3
tools/testing/selftests/drivers/net/team/config
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
CONFIG_NET_TEAM=y
|
||||||
|
CONFIG_NET_TEAM_MODE_LOADBALANCE=y
|
||||||
|
CONFIG_MACVLAN=y
|
51
tools/testing/selftests/drivers/net/team/dev_addr_lists.sh
Executable file
51
tools/testing/selftests/drivers/net/team/dev_addr_lists.sh
Executable file
|
@ -0,0 +1,51 @@
|
||||||
|
#!/bin/bash
|
||||||
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
|
#
|
||||||
|
# Test team device handling of addr lists (dev->uc, mc)
|
||||||
|
#
|
||||||
|
|
||||||
|
ALL_TESTS="
|
||||||
|
team_cleanup
|
||||||
|
"
|
||||||
|
|
||||||
|
REQUIRE_MZ=no
|
||||||
|
NUM_NETIFS=0
|
||||||
|
lib_dir=$(dirname "$0")
|
||||||
|
source "$lib_dir"/../../../net/forwarding/lib.sh
|
||||||
|
|
||||||
|
source "$lib_dir"/../bonding/lag_lib.sh
|
||||||
|
|
||||||
|
|
||||||
|
destroy()
|
||||||
|
{
|
||||||
|
local ifnames=(dummy0 dummy1 team0 mv0)
|
||||||
|
local ifname
|
||||||
|
|
||||||
|
for ifname in "${ifnames[@]}"; do
|
||||||
|
ip link del "$ifname" &>/dev/null
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
cleanup()
|
||||||
|
{
|
||||||
|
pre_cleanup
|
||||||
|
|
||||||
|
destroy
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
team_cleanup()
|
||||||
|
{
|
||||||
|
RET=0
|
||||||
|
|
||||||
|
test_LAG_cleanup "team" "lacp"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
require_command teamd
|
||||||
|
|
||||||
|
trap cleanup EXIT
|
||||||
|
|
||||||
|
tests_run
|
||||||
|
|
||||||
|
exit "$EXIT_STATUS"
|
Loading…
Add table
Add a link
Reference in a new issue