Lines Matching refs:wn
78 static void sort_weightened_nhops(struct weightened_nhop *wn, int num_nhops);
81 struct weightened_nhop *wn, int num_nhops, uint32_t uidx, int *perror);
107 sort_weightened_nhops(struct weightened_nhop *wn, int num_nhops) in sort_weightened_nhops() argument
110 qsort(wn, num_nhops, sizeof(struct weightened_nhop), wn_cmp_idx); in sort_weightened_nhops()
121 sort_weightened_nhops_weights(struct weightened_nhop *wn, int num_items) in sort_weightened_nhops_weights() argument
123 wn[0].storage = wn[0].weight; in sort_weightened_nhops_weights()
125 uint32_t weight = wn[i].weight; // read from 'weight' as it's not reordered in sort_weightened_nhops_weights()
127 for (j = i - 1; j >= 0 && wn[j].storage > weight; j--) in sort_weightened_nhops_weights()
128 wn[j + 1].storage = wn[j].storage; in sort_weightened_nhops_weights()
129 wn[j + 1].storage = weight; in sort_weightened_nhops_weights()
147 calc_min_mpath_slots_fast(struct weightened_nhop *wn, size_t num_items, in calc_min_mpath_slots_fast() argument
154 sort_weightened_nhops_weights(wn, num_items); in calc_min_mpath_slots_fast()
157 xmin = wn[0].storage; in calc_min_mpath_slots_fast()
159 total += wn[i].storage; in calc_min_mpath_slots_fast()
160 if ((wn[i].storage != last) && in calc_min_mpath_slots_fast()
161 ((wn[i].storage - last < xmin) || xmin == 0)) { in calc_min_mpath_slots_fast()
162 xmin = wn[i].storage - last; in calc_min_mpath_slots_fast()
164 last = wn[i].storage; in calc_min_mpath_slots_fast()
171 if ((wn[i].weight % xmin) != 0) in calc_min_mpath_slots_fast()
188 calc_min_mpath_slots(struct weightened_nhop *wn, size_t num_items) in calc_min_mpath_slots() argument
193 v = calc_min_mpath_slots_fast(wn, num_items, &total); in calc_min_mpath_slots()
279 alloc_nhgrp(struct weightened_nhop *wn, int num_nhops) in alloc_nhgrp() argument
285 nhgrp_size = calc_min_mpath_slots(wn, num_nhops); in alloc_nhgrp()
294 FIB_NH_LOG(LOG_INFO, wn[0].nh, in alloc_nhgrp()
312 memcpy(&nhg_priv->nhg_nh_weights[0], wn, in alloc_nhgrp()
315 FIB_NH_LOG(LOG_DEBUG, wn[0].nh, "num_nhops: %d, compiled_nhop: %u", in alloc_nhgrp()
318 compile_nhgrp(nhg_priv, wn, nhg->nhg_size); in alloc_nhgrp()
461 nhgrp_alloc(uint32_t fibnum, int family, struct weightened_nhop *wn, int num_nhops, in nhgrp_alloc() argument
489 sort_weightened_nhops(wn, num_nhops); in nhgrp_alloc()
492 if (wn[i].nh->nh_priv->nh_control != ctl) { in nhgrp_alloc()
496 if (wn[i].nh->nh_priv->nh_idx == last_id) { in nhgrp_alloc()
500 last_id = wn[i].nh->nh_priv->nh_idx; in nhgrp_alloc()
503 if ((nhg_priv = alloc_nhgrp(wn, num_nhops)) == NULL) { in nhgrp_alloc()
565 get_nhgrp(struct nh_control *ctl, struct weightened_nhop *wn, int num_nhops, in get_nhgrp() argument
571 wn, num_nhops, perror); in get_nhgrp()
593 struct weightened_nhop *wn, int num_nhops, int *perror) in append_nhops() argument
622 memcpy(&pnhops[curr_nhops], wn, num_nhops * sizeof(struct weightened_nhop)); in append_nhops()
645 nhgrp_get_group(struct rib_head *rh, struct weightened_nhop *wn, int num_nhops, in nhgrp_get_group() argument
652 nhg_priv = get_nhgrp(ctl, wn, num_nhops, uidx, &error); in nhgrp_get_group()
729 struct weightened_nhop wn[2] = {}; in nhgrp_get_addition_group() local
740 wn[0].nh = rnd_add->rnd_nhop; in nhgrp_get_addition_group()
741 wn[0].weight = rnd_add->rnd_weight; in nhgrp_get_addition_group()
745 wn[1].nh = rnd_orig->rnd_nhop; in nhgrp_get_addition_group()
746 wn[1].weight = rnd_orig->rnd_weight; in nhgrp_get_addition_group()
747 nhg_priv = get_nhgrp(ctl, wn, 2, 0, &error); in nhgrp_get_addition_group()
750 nhg_priv = append_nhops(ctl, rnd_orig->rnd_nhgrp, &wn[0], 1, in nhgrp_get_addition_group()
816 const struct weightened_nhop *wn = &nhg_priv->nhg_nh_weights[i]; in nhgrp_print_buf() local
818 wn->nh->nh_priv->nh_idx, wn->weight); in nhgrp_print_buf()