Hi Pablo, On Sun, Apr 26, 2020 at 03:23:53PM +0200, Pablo Neira Ayuso wrote: > Hi Duncan, > > This is another turn / incremental update to the pktbuff API based on > your feedback: > > Patch #1 adds pktb_alloc_head() to allocate the pkt_buff structure. > This patch also adds pktb_build_data() to set up the pktbuff > data pointer. > > Patch #2 updates the existing example to use pktb_alloc_head() and > pktb_build_data(). > > Patch #3 adds a few helper functions to set up the pointer to the > network header. > > Your goal is to avoid the memory allocation and the memcpy() in > pktb_alloc(). With this scheme, users pre-allocate the pktbuff object > from the configuration step, and then this object is recycled for each > packet that is received from the kernel. > > Would this update fit for your usecase? No, sorry. The show-stopper is, no allowance for the "extra" arg, when you might want to mangle a packet tobe larger than it was. For "extra" support, you need something with the sophistication of pktb_malloc2. If extra == 0, pktb_malloc2 optimises by leaving the packet data where it was. Actually pktb_malloc2 doesn't need to make this decision. That can be deferred to pktb_mangle, which could do the copy if it has been told to expand a packet and the copy has not already been done (new "copy done" flag in the opaque struct pkt_buff). My nfq-based accidentally-written ad blocker would benefit from that deferment - I allow extra bytes in case I have to lengthen a domain name, but most of the time I'm shortening them. > > Thanks. > > P.S: I'm sorry for the time being, it's been hectic here. > > Pablo Neira Ayuso (3): > pktbuff: add pktb_alloc_head() and pktb_build_data() > example: nf-queue: use pkt_buff > pktbuff: add pktb_reset_network_header() and pktb_set_network_header() > > examples/nf-queue.c | 25 +++++++++++++++++++-- > include/libnetfilter_queue/pktbuff.h | 6 +++++ > src/extra/pktbuff.c | 33 ++++++++++++++++++++++++++++ > 3 files changed, 62 insertions(+), 2 deletions(-) > > -- > 2.20.1 > In https://www.spinics.net/lists/netfilter-devel/msg65830.html, you suggested a pair of functions: pktb_alloc2 & pktb_head_size. I really prefer that to your new suggestions. More later, Cheers ... Duncan.