]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
selftests: net: local_termination: test link-local protocols
authorDaniel Golle <daniel@makrotopia.org>
Tue, 10 Mar 2026 18:10:32 +0000 (18:10 +0000)
committerJakub Kicinski <kuba@kernel.org>
Thu, 12 Mar 2026 01:58:05 +0000 (18:58 -0700)
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>
tools/testing/selftests/net/forwarding/local_termination.sh

index 1f2bf6e8184779986f705453e06b11cf501419b8..9bc9d25e713689c337cd371dd62b77eda8d21f89 100755 (executable)
@@ -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"