> On 31 Oct 2018, at 19:42, Prashant Upadhyaya <[email protected]> wrote:
>
> Hi,
>
> I have two buffer chains whose starting vlib_buffer_t's are --
> vlib_buffer_t* chainHead1; (let's call this chain1)
> vlib_buffer_t* chainHead2; (let's call this chain2)
> The chain1, chain2 may have one or more buffers each.
>
> Is there any convenience function which connects the last buffer of
> first chain1 to the first buffer of chain2, so that the entire bigger
> chain can be accessed via chainHead1 as the starting point.
>
> So I need something like this --
> void vlib_buffer_cat(vlib_buffer_t* chain1, vlib_buffer_t* chain2)
>
> I suppose I will have to chase the last buffer of chain1 and then
> connect it to the first of chain2 and then modify the chain1 first
> buffer contents suitably for the length, flags etc. not to forget the
> possible modifications in the first buffer of chain2.
>
> If someone has this already, that will save me some rookie mistakes
> and hours of debugging when it goofs up my packet processing at my
> business logic level :)
>
Should be something like:
void
vlib_buffer_join (vlib_main_t * vm, vlib_buffer_t * c1, vlib_buffer_t *c2)
{
vlib_buffer_t *c1t = c1;
/* find c1 tail */
while (c1t->flags & VLIB_BUFFER_NEXT_PRESENT)
c1t = vlib_get_buffer (vm, c1t->next_buffer);
c1t->flags &= VLIB_BUFFER_NEXT_PRESENT;
c1t->next_buffer = vlib_get_buffer_index (vm, c2);
if (PREDICT_TRUE (c2->flags & VLIB_BUFFER_TOTAL_LENGTH_VALID))
c1->total_length_not_including_first_buffer +=
c2->total_length_not_including_first_buffer + c2->current_length;
else
vlib_buffer_length_in_chain_slow_path (vm, c1);
}
Not tested, hope will not cause hours of debugging...
--
Damjan
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#11058): https://lists.fd.io/g/vpp-dev/message/11058
Mute This Topic: https://lists.fd.io/mt/27808613/21656
Group Owner: [email protected]
Unsubscribe: https://lists.fd.io/g/vpp-dev/unsub [[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-