fib/rib: allow storing void * instead of nexthop index

Medvedkin, Vladimir vladimir.medvedkin at intel.com
Wed Jul 31 17:53:44 CEST 2024


Hi Robin,


On 31/07/2024 16:04, Robin Jarry wrote:
> Hi Vladimir,
>
> I noticed that the fib/rib APIs (both IPv4 and IPv6) require the next 
> hops to be represented as integer indexes. Reading the code, I noticed 
> that they are stored as uint64_t with the MSB used for internal purposes.

I believe you are asking about FIB, not RIB. In current FIB 
implementation 1 LSB is used for internal purposes.


>
> This require either having a contiguous array of nexthop objects and 
> choose an index in that array,

As far as I know that's what most of "l3 forward" applications (aka 
routers) are doing, if they are interested in performance. Not only DPDK 
powered.


> or store pointer offsets as nexthop indexes and do pointer arithmetics 
> to reconstruct the real pointers. Both are not very practical and/or 
> hacky.
>
> Would it be possible to store arbitrary pointers? That would mean 
> moving that 64th bit information elsewhere.

For arbitrary pointer - no, since it needs to store 1 more bit for 
internal purpose. However, if you have 2 byte aligned pointer you can 
store the pointer shifted right by 1 bit, and after lookup just shift 
the result back.


>
> I'd love to hear what you think on the matter.
>
> Cheers,
> Robin
>
-- 
Regards,
Vladimir



More information about the dev mailing list