pktbuff(3)

πŸ’– pktbuff β€” the user-space network packet buffer πŸ’–

okay bestie, so pktbuff is a library function set from libnetfilter_queue and it's literally the moment your packets get a lil home in userspace 🏠✨


✨ NAME ✨

pktbuff β€” user-space network packet buffer 🫢


🌸 SYNOPSIS 🌸

πŸŽ€ Modules

  • Other functions

πŸ¦‹ Functions

struct pkt_buff * pktb_alloc (int family, void *data, size_t len, size_t extra)
uint8_t * pktb_data (struct pkt_buff *pktb)
uint32_t pktb_len (struct pkt_buff *pktb)
void pktb_free (struct pkt_buff *pktb)
int pktb_mangle (struct pkt_buff *pktb, int dataoff, unsigned int match_offset, unsigned int match_len, const char *rep_buffer, unsigned int rep_len)
bool pktb_mangled (const struct pkt_buff *pktb)

πŸ’… Detailed Description πŸ’…

This library hands you the user-space network packet buffer. The whole abstraction is strongly inspired by the Linux kernel network buffer β€” you know, the one and only sk_buff πŸ‘‘ iykyk.


🌈 Function Documentation 🌈

⭐ struct pkt_buff * pktb_alloc (int family, void * data, size_t len, size_t extra)

pktb_alloc β€” allocate a new packet buffer 🍼✨

Parameters

  • family β€” tell it which family you're on. Currently supported families are AF_BRIDGE, AF_INET & AF_INET6. periodt.
  • data β€” pointer to packet data
  • len β€” packet length
  • extra β€” extra memory in the tail to be allocated (for mangling) πŸͺ„

This function returns a packet buffer that contains the packet data and some extra memory room in the tail (if requested).

Returns

Pointer to a new userspace packet buffer or NULL on failure. 😭

Errors

  • ENOMEM β€” from calloc()
  • EPROTONOSUPPORT β€” family was AF_BRIDGE and this is not an IP packet (v4 or v6)

See also

calloc(3)

Definition at line 52 of file pktbuff.c.


⭐ uint8_t * pktb_data (struct pkt_buff * pktb)

pktb_data β€” get pointer to network packet πŸ”

Parameters

  • pktb β€” pointer to userspace packet buffer

Returns

Pointer to start of network packet data within pktb.

It is appropriate to use pktb_data as the second argument of nfq_nlmsg_verdict_put_pkt() πŸ’Œ

Definition at line 105 of file pktbuff.c.


⭐ void pktb_free (struct pkt_buff * pktb)

pktb_free β€” release packet buffer πŸ•ŠοΈ

Parameters

  • pktb β€” pointer to userspace packet buffer

Definition at line 129 of file pktbuff.c.


⭐ uint32_t pktb_len (struct pkt_buff * pktb)

pktb_len β€” get length of packet buffer πŸ“

Parameters

  • pktb β€” pointer to userspace packet buffer

Returns

Length of packet contained within pktb.

It is appropriate to use pktb_len as the third argument of nfq_nlmsg_verdict_put_pkt() πŸ’Œ

Definition at line 119 of file pktbuff.c.


⭐ int pktb_mangle (struct pkt_buff * pktb, int dataoff, unsigned int match_offset, unsigned int match_len, const char * rep_buffer, unsigned int rep_len)

pktb_mangle β€” adjust contents of a packet βœ‚οΈβœ¨ (glow up but for bytes)

Parameters

  • pktb β€” pointer to userspace packet buffer
  • dataoff β€” supplementary offset, usually the offset from the layer 3 (IP) header to the layer 4 (TCP or UDP) header. Specify zero to access the layer 3 header. If pktb was created in family AF_BRIDGE, specify -ETH_HLEN (a negative offset) to access the layer 2 (MAC) header.
  • match_offset β€” further offset to content that you want to mangle
  • match_len β€” length of the existing content you want to mangle
  • rep_buffer β€” pointer to data you want to use to replace current content
  • rep_len β€” length of data you want to use to replace current content

Returns

1 for success and 0 for failure. Failure will occur if the extra argument to the pktb_alloc() call that created pktb is less than the excess of rep_len over match_len. πŸ’€

Warning 🚨 bestie listen to me: pktb_mangle does not update any checksums. Developers should use the appropriate mangler for the protocol level: nfq_ip_mangle(), nfq_tcp_mangle_ipv4() or nfq_udp_mangle_ipv4(). IPv6 versions are planned. πŸ™ˆ

It is appropriate to use pktb_mangle to change the MAC header.

Definition at line 314 of file pktbuff.c.


⭐ bool pktb_mangled (const struct pkt_buff * pktb)

pktb_mangled β€” test whether packet has been mangled πŸ€”

Parameters

  • pktb β€” pointer to userspace packet buffer

Returns

true if packet has been mangled (modified), else false.

When assembling a verdict, it is not necessary to return the contents of un-modified packets. Use pktb_mangled to decide whether packet contents need to be returned. lowkey efficient πŸ’…

Definition at line 359 of file pktbuff.c.


πŸ‘‘ Author πŸ‘‘

Generated automatically by Doxygen for libnetfilter_queue from the source code. no cap, a robot wrote the author section and honestly? slay πŸ€–βœ¨


and that's the whole page bestie 🫢 this was Version 1.0.5, dated with the libnetfilter_queue manpage energy, and yes the footer said pktbuff(3) too β€” go forth and mangle responsibly πŸŒΈπŸ’–πŸ§š

πŸ“¦ where this page comes from