On Fri, 2022-11-18 at 15:30 -0500, Jonathan Toppins wrote:
Verify when a bond is configured with {up,down}delay and the link state of slave members flaps if there are no remaining members up the bond should immediately select a member to bring up. (from bonding.txt section 13.1 paragraph 4)
Suggested-by: Liang Li liali@redhat.com Signed-off-by: Jonathan Toppins jtoppins@redhat.com
.../selftests/drivers/net/bonding/Makefile | 4 +- .../selftests/drivers/net/bonding/lag_lib.sh | 107 ++++++++++++++++++ .../net/bonding/mode-1-recovery-updelay.sh | 45 ++++++++ .../net/bonding/mode-2-recovery-updelay.sh | 45 ++++++++ .../selftests/drivers/net/bonding/settings | 2 +- 5 files changed, 201 insertions(+), 2 deletions(-) create mode 100755 tools/testing/selftests/drivers/net/bonding/mode-1-recovery-updelay.sh create mode 100755 tools/testing/selftests/drivers/net/bonding/mode-2-recovery-updelay.sh
diff --git a/tools/testing/selftests/drivers/net/bonding/Makefile b/tools/testing/selftests/drivers/net/bonding/Makefile index 6b8d2e2f23c2..0f3921908b07 100644 --- a/tools/testing/selftests/drivers/net/bonding/Makefile +++ b/tools/testing/selftests/drivers/net/bonding/Makefile @@ -5,7 +5,9 @@ TEST_PROGS := \ bond-arp-interval-causes-panic.sh \ bond-break-lacpdu-tx.sh \ bond-lladdr-target.sh \
- dev_addr_lists.sh
- dev_addr_lists.sh \
- mode-1-recovery-updelay.sh \
- mode-2-recovery-updelay.sh
TEST_FILES := \ lag_lib.sh \ diff --git a/tools/testing/selftests/drivers/net/bonding/lag_lib.sh b/tools/testing/selftests/drivers/net/bonding/lag_lib.sh index 16c7fb858ac1..6dc9af1f2428 100644 --- a/tools/testing/selftests/drivers/net/bonding/lag_lib.sh +++ b/tools/testing/selftests/drivers/net/bonding/lag_lib.sh @@ -1,6 +1,8 @@ #!/bin/bash # SPDX-License-Identifier: GPL-2.0 +NAMESPACES=""
# Test that a link aggregation device (bonding, team) removes the hardware # addresses that it adds on its underlying devices. test_LAG_cleanup() @@ -59,3 +61,108 @@ test_LAG_cleanup() log_test "$driver cleanup mode $mode" }
+# Build a generic 2 node net namespace with 2 connections +# between the namespaces +# +# +-----------+ +-----------+ +# | node1 | | node2 | +# | | | | +# | | | | +# | eth0 +-------+ eth0 | +# | | | | +# | eth1 +-------+ eth1 | +# | | | | +# +-----------+ +-----------+ +lag_setup2x2() +{
- local state=${1:-down}
- local namespaces="lag_node1 lag_node2"
- # create namespaces
- for n in ${namespaces}; do
ip netns add ${n}
- done
- # wire up namespaces
- ip link add name lag1 type veth peer name lag1-end
- ip link set dev lag1 netns lag_node1 $state name eth0
- ip link set dev lag1-end netns lag_node2 $state name eth0
- ip link add name lag1 type veth peer name lag1-end
- ip link set dev lag1 netns lag_node1 $state name eth1
- ip link set dev lag1-end netns lag_node2 $state name eth1
- NAMESPACES="${namespaces}"
+}
+# cleanup all lag related namespaces and remove the bonding module +lag_cleanup() +{
- for n in ${NAMESPACES}; do
ip netns delete ${n} >/dev/null 2>&1 || true
- done
- modprobe -r bonding
+}
+SWITCH="lag_node1" +CLIENT="lag_node2" +CLIENTIP="172.20.2.1" +SWITCHIP="172.20.2.2"
+lag_setup_network() +{
- lag_setup2x2 "down"
- # create switch
- ip netns exec ${SWITCH} ip link add br0 up type bridge
- ip netns exec ${SWITCH} ip link set eth0 master br0 up
- ip netns exec ${SWITCH} ip link set eth1 master br0 up
- ip netns exec ${SWITCH} ip addr add ${SWITCHIP}/24 dev br0
+}
+lag_reset_network() +{
- ip netns exec ${CLIENT} ip link del bond0
- ip netns exec ${SWITCH} ip link set eth0 up
- ip netns exec ${SWITCH} ip link set eth1 up
+}
+create_bond() +{
- # create client
- ip netns exec ${CLIENT} ip link set eth0 down
- ip netns exec ${CLIENT} ip link set eth1 down
- ip netns exec ${CLIENT} ip link add bond0 type bond $@
- ip netns exec ${CLIENT} ip link set eth0 master bond0
- ip netns exec ${CLIENT} ip link set eth1 master bond0
- ip netns exec ${CLIENT} ip link set bond0 up
- ip netns exec ${CLIENT} ip addr add ${CLIENTIP}/24 dev bond0
+}
+test_bond_recovery() +{
- RET=0
- create_bond $@
- # verify connectivity
- ip netns exec ${CLIENT} ping ${SWITCHIP} -c 5 >/dev/null 2>&1
Minor nit: here and below you reduce the count number, to shorten significantly the tests runtime.
- check_err $? "No connectivity"
- # force the links of the bond down
- ip netns exec ${SWITCH} ip link set eth0 down
- sleep 2
- ip netns exec ${SWITCH} ip link set eth0 up
- ip netns exec ${SWITCH} ip link set eth1 down
- # re-verify connectivity
- ip netns exec ${CLIENT} ping ${SWITCHIP} -c 5 >/dev/null 2>&1
- local rc=$?
- check_err $rc "Bond failed to recover"
- log_test "$1 ($2) bond recovery"
- lag_reset_network
- return 0
Minor nit: the return statement is not needed here.
Cheers,
Paolo