diff options
author | Alexander V. Chernikov <melifaro@FreeBSD.org> | 2020-11-29 13:52:06 +0000 |
---|---|---|
committer | Alexander V. Chernikov <melifaro@FreeBSD.org> | 2020-11-29 13:52:06 +0000 |
commit | f47fa260651411fc5f386bc7b66106808d6ebfa2 (patch) | |
tree | 165ad2a19b6b07a12e4309347011a02a39363e4f /sys/net | |
parent | 1c86e811967ca0f5736561c50999e470c0623bba (diff) | |
download | src-test2-f47fa260651411fc5f386bc7b66106808d6ebfa2.tar.gz src-test2-f47fa260651411fc5f386bc7b66106808d6ebfa2.zip |
Notes
Diffstat (limited to 'sys/net')
-rw-r--r-- | sys/net/route/nhgrp_ctl.c | 11 | ||||
-rw-r--r-- | sys/net/route/nhop_ctl.c | 13 | ||||
-rw-r--r-- | sys/net/route/route_var.h | 2 |
3 files changed, 26 insertions, 0 deletions
diff --git a/sys/net/route/nhgrp_ctl.c b/sys/net/route/nhgrp_ctl.c index 2774f196625d..c4f86500ca8d 100644 --- a/sys/net/route/nhgrp_ctl.c +++ b/sys/net/route/nhgrp_ctl.c @@ -294,6 +294,17 @@ alloc_nhgrp(struct weightened_nhop *wn, int num_nhops) } void +nhgrp_ref_object(struct nhgrp_object *nhg) +{ + struct nhgrp_priv *nhg_priv; + u_int old; + + nhg_priv = NHGRP_PRIV(nhg); + old = refcount_acquire(&nhg_priv->nhg_refcount); + KASSERT(old > 0, ("%s: nhgrp object %p has 0 refs", __func__, nhg)); +} + +void nhgrp_free(struct nhgrp_object *nhg) { struct nhgrp_priv *nhg_priv; diff --git a/sys/net/route/nhop_ctl.c b/sys/net/route/nhop_ctl.c index 2b5bd740711b..2b676663a782 100644 --- a/sys/net/route/nhop_ctl.c +++ b/sys/net/route/nhop_ctl.c @@ -691,6 +691,19 @@ nhop_free(struct nhop_object *nh) } void +nhop_ref_any(struct nhop_object *nh) +{ +#ifdef ROUTE_MPATH + if (!NH_IS_NHGRP(nh)) + nhop_ref_object(nh); + else + nhgrp_ref_object((struct nhgrp_object *)nh); +#else + nhop_ref_object(nh); +#endif +} + +void nhop_free_any(struct nhop_object *nh) { diff --git a/sys/net/route/route_var.h b/sys/net/route/route_var.h index 58575531f87e..a24720cf2e71 100644 --- a/sys/net/route/route_var.h +++ b/sys/net/route/route_var.h @@ -242,6 +242,7 @@ int nhops_init_rib(struct rib_head *rh); void nhops_destroy_rib(struct rib_head *rh); void nhop_ref_object(struct nhop_object *nh); int nhop_try_ref_object(struct nhop_object *nh); +void nhop_ref_any(struct nhop_object *nh); void nhop_free_any(struct nhop_object *nh); void nhop_set_type(struct nhop_object *nh, enum nhop_type nh_type); @@ -306,6 +307,7 @@ int nhgrp_get_addition_group(struct rib_head *rnh, struct route_nhop_data *rnd_orig, struct route_nhop_data *rnd_add, struct route_nhop_data *rnd_new); +void nhgrp_ref_object(struct nhgrp_object *nhg); uint32_t nhgrp_get_idx(const struct nhgrp_object *nhg); void nhgrp_free(struct nhgrp_object *nhg); |