Message ID | 1443897826-30209-1-git-send-email-dsa@cumulusnetworks.com |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
On 10/03/2015 08:43 PM, David Ahern wrote: > Add support for filtering neighbor dumps by device by adding the > NDA_IFINDEX attribute to the dump request. > > Signed-off-by: David Ahern <dsa@cumulusnetworks.com> > --- > v2 > - fix or on the index as noticed by Eagle-Eye Nikolay > > net/core/neighbour.c | 17 +++++++++++++++-- > 1 file changed, 15 insertions(+), 2 deletions(-) > LGTM, Reviewed-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com> -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
From: David Ahern <dsa@cumulusnetworks.com> Date: Sat, 3 Oct 2015 11:43:46 -0700 > Add support for filtering neighbor dumps by device by adding the > NDA_IFINDEX attribute to the dump request. > > Signed-off-by: David Ahern <dsa@cumulusnetworks.com> > --- > v2 > - fix or on the index as noticed by Eagle-Eye Nikolay Applied, thanks. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/net/core/neighbour.c b/net/core/neighbour.c index 8c57fdf4d68e..f7786eaef613 100644 --- a/net/core/neighbour.c +++ b/net/core/neighbour.c @@ -2249,6 +2249,14 @@ static bool neigh_master_filtered(struct net_device *dev, int master_idx) return false; } +static bool neigh_ifindex_filtered(struct net_device *dev, int filter_idx) +{ + if (filter_idx && dev->ifindex != filter_idx) + return true; + + return false; +} + static int neigh_dump_table(struct neigh_table *tbl, struct sk_buff *skb, struct netlink_callback *cb) { @@ -2259,16 +2267,19 @@ static int neigh_dump_table(struct neigh_table *tbl, struct sk_buff *skb, int rc, h, s_h = cb->args[1]; int idx, s_idx = idx = cb->args[2]; struct neigh_hash_table *nht; - int filter_master_idx = 0; + int filter_master_idx = 0, filter_idx = 0; unsigned int flags = NLM_F_MULTI; int err; err = nlmsg_parse(nlh, sizeof(struct ndmsg), tb, NDA_MAX, NULL); if (!err) { + if (tb[NDA_IFINDEX]) + filter_idx = nla_get_u32(tb[NDA_IFINDEX]); + if (tb[NDA_MASTER]) filter_master_idx = nla_get_u32(tb[NDA_MASTER]); - if (filter_master_idx) + if (filter_idx || filter_master_idx) flags |= NLM_F_DUMP_FILTERED; } @@ -2283,6 +2294,8 @@ static int neigh_dump_table(struct neigh_table *tbl, struct sk_buff *skb, n = rcu_dereference_bh(n->next)) { if (!net_eq(dev_net(n->dev), net)) continue; + if (neigh_ifindex_filtered(n->dev, filter_idx)) + continue; if (neigh_master_filtered(n->dev, filter_master_idx)) continue; if (idx < s_idx)
Add support for filtering neighbor dumps by device by adding the NDA_IFINDEX attribute to the dump request. Signed-off-by: David Ahern <dsa@cumulusnetworks.com> --- v2 - fix or on the index as noticed by Eagle-Eye Nikolay net/core/neighbour.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-)