1#!/bin/sh 2# SPDX-License-Identifier: GPL-2.0 3 4# Regression Test: 5# Verify LACPDUs get transmitted after setting the MAC address of 6# the bond. 7# 8# https://bugzilla.redhat.com/show_bug.cgi?id=2020773 9# 10# +---------+ 11# | fab-br0 | 12# +---------+ 13# | 14# +---------+ 15# | fbond | 16# +---------+ 17# | | 18# +------+ +------+ 19# |veth1 | |veth2 | 20# +------+ +------+ 21# 22# We use veths instead of physical interfaces 23 24set -e 25tmp=$(mktemp -q dump.XXXXXX) 26cleanup() { 27 ip link del fab-br0 >/dev/null 2>&1 || : 28 ip link del fbond >/dev/null 2>&1 || : 29 ip link del veth1-bond >/dev/null 2>&1 || : 30 ip link del veth2-bond >/dev/null 2>&1 || : 31 modprobe -r bonding >/dev/null 2>&1 || : 32 rm -f -- ${tmp} 33} 34 35trap cleanup 0 1 2 36cleanup 37sleep 1 38 39# create the bridge 40ip link add fab-br0 address 52:54:00:3B:7C:A6 mtu 1500 type bridge \ 41 forward_delay 15 42 43# create the bond 44ip link add fbond type bond mode 4 miimon 200 xmit_hash_policy 1 \ 45 ad_actor_sys_prio 65535 lacp_rate fast 46 47# set bond address 48ip link set fbond address 52:54:00:3B:7C:A6 49ip link set fbond up 50 51# set again bond sysfs parameters 52ip link set fbond type bond ad_actor_sys_prio 65535 53 54# create veths 55ip link add name veth1-bond type veth peer name veth1-end 56ip link add name veth2-bond type veth peer name veth2-end 57 58# add ports 59ip link set fbond master fab-br0 60ip link set veth1-bond master fbond 61ip link set veth2-bond master fbond 62 63# bring up 64ip link set veth1-end up 65ip link set veth2-end up 66ip link set fab-br0 up 67ip link set fbond up 68ip addr add dev fab-br0 10.0.0.3 69 70tcpdump -n -i veth1-end -e ether proto 0x8809 >${tmp} 2>&1 & 71sleep 15 72pkill tcpdump >/dev/null 2>&1 73rc=0 74num=$(grep "packets captured" ${tmp} | awk '{print $1}') 75if test "$num" -gt 0; then 76 echo "PASS, captured ${num}" 77else 78 echo "FAIL" 79 rc=1 80fi 81exit $rc 82