From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pl1-f170.google.com (mail-pl1-f170.google.com [209.85.214.170]) (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 A2FF84071E0 for ; Tue, 30 Jun 2026 11:02:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.170 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782817341; cv=none; b=NKaQ8j390uCGD2cKZr+KHYAw+6QHSvUbZnCVmA8tGsW/oXt+E/NHq3Zja9nkN8CCuo/0/g51r/wEhHnww01BR39sWwcMbLhaJPFt9h/S4/YWFv1dH/GuZbmClEJ2kiyD3QS1sv+ED2nK8/Fxqx/B0ulxIfj3PeP4cfDSDpdq4pY= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782817341; c=relaxed/simple; bh=znty9fKu1I3j6mk8GJ7YhBLBxJh2skExwhcdv1n8kQ0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=WztS6b0TW5VPekgfPa3ij2xGpg9iRySYcHeOqX0kTQqLlPgb9w4KZLbGuih8spxC2y/7W1WdoQmITxoInrcOsPY8R79YVhBk5UnaM5BGNsqeCYhe5IaXo3dQZ9hf75GXtPAQ/gBTSbCAfOJ+q91dKeE7fza/b62v47jJmzbS+CU= 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=ZKXC4K1R; arc=none smtp.client-ip=209.85.214.170 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="ZKXC4K1R" Received: by mail-pl1-f170.google.com with SMTP id d9443c01a7336-2c9bd2f8bf7so3334975ad.1 for ; Tue, 30 Jun 2026 04:02:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1782817340; x=1783422140; 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=s6UKdS5fC0734haXSHmcnGsohuQh5WonZmb4ruRSjAQ=; b=ZKXC4K1RH7mdCysAGO3lDzrX8qgA5GRpPPIHODtDiU7eaEmC/zwaEh8uM8b8nYTfdZ 9eVkn0Iq8fVH7U6izyyP1vRLL6jvV2d35bXkoHYnHQT9Ym6B71gQ8Me49WsmJuzMrHHH tx3dXeLJMdT+TCNURK8/pp/zNgd3PuGSn+uBWZGbsTTPN/jikPTVESKkroevNWMY/M3c eZ62RmyhaVfuaan4hu2fTlx8q04iiY0gPhl/TF7tyLqOuwqDyGVWMcKK2hRo7X/ojViA 3138KhqJfmuq7b1cr7Z1J+oKkYc442WuMAolXSmgbA764XNH0p5B6uIAYMgtUdc2Y4xW gF6Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782817340; x=1783422140; 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=s6UKdS5fC0734haXSHmcnGsohuQh5WonZmb4ruRSjAQ=; b=OA97EhOa3SLi+BbDB7EKhZoUal2tczao2g6A0BNYpfb2OF4/qt0DAw5hTlg/JmMXuV acB0XmcLB2HY6bepnnXF+D/BDGAajhl3441GnAUVrS+T1OwbJD0vVnB4TSZzGlsPfOns O+sCGAK2b6X00A8NbkQ6QWeahoViZDQNj5kcusPa/S+dXmPwvEm4C+pNYZxce+MeSiUq R0NORmVByJSJJNBtOOkxjkunAhXYlejuJsGCWLOixg6I/vFm1pqzU4KwQJHhE3wwYG9r 92xM0Fx+xOYAvHNfQ6AvXoxdXodbR8zQ679V0+TibQ+u4uEKNQ3ohJYOV4kHkjU1OuRb vZTg== X-Forwarded-Encrypted: i=1; AHgh+RpGuCWb3NbiB2VYI6dmLEuiarUNu+5z+2lqARZGX0aiMR+beL91idLpJhEA/if29kkN4Eo6JMU0TVRj+OE=@vger.kernel.org X-Gm-Message-State: AOJu0YywoS2jXiWt7ndaA0AbWDnzE3z9h3T2qk5Nm2IHAY+P0vJHjrc+ hM/KRBLYCOGh8p+oTt9cFWXdxf05aTiC79MxwMrdc/PpE2D6jOq8ug4F X-Gm-Gg: AfdE7cmd4nHg+i8Sli4fPwWuqRzuDSMIJ82Kp+8MCuQXK8GoD+ATs5+Vd6pMEUEm/AL vKMqENBWMi9VRm2ncZer9cHFmW5lIQlNHNht0XtZRs5cEL1UE3kYNwV9ggXmEzL42VY0b+8Uwzc CPlhV3pS70RuUbcQLYZkcAasjmKW7LDS/ZlN0Tikyy3RvuTwQVhK4ul5rGSAkp9G5/in1pkv1Vl VBf1T4T0RCZICMW+il3EjtzuiUzkyv3Hn0mO/7nRE3dhlIlgfD5wOadFMSG0M6AlOeBEa6+2sUG fCH2WrF3GTVYFRZ9demx+U5neIGUqZE95GSAZfj3Oy59glbS2HjXl4fV5zotGM/C71Nu6g/FFMO AjkX+vI3vM0dexycP+dCHcFrShx4ATgWFPgxwQ4XkEC3qNeJOST7wZeYIsc1N39hyehw7WuQDnE GHtYI2U6MYGzEmElvT/hYVflT5576pV1xkHfEvu/UV X-Received: by 2002:a17:902:f70f:b0:2ca:1114:3ac8 with SMTP id d9443c01a7336-2ca449ab595mr9725845ad.11.1782817339786; Tue, 30 Jun 2026 04:02:19 -0700 (PDT) Received: from m-upc-A520M-HDV.lan ([2400:2410:3f60:500:ae0d:35d1:dac9:a0e9]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ca37a701b5sm11455265ad.17.2026.06.30.04.02.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 30 Jun 2026 04:02:19 -0700 (PDT) From: Yuyang Huang To: Yuyang Huang Cc: "David S. Miller" , Andrew Lunn , David Ahern , Donald Hunter , Eric Dumazet , Ido Schimmel , Jakub Kicinski , Paolo Abeni , Shuah Khan , Simon Horman , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, netdev@vger.kernel.org Subject: [PATCH net-next 1/3] net: ipv4: report multicast group user count Date: Tue, 30 Jun 2026 20:02:05 +0900 Message-ID: <20260630110207.37841-2-sigefriedhyy@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260630110207.37841-1-sigefriedhyy@gmail.com> References: <20260630110207.37841-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: 8bit RTM_GETMULTICAST has been part of the rtnetlink ABI for a long time and already reports IPv4 multicast group membership through IFA_MULTICAST and IFA_CACHEINFO. It does not report how many consumers hold each membership, so userspace still has to parse /proc/net/igmp to get the Users column. Add IFA_MC_USERS as a u32 attribute carrying ip_mc_list::users in RTM_GETMULTICAST replies and entry-lifecycle notifications. This gives iproute2 enough information to migrate the IPv4 part of "ip maddr show" from procfs parsing to rtnetlink. Signed-off-by: Yuyang Huang --- Documentation/netlink/specs/rt-addr.yaml | 4 ++++ include/uapi/linux/if_addr.h | 1 + net/ipv4/igmp.c | 2 ++ 3 files changed, 7 insertions(+) diff --git a/Documentation/netlink/specs/rt-addr.yaml b/Documentation/netlink/specs/rt-addr.yaml index 163a106c41bb..0ecbd24c890c 100644 --- a/Documentation/netlink/specs/rt-addr.yaml +++ b/Documentation/netlink/specs/rt-addr.yaml @@ -123,6 +123,9 @@ attribute-sets: - name: proto type: u8 + - + name: mc-users + type: u32 operations: @@ -176,6 +179,7 @@ operations: value: 58 attributes: &mcaddr-attrs - multicast + - mc-users - cacheinfo dump: request: diff --git a/include/uapi/linux/if_addr.h b/include/uapi/linux/if_addr.h index aa7958b4e41d..7fb630b7fe31 100644 --- a/include/uapi/linux/if_addr.h +++ b/include/uapi/linux/if_addr.h @@ -36,6 +36,7 @@ enum { IFA_RT_PRIORITY, /* u32, priority/metric for prefix route */ IFA_TARGET_NETNSID, IFA_PROTO, /* u8, address protocol */ + IFA_MC_USERS, /* u32, multicast group users */ __IFA_MAX, }; diff --git a/net/ipv4/igmp.c b/net/ipv4/igmp.c index b6337a47c141..116ce7cec80e 100644 --- a/net/ipv4/igmp.c +++ b/net/ipv4/igmp.c @@ -1473,6 +1473,7 @@ int inet_fill_ifmcaddr(struct sk_buff *skb, struct net_device *dev, ci.ifa_valid = INFINITY_LIFE_TIME; if (nla_put_in_addr(skb, IFA_MULTICAST, im->multiaddr) < 0 || + nla_put_u32(skb, IFA_MC_USERS, READ_ONCE(im->users)) < 0 || nla_put(skb, IFA_CACHEINFO, sizeof(ci), &ci) < 0) { nlmsg_cancel(skb, nlh); return -EMSGSIZE; @@ -1494,6 +1495,7 @@ static void inet_ifmcaddr_notify(struct net_device *dev, skb = nlmsg_new(NLMSG_ALIGN(sizeof(struct ifaddrmsg)) + nla_total_size(sizeof(__be32)) + + nla_total_size(sizeof(u32)) + nla_total_size(sizeof(struct ifa_cacheinfo)), GFP_KERNEL); if (!skb) -- 2.43.0