You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Raw-engine MTU sizing accounts for RX decap/pop overhead, but does not include TX hardware encap/push overhead.
For TX transform flows, the application frame fits the configured TX memory region, but the NIC egress wire frame grows after VLAN push or VXLAN/GRE/NVGRE encap — so the MTU can be too small for the transmitted frame.
Current code:
DPDK adds RX overhead via flow_max_decap_wire_overhead(rx.flows_).
ibverbs ensure_port_mtus() adds RX overhead via flow_max_decap_wire_overhead(intf.rx_.flows_).
TX transform overhead is validated with flow_action_wire_overhead(), but is not included in MTU sizing.
This is separate from PR #198, which fixes DPDK asymmetric RX/TX queue-buffer MTU sizing without changing TX transform accounting.
Follow-up cleanup after this fix:
Once TX transform overhead is included in MTU sizing, DPDK can also stop counting generated dummy RX queues there, making dummy queues consistently setup-only without risking a TX-only transform regression.
Describe the bug
Raw-engine MTU sizing accounts for RX decap/pop overhead, but does not include TX hardware encap/push overhead.
For TX transform flows, the application frame fits the configured TX memory region, but the NIC egress wire frame grows after VLAN push or VXLAN/GRE/NVGRE encap — so the MTU can be too small for the transmitted frame.
Current code:
flow_max_decap_wire_overhead(rx.flows_).ensure_port_mtus()adds RX overhead viaflow_max_decap_wire_overhead(intf.rx_.flows_).flow_action_wire_overhead(), but is not included in MTU sizing.Steps/Code to reproduce bug
Suggested repro target (Needs hardware confirmation):
Use a raw ibverbs TX-only config.
Configure a TX flow with VLAN push or VXLAN/GRE/NVGRE encap.
Choose a TX buffer frame where:
TX buffer frame + encap overhead > configured netdev MTUStart DAQIRI and confirm MTU sizing covers only the TX buffer frame, not the post-encap wire frame.
Send traffic and check NIC/peer counters for drops or missing packets.
Expected behavior
For raw DPDK and raw ibverbs, MTU sizing should be direction-aware:
A TX-side helper such as
flow_max_encap_wire_overhead(tx.flows_)could mirrorflow_max_decap_wire_overhead()and reuseflow_action_wire_overhead().Environment overview
Environment details
Observed by code inspection on current
main(PR #198 context); hardware repro still needed.Relevant code paths:
include/daqiri/types.h:flow_action_wire_overhead(),flow_max_decap_wire_overhead()src/engines/dpdk/daqiri_dpdk_engine.cpp: DPDK MTU sizingsrc/engines/ibverbs/daqiri_ibverbs_engine.cpp:ensure_port_mtus()Additional context
This is separate from PR #198, which fixes DPDK asymmetric RX/TX queue-buffer MTU sizing without changing TX transform accounting.
Follow-up cleanup after this fix: