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.