summaryrefslogtreecommitdiff
path: root/sys/net
diff options
context:
space:
mode:
authorAlexander V. Chernikov <melifaro@FreeBSD.org>2020-11-29 13:52:06 +0000
committerAlexander V. Chernikov <melifaro@FreeBSD.org>2020-11-29 13:52:06 +0000
commitf47fa260651411fc5f386bc7b66106808d6ebfa2 (patch)
tree165ad2a19b6b07a12e4309347011a02a39363e4f /sys/net
parent1c86e811967ca0f5736561c50999e470c0623bba (diff)
downloadsrc-test2-f47fa260651411fc5f386bc7b66106808d6ebfa2.tar.gz
src-test2-f47fa260651411fc5f386bc7b66106808d6ebfa2.zip
Notes
Diffstat (limited to 'sys/net')
-rw-r--r--sys/net/route/nhgrp_ctl.c11
-rw-r--r--sys/net/route/nhop_ctl.c13
-rw-r--r--sys/net/route/route_var.h2
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);