Re: [PATCH 1/2] netlink: netlink_dump_start may take data pointer for callbacks
From: Pablo Neira Ayuso <pablo@netfilter.org>
Date: 2012-02-24 23:18:03
Also in:
netfilter-devel
On Fri, Feb 24, 2012 at 05:47:26PM -0500, David Miller wrote:
From: pablo@netfilter.org Date: Fri, 24 Feb 2012 23:14:07 +0100quoted
From: Pablo Neira Ayuso <pablo@netfilter.org> This patch modifies the netlink_dump_start function to take one generic pointer to data. This pointer can be used inside the dump() and done() callbacks via cb->data. 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>This isn't really your fault but netlink_dump_start() has an enormous number of arguments. Several of them are zero or NULL in all except one special situation. An entire argument is a lot of overhead for one situation to impose on all the others. I have no objection to the data callback scheme, it's just that the argument list of this interface is getting out of control. Usually, in situations like this, we have some control structure that holds all the control state and we pass that in instead. struct netlink_dump_control c = { .dump = dump, .done = done, ... }; netlink_dump_start(..., &c); It could be perhaps used here to get things back under control.
OK, I'll send a patch to make it like this.