Page MenuHomeFreeBSD

routing: actually sort nexthops in nhgs by # ascending.
ClosedPublic

Authored by melifaro on Jun 25 2022, 8:06 PM.
Tags
None
Referenced Files
Unknown Object (File)
Sat, Jul 12, 8:23 AM
Unknown Object (File)
Wed, Jun 25, 10:18 AM
Unknown Object (File)
Mon, Jun 23, 10:14 PM
Unknown Object (File)
Jun 13 2025, 12:21 PM
Unknown Object (File)
Jun 13 2025, 9:25 AM
Unknown Object (File)
Jun 3 2025, 2:27 PM
Unknown Object (File)
May 26 2025, 7:53 AM
Unknown Object (File)
May 24 2025, 12:28 PM
Subscribers

Details

Summary

Nexthops in the nexthop groups needs to be deterministically sorted by some of their property to simplify reporting when changing between large next hop-groups.

Fix reporting by actually sorting next hops by their indices (wn_cmp_idx()). calc_min_mpath_slots_fast() has different assumption - that next hops are sorted using their relative weight in the nexthop groups, which is now broken. The latter sorting is required to quickly determine the layout of the next hops in the actual forwarding group (how do we split the traffic between nhops with weights 19,31 and 47?). Note that this is only required during nexthop group creation. Note also that normally all next hops would be of the same weight.
With that in mind, (a) use spare 32 bytes inside struct weightened_nexthop to avoid memory allocation for such sorted array and (b) use insertion sort to sort the nexthop weights.

Diff Detail

Repository
rG FreeBSD src repository
Lint
Lint Not Applicable
Unit
Tests Not Applicable