I'm still new to VPP, so I thank you more experienced folks for your insights. I'm implementing a tunneling protocol which requires fragmentation and aggregation of packets.
In a traditional system with mbufs (or dpdk buffers), it is possible to make a new buffer metadata chain referencing a piece of the original packet without copying the packet data. One key part of this is that the new chain can reference arbitrary chunks of data from N original packets, and that multiple such new chains can do so independently over a given original packet. Maybe I have misunderstood the way vlib buffers work, but it seems this approach is not possible here. For example the IP fragmentation code in vnet/ip/ip_frag.c copies the packet data, as does vlib_buffer_clone(). While avoiding a pointer lookup per packet is a win in the normal case, it seems pessimal for fragmentation/deaggregation. My initial thought is to support indirect data by adding, to the vlib buffer metadata, a flag bit and a buffer index for indirect data, as well as some kind of offset and length values. These could probably fit in the existing user flag and opaque areas. The other change would be something in the packet output code to handle this format. Is it correct that the VPP interface output functions eventually call dpdk interface transmit functions? I'm guessing that would be the place to do it. Am I missing something? Is there a better way to approach this problem? thanks! -- G. Paul Ziemba FreeBSD unix: 9:46AM up 149 days, 18:50, 19 users, load averages: 0.22, 0.28, 0.29
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#12641): https://lists.fd.io/g/vpp-dev/message/12641 Mute This Topic: https://lists.fd.io/mt/30784477/21656 Group Owner: vpp-dev+ow...@lists.fd.io Unsubscribe: https://lists.fd.io/g/vpp-dev/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-