From nobody Thu Sep 24 18:41:53 2026 Received: from mail-pj2-f12.google.com (mail-pj2-f12.google.com [74.125.227.140]) (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 7914248F832 for ; Tue, 22 Sep 2026 00:00:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.227.140 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790035203; cv=none; b=tdKu66reKghSqWOdcEETY5rMN7iVUj1OIW76oOcQGmOIKiDrhfnq7vvKyCYvOmnkaYf/2+967vSH/zKNAZyqHAifxcrz54/oKucg8caAruHmfiNycTwmZfScIvKGwm161YHfQypp/1RjzRrREZJfX04CzVhHyNmlQ4LGSpnMgEU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790035203; c=relaxed/simple; bh=J8Mf3HYZaTmZYQFkYELALEytTws8uvz/goY09yFk2pM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=h+efMPM7hAbWZjqVwE+xWCuliLfai5RVzuznH2k+GjLK/K93t8lgbQ+WJRk1ePhA6yDxP6mwKSQJUo02UfabkYorBxa7EluADlN/MQ+PzXzaBF5M4oBOPgONm0bdfDKYQ9GvmpqxwBvjBWJOoVV/5oR9E0D/K9afDuwcsQQI2hM= 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=GZeH802w; arc=none smtp.client-ip=74.125.227.140 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="GZeH802w" Received: by mail-pj2-f12.google.com with SMTP id d9443c01a7336-2d90ba1d807so43261985ad.3 for ; Mon, 21 Sep 2026 17:00:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1790035201; x=1790640001; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:from:to:cc:subject:date :message-id:reply-to:content-type; bh=pGK4SZ365cD9EYRGUuPJEEEIN0V6+rF/hbiJa0/JQok=; b=GZeH802wT7ZdEDiryypJYzjlclFsC85waUniUFFQtpKyQICaLHmzqfRUGdIqNgBvIv i0JexKwM0YGfy9UiOQhy4CNa2KjJYHJE4UdpVaMpAHZkqVq154369KpoQwPZoMi6N8HE zaJbW2tvmMjVcmSnBPVlH1r61nsPcmjhbsCsbYnzXjTovbG1OxSE+H++p/K7KoOjr5H+ VEPAJOpkOamMxIsjZ5cemJLghkrf49ddZOPWG5vFm6SsfLI7D+UxZyvBUKCSGWmUiton miKRPdoLocdgM1QQLDMNzCWtTCWckmkeEb2P06TrZ49GisJdFAG1cZziE5p0mvtz9kRK VGSA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790035201; x=1790640001; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=pGK4SZ365cD9EYRGUuPJEEEIN0V6+rF/hbiJa0/JQok=; b=GfVDEuz34eWZG/P3dxAKCPQlh08JkePA5OYcrLWdghv2zjJJM7O6wPqFpxOcl7v20n 2xcSax9ou5HbI4jVM3W1QM+T3edkuhhxrvEDnVFYcXxQ9OWA3T2CvzXMwb9p0WxqohkB e3U2JroC6v+JxGd+zYSQrwVNaz6fKFZtAMXW4ZOM0nx+ldZF06VOJEEwaxZsNpZMZTz3 utRMBgLw7b/OhQY7Ta3jV0rNMRnec/pqi8kQVX6jFj+tkrPTRiMj3SpMCZBLgNAmzeKr UX1b7GokUqxzgd8L0hVZ8c1QXd3FZoFCy6CUxJmlZSbsj0vib/zMRSnYig5pwCYZtVK/ 8XuQ== X-Forwarded-Encrypted: i=1; AKwUvBzIzN2liLLqEbrSjUXn2/COAFyN4AJ3AGrV8SJl02zO6GGaxXgB09veZH+l9avaBr7g8sYtzMALulZX9fo=@vger.kernel.org X-Gm-Message-State: AFuF++mi+T1FCgcEdPkRM/DdIZn32VpuK5F+VP+3LLdiY5I2Ywcx6kRK RIkrjmGqsuZtW4mhzo8wBl/EP3UEar/oLqv6WMcLDwV22BJbwhBcW/+L X-Gm-Gg: AYBFou0qloIUuRUdMS0S/nTdUtf+1Ta8E1rfvHGdVceorI8lFQaJykivQ5Uawz7vciT C4eKINgkv9rJQCfF9m+DfRtRMmqL31HeUFReOcbuyO/8lrS4p7spR8QMpzoVbWVBhgC6w4PONsL DXTyrbWda/MZkwYLBAu2BePWCLbv0gqgzxFDHe99bVa0edh39cjNPVEIYjKfR4gB18wqLZvdmbF lcQlg1TUBC4jzA2iJLcmMrpf9n+23BEqaSs0x6Cl8sxMNN0tKaOwm1ba/M5q4hiFt6Ie4SNS4Y7 W5N+z+Fb7oD1Ue8PHVYGAP9JaNv4Cy7v8i+d4DqfeP9MYAZp+tGDkuKWXXS9U8ArOAA76c3Fcb+ N5wKBxpVUyDY4afEoidgEz7acI6y1ISWWfk4TSxU4/7vpvZeWA/9zpbbbaG6908EbMcSP8tvMtx 1CfP9psov7glmqX+1htm5JIsOqtKneNQ50wYzLzNBoK1+LIzwBq4sFjTmG8WFjh4d61sLGGdfVq IsdUzbFZLvw5ov5p4hYZplmyHA+Ie/5xwLESF/PdZ2zk6Y4lgKy9aDxSa7BIkkGWrr7mwXn4e1h mg== X-Received: by 2002:a17:903:2ad0:b0:2d9:216a:cdd3 with SMTP id d9443c01a7336-2ddb1b78d1bmr200524995ad.18.1790035200778; Mon, 21 Sep 2026 17:00:00 -0700 (PDT) Received: from m-upc-A520M-HDV.lan (oki-109-236-14-10.jptransit.net. [109.236.14.10]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2df5d045e78sm386135ad.51.2026.09.21.16.59.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Sep 2026 17:00:00 -0700 (PDT) Sender: Yuyang Huang From: Yuyang Huang To: Yuyang Huang Cc: Andrew Lunn , "David S. Miller" , David Ahern , Donald Hunter , Eric Dumazet , Ido Schimmel , Jacob Keller , Jakub Kicinski , Kuniyuki Iwashima , Nicolas Dichtel , Nikolaos Gkarlis , Paolo Abeni , Sabrina Dubroca , Shuah Khan , Simon Horman , Stanislav Fomichev , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, netdev@vger.kernel.org Subject: [PATCH net-next v6 1/4] netlink: specs: rt-addr: fix the type of target-netnsid Date: Tue, 22 Sep 2026 08:59:48 +0900 Message-ID: <20260921235951.3214-2-sigefriedhyy@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260921235951.3214-1-sigefriedhyy@gmail.com> References: <20260921235951.3214-1-sigefriedhyy@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" The kernel parses IFA_TARGET_NETNSID as NLA_S32 and rt-link.yaml declares its target-netnsid as s32, but rt-addr.yaml has it as binary. Signed-off-by: Yuyang Huang Reviewed-by: Nicolas Dichtel --- Documentation/netlink/specs/rt-addr.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Documentation/netlink/specs/rt-addr.yaml b/Documentation/netli= nk/specs/rt-addr.yaml index 0ecbd24c890c..17ead2203451 100644 --- a/Documentation/netlink/specs/rt-addr.yaml +++ b/Documentation/netlink/specs/rt-addr.yaml @@ -119,7 +119,7 @@ attribute-sets: type: u32 - name: target-netnsid - type: binary + type: s32 - name: proto type: u8 --=20 2.43.0 From nobody Thu Sep 24 18:41:53 2026 Received: from mail-pj2-f43.google.com (mail-pj2-f43.google.com [74.125.227.171]) (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 C67B648EC69 for ; Tue, 22 Sep 2026 00:00:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.227.171 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790035207; cv=none; b=kHa9aGA4ufNhtRLjjFVHkOg54EpSN33FhonAYMB8csyl/aoOjRpdzExxqxf9S4Z4wqXqrwhXRqL0P81ZuxgjMqdnfGYgvDq7HyVr5S0FUz9OSUYLV6F0JySn/tb0GY6GqNAQGmttIGSm0EfneO0Yx1Xn4AK9X8FwgdygXvc2jpo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790035207; c=relaxed/simple; bh=aeVxrR44d3OBC1CrnTg9XVytsuQ4VhF0kpHb6r8j5B4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=XSRfzMN8ZaWMzH61vuT1IvpN8RhVit7oiHChGJ0xo/TZzbrk2GaK7FzF/Z07IimGCM4iFTSBSftWdJPlWy/OefAinqLGSv8XDHp0gaz3hbVage1i4+H1AyAGHI4NtAmW6C0rDmqKdpL8EJyfnB2Hk232Z6vbyIxzlEooKnzeOZQ= 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=OE6ruv/w; arc=none smtp.client-ip=74.125.227.171 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="OE6ruv/w" Received: by mail-pj2-f43.google.com with SMTP id d9443c01a7336-2d90ba1d807so43262375ad.3 for ; Mon, 21 Sep 2026 17:00:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1790035205; x=1790640005; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:from:to:cc:subject:date :message-id:reply-to:content-type; bh=Mt9wRmaeFZ6BQdXUF40E4zMHIP9v2IyikCaROT4utsI=; b=OE6ruv/wvH/iEPBdOWhSZH80yice462PNYTS5+1IjuHu7LXc2bRQp8VxE0HpM4otsQ P+N2vTGsphQ1l7ettar8BayGwDPX1hmhz+z9Jo6oxWWnyDyx/uMj38L9V+h4c8xpAWje YD2kIwkVmU2zTyd787EqUDxwKzXUzHuvkt1hcdlesageo7CBbo/sLBuoRltPWKzWggwi e2jRy1Wnuz/cfCycC6MD/bs+sVqSdmDQz3DVRi+klAsioFP5qWPHFhCiRnJUuWdgGXWY TXzM7VKBVqNGF/8/fG+T9S70GH8+PIy9AfGYa79uTNpBkhOosThtTgIQTuUVesaP77O+ lxCA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790035205; x=1790640005; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=Mt9wRmaeFZ6BQdXUF40E4zMHIP9v2IyikCaROT4utsI=; b=GEKtXCANhIq9TIAF9GS9CHO61mSAmO8whPzjGhYuwhodngMVIQGwsbwBC5BiLQcfBJ lN5ZoybYRSWEpguR8xOCMAMR6C2O48hc0b+/xDQvMdNJmYgm1+NY57UDrmUMgnzxYQF5 5LwuFVwuLHZQN6SbGUgABgjGmyPijF0fbAABrf3X5MsFA64Uh/ERvR4eO2mTBHMKr9Ms LxWRQjHfs++rZGuDBOe+PRmFHJsI8E87RHt1/8TykNVfAboc+iizA85HcmFdImgfiopi MS7vHyvvaS0IvC9bulOXwzqpJdTLGdISuzhy/E7U/kTVZerUPbvZGAvYKHFgiTxw67L/ QRJQ== X-Forwarded-Encrypted: i=1; AKwUvBxRnavqFxkSPUo22h+rTq12WdF56jfFX2zo0xSrFS+hsk7RXQcqOaEqEX+7iMmSPzAQKF2SqGhYkxDfsQo=@vger.kernel.org X-Gm-Message-State: AFuF++nWqHr84Ay49/p6E+ibJC2Xr9UC+ehYFsyQmnDVAdCjys9jmSzv tSAPSTNCsasn2BAmgOCgMFpe+JrU1J2h2Xw1IxMvsIvw3PCXlLpj9TdE X-Gm-Gg: AYBFou1sFlZL1OdTO56RDK4kzoraUsn2gna7Ir9tgWs/IyGgynxMl5fJR9Y6YOFX6KA fm617fDj/FV74YwqoakEcl75bzTvwqMB5U0BuIzTDEGZ6O6TneR4T5EfW8syLTqata2j0IAviov dvhBWYG0f19B7hti926v2ClGCuZM7CQUO1Bl6KXcouwbliJTJ2IbSlQQ+MG3dLtBxwS5HPaGMS9 AiGZ+gdPPMfRAqB3b594TdJCeTZ12/8lgTc9ppKyFzy/Kk1eKUfxK2pBx4ykpmcj03f/ukOeqgy i0vEAL2MIwdqgHF8RJih6+Xrz6J9CV+vO7WKi1Iu2OMCj7yvqz5ps4z0fdwD4s61fg/u7zjm+A3 mzaAJdIOUXxPUe9/UPIQsTiN9FkJbo8AgOakhgZaljlfpDjeziVpq841pw50DLJzQEu32Ny1YC7 AkuU8dgiOV7eB/bN7xJmtom5cDK77a9bhJJNGptpQWTt+z+yhv5eWiB5VFOGdteqwvqNa1lso1D LY0LCEPSApJUHoptBCjMC3Pt7KY9HXRRXQyDzgMkXfvM1tTO4ZMdwI+X13P2ZRFLn02W/KhVLob ng== X-Received: by 2002:a17:903:3b8b:b0:2dd:c100:a5e1 with SMTP id d9443c01a7336-2ddc100a6f0mr114751315ad.53.1790035204818; Mon, 21 Sep 2026 17:00:04 -0700 (PDT) Received: from m-upc-A520M-HDV.lan (oki-109-236-14-10.jptransit.net. [109.236.14.10]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2df5d045e78sm386135ad.51.2026.09.21.17.00.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Sep 2026 17:00:03 -0700 (PDT) Sender: Yuyang Huang From: Yuyang Huang To: Yuyang Huang Cc: Andrew Lunn , "David S. Miller" , David Ahern , Donald Hunter , Eric Dumazet , Ido Schimmel , Jacob Keller , Jakub Kicinski , Kuniyuki Iwashima , Nicolas Dichtel , Nikolaos Gkarlis , Paolo Abeni , Sabrina Dubroca , Shuah Khan , Simon Horman , Stanislav Fomichev , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, netdev@vger.kernel.org Subject: [PATCH net-next v6 2/4] net: add AF_PACKET multicast dumps Date: Tue, 22 Sep 2026 08:59:49 +0900 Message-ID: <20260921235951.3214-3-sigefriedhyy@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260921235951.3214-1-sigefriedhyy@gmail.com> References: <20260921235951.3214-1-sigefriedhyy@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" RTM_GETMULTICAST dumps IPv4 and IPv6 multicast group memberships, but the device multicast list (dev->mc) is only available through /proc/net/dev_mcast, so "ip maddr show" still has to parse procfs for its link-layer entries. Handle RTM_GETMULTICAST dumps with ifa_family set to AF_PACKET next to the dev->mc helpers in dev_addr_lists.c and report every entry of dev->mc in the existing ifaddrmsg format: - IFA_MULTICAST carries the raw link-layer address - IFA_MC_USERS carries the entry reference count - IFA_F_GLOBAL in IFA_FLAGS reports netdev_hw_addr::global_use, set by dev_mc_add_global() (SIOCADDMULTI) and dev_mc_add_excl() ("bridge fdb add ... self"), i.e. entries added explicitly rather than by a protocol join. This is the static column of /proc/net/dev_mcast - ifa_scope is RT_SCOPE_LINK This covers every column of /proc/net/dev_mcast. AF_PACKET is the family iproute2 already uses for link-layer addresses ("ip -0"). The default FDB dump also walks dev->mc, but only for Ethernet devices without an ndo_fdb_dump of their own, so bridge, vxlan or macvlan devices never show their multicast filter there, and it has no users count or global_use bit. Extending it would change "bridge fdb show" output and add NDA_* attributes. Requests are always validated, there are no legacy users: prefixlen, flags and scope must be zero, ifa_index selects one device and IFA_TARGET_NETNSID is the only attribute accepted. The dump runs under RCU and netif_addr_lock_bh() without RTNL, and stamps cb->seq from dev_base_seq so a device added or removed between dump rounds sets NLM_F_DUMP_INTR. Signed-off-by: Yuyang Huang Reviewed-by: Nicolas Dichtel --- include/linux/netdevice.h | 1 + include/uapi/linux/if_addr.h | 1 + net/core/dev_addr_lists.c | 177 +++++++++++++++++++++++++++++++++++ net/core/rtnetlink.c | 2 + 4 files changed, 181 insertions(+) diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index 1f0710eef185..d469aba057c7 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h @@ -5169,6 +5169,7 @@ int dev_mc_sync_multiple(struct net_device *to, struc= t net_device *from); void dev_mc_unsync(struct net_device *to, struct net_device *from); void dev_mc_flush(struct net_device *dev); void dev_mc_init(struct net_device *dev); +int dev_mc_dump(struct sk_buff *skb, struct netlink_callback *cb); =20 /** * __dev_mc_sync - Synchronize device's multicast list diff --git a/include/uapi/linux/if_addr.h b/include/uapi/linux/if_addr.h index 7fb630b7fe31..0a1ad9ebb47b 100644 --- a/include/uapi/linux/if_addr.h +++ b/include/uapi/linux/if_addr.h @@ -57,6 +57,7 @@ enum { #define IFA_F_NOPREFIXROUTE 0x200 #define IFA_F_MCAUTOJOIN 0x400 #define IFA_F_STABLE_PRIVACY 0x800 +#define IFA_F_GLOBAL 0x1000 =20 struct ifa_cacheinfo { __u32 ifa_prefered; diff --git a/net/core/dev_addr_lists.c b/net/core/dev_addr_lists.c index 08528ca0a8b3..b69565f8ff05 100644 --- a/net/core/dev_addr_lists.c +++ b/net/core/dev_addr_lists.c @@ -10,8 +10,12 @@ #include #include #include +#include #include #include +#include +#include +#include #include =20 #include "dev.h" @@ -1180,6 +1184,179 @@ void dev_mc_init(struct net_device *dev) } EXPORT_SYMBOL(dev_mc_init); =20 +static int dev_mc_fill_addr(struct sk_buff *skb, const struct net_device *= dev, + const struct netdev_hw_addr *ha, u32 portid, + u32 seq, unsigned int flags, int netnsid) +{ + u32 ifa_flags =3D ha->global_use ? IFA_F_GLOBAL : 0; + struct ifaddrmsg *ifm; + struct nlmsghdr *nlh; + + nlh =3D nlmsg_put(skb, portid, seq, RTM_GETMULTICAST, sizeof(*ifm), + flags); + if (!nlh) + return -EMSGSIZE; + + ifm =3D nlmsg_data(nlh); + ifm->ifa_family =3D AF_PACKET; + ifm->ifa_prefixlen =3D 0; + /* ifm->ifa_flags holds 8 bits, the full value is in IFA_FLAGS */ + ifm->ifa_flags =3D (__u8)ifa_flags; + ifm->ifa_scope =3D RT_SCOPE_LINK; + ifm->ifa_index =3D dev->ifindex; + + if ((netnsid >=3D 0 && + nla_put_s32(skb, IFA_TARGET_NETNSID, netnsid)) || + nla_put(skb, IFA_MULTICAST, dev->addr_len, ha->addr) || + nla_put_u32(skb, IFA_MC_USERS, ha->refcount) || + nla_put_u32(skb, IFA_FLAGS, ifa_flags)) { + nlmsg_cancel(skb, nlh); + return -EMSGSIZE; + } + + nlmsg_end(skb, nlh); + return 0; +} + +static int dev_mc_dump_dev(struct net_device *dev, struct sk_buff *skb, + struct netlink_callback *cb, int *s_addr_idx, + unsigned int flags, int netnsid) +{ + struct netdev_hw_addr *ha; + int addr_idx =3D 0; + int err =3D 0; + + netif_addr_lock_bh(dev); + netdev_for_each_mc_addr(ha, dev) { + if (addr_idx < *s_addr_idx) { + addr_idx++; + continue; + } + err =3D dev_mc_fill_addr(skb, dev, ha, NETLINK_CB(cb->skb).portid, + cb->nlh->nlmsg_seq, flags, netnsid); + if (err < 0) + break; + nl_dump_check_consistent(cb, nlmsg_hdr(skb)); + addr_idx++; + } + netif_addr_unlock_bh(dev); + + *s_addr_idx =3D err < 0 ? addr_idx : 0; + + return err; +} + +struct dev_mc_dump_filter { + struct net *tgt_net; + netns_tracker ns_tracker; + int netnsid; + int ifindex; +}; + +static const struct nla_policy dev_mc_dump_policy[IFA_MAX + 1] =3D { + [IFA_TARGET_NETNSID] =3D { .type =3D NLA_S32 }, +}; + +static int dev_mc_valid_dump_req(const struct nlmsghdr *nlh, struct sock *= sk, + struct dev_mc_dump_filter *filter, + struct netlink_ext_ack *extack) +{ + struct nlattr *tb[IFA_MAX + 1]; + struct ifaddrmsg *ifm; + int err; + + ifm =3D nlmsg_payload(nlh, sizeof(*ifm)); + if (!ifm) { + NL_SET_ERR_MSG(extack, + "Invalid header for multicast dump request"); + return -EINVAL; + } + + if (ifm->ifa_prefixlen || ifm->ifa_flags || ifm->ifa_scope) { + NL_SET_ERR_MSG(extack, + "Invalid values in multicast dump header"); + return -EINVAL; + } + + err =3D nlmsg_parse(nlh, sizeof(*ifm), tb, IFA_MAX, + dev_mc_dump_policy, extack); + if (err < 0) + return err; + + if (tb[IFA_TARGET_NETNSID]) { + struct net *net; + + filter->netnsid =3D nla_get_s32(tb[IFA_TARGET_NETNSID]); + net =3D rtnl_get_net_ns_capable(sk, filter->netnsid); + if (IS_ERR(net)) { + NL_SET_ERR_MSG(extack, + "Invalid target network namespace id"); + return PTR_ERR(net); + } + netns_tracker_alloc(net, &filter->ns_tracker, GFP_KERNEL); + filter->tgt_net =3D net; + } + + filter->ifindex =3D ifm->ifa_index; + + return 0; +} + +int dev_mc_dump(struct sk_buff *skb, struct netlink_callback *cb) +{ + struct dev_mc_dump_filter filter =3D { + .tgt_net =3D sock_net(skb->sk), + .netnsid =3D -1, + }; + unsigned int flags =3D NLM_F_MULTI; + struct { + unsigned long ifindex; + int addr_idx; + } *ctx =3D (void *)cb->ctx; + unsigned long s_ifindex; + struct net_device *dev; + int err; + + err =3D dev_mc_valid_dump_req(cb->nlh, skb->sk, &filter, cb->extack); + if (err < 0) + return err; + + cb->seq =3D READ_ONCE(filter.tgt_net->dev_base_seq); + + rcu_read_lock(); + + if (filter.ifindex) { + cb->answer_flags |=3D NLM_F_DUMP_FILTERED; + flags |=3D NLM_F_DUMP_FILTERED; + dev =3D dev_get_by_index_rcu(filter.tgt_net, filter.ifindex); + if (!dev) { + err =3D -ENODEV; + goto out; + } + err =3D dev_mc_dump_dev(dev, skb, cb, &ctx->addr_idx, flags, + filter.netnsid); + goto out; + } + + s_ifindex =3D ctx->ifindex; + for_each_netdev_dump(filter.tgt_net, dev, ctx->ifindex) { + /* The device the dump stopped at is gone, do not skip + * entries of the next one. + */ + if (dev->ifindex !=3D s_ifindex) + ctx->addr_idx =3D 0; + err =3D dev_mc_dump_dev(dev, skb, cb, &ctx->addr_idx, flags, + filter.netnsid); + if (err < 0) + break; + } +out: + rcu_read_unlock(); + if (filter.netnsid >=3D 0) + put_net_track(filter.tgt_net, &filter.ns_tracker); + return err; +} + static int netif_addr_lists_snapshot(struct net_device *dev, struct netdev_hw_addr_list *uc_snap, struct netdev_hw_addr_list *mc_snap, diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c index e3444fd24061..204dc9040e3c 100644 --- a/net/core/rtnetlink.c +++ b/net/core/rtnetlink.c @@ -7278,6 +7278,8 @@ static const struct rtnl_msg_handler rtnetlink_rtnl_m= sg_handlers[] __initconst =3D {.msgtype =3D RTM_SETSTATS, .doit =3D rtnl_stats_set}, {.msgtype =3D RTM_NEWLINKPROP, .doit =3D rtnl_newlinkprop}, {.msgtype =3D RTM_DELLINKPROP, .doit =3D rtnl_dellinkprop}, + {.protocol =3D PF_PACKET, .msgtype =3D RTM_GETMULTICAST, + .dumpit =3D dev_mc_dump, .flags =3D RTNL_FLAG_DUMP_UNLOCKED}, {.protocol =3D PF_BRIDGE, .msgtype =3D RTM_GETLINK, .dumpit =3D rtnl_bridge_getlink}, {.protocol =3D PF_BRIDGE, .msgtype =3D RTM_DELLINK, --=20 2.43.0 From nobody Thu Sep 24 18:41:53 2026 Received: from mail-pj2-f12.google.com (mail-pj2-f12.google.com [74.125.227.140]) (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 D0A4648F841 for ; Tue, 22 Sep 2026 00:00:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.227.140 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790035211; cv=none; b=Rpyf6xfjG7pPTxJsg1jXHhYhIhrhi7xuMEozg3K/rC9TekrkOHHszxMpwM5YqvVJTlJUvRVzrF6X5ecN6iD0KTWRxoOZywni/kq51r0I4+IOoFSRun30Nn9lZbk4AHldDqXXt8OQj8vkiMSe5gY2vkfMxhxkcqE3SAzqm6j+X+M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790035211; c=relaxed/simple; bh=7ym8eCannUJoplyLEig2XRjsDs0s3r99iL28MZ1+Bek=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=J9kFrHeQs7P6cahQFUYRzwFg9Q6I15ybvJwr7xzLx8kfKP+ldEDWdZ7JoXx8wihm2QvAkcIwNjmBhezpuTAnGYNptxHRaoJuXXCXU+SIlIDVKVnzq6A00wltG6IV2AlOj+WRDGORqDHfvOEO+nzpPLH/lNeXZ0gwVU7pS4qSv5k= 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=Iqo9ph4K; arc=none smtp.client-ip=74.125.227.140 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="Iqo9ph4K" Received: by mail-pj2-f12.google.com with SMTP id d9443c01a7336-2d8fdc579daso39821725ad.1 for ; Mon, 21 Sep 2026 17:00:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1790035209; x=1790640009; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:from:to:cc:subject:date :message-id:reply-to:content-type; bh=pvI2CLJV63upsK+i3iXF166plHPTeUWc5AYad+dRYdo=; b=Iqo9ph4KpqPjlE4SCd/88mw3JPRBazn/7fV+nF3JAam4cRoMwyfHEKAmJMppHYtNiH P+XelFGVD43BiRnLyHM5G503qcehmX7IihjGNeyEwpxBPQK/CnVp/LnO4+lbBqSWXcCo ox35eYal0h3TwST/xeEYGZc5M6ZmaCVvFrcEn8Vj5TtE1lIRMt4TlDYhYyYExnPEC58A Q85MYPx0F1otyqXPn4nwi0cRirVszjlZ0tKi4KLy3iBmrjr1pO42AHwtpHGd8sD26XyD tHadN76zzSbKFaiOUL81YQw8i6ajPAhmlTdy2GfNojNGOhXPcKwG2JN+a3HeGNrYaebF usNQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790035209; x=1790640009; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=pvI2CLJV63upsK+i3iXF166plHPTeUWc5AYad+dRYdo=; b=TZ71h6f/9rtkw3aoLS31sfbKijFUo8IWEDWVxcSCvp0NMjsSXvVe/I8HLrqcO3DE9E BMRP2FetLv59FZphFcmyOZKwEFDzvaDr/Vx34JCueChgoR/2v1iv+5fHzfFVivwfdPBH 5hFSAOhDNzugMsIpL9+o/VblwLNxVS3pKyhGe7cTw37dnIpVnqJejL2jCarJivu7jHOc aZKc9uE3M03TJ5AD0dlEY/2gv/NrEFiDMXLZTRZiUz6933uHFEwLE3Uk5WMG6SlVrR2U xR4DByb1mFSsTYVBmuUM3i9dbSMbJ/tcDxM/vPJ5+WUO1ALoDqh+4DTAE6j52wYZIFCA KN3A== X-Forwarded-Encrypted: i=1; AKwUvBxnj7gUB2sfmPQYnaC14qLEtNwvezAnlXjZBGkvWBQRMWFM4+KWA/9xh6dXbragpIDCOLVl/SeKIAMmGgA=@vger.kernel.org X-Gm-Message-State: AFuF++llfCo94ER8Z7AMv/gkcp1pmoNmmgC4yNYUvRvEfKUy6MPdN0Mb mV6gRVH/Jk8NxldgZ0ekLPBWOxz8clYQS1iW8UIbXG83IIFL6anUCY5Q X-Gm-Gg: AYBFou2PZdg8H4pgflRVLbsYaRQwl/y6kVSWZl27f8L4v0D4FAafnvtA3O3mNcEEJqi ULYuuf1/i9FD2J/kyYdt9I8fRNSXUG2tEJa6VeSHXnLttxhjJx3PC1ad4ra1EenwP1FHUnW/ku3 IU2VaLzun7dkb0BtRab8mGYq3AzY5sN78Y6gjhMqiq6PS0gf1pWdigAg7jQNeaVfexAPxUw85me eUfFLQInU5vqrRXdVv382cR6tnCBm977ihIkJTWSOxyEzPuBr938QbkoFEFo52291IV2qlNNTXJ 8QFaa+jcQy+yoWT3ScPYaWSu7+lExsoeXTgDE2SfWOUvSlBP2+9YW73m72G710OGmNJHeF78l09 9yll7AyS3UcYSuQX+6twuMZshpDtUJayE3YXAzLZJHSMXkapJgSSfy41oRa6ZyG+ZH3q07tW465 n7F6FZwuJ3HdvGb7KyRBLAmmGry+5qktjuRcKa94HLLrkc1zhRKptA1aa40EwSmPhOuHutKT/Cg mHCbUq8t9f7yMZFimUfx5R+lH8XxaKKBkEOumv3HuJjHYl2MFVhUstGyGFxxoERQvIF+y6rpKBd EhitQ1FtMN4E X-Received: by 2002:a17:903:1211:b0:2db:55d6:349d with SMTP id d9443c01a7336-2ddb1b9c164mr180081355ad.21.1790035208694; Mon, 21 Sep 2026 17:00:08 -0700 (PDT) Received: from m-upc-A520M-HDV.lan (oki-109-236-14-10.jptransit.net. [109.236.14.10]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2df5d045e78sm386135ad.51.2026.09.21.17.00.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Sep 2026 17:00:07 -0700 (PDT) Sender: Yuyang Huang From: Yuyang Huang To: Yuyang Huang Cc: Andrew Lunn , "David S. Miller" , David Ahern , Donald Hunter , Eric Dumazet , Ido Schimmel , Jacob Keller , Jakub Kicinski , Kuniyuki Iwashima , Nicolas Dichtel , Nikolaos Gkarlis , Paolo Abeni , Sabrina Dubroca , Shuah Khan , Simon Horman , Stanislav Fomichev , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, netdev@vger.kernel.org Subject: [PATCH net-next v6 3/4] netlink: specs: rt-addr: document AF_PACKET multicast dumps Date: Tue, 22 Sep 2026 08:59:50 +0900 Message-ID: <20260921235951.3214-4-sigefriedhyy@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260921235951.3214-1-sigefriedhyy@gmail.com> References: <20260921235951.3214-1-sigefriedhyy@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 the global flag, list the attributes the AF_PACKET dump uses and describe how ifa-family selects IPv4, IPv6 or link-layer output for RTM_GETMULTICAST. Signed-off-by: Yuyang Huang Reviewed-by: Nicolas Dichtel --- Documentation/netlink/specs/rt-addr.yaml | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/Documentation/netlink/specs/rt-addr.yaml b/Documentation/netli= nk/specs/rt-addr.yaml index 17ead2203451..dc5c0ce259ba 100644 --- a/Documentation/netlink/specs/rt-addr.yaml +++ b/Documentation/netlink/specs/rt-addr.yaml @@ -77,6 +77,8 @@ definitions: name: mcautojoin - name: stable-privacy + - + name: global =20 attribute-sets: - @@ -168,7 +170,15 @@ operations: attributes: *ifaddr-all - name: getmulticast - doc: Get / dump IPv4/IPv6 multicast addresses. + doc: | + Get / dump multicast addresses. ifa-family must select the address + family: AF_INET or AF_INET6 for the IP multicast groups joined on + a device, AF_PACKET for the link-layer multicast addresses in the + device filter. Link-layer entries added explicitly, e.g. with + SIOCADDMULTI or "bridge fdb add ... self", rather than by a + protocol join are reported with the global flag set. A non-zero + ifa-index restricts the dump to that device, ifa-prefixlen, + ifa-flags and ifa-scope must be zero. attribute-set: addr-attrs fixed-header: ifaddrmsg do: @@ -181,10 +191,13 @@ operations: - multicast - mc-users - cacheinfo + - flags + - target-netnsid dump: request: value: 58 - attributes: [] + attributes: + - target-netnsid reply: value: 58 attributes: *mcaddr-attrs --=20 2.43.0 From nobody Thu Sep 24 18:41:53 2026 Received: from mail-pj2-f12.google.com (mail-pj2-f12.google.com [74.125.227.140]) (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 20EAC3CF02E for ; Tue, 22 Sep 2026 00:00:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.227.140 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790035214; cv=none; b=qFOwboOpqfS/EpYXB+HZH4NFz79Ri9p/uf4QjceEQS1IRwRNioO97z8t6Vwwd+/+QzAJeIgFDABMOoMm67P78j2yHUlIkNDf5yZhODmGX915YQVpuQYF/euKIczu1VQgbmAnHROLtEomli5otEwPGmyGM2DjCi2mgTyfxGRwbQw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790035214; c=relaxed/simple; bh=AIe0tVI2MDMU+wAUIOGkfF/prRfDfU5eGXTYlmKrHJ8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ddJA8Gh9GaPgGcUbNxMUvaQVGLofb3Pvk1Mx5kQMrr4TbdUHplwi40p8tQaj3YgegFmNoPUKLvKJCaX+XK62hl4pP3Nf6O2Mc9+VM0MtSUmEWGYNKEKiW1O9YlP7MB2NrQyhOPnlgq6kxLhlQqdb1Y9b1GAVNbdUdtlTB612JHw= 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=g8htQSXt; arc=none smtp.client-ip=74.125.227.140 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="g8htQSXt" Received: by mail-pj2-f12.google.com with SMTP id d9443c01a7336-2d8fb334ddcso29472045ad.0 for ; Mon, 21 Sep 2026 17:00:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1790035212; x=1790640012; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:from:to:cc:subject:date :message-id:reply-to:content-type; bh=nZghyl21slJP0T9zWNT6FTVcuW3rARquNgkyu57N/4I=; b=g8htQSXt7FioU6wybQ9LcLTlEN1xf7/2TGQAcYqnmAYYjAi+JilCLbcqpTXWIgk8uH Mkw+XMz1SzRLLJTcrrSvb38cSqaO61IxREj4CnoEfBeri1vSLAxHz3wrMOGO6tecPzEc 2cfQYnT4OPtOhpbaiJjEMBq9DPgJQhdzbkQMTVg/1baDwbF14snL3b0AfxTN0D9tRRkc TyjrlWzPA80k3awa0mBZTYKYEEejtC/yrOVox8a4MXMASCz6NaJSS7imfbpkJaOY99Nt KiBmLQU5vBZ8YlX6YFnnlzq4Q4XLPnQlP+qIIw0xsaQprAp/5WO+aLVZfBTFlfuuA7YD h6Jg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790035212; x=1790640012; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=nZghyl21slJP0T9zWNT6FTVcuW3rARquNgkyu57N/4I=; b=rMg65VopXu5h6c+M8kN1Rj/kYjJdi2xWpzdDm5LKvsL5rElicYGkBOsN8ZcES8qfvN h70pCV7NzOdlwfr9av/3Gf8fAZnZPdU2QVn0+VIALxByTeqd3bdmOKIqcWTWYBcDG/Vc dhXDzaSZ8Y0HItZxlry8kCOK4UP+QYSu6thpKWN6eLEDhFdR8JUAqOqrNBU0L3+xMvvu 48QgSo9UQBE553vZ4s6svHBcd1A0syPjviPMphTH6ACuSrl+EKowxZOS27qJNxtJkwpu 4oFkkq+o7IMZ6MGV9kSPxsP/XmuhAm51TAOjzUKcvYunmcB80XykVPWwW102wbyBwNDP 2ImQ== X-Forwarded-Encrypted: i=1; AKwUvBzZrRDLltGhh2+f52gWYlBmSnkG7/cQIE0pohm+yaI5gtSp5pHKgMmG3KcOIk4fXpA6pFrykWo9xG1okKg=@vger.kernel.org X-Gm-Message-State: AFuF++lGS9jlZWqal99eVV3kypG3LI9mIE6a3hZhIiqImxMIzFa4HBAE EMYCAxkjywc6a3QYrVD/iqAt9RsJRHak4YdjqtP0VxBgdxO9z5dWJTOM X-Gm-Gg: AYBFou05b1gZSK/ePcDp2DLTvnr43dHIDGBtuIH8PGqyzW9Abmy1crFkoNya8wBuZig CAxmknvrXCju6iFlVNUXucUuo3AN0kmHc63/fdVJNQOzV+o1BDPe+rNSOdWpAIEHeRLUHHzt1Rb zHf4c0zdkzYya2eYV5kPxsXZhNmnPheCU15mC66cAp0U3Au42xGC2GrdvoGBM+RoBn+cPo4bqOI my4d2YklmJTW8Hb9npM3FENkUuZJArLhYjAS0F1Zxia9M0DZW04LfyB5Tq25REqcFiCFhcZ6nkr 5cLE3DN4caxQ3ZQAtT+8Xsf/1wZ6FvwaWFnVU2NfVavse1wFRdyf4DxwetT1l+MLF8rBDNzeJhK aDAfTGBsjq86Ia4ytI+P8h6YFaba1DwmpH98LhEU8k4I158FsxVV7AElfUVnZ6xc2HYG4DlAg9L AAsebGR2P+apaHin0ivL4CQ4Fkm8/QbxNsXDb6X2JuLQfI0i28oF2nQnrunIfVV7pJNui0rvbTQ vVnW+6E2PHfCcROdNOIyCHziLbdBk/+qTiULJMdHuAEMyPCTCyyVqeOexusnhvJlbnyYh5a8kLV 6g== X-Received: by 2002:a17:902:f544:b0:2db:73fc:b57f with SMTP id d9443c01a7336-2ddb1adbb7bmr172030645ad.10.1790035212267; Mon, 21 Sep 2026 17:00:12 -0700 (PDT) Received: from m-upc-A520M-HDV.lan (oki-109-236-14-10.jptransit.net. [109.236.14.10]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2df5d045e78sm386135ad.51.2026.09.21.17.00.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Sep 2026 17:00:11 -0700 (PDT) Sender: Yuyang Huang From: Yuyang Huang To: Yuyang Huang Cc: Andrew Lunn , "David S. Miller" , David Ahern , Donald Hunter , Eric Dumazet , Ido Schimmel , Jacob Keller , Jakub Kicinski , Kuniyuki Iwashima , Nicolas Dichtel , Nikolaos Gkarlis , Paolo Abeni , Sabrina Dubroca , Shuah Khan , Simon Horman , Stanislav Fomichev , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, netdev@vger.kernel.org Subject: [PATCH net-next v6 4/4] selftests: net: test AF_PACKET multicast dumps Date: Tue, 22 Sep 2026 08:59:51 +0900 Message-ID: <20260921235951.3214-5-sigefriedhyy@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260921235951.3214-1-sigefriedhyy@gmail.com> References: <20260921235951.3214-1-sigefriedhyy@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" Dump the link-layer multicast addresses of a dummy device and verify that ifa_index restricts the dump to that device, that the all-hosts address joined on link up is listed without IFA_F_GLOBAL, that an address added with SIOCADDMULTI is listed with IFA_F_GLOBAL and IFA_MC_USERS, and that IFA_TARGET_NETNSID dumps another netns. Signed-off-by: Yuyang Huang Reviewed-by: Nicolas Dichtel --- tools/testing/selftests/net/rtnetlink.py | 73 +++++++++++++++++++++++- 1 file changed, 71 insertions(+), 2 deletions(-) diff --git a/tools/testing/selftests/net/rtnetlink.py b/tools/testing/selft= ests/net/rtnetlink.py index dc8c77db4897..5534ade056a5 100755 --- a/tools/testing/selftests/net/rtnetlink.py +++ b/tools/testing/selftests/net/rtnetlink.py @@ -5,13 +5,18 @@ import socket import struct import time from lib.py import bkg, ip, ksft_exit, ksft_run, ksft_eq, ksft_ge, ksft_tr= ue, KsftSkipEx -from lib.py import ksft_not_in, ksft_not_none +from lib.py import ksft_in, ksft_not_in, ksft_not_none from lib.py import CmdExitFailure, NetNS, NetNSEnter, RtnlAddrFamily, Rtnl= RouteFamily from lib.py import defer =20 IPV4_ALL_HOSTS_MULTICAST =3D b'\xe0\x00\x00\x01' IPV4_TEST_MULTICAST =3D b'\xef\x01\x01\x01' IPV6_TEST_MULTICAST =3D bytes.fromhex('ff020000000000000000000000000123') +ETH_ALL_HOSTS_MULTICAST =3D bytes.fromhex('01005e000001') +ETH_TEST_MULTICAST_STR =3D '01:00:5e:01:01:01' +ETH_TEST_MULTICAST =3D bytes.fromhex(ETH_TEST_MULTICAST_STR.replace(':', '= ')) +ETH_PEER_MULTICAST_STR =3D '01:00:5e:02:02:02' +ETH_PEER_MULTICAST =3D bytes.fromhex(ETH_PEER_MULTICAST_STR.replace(':', '= ')) =20 =20 def _users_for(rtnl: RtnlAddrFamily, family: int, grp: bytes, ifindex: int= ): @@ -105,6 +110,69 @@ def dump_mcaddr6_check() -> None: s2.close() =20 =20 +def dump_mcaddr_l2_check() -> None: + """ + Verify link-layer multicast addresses in an AF_PACKET RTM_GETMULTICAST + dump: the ifa-index filter, mc-users, the global flag and + target-netnsid. + """ + + with NetNS() as ns, NetNSEnter(str(ns)): + for ifname in ("dummy1", "dummy2"): + ip(f"link add name {ifname} type dummy") + ip(f"link set {ifname} up") + dev_idx =3D socket.if_nametoindex("dummy1") + ip(f"maddr add {ETH_TEST_MULTICAST_STR} dev dummy1") + + rtnl =3D RtnlAddrFamily() + defer(rtnl.close) + addresses =3D rtnl.getmulticast( + {"ifa-family": socket.AF_PACKET, "ifa-index": dev_idx}, + dump=3DTrue) + + # dummy2 has entries as well, only dummy1 may be listed + ksft_eq({addr['ifa-index'] for addr in addresses}, {dev_idx}, + "AF_PACKET multicast dump ignored ifa-index filter") + + entries =3D {addr['multicast']: addr for addr in addresses} + + # Bringing an Ethernet device up joins 224.0.0.1, which maps + # to 01:00:5e:00:00:01 in the device multicast list. + all_hosts =3D entries.get(ETH_ALL_HOSTS_MULTICAST) + ksft_not_none(all_hosts, + "dummy1 does not have the all-hosts link-layer addre= ss") + if all_hosts is not None: + ksft_not_in('global', all_hosts['flags'], + "protocol entry is global") + + static =3D entries.get(ETH_TEST_MULTICAST) + ksft_not_none(static, "dummy1 does not have the SIOCADDMULTI addre= ss") + if static is not None: + ksft_eq(static['mc-users'], 1, + "unexpected mc-users for the SIOCADDMULTI address") + ksft_in('global', static['flags'], + "SIOCADDMULTI entry is not global") + + # target-netnsid dumps another netns, ifa-index is relative to it + with NetNS() as peer: + ip(f"netns set {peer} 5") + ip("link add name dummy3 type dummy", ns=3Dpeer) + ip("link set dummy3 up", ns=3Dpeer) + ip(f"maddr add {ETH_PEER_MULTICAST_STR} dev dummy3", ns=3Dpeer) + peer_idx =3D ip("link show dummy3", json=3DTrue, ns=3Dpeer)[0]= ['ifindex'] + + addresses =3D rtnl.getmulticast( + {"ifa-family": socket.AF_PACKET, "target-netnsid": 5, + "ifa-index": peer_idx}, dump=3DTrue) + ksft_eq({(addr['ifa-index'], addr['target-netnsid']) + for addr in addresses}, {(peer_idx, 5)}, + "target-netnsid did not dump the peer netns") + # dummy1 in this netns can have the same ifindex as dummy3 + ksft_in(ETH_PEER_MULTICAST, + {addr['multicast'] for addr in addresses}, + "target-netnsid did not dump the peer device") + + def ipv4_devconf_notify() -> None: """ Configure an interface and set ipv4-devconf values through netlink @@ -424,7 +492,8 @@ def ipv6_verify_inter_scope_addr_order() -> None: =20 =20 def main() -> None: - ksft_run([dump_mcaddr_check, dump_mcaddr6_check, ipv4_devconf_notify, + ksft_run([dump_mcaddr_check, dump_mcaddr6_check, dump_mcaddr_l2_check, + ipv4_devconf_notify, ipv6_route_del_reason_expired, ipv6_route_del_reason_ra_withdrawn, ipv6_route_del_reason_absent, --=20 2.43.0