From: "Morten Brørup" <mb@smartsharesystems.com>
To: "narsimharaj pentam" <pnarsimharaj@gmail.com>, <users@dpdk.org>,
<dev@dpdk.org>
Subject: RE: Indirect mbuf handling
Date: Wed, 10 Dec 2025 10:44:06 +0100 [thread overview]
Message-ID: <98CBD80474FA8B44BF855DF32C47DC35F655D0@smartserver.smartshare.dk> (raw)
In-Reply-To: <CAFLDJDoVgNj9JjUbDEUP=gaXOMKS2jYiYVFFPULWOthfPqzwFg@mail.gmail.com>
> From: narsimharaj pentam [mailto:pnarsimharaj@gmail.com]
> Sent: Tuesday, 9 December 2025 18.05
>
> Added dev group.
>
> On Tue, Dec 9, 2025 at 10:11 PM narsimharaj pentam <pnarsimharaj@gmail.com> 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
next prev parent reply other threads:[~2025-12-10 9:44 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <CAFLDJDprPRB8mjybypwuvHOEp+MfXjSK6W1YJD=Db2CURUhLNA@mail.gmail.com>
2025-12-09 17:05 ` narsimharaj pentam
2025-12-10 9:44 ` Morten Brørup [this message]
2025-12-10 11:41 ` narsimharaj pentam
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=98CBD80474FA8B44BF855DF32C47DC35F655D0@smartserver.smartshare.dk \
--to=mb@smartsharesystems.com \
--cc=dev@dpdk.org \
--cc=pnarsimharaj@gmail.com \
--cc=users@dpdk.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).