From nobody Mon Dec 1 22:03:42 2025 Received: from mail-ej1-f50.google.com (mail-ej1-f50.google.com [209.85.218.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2876F304BB5 for ; Mon, 1 Dec 2025 10:28:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764584934; cv=none; b=j8nsXWcCWdFgll5YalNndeNn5/cM/p6aZlJSrgGPvARlxNz/5wD0t8RUeR0eWB3f9fkM4jsW2NmKxb4TTQwVobYzgGxOoxDFTXdVL9VIJiihoPj/5hf1vxFfMjoeu/6MNtI+hqgG8VrOPcRnakav3jSrXScb6cz+2/m8pxjbp0c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764584934; c=relaxed/simple; bh=bpfHyyspFf7vI7NmB9tWN+VXQOjDBGy/ulV1bMwtwkw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=IbISKnE4l0mIS/GXsVE4DFXlx3js6jLic8miUtJGCUlyb0m6vKH80MdkkXh5u7ehDXIroABplKUBc3nL2MvvQaeE2mwkxuECX0ZYAmZ+dmsv/X7fxahRUH89FgKHxpuJLEJRGFwVyE9NKl3A3Y7t/WhGLiKDTvti0FStCYRNG5M= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=MIE/ozVX; arc=none smtp.client-ip=209.85.218.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="MIE/ozVX" Received: by mail-ej1-f50.google.com with SMTP id a640c23a62f3a-b73161849e1so960153266b.2 for ; Mon, 01 Dec 2025 02:28:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1764584930; x=1765189730; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=r62uAAysvOeF+TQvBPK+HmpxuJJtN8BAOCCbeSMPZRw=; b=MIE/ozVXkW9Dqz28uyOPT9368AzPdlgymcW3jVzdu2V3Jk0VxYodGB/4EMVZkYSAW4 SDXe/KZtHP5SlGzyE1LL/dkdqLDUCW9g0ahNAT/jhqfePnrX2QhdRfs8eJriShq145u+ op+5DCZH3DDavteR3RwxZgeceZYdsVxxqAQHxuZE0QI4diHq/+lPBVaxdbWakOJfwOeR zOadRjKnfE5ykehZ7ezAWLa8b3J3WM3vAPca+bfx+QIIGSQHPv1yOcCnKRLgUnTrjTRt d4csxEt8XPsT7G7iA5uxF6woxLZSQSDuS+xr+WtVOEEAN7OJLAIRaWyMRblgQJ8Nw0dh uRVw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764584930; x=1765189730; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=r62uAAysvOeF+TQvBPK+HmpxuJJtN8BAOCCbeSMPZRw=; b=YpGjteKvbNCyKziQu5itrgZoQK7Sw2NU6FTBmHyI/loqrHv5lpAXHz0XMYo2pul2fT xRCTIXKeaWuFRkHpZ82i6EaArrAPak/7qALmLNdH4OB94zD/UMZu/RdTbpcbFwB/SL8j bZ8VsNHv4jWcbjjn6uBs0J5joe3cXKIIFPtg9hP/WjkNiis4N2JUQAE/5Ez9kTYTw6md YhZfmmbI8vV48FTdDffu5Yl1RH/CCzJ0UxlNZt/7yxomxflloKpde2kYvTgg9arQIxz5 5+W+4PI2IZVZs3ccoEA4CJotK02EYLS0fUPE2iKt8D2qnJtTICEJlsz5GWJKu/Mn4Wg/ qQAA== X-Forwarded-Encrypted: i=1; AJvYcCXvvJNI572wlSW/5qufJ2ZtUZn3he6sItC8gbI3i/PErjdfz5OqYXHnbBrZngwcXXZAls1DLDbQ9rjPMEc=@vger.kernel.org X-Gm-Message-State: AOJu0YxFuEfFWnIvK4FuyiBv4uhXjGuSIS7PVkj6rdUBumgEFdZs52k4 /5kS08B9R/yslquT5il1KCE4INoL4shWVVwhlcbECTs0sePTPiYKq797 X-Gm-Gg: ASbGncv8I0pFMAseRd/JyWDLkkOxElQh5QecbAG5Lk88pQznpytWl4GDhHms4DGOgR0 YUY9e+GooNpKtOXlXXqIzGR/XQNGJtcWaOFYPuyvkurefZyEanTH2cfSCRFg7+ybacPwNygr2p7 t7uXMYFA5Ey9wRObGD8v6AC9qlfdC+jPc8eoo0Xl6w74CDoQ3JpafnL9SJYNf+P0GnqMhtBmaL2 QVzeVk5v+lCLi/DP9qFCiE1tDqmx/72lkabGQqY8Dr6WVazsC2E/zYCLV0nDANAIoa0yoPLoy8x +1GCDb/67+3auz6TbFGWT7nc7R1d/dWLv0Dst90Vh14bzK7VCykSddBLueQ4CINDIYiXzom+nNW fpci4WPsrlzVjjcXybvHv4nGTrxapXpdd6Rw8Ezxr9lUR0i5RVfVN0OUC8tte6aCGJYydvv8sJV xjZ9xsYpFbbrEAyGqGcx8xKe18miLlG4KqBXHRUoHB/dNAWwiSm8QspI1bClRVQyjQZyA= X-Google-Smtp-Source: AGHT+IFUMDNzleZaysdDaOIWKCLnv0W/7ORsWcveP6WOewtMC3bsi4ve1+dw0mBPOzG6hzY3eCvx5w== X-Received: by 2002:a17:907:3f25:b0:b72:aaae:1b22 with SMTP id a640c23a62f3a-b767150b109mr4455364166b.12.1764584930328; Mon, 01 Dec 2025 02:28:50 -0800 (PST) Received: from localhost (dslb-002-205-018-238.002.205.pools.vodafone-ip.de. [2.205.18.238]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b76f5162d3esm1199021666b.8.2025.12.01.02.28.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 01 Dec 2025 02:28:49 -0800 (PST) From: Jonas Gorski To: Andrew Lunn , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Shuah Khan , Florian Fainelli Cc: Vladimir Oltean , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org Subject: [PATCH RFC/RFT net-next v2 3/5] selftests: no_forwarding: test VLAN uppers on VLAN aware bridged ports Date: Mon, 1 Dec 2025 11:28:15 +0100 Message-ID: <20251201102817.301552-4-jonas.gorski@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20251201102817.301552-1-jonas.gorski@gmail.com> References: <20251201102817.301552-1-jonas.gorski@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add a test (mainly for switchdev implementors) to test that multiple VLAN uppers on a VLAN aware bridge for the same VLAN do not enable forwarding of that VLAN between those ports. Since we are testing VLAN uppers, skip checking untagged traffic in those cases. Disallowing VLAN uppers on bridge ports is a valid choice for switchdev drivers, so test if we can create them first and skip the tests if not. Signed-off-by: Jonas Gorski --- v1 -> v2: * new patch .../selftests/net/forwarding/no_forwarding.sh | 89 ++++++++++++++----- 1 file changed, 67 insertions(+), 22 deletions(-) diff --git a/tools/testing/selftests/net/forwarding/no_forwarding.sh b/tool= s/testing/selftests/net/forwarding/no_forwarding.sh index 694ece9ba3a7..c8adf04e1328 100755 --- a/tools/testing/selftests/net/forwarding/no_forwarding.sh +++ b/tools/testing/selftests/net/forwarding/no_forwarding.sh @@ -1,7 +1,7 @@ #!/bin/bash # SPDX-License-Identifier: GPL-2.0 =20 -ALL_TESTS=3D"standalone two_bridges one_bridge_two_pvids" +ALL_TESTS=3D"standalone two_bridges one_bridge_two_pvids bridge_aware_vlan= _uppers" NUM_NETIFS=3D4 =20 source lib.sh @@ -90,6 +90,7 @@ check_rcv() run_test() { local test_name=3D"$1" + local swp_uppers=3D${2:0} local smac=3D$(mac_get $h1) local dmac=3D$(mac_get $h2) local h1_ipv6_lladdr=3D$(ipv6_lladdr_get $h1) @@ -99,16 +100,24 @@ run_test() =20 tcpdump_start $h2 =20 - send_non_ip $h1 $smac $dmac - send_non_ip $h1 $smac $NON_IP_MC - send_non_ip $h1 $smac $BC - send_uc_ipv4 $h1 $dmac - send_mc_ipv4 $h1 - send_uc_ipv6 $h1 $dmac - send_mc_ipv6 $h1 + if [ "$swp_uppers" -eq 0 ]; then + send_non_ip $h1 $smac $dmac + send_non_ip $h1 $smac $NON_IP_MC + send_non_ip $h1 $smac $BC + send_uc_ipv4 $h1 $dmac + send_mc_ipv4 $h1 + send_uc_ipv6 $h1 $dmac + send_mc_ipv6 $h1 + fi =20 for vid in "${vids[@]}"; do vlan_create $h1 $vid + if [ "$swp_uppers" -ge 1 ]; then + vlan_create $swp1 $vid + fi + if [ "$swp_uppers" -ge 2 ]; then + vlan_create $swp2 $vid + fi simple_if_init $h1.$vid $H1_IPV4/24 $H1_IPV6/64 =20 send_non_ip $h1.$vid $smac $dmac @@ -120,6 +129,12 @@ run_test() send_mc_ipv6 $h1.$vid =20 simple_if_fini $h1.$vid $H1_IPV4/24 $H1_IPV6/64 + if [ "$swp_uppers" -ge 2 ]; then + vlan_destroy $swp2 $vid + fi + if [ "$swp_uppers" -ge 1 ]; then + vlan_destroy $swp1 $vid + fi vlan_destroy $h1 $vid done =20 @@ -129,26 +144,28 @@ run_test() =20 tcpdump_stop $h2 =20 - check_rcv $h2 "$test_name: Unicast non-IP untagged" \ - "$smac > $dmac, 802.3, length 4:" + if [ "$swp_uppers" -eq 0 ]; then + check_rcv $h2 "$test_name: Unicast non-IP untagged" \ + "$smac > $dmac, 802.3, length 4:" =20 - check_rcv $h2 "$test_name: Multicast non-IP untagged" \ - "$smac > $NON_IP_MC, 802.3, length 4:" + check_rcv $h2 "$test_name: Multicast non-IP untagged" \ + "$smac > $NON_IP_MC, 802.3, length 4:" =20 - check_rcv $h2 "$test_name: Broadcast non-IP untagged" \ - "$smac > $BC, 802.3, length 4:" + check_rcv $h2 "$test_name: Broadcast non-IP untagged" \ + "$smac > $BC, 802.3, length 4:" =20 - check_rcv $h2 "$test_name: Unicast IPv4 untagged" \ - "$smac > $dmac, ethertype IPv4 (0x0800)" + check_rcv $h2 "$test_name: Unicast IPv4 untagged" \ + "$smac > $dmac, ethertype IPv4 (0x0800)" =20 - check_rcv $h2 "$test_name: Multicast IPv4 untagged" \ - "$smac > $MACV4_ALLNODES, ethertype IPv4 (0x0800).*: $H1_IPV4 > $IPV4_AL= LNODES" + check_rcv $h2 "$test_name: Multicast IPv4 untagged" \ + "$smac > $MACV4_ALLNODES, ethertype IPv4 (0x0800).*: $H1_IPV4 > $IPV4_A= LLNODES" =20 - check_rcv $h2 "$test_name: Unicast IPv6 untagged" \ - "$smac > $dmac, ethertype IPv6 (0x86dd).*8: $H1_IPV6 > $H2_IPV6" + check_rcv $h2 "$test_name: Unicast IPv6 untagged" \ + "$smac > $dmac, ethertype IPv6 (0x86dd).*8: $H1_IPV6 > $H2_IPV6" =20 - check_rcv $h2 "$test_name: Multicast IPv6 untagged" \ - "$smac > $MACV6_ALLNODES, ethertype IPv6 (0x86dd).*: $h1_ipv6_lladdr > $= IPV6_ALLNODES" + check_rcv $h2 "$test_name: Multicast IPv6 untagged" \ + "$smac > $MACV6_ALLNODES, ethertype IPv6 (0x86dd).*: $h1_ipv6_lladdr > = $IPV6_ALLNODES" + fi =20 for vid in "${vids[@]}"; do check_rcv $h2 "$test_name: Unicast non-IP VID $vid" \ @@ -209,6 +226,34 @@ one_bridge_two_pvids() ip link del br0 } =20 +bridge_aware_vlan_uppers() +{ + ip link add br0 type bridge vlan_filtering 1 vlan_default_pvid 0 + ip link set br0 up + ip link set $swp1 master br0 + ip link set $swp2 master br0 + + if ! ip link add name $swp1.10 link $swp1 type vlan id 10 2>/dev/null; th= en + ip link del br0 + echo "SKIP: vlan-aware bridge does not allow vlan uppers on bridge ports" + exit "$ksft_skip" + fi + + if ! ip link add name $swp2.10 link $swp2 type vlan id 10 2>/dev/null; th= en + vlan_destroy $swp1 10 + ip link del br0 + echo "SKIP: vlan-aware bridge does not allow multiple vlan uppers per VL= AN on bridge ports" + exit "$ksft_skip" + fi + + vlan_destroy $swp1 10 + vlan_destroy $swp2 10 + + run_test "Switch ports in VLAN-aware bridge with VLAN uppers" 2 + + ip link del br0 +} + h1_create() { simple_if_init $h1 $H1_IPV4/24 $H1_IPV6/64 --=20 2.43.0