nfq_nlmsg_verdict_put_pkt - Put replacement packet content into a netlink message
- Parameters
-
nlh | Pointer to netlink message |
pkt | Pointer to start of modified IP datagram |
plen | Length of modified IP datagram |
There is only ever a need to return packet content if it has been modified. Usually one of the nfq_*_mangle_* functions does the modifying.
This code snippet uses nfq_udp_mangle_ipv4. See nf-queue.c for context:
// main calls queue_cb (line 64) to process an enqueued packet:
// Extra variables
uint8_t *payload, *rep_data;
unsigned int match_offset, match_len, rep_len;
// The next line was commented-out (with payload void*)
payload = mnl_attr_get_payload(attr[NFQA_PAYLOAD]);
// Copy data to a packet buffer (allow 255 bytes for mangling).
pktb = pktb_alloc(AF_INET, payload, plen, 255);
// (decide that this packet needs mangling)
nfq_udp_mangle_ipv4(pktb, match_offset, match_len, rep_data, rep_len);
// nfq_udp_mangle_ipv4 updates packet length, no need to track locally
// Eventually nfq_send_verdict (line 39) gets called
// The received packet may or may not have been modified.
// Add this code before nfq_nlmsg_verdict_put call:
if (pktb_mangled(pktb))
nfq_nlmsg_verdict_put_pkt(nlh, pktb_data(pktb), pktb_len(pktb));
Definition at line 130 of file nlmsg.c.