Add a selftest to verify bonding behavior when lacp_active is set to off.
Signed-off-by: Hangbin Liu liuhangbin@gmail.com --- .../drivers/net/bonding/bond_passive_lacp.sh | 21 +++++ .../drivers/net/bonding/bond_topo_lacp.sh | 77 +++++++++++++++++++ 2 files changed, 98 insertions(+) create mode 100755 tools/testing/selftests/drivers/net/bonding/bond_passive_lacp.sh create mode 100644 tools/testing/selftests/drivers/net/bonding/bond_topo_lacp.sh
diff --git a/tools/testing/selftests/drivers/net/bonding/bond_passive_lacp.sh b/tools/testing/selftests/drivers/net/bonding/bond_passive_lacp.sh new file mode 100755 index 000000000000..4cf8a5999aaa --- /dev/null +++ b/tools/testing/selftests/drivers/net/bonding/bond_passive_lacp.sh @@ -0,0 +1,21 @@ +#!/bin/sh +# SPDX-License-Identifier: GPL-2.0 +# +# Testing if bond works with lacp_active = off + +lib_dir=$(dirname "$0") +source ${lib_dir}/bond_topo_lacp.sh + +trap cleanup EXIT +setup_topo_lacp + +lacp_bond_reset "${c_ns}" "lacp_active off" +# make sure the switch state is not expired [A,T,G,S,Ex] +if slowwait 15 ip netns exec ${s_ns} grep -q 'port state: 143' /proc/net/bonding/bond0; then + RET=1 +else + RET=0 +fi +log_test "bond 802.3ad" "lacp_active off" + +exit $EXIT_STATUS diff --git a/tools/testing/selftests/drivers/net/bonding/bond_topo_lacp.sh b/tools/testing/selftests/drivers/net/bonding/bond_topo_lacp.sh new file mode 100644 index 000000000000..33dca6ebdc4b --- /dev/null +++ b/tools/testing/selftests/drivers/net/bonding/bond_topo_lacp.sh @@ -0,0 +1,77 @@ +#!/bin/bash +# SPDX-License-Identifier: GPL-2.0 +# +# Topology for Bond mode 802.3ad testing +# +# +-------------------------+ +# | bond0 | Switch +# | + | 192.0.2.254/24 +# | eth0 | eth1 | 2001:db8::254/24 +# | +---+---+ | +# | | | | +# +-------------------------+ +# | | +# +-------------------------+ +# | | | | +# | +---+---+ | Client +# | eth0 | eth1 | 192.0.2.1/24 +# | + | 2001:db8::1/24 +# | bond0 | +# +-------------------------+ + +REQUIRE_MZ=no +NUM_NETIFS=0 +lib_dir=$(dirname "$0") +source "$lib_dir"/../../../net/forwarding/lib.sh + +s_ip4="192.0.2.254" +c_ip4="192.0.2.1" +s_ip6="2001:db8::254" +c_ip6="2001:db8::1" + +switch_create() +{ + ip netns exec ${s_ns} sysctl -q net.ipv6.conf.default.keep_addr_on_down=1 + ip -n ${s_ns} link add eth0 type veth peer name eth0 netns ${c_ns} + ip -n ${s_ns} link add eth1 type veth peer name eth1 netns ${c_ns} + ip -n ${s_ns} link add bond0 type bond mode 802.3ad miimon 100 lacp_active on lacp_rate fast + ip -n ${s_ns} link set eth0 master bond0 + ip -n ${s_ns} link set eth1 master bond0 + ip -n ${s_ns} addr add ${s_ip4}/24 dev bond0 + ip -n ${s_ns} addr add ${s_ip6}/24 dev bond0 + ip -n ${s_ns} link set bond0 up +} + +client_create() +{ + ip netns exec ${c_ns} sysctl -q net.ipv6.conf.default.keep_addr_on_down=1 + ip -n ${c_ns} link add bond0 type bond mode 802.3ad miimon 100 lacp_active on lacp_rate fast + ip -n ${c_ns} link set eth0 master bond0 + ip -n ${c_ns} link set eth1 master bond0 + ip -n ${c_ns} addr add ${c_ip4}/24 dev bond0 + ip -n ${c_ns} addr add ${c_ip6}/24 dev bond0 + ip -n ${c_ns} link set bond0 up +} + +setup_topo_lacp() +{ + setup_ns s_ns c_ns + defer cleanup_all_ns + + switch_create + client_create +} + +# Reset bond with and options +lacp_bond_reset() +{ + local netns="$1" + local param="$2" + + ip -n ${netns} link set bond0 down + ip -n ${netns} link set bond0 type bond $param + ip -n ${netns} link set bond0 up + + # Wait for IPv6 address ready as it needs DAD + slowwait 10 ip netns exec ${c_ns} ping6 ${s_ip6} -c 1 -W 0.1 &> /dev/null +}