| Submitter | Pablo Neira |
|---|---|
| Date | Feb. 25, 2012, 12:30 a.m. |
| Message ID | <1330129817-28199-3-git-send-email-pablo@netfilter.org> |
| Download | mbox | patch |
| Permalink | /patch/143001/ |
| State | Accepted |
| Delegated to: | David Miller |
| Headers | show |
Comments
From: pablo@netfilter.org Date: Sat, 25 Feb 2012 01:30:16 +0100 > From: Pablo Neira Ayuso <pablo@netfilter.org> > > This patch allows you to pass a data pointer that can be > accessed from the dump callback. > > Netfilter is going to use this patch to provide filtered dumps > to user-space. This is specifically interesting in ctnetlink that > may handle lots of conntrack entries. We can save precious > cycles by skipping the conversion to TLV format of conntrack > entries that are not interesting for user-space. > > More specifically, ctnetlink will include one operation to allow > to filter the dumping of conntrack entries by ctmark values. > > Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org> Applied. -- 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
Patch
diff --git a/include/linux/netlink.h b/include/linux/netlink.h index 1f8c1a9..a2092f5 100644 --- a/include/linux/netlink.h +++ b/include/linux/netlink.h @@ -225,6 +225,7 @@ struct netlink_callback { int (*dump)(struct sk_buff * skb, struct netlink_callback *cb); int (*done)(struct netlink_callback *cb); + void *data; u16 family; u16 min_dump_alloc; unsigned int prev_seq, seq; @@ -251,6 +252,7 @@ __nlmsg_put(struct sk_buff *skb, u32 pid, u32 seq, int type, int len, int flags) struct netlink_dump_control { int (*dump)(struct sk_buff *skb, struct netlink_callback *); int (*done)(struct netlink_callback*); + void *data; u16 min_dump_alloc; }; diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c index ab74845..32bb753 100644 --- a/net/netlink/af_netlink.c +++ b/net/netlink/af_netlink.c @@ -1750,6 +1750,7 @@ int netlink_dump_start(struct sock *ssk, struct sk_buff *skb, cb->dump = control->dump; cb->done = control->done; cb->nlh = nlh; + cb->data = control->data; cb->min_dump_alloc = control->min_dump_alloc; atomic_inc(&skb->users); cb->skb = skb;