[PATCH v15 00/18] net/pcap: improvements and test suite

Stephen Hemminger
2026-02-13T17:03:41Z

This series contains improvements to the PCAP PMD including new
features, bug fixes, code cleanup, and a comprehensive test suite.

New features:
- VLAN tag insertion on Tx and stripping on Rx
- Runtime VLAN offload configuration via vlan_offload_set callback
- Nanosecond precision timestamps (when hardware/libpcap supports it)
- Accurate link state, speed, and duplex reporting in interface mode
- Link status change (LSC) interrupt support in interface mode
- EOF notification via link status change for rx_pcap mode
- Support for Windows interface mode
- Advertise RTE_ETH_TX_OFFLOAD_MULTI_SEGS capability
- Configurable snapshot length via snaplen devarg

Bug fixes:
- Fix multi-segment transmit to dynamically allocate instead of
silently truncating packets larger than 9K stack buffer
- Change Tx burst to always consume all packets; failed sends
increment error counter rather than leaving mbufs for retry
(pcap_sendpacket failures are not transient)
- Reject non-Ethernet interfaces to prevent malformed packets
and kernel warnings on FreeBSD/macOS loopback
- Fix infinite_rx ring fill applying VLAN strip and timestamp
offloads to template packets, preventing those offloads from
working correctly during packet delivery

Code cleanup:
- Convert internal flags from int to bool
- Remove unnecessary casts of void* from rte_zmalloc
- Replace rte_malloc/rte_memcpy with libc equivalents in osdep code
- Include headers explicitly rather than relying on indirect includes
- Remove unnecessary volatile qualifier on statistics
- Reduce scope of file-level variables
- Defer pcap handle opening until device start
- Use bulk free for better Tx performance

Testing:
- Add comprehensive unit test suite covering basic operations,
timestamps, jumbo frames, VLAN handling, multi-queue, and more
- Test discovers network interfaces using pcap_findalldevs API
for portable interface enumeration across Linux, FreeBSD, macOS,
and Windows
- New tests for runtime VLAN offload toggle, VLAN strip with
infinite_rx mode, and timestamp generation in infinite_rx mode

v15:
- Fix "Perodic" typo in LSC alarm comment
- Fix missing space after comma in rte_eal_alarm_set() call
- Use eth_link_update() instead of direct dev_link.link_status
write in EOF rx path for proper atomic link status update
- Add detailed comment block to eth_pcap_tx() documenting
PF_PACKET backpressure semantics and tx_burst return convention
- Add PMD_TX_LOG/PMD_RX_LOG conditional debug logging macros
gated by RTE_ETHDEV_DEBUG_TX/RTE_ETHDEV_DEBUG_RX

v14:
- Add LSC interrupt support for iface mode using alarm-based polling
- Add EOF devarg for rx_pcap mode: signals end-of-file via link
down and LSC event (mutually exclusive with infinite_rx)
- Fix mbuf leak in eth_pcap_tx() when dropping oversized
multi-segment packets (missing rte_pktmbuf_free before continue)
- Fix rte_pktmbuf_read() NULL path falling through to success
counters (num_tx/tx_bytes now inside else branch only)
- Fix VLAN insert for indirect/shared mbufs: use rte_pktmbuf_adj()
to advance data_off, preventing duplicated Ethernet header in
the mbuf chain

v13:
- Fix VLAN insert to pass mbuf by reference so caller sees
updated pointer after indirect mbuf handling
- Fix VLAN insert error path to not free mbuf (let bulk free
handle it, avoiding double-free)
- Fix handling of pcap_sendpacket() errors
- Fix theoretical format string overflows in test suite

Stephen Hemminger (18):
maintainers: update for pcap driver
doc: update features for PCAP PMD
net/pcap: include used headers
net/pcap: remove unnecessary casts
net/pcap: avoid using rte_malloc and rte_memcpy
net/pcap: rework transmit burst handling
net/pcap: consolidate boolean flag handling
net/pcap: support VLAN strip and insert offloads
net/pcap: add link state and speed for interface mode
net/pcap: support nanosecond timestamp precision
net/pcap: reject non-Ethernet interfaces
net/pcap: reduce scope of file-level variables
net/pcap: avoid use of volatile
net/pcap: clarify maximum received packet
net/pcap: add snapshot length devarg
net/pcap: add link status change support for iface mode
net/pcap: add EOF notification via link status change
test: add comprehensive test suite for pcap PMD

MAINTAINERS | 1 +
app/test/meson.build | 2 +
app/test/test_pmd_pcap.c | 3422 ++++++++++++++++++++++++
doc/guides/nics/features/pcap.ini | 9 +
doc/guides/nics/pcap.rst | 41 +
doc/guides/rel_notes/release_26_03.rst | 12 +
drivers/net/pcap/pcap_ethdev.c | 921 +++++--
drivers/net/pcap/pcap_osdep.h | 39 +
drivers/net/pcap/pcap_osdep_freebsd.c | 98 +-
drivers/net/pcap/pcap_osdep_linux.c | 124 +-
drivers/net/pcap/pcap_osdep_windows.c | 95 +-
11 files changed, 4525 insertions(+), 239 deletions(-)
create mode 100644 app/test/test_pmd_pcap.c

--
2.51.0