mirror of
https://github.com/torvalds/linux.git
synced 2026-04-19 15:24:02 -04:00
Before adding a port to bond, it need to be set down first. In the lacpdu test the author set the port down specifically. But commita4abfa627c("net: rtnetlink: Enslave device before bringing it up") changed the operation order, the kernel will set the port down _after_ adding to bond. So all the ports will be down at last and the test failed. In fact, the veth interfaces are already inactive when added. This means there's no need to set them down again before adding to the bond. Let's just remove the link down operation. Fixes:a4abfa627c("net: rtnetlink: Enslave device before bringing it up") Reported-by: Zhengchao Shao <shaozhengchao@huawei.com> Closes: https://lore.kernel.org/netdev/a0ef07c7-91b0-94bd-240d-944a330fcabd@huawei.com/ Signed-off-by: Hangbin Liu <liuhangbin@gmail.com> Link: https://lore.kernel.org/r/20230817082459.1685972-1-liuhangbin@gmail.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
82 lines
1.8 KiB
Bash
Executable File
82 lines
1.8 KiB
Bash
Executable File
#!/bin/sh
|
|
# SPDX-License-Identifier: GPL-2.0
|
|
|
|
# Regression Test:
|
|
# Verify LACPDUs get transmitted after setting the MAC address of
|
|
# the bond.
|
|
#
|
|
# https://bugzilla.redhat.com/show_bug.cgi?id=2020773
|
|
#
|
|
# +---------+
|
|
# | fab-br0 |
|
|
# +---------+
|
|
# |
|
|
# +---------+
|
|
# | fbond |
|
|
# +---------+
|
|
# | |
|
|
# +------+ +------+
|
|
# |veth1 | |veth2 |
|
|
# +------+ +------+
|
|
#
|
|
# We use veths instead of physical interfaces
|
|
|
|
set -e
|
|
tmp=$(mktemp -q dump.XXXXXX)
|
|
cleanup() {
|
|
ip link del fab-br0 >/dev/null 2>&1 || :
|
|
ip link del fbond >/dev/null 2>&1 || :
|
|
ip link del veth1-bond >/dev/null 2>&1 || :
|
|
ip link del veth2-bond >/dev/null 2>&1 || :
|
|
modprobe -r bonding >/dev/null 2>&1 || :
|
|
rm -f -- ${tmp}
|
|
}
|
|
|
|
trap cleanup 0 1 2
|
|
cleanup
|
|
sleep 1
|
|
|
|
# create the bridge
|
|
ip link add fab-br0 address 52:54:00:3B:7C:A6 mtu 1500 type bridge \
|
|
forward_delay 15
|
|
|
|
# create the bond
|
|
ip link add fbond type bond mode 4 miimon 200 xmit_hash_policy 1 \
|
|
ad_actor_sys_prio 65535 lacp_rate fast
|
|
|
|
# set bond address
|
|
ip link set fbond address 52:54:00:3B:7C:A6
|
|
ip link set fbond up
|
|
|
|
# set again bond sysfs parameters
|
|
ip link set fbond type bond ad_actor_sys_prio 65535
|
|
|
|
# create veths
|
|
ip link add name veth1-bond type veth peer name veth1-end
|
|
ip link add name veth2-bond type veth peer name veth2-end
|
|
|
|
# add ports
|
|
ip link set fbond master fab-br0
|
|
ip link set veth1-bond master fbond
|
|
ip link set veth2-bond master fbond
|
|
|
|
# bring up
|
|
ip link set veth1-end up
|
|
ip link set veth2-end up
|
|
ip link set fab-br0 up
|
|
ip link set fbond up
|
|
ip addr add dev fab-br0 10.0.0.3
|
|
|
|
tcpdump -n -i veth1-end -e ether proto 0x8809 >${tmp} 2>&1 &
|
|
sleep 15
|
|
pkill tcpdump >/dev/null 2>&1
|
|
rc=0
|
|
num=$(grep "packets captured" ${tmp} | awk '{print $1}')
|
|
if test "$num" -gt 0; then
|
|
echo "PASS, captured ${num}"
|
|
else
|
|
echo "FAIL"
|
|
rc=1
|
|
fi
|
|
exit $rc
|