selftests: net: local_termination: test link-local protocols

Add tests to local_termination.sh to verify that link-local frames
arrive. On some switches the DSA driver uses bridges to connect the
user ports to their CPU ports. More "intelligent" switches typically
don't forward link-local frames, but may trap them to an internal
microcontroller. The driver may have to change trapping rules, so
link-local frames end up on the DSA CPU ports instead of being
silently dropped or trapped to the internal microcontroller of the
switch.

Add two tests which help to validate this has been done correctly:
 - Link-local STP BPDU should arrive at the Linux netdev when the
   bridge has STP disabled (BR_NO_STP), in which case the bridge
   forwards them rather than consuming them in the control plane
 - Link-local LLDP should arrive at standalone ports (and the test
   should be skipped on bridged ports similar to how it is done
   for the IEEE1588v2/PTP tests)

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
Reviewed-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Tested-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Link: https://patch.msgid.link/1a67081b2ede1e6d2d32f7dd54ae9688f3566152.1773166131.git.daniel@makrotopia.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
Daniel Golle
2026-03-10 18:10:32 +00:00
committed by Jakub Kicinski
parent 410593fec7
commit 7e27d6202e

View File

@@ -100,6 +100,15 @@ PTP_1588_IPV6_PDELAY_REQ=" \
00 00 3e 37 63 ff fe cf 17 0e 00 01 00 01 05 7f \
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 \
00 00 00 00 00 00"
LINK_LOCAL_STP_BPDU=" \
01:80:c2:00:00:00 00:00:de:ad:be:ef 00 26 42 42 03 \
00 00 00 00 00 80 00 aa bb cc dd ee ff 00 00 00 00 \
80 00 aa bb cc dd ee ff 80 01 00 00 14 00 02 00 \
0f 00"
LINK_LOCAL_LLDP=" \
01:80:c2:00:00:0e 00:00:de:ad:be:ef 88:cc 02 07 04 \
00 11 22 33 44 55 04 05 05 65 74 68 30 06 02 00 \
78 00 00"
# Disable promisc to ensure we don't receive unknown MAC DA packets
export TCPDUMP_EXTRA_FLAGS="-pl"
@@ -213,7 +222,15 @@ run_test()
mc_route_destroy $rcv_if_name
mc_route_destroy $send_if_name
ip maddress add 01:80:c2:00:00:00 dev $rcv_if_name
send_raw $send_if_name "$LINK_LOCAL_STP_BPDU"
ip maddress del 01:80:c2:00:00:00 dev $rcv_if_name
if [ $skip_ptp = false ]; then
ip maddress add 01:80:c2:00:00:0e dev $rcv_if_name
send_raw $send_if_name "$LINK_LOCAL_LLDP"
ip maddress del 01:80:c2:00:00:0e dev $rcv_if_name
ip maddress add 01:1b:19:00:00:00 dev $rcv_if_name
send_raw $send_if_name "$PTP_1588_L2_SYNC"
send_raw $send_if_name "$PTP_1588_L2_FOLLOW_UP"
@@ -304,7 +321,15 @@ run_test()
"$smac > $UNKNOWN_MACV6_MC_ADDR3, ethertype IPv6 (0x86dd)" \
true "$test_name"
check_rcv $rcv_if_name "Link-local STP BPDU" \
"> 01:80:c2:00:00:00" \
true "$test_name"
if [ $skip_ptp = false ]; then
check_rcv $rcv_if_name "Link-local LLDP" \
"> 01:80:c2:00:00:0e" \
true "$test_name"
check_rcv $rcv_if_name "1588v2 over L2 transport, Sync" \
"ethertype PTP (0x88f7).* PTPv2.* msg type *: sync msg" \
true "$test_name"