• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /freebsd-13-stable/sys/net/route/

Lines Matching refs:nhg_priv

79 static void destroy_nhgrp(struct nhgrp_priv *nhg_priv);
81 static void free_nhgrp_nhops(struct nhgrp_priv *nhg_priv);
260 struct nhgrp_priv *nhg_priv;
279 nhg_priv = NHGRP_PRIV(nhg);
280 nhg_priv->nhg_nh_count = num_nhops;
281 refcount_init(&nhg_priv->nhg_refcount, 1);
284 refcount_init(&nhg_priv->nhg_linked, 2);
286 nhg_priv->nhg = nhg;
287 memcpy(&nhg_priv->nhg_nh_weights[0], wn,
290 compile_nhgrp(nhg_priv, wn, nhg->nhg_size);
292 return (nhg_priv);
298 struct nhgrp_priv *nhg_priv;
301 nhg_priv = NHGRP_PRIV(nhg);
302 old = refcount_acquire(&nhg_priv->nhg_refcount);
309 struct nhgrp_priv *nhg_priv;
313 nhg_priv = NHGRP_PRIV(nhg);
315 if (!refcount_release(&nhg_priv->nhg_refcount))
345 if (refcount_release_if_not_last(&nhg_priv->nhg_linked)) {
346 ctl = nhg_priv->nh_control;
347 if (unlink_nhgrp(ctl, nhg_priv) == NULL) {
349 DPRINTF("Failed to unlink nexhop group %p", nhg_priv);
357 &nhg_priv->nhg_epoch_ctx);
361 * Destroys all local resources belonging to @nhg_priv.
364 destroy_nhgrp_int(struct nhgrp_priv *nhg_priv)
367 free(nhg_priv->nhg, M_NHOP);
371 destroy_nhgrp(struct nhgrp_priv *nhg_priv)
374 KASSERT((nhg_priv->nhg_refcount == 0), ("nhg_refcount != 0"));
376 DPRINTF("DEL MPATH %p", nhg_priv);
378 KASSERT((nhg_priv->nhg_idx == 0), ("gr_idx != 0"));
380 free_nhgrp_nhops(nhg_priv);
382 destroy_nhgrp_int(nhg_priv);
391 struct nhgrp_priv *nhg_priv;
393 nhg_priv = __containerof(ctx, struct nhgrp_priv, nhg_epoch_ctx);
395 destroy_nhgrp(nhg_priv);
399 ref_nhgrp_nhops(struct nhgrp_priv *nhg_priv)
402 for (int i = 0; i < nhg_priv->nhg_nh_count; i++) {
403 if (nhop_try_ref_object(nhg_priv->nhg_nh_weights[i].nh) != 0)
411 nhop_free(nhg_priv->nhg_nh_weights[j].nh);
419 free_nhgrp_nhops(struct nhgrp_priv *nhg_priv)
422 for (int i = 0; i < nhg_priv->nhg_nh_count; i++)
423 nhop_free(nhg_priv->nhg_nh_weights[i].nh);
435 struct nhgrp_priv *key, *nhg_priv;
466 nhg_priv = find_nhgrp(ctl, key);
467 if (nhg_priv != NULL) {
475 return (nhg_priv);
517 struct nhgrp_priv *nhg_priv;
545 nhg_priv = get_nhgrp(ctl, pnhops, curr_nhops, perror);
550 if (nhg_priv == NULL)
553 return (nhg_priv);
569 struct nhgrp_priv *nhg_priv;
572 nhg_priv = get_nhgrp(ctl, wn, num_nhops, &error);
573 if (nhg_priv != NULL)
574 rnd->rnd_nhgrp = nhg_priv->nhg;
648 struct nhgrp_priv *nhg_priv;
667 nhg_priv = get_nhgrp(ctl, wn, 2, &error);
670 nhg_priv = append_nhops(ctl, rnd_orig->rnd_nhgrp, &wn[0], 1,
674 if (nhg_priv == NULL)
676 rnd_new->rnd_nhgrp = nhg_priv->nhg;
689 struct nhgrp_priv *nhg_priv;
693 nhg_priv = NHGRP_PRIV(nhg);
694 *pnum_nhops = nhg_priv->nhg_nh_count;
696 return (nhg_priv->nhg_nh_weights);
700 dump_nhgrp_entry(struct rib_head *rh, const struct nhgrp_priv *nhg_priv,
711 nhg = nhg_priv->nhg;
716 sz += sizeof(struct nhgrp_nhop_external) * nhg_priv->nhg_nh_count;
732 nhge->nhg_idx = nhg_priv->nhg_idx;
733 nhge->nhg_refcount = nhg_priv->nhg_refcount;
740 nhgc->nhgc_len += sizeof(struct nhgrp_nhop_external) * nhg_priv->nhg_nh_count;
741 nhgc->nhgc_count = nhg_priv->nhg_nh_count;
744 for (int i = 0; i < nhg_priv->nhg_nh_count; i++) {
745 ext[i].nh_idx = nhg_priv->nhg_nh_weights[i].nh->nh_priv->nh_idx;
746 ext[i].nh_weight = nhg_priv->nhg_nh_weights[i].weight;
750 nhgc = (struct nhgrp_container *)(&ext[nhg_priv->nhg_nh_count]);
771 const struct nhgrp_priv *nhg_priv;
773 nhg_priv = NHGRP_PRIV_CONST(nhg);
774 return (nhg_priv->nhg_idx);
797 struct nhgrp_priv *nhg_priv;
815 CHT_SLIST_FOREACH(&ctl->gr_head, mpath, nhg_priv) {
816 error = dump_nhgrp_entry(rh, nhg_priv, buffer, sz, w);