> From: narsimharaj pentam [mailto:[email protected]] 
> Sent: Tuesday, 9 December 2025 18.05
> 
> Added dev group.
> 
> On Tue, Dec 9, 2025 at 10:11 PM narsimharaj pentam <[email protected]> 
> wrote:
> Hi 
> 
> I have a query related to ip fragmentation handling in DPDK.
> 
> The DPDK application is trying to send a larger packet than the configured 
> MTU on the interface, before sending the packet to the  i40e PMD the packet 
> will
> undergo fragmentation . The DPDK library function "rte_ipv4_fragment_packet" 
> is used for fragmentation. Function rte_ipv4_fragment_packet will create
> direct and indirect mbuf's  for a fragment , the indirect buffers will have 
> reference to the mbuf of the actual packet (zero copy).
> 
> The application will call function rte_eth_tx_burst to transmit fragments , 
> which internally invokes i40e_xmit_pkts , the question here  is when should 
> main application
> mbuf should be freed , can It be freed immediately  after i40e_xmit_pkts 
> returns success, not sure because the mbuf's are queued up in software ring 
> before actual transmit, 
> I am worried about the fragments holding references to the main application 
> buffer.

The original packet can be freed immediately when then fragments have been 
created.

This is what the fragmentation example does:
https://elixir.bootlin.com/dpdk/v25.11/source/examples/ip_fragmentation/main.c#L289

This is what happens:
The original packet has a reference counter (which was incremented for each of 
the indirect mbufs referring to it), so freeing it at that point doesn't put it 
back in the pool.
When the last of the indirect mbufs is freed (by the driver called by 
rte_eth_tx_burst()), the original packet's reference counter reaches zero, and 
then the original mbuf is put back in the pool.

> 
> Thanks.
> 
> BR
> Narsimha

Reply via email to