diff options
author | Andrew Gallatin <gallatin@FreeBSD.org> | 2025-08-07 14:48:45 +0000 |
---|---|---|
committer | Andrew Gallatin <gallatin@FreeBSD.org> | 2025-08-07 14:55:16 +0000 |
commit | c224b2ce7de0faa28ea87edf6e74de0e4e9d33f9 (patch) | |
tree | ea4af8974837b4707d2bde5d2ba6b10aad9c4752 /contrib/bmake/unit-tests/directive-error.mk | |
parent | a39277782140d65abd792cf06694661a526464d0 (diff) |
The IPv4 packet parsing logic in iflib is incredibly complex,
prematurely optimized, and believes all the world is TCP.
This causes it to pullup part of the UDP payload into
the packet header, causing unneeded memory copies.
This impacts a project I'm working on, and also impacts
nearly any kernel user of UDP, like NFS. Eg, NFS over UDP
will result in pullups for every datagram sent over an iflib NIC.
This patch:
- adds parsing for UDP to iflib
- attempts to pull up the correct header size, based on UDP or
TCP protocol type.
- simplifies packet parsing in iflib by
- no longer special casing having an ethernet header in a packet by
itself
- no longer checking that we're trying to pullup something beyond the
end of the packet. Since we're no longer trying to pull up a
larger TCP header, attempting to pullup something larger than
the packet should no longer happen. If it does, the packet is
malformed and m_pullup will return an error when it runs out of
data in the mbuf chain
Reviewed by: erj, glebius, kbowling
Sponsored by: Netflix
Differential Revision: https://reviews.freebsd.org/D51748
Diffstat (limited to 'contrib/bmake/unit-tests/directive-error.mk')
0 files changed, 0 insertions, 0 deletions