* [PATCH net-next v5 1/4] netlink: specs: rt-addr: fix the type of target-netnsid
2026-09-14 1:45 [PATCH net-next v5 0/4] rtnetlink: dump link-layer multicast addresses Yuyang Huang
@ 2026-09-14 1:45 ` Yuyang Huang
2026-09-14 1:45 ` [PATCH net-next v5 2/4] rtnetlink: add AF_PACKET multicast dumps Yuyang Huang
` (2 subsequent siblings)
3 siblings, 0 replies; 6+ messages in thread
From: Yuyang Huang @ 2026-09-14 1:45 UTC (permalink / raw)
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, linux-kselftest, netdev
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 <sigefriedhyy@gmail.com>
Reviewed-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
---
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/netlink/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
--
2.43.0
^ permalink raw reply [flat|nested] 6+ messages in thread* [PATCH net-next v5 2/4] rtnetlink: add AF_PACKET multicast dumps
2026-09-14 1:45 [PATCH net-next v5 0/4] rtnetlink: dump link-layer multicast addresses Yuyang Huang
2026-09-14 1:45 ` [PATCH net-next v5 1/4] netlink: specs: rt-addr: fix the type of target-netnsid Yuyang Huang
@ 2026-09-14 1:45 ` Yuyang Huang
2026-09-14 1:45 ` [PATCH net-next v5 3/4] netlink: specs: rt-addr: document " Yuyang Huang
2026-09-14 1:45 ` [PATCH net-next v5 4/4] selftests: net: test " Yuyang Huang
3 siblings, 0 replies; 6+ messages in thread
From: Yuyang Huang @ 2026-09-14 1:45 UTC (permalink / raw)
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, linux-kselftest, netdev
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 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.
There are no legacy users of AF_PACKET requests, so they are always
validated: prefixlen, flags and scope must be zero and a non-zero
ifa_index restricts the dump to that device. IFA_TARGET_NETNSID selects
another netns like the IPv4 and IPv6 dumps and is the only attribute
accepted. The dump runs under RCU and netif_addr_lock_bh() and does not
need RTNL.
Signed-off-by: Yuyang Huang <sigefriedhyy@gmail.com>
Reviewed-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
---
include/uapi/linux/if_addr.h | 1 +
net/core/rtnetlink.c | 174 +++++++++++++++++++++++++++++++++++
2 files changed, 175 insertions(+)
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
struct ifa_cacheinfo {
__u32 ifa_prefered;
diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
index be9d1625bac3..5f3e692a828b 100644
--- a/net/core/rtnetlink.c
+++ b/net/core/rtnetlink.c
@@ -4571,6 +4571,178 @@ static int rtnl_dump_all(struct sk_buff *skb, struct netlink_callback *cb)
return skb->len ? : ret;
}
+static int rtnl_fill_mcaddr(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 = ha->global_use ? IFA_F_GLOBAL : 0;
+ struct ifaddrmsg *ifm;
+ struct nlmsghdr *nlh;
+
+ nlh = nlmsg_put(skb, portid, seq, RTM_GETMULTICAST, sizeof(*ifm),
+ flags);
+ if (!nlh)
+ return -EMSGSIZE;
+
+ ifm = nlmsg_data(nlh);
+ ifm->ifa_family = AF_PACKET;
+ ifm->ifa_prefixlen = 0;
+ /* ifm->ifa_flags holds 8 bits, the full value is in IFA_FLAGS */
+ ifm->ifa_flags = (__u8)ifa_flags;
+ ifm->ifa_scope = RT_SCOPE_LINK;
+ ifm->ifa_index = dev->ifindex;
+
+ if ((netnsid >= 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 rtnl_dump_mcaddr_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 = 0;
+ int err = 0;
+
+ netif_addr_lock_bh(dev);
+ netdev_for_each_mc_addr(ha, dev) {
+ if (addr_idx < *s_addr_idx) {
+ addr_idx++;
+ continue;
+ }
+ err = rtnl_fill_mcaddr(skb, dev, ha, NETLINK_CB(cb->skb).portid,
+ cb->nlh->nlmsg_seq, flags, netnsid);
+ if (err < 0)
+ break;
+ addr_idx++;
+ }
+ netif_addr_unlock_bh(dev);
+
+ *s_addr_idx = err < 0 ? addr_idx : 0;
+
+ return err;
+}
+
+struct rtnl_mcaddr_dump_filter {
+ struct net *tgt_net;
+ netns_tracker ns_tracker;
+ int netnsid;
+ int ifindex;
+};
+
+static const struct nla_policy rtnl_mcaddr_dump_policy[IFA_MAX + 1] = {
+ [IFA_TARGET_NETNSID] = { .type = NLA_S32 },
+};
+
+static int rtnl_valid_dump_mcaddr_req(const struct nlmsghdr *nlh,
+ struct sock *sk,
+ struct rtnl_mcaddr_dump_filter *filter,
+ struct netlink_ext_ack *extack)
+{
+ struct nlattr *tb[IFA_MAX + 1];
+ struct ifaddrmsg *ifm;
+ int err;
+
+ ifm = 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 = nlmsg_parse(nlh, sizeof(*ifm), tb, IFA_MAX,
+ rtnl_mcaddr_dump_policy, extack);
+ if (err < 0)
+ return err;
+
+ if (tb[IFA_TARGET_NETNSID]) {
+ struct net *net;
+
+ filter->netnsid = nla_get_s32(tb[IFA_TARGET_NETNSID]);
+ net = 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 = net;
+ }
+
+ filter->ifindex = ifm->ifa_index;
+
+ return 0;
+}
+
+static int rtnl_dump_mcaddr(struct sk_buff *skb, struct netlink_callback *cb)
+{
+ struct rtnl_mcaddr_dump_filter filter = {
+ .tgt_net = sock_net(skb->sk),
+ .netnsid = -1,
+ };
+ unsigned int flags = NLM_F_MULTI;
+ struct {
+ unsigned long ifindex;
+ int addr_idx;
+ } *ctx = (void *)cb->ctx;
+ unsigned long s_ifindex;
+ struct net_device *dev;
+ int err;
+
+ err = rtnl_valid_dump_mcaddr_req(cb->nlh, skb->sk, &filter,
+ cb->extack);
+ if (err < 0)
+ return err;
+
+ rcu_read_lock();
+
+ if (filter.ifindex) {
+ cb->answer_flags |= NLM_F_DUMP_FILTERED;
+ flags |= NLM_F_DUMP_FILTERED;
+ dev = dev_get_by_index_rcu(filter.tgt_net, filter.ifindex);
+ if (!dev) {
+ err = -ENODEV;
+ goto out;
+ }
+ err = rtnl_dump_mcaddr_dev(dev, skb, cb, &ctx->addr_idx, flags,
+ filter.netnsid);
+ goto out;
+ }
+
+ s_ifindex = 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 != s_ifindex)
+ ctx->addr_idx = 0;
+ err = rtnl_dump_mcaddr_dev(dev, skb, cb, &ctx->addr_idx, flags,
+ filter.netnsid);
+ if (err < 0)
+ break;
+ }
+out:
+ rcu_read_unlock();
+ if (filter.netnsid >= 0)
+ put_net_track(filter.tgt_net, &filter.ns_tracker);
+ return err;
+}
+
struct sk_buff *rtmsg_ifinfo_build_skb(int type, struct net_device *dev,
unsigned int change,
u32 event, gfp_t flags, int *new_nsid,
@@ -7256,6 +7428,8 @@ static const struct rtnl_msg_handler rtnetlink_rtnl_msg_handlers[] __initconst =
{.msgtype = RTM_SETSTATS, .doit = rtnl_stats_set},
{.msgtype = RTM_NEWLINKPROP, .doit = rtnl_newlinkprop},
{.msgtype = RTM_DELLINKPROP, .doit = rtnl_dellinkprop},
+ {.protocol = PF_PACKET, .msgtype = RTM_GETMULTICAST,
+ .dumpit = rtnl_dump_mcaddr, .flags = RTNL_FLAG_DUMP_UNLOCKED},
{.protocol = PF_BRIDGE, .msgtype = RTM_GETLINK,
.dumpit = rtnl_bridge_getlink},
{.protocol = PF_BRIDGE, .msgtype = RTM_DELLINK,
--
2.43.0
^ permalink raw reply [flat|nested] 6+ messages in thread* [PATCH net-next v5 3/4] netlink: specs: rt-addr: document AF_PACKET multicast dumps
2026-09-14 1:45 [PATCH net-next v5 0/4] rtnetlink: dump link-layer multicast addresses Yuyang Huang
2026-09-14 1:45 ` [PATCH net-next v5 1/4] netlink: specs: rt-addr: fix the type of target-netnsid Yuyang Huang
2026-09-14 1:45 ` [PATCH net-next v5 2/4] rtnetlink: add AF_PACKET multicast dumps Yuyang Huang
@ 2026-09-14 1:45 ` Yuyang Huang
2026-09-14 1:45 ` [PATCH net-next v5 4/4] selftests: net: test " Yuyang Huang
3 siblings, 0 replies; 6+ messages in thread
From: Yuyang Huang @ 2026-09-14 1:45 UTC (permalink / raw)
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, linux-kselftest, netdev
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 <sigefriedhyy@gmail.com>
Reviewed-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
---
Documentation/netlink/specs/rt-addr.yaml | 15 +++++++++++++--
1 file changed, 13 insertions(+), 2 deletions(-)
diff --git a/Documentation/netlink/specs/rt-addr.yaml b/Documentation/netlink/specs/rt-addr.yaml
index 17ead2203451..1a17e55d1cca 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
attribute-sets:
-
@@ -168,7 +170,13 @@ 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.
attribute-set: addr-attrs
fixed-header: ifaddrmsg
do:
@@ -181,10 +189,13 @@ operations:
- multicast
- mc-users
- cacheinfo
+ - flags
+ - target-netnsid
dump:
request:
value: 58
- attributes: []
+ attributes:
+ - target-netnsid
reply:
value: 58
attributes: *mcaddr-attrs
--
2.43.0
^ permalink raw reply [flat|nested] 6+ messages in thread* [PATCH net-next v5 4/4] selftests: net: test AF_PACKET multicast dumps
2026-09-14 1:45 [PATCH net-next v5 0/4] rtnetlink: dump link-layer multicast addresses Yuyang Huang
` (2 preceding siblings ...)
2026-09-14 1:45 ` [PATCH net-next v5 3/4] netlink: specs: rt-addr: document " Yuyang Huang
@ 2026-09-14 1:45 ` Yuyang Huang
2026-09-14 16:04 ` Nicolas Dichtel
3 siblings, 1 reply; 6+ messages in thread
From: Yuyang Huang @ 2026-09-14 1:45 UTC (permalink / raw)
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, linux-kselftest, netdev
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. Skip
when the kernel does not support AF_PACKET dumps.
Signed-off-by: Yuyang Huang <sigefriedhyy@gmail.com>
---
tools/testing/selftests/net/rtnetlink.py | 75 +++++++++++++++++++++++-
1 file changed, 72 insertions(+), 3 deletions(-)
diff --git a/tools/testing/selftests/net/rtnetlink.py b/tools/testing/selftests/net/rtnetlink.py
index 5cc3ebdcf08d..d69d375a2def 100755
--- a/tools/testing/selftests/net/rtnetlink.py
+++ b/tools/testing/selftests/net/rtnetlink.py
@@ -1,17 +1,21 @@
#!/usr/bin/env python3
# SPDX-License-Identifier: GPL-2.0
+import errno
import socket
import struct
import time
from lib.py import bkg, ip, ksft_exit, ksft_run, ksft_eq, ksft_ge, ksft_true, KsftSkipEx
-from lib.py import ksft_not_in, ksft_not_none
-from lib.py import CmdExitFailure, NetNS, NetNSEnter, RtnlAddrFamily, RtnlRouteFamily
+from lib.py import ksft_in, ksft_not_in, ksft_not_none
+from lib.py import CmdExitFailure, NetNS, NetNSEnter, NlError, RtnlAddrFamily, RtnlRouteFamily
from lib.py import defer
IPV4_ALL_HOSTS_MULTICAST = b'\xe0\x00\x00\x01'
IPV4_TEST_MULTICAST = b'\xef\x01\x01\x01'
IPV6_TEST_MULTICAST = bytes.fromhex('ff020000000000000000000000000123')
+ETH_ALL_HOSTS_MULTICAST = bytes.fromhex('01005e000001')
+ETH_TEST_MULTICAST_STR = '01:00:5e:01:01:01'
+ETH_TEST_MULTICAST = bytes.fromhex(ETH_TEST_MULTICAST_STR.replace(':', ''))
def _users_for(rtnl: RtnlAddrFamily, family: int, grp: bytes, ifindex: int):
@@ -105,6 +109,70 @@ def dump_mcaddr6_check() -> None:
s2.close()
+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 = socket.if_nametoindex("dummy1")
+ ip(f"maddr add {ETH_TEST_MULTICAST_STR} dev dummy1")
+
+ rtnl = RtnlAddrFamily()
+ defer(rtnl.close)
+ try:
+ addresses = rtnl.getmulticast(
+ {"ifa-family": socket.AF_PACKET, "ifa-index": dev_idx},
+ dump=True)
+ except NlError as e:
+ if e.error == errno.EOPNOTSUPP:
+ raise KsftSkipEx(
+ "kernel does not support AF_PACKET multicast dump")
+ raise
+
+ # 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 = {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 = entries.get(ETH_ALL_HOSTS_MULTICAST)
+ ksft_not_none(all_hosts,
+ "dummy1 does not have the all-hosts link-layer address")
+ if all_hosts is not None:
+ ksft_not_in('global', all_hosts['flags'],
+ "protocol entry is global")
+
+ static = entries.get(ETH_TEST_MULTICAST)
+ ksft_not_none(static, "dummy1 does not have the SIOCADDMULTI address")
+ 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=peer)
+ ip("link set dummy3 up", ns=peer)
+ peer_idx = ip("link show dummy3", json=True, ns=peer)[0]['ifindex']
+
+ addresses = rtnl.getmulticast(
+ {"ifa-family": socket.AF_PACKET, "target-netnsid": 5,
+ "ifa-index": peer_idx}, dump=True)
+ ksft_eq({(addr['ifa-index'], addr['target-netnsid'])
+ for addr in addresses}, {(peer_idx, 5)},
+ "target-netnsid did not dump the peer netns")
+
+
def ipv4_devconf_notify() -> None:
"""
Configure an interface and set ipv4-devconf values through netlink
@@ -315,7 +383,8 @@ def ipv6_route_del_reason_absent() -> None:
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])
--
2.43.0
^ permalink raw reply [flat|nested] 6+ messages in thread* Re: [PATCH net-next v5 4/4] selftests: net: test AF_PACKET multicast dumps
2026-09-14 1:45 ` [PATCH net-next v5 4/4] selftests: net: test " Yuyang Huang
@ 2026-09-14 16:04 ` Nicolas Dichtel
0 siblings, 0 replies; 6+ messages in thread
From: Nicolas Dichtel @ 2026-09-14 16:04 UTC (permalink / raw)
To: Yuyang Huang
Cc: Andrew Lunn, David S. Miller, David Ahern, Donald Hunter,
Eric Dumazet, Ido Schimmel, Jacob Keller, Jakub Kicinski,
Kuniyuki Iwashima, Nikolaos Gkarlis, Paolo Abeni,
Sabrina Dubroca, Shuah Khan, Simon Horman, Stanislav Fomichev,
linux-kernel, linux-kselftest, netdev
Le 14/09/2026 à 03:45, Yuyang Huang a écrit :
> 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. Skip
> when the kernel does not support AF_PACKET dumps.
>
> Signed-off-by: Yuyang Huang <sigefriedhyy@gmail.com>
Reviewed-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
^ permalink raw reply [flat|nested] 6+ messages in thread