git: ba1ab2e5cf95 - stable/13 - routing: refactor private KPI * Make nhgrp_get_nhops() return const struct weightened_nhop to indicate that the list is immutable * Make nhgrp_get_group() return the actual group, instead of group+weight.

From: Alexander V. Chernikov <melifaro_at_FreeBSD.org>
Date: Fri, 13 Jan 2023 21:24:57 UTC
The branch stable/13 has been updated by melifaro:

URL: https://cgit.FreeBSD.org/src/commit/?id=ba1ab2e5cf951906ceb85a4197c30b094507b280

commit ba1ab2e5cf951906ceb85a4197c30b094507b280
Author:     Alexander V. Chernikov <melifaro@FreeBSD.org>
AuthorDate: 2022-08-01 10:02:12 +0000
Commit:     Alexander V. Chernikov <melifaro@FreeBSD.org>
CommitDate: 2023-01-13 21:18:26 +0000

    routing: refactor private KPI
    * Make nhgrp_get_nhops() return const struct weightened_nhop to
     indicate that the list is immutable
    * Make nhgrp_get_group() return the actual group, instead of
     group+weight.
    
    MFC after:      2 weeks
    
    (cherry picked from commit ae6bfd12c8c887b323d623c6c21d29f25622d42d)
---
 sys/net/route/nhgrp_ctl.c     | 13 ++++++-------
 sys/net/route/route_ctl.c     | 11 ++++++-----
 sys/net/route/route_ctl.h     |  2 +-
 sys/net/route/route_helpers.c |  4 ++--
 sys/net/route/route_var.h     |  2 +-
 sys/net/rtsock.c              |  4 ++--
 sys/netinet/in_fib.c          |  2 +-
 sys/netinet6/in6_fib.c        |  2 +-
 8 files changed, 20 insertions(+), 20 deletions(-)

diff --git a/sys/net/route/nhgrp_ctl.c b/sys/net/route/nhgrp_ctl.c
index bad237a334ef..f0b26916136c 100644
--- a/sys/net/route/nhgrp_ctl.c
+++ b/sys/net/route/nhgrp_ctl.c
@@ -598,7 +598,7 @@ append_nhops(struct nh_control *ctl, const struct nhgrp_object *gr_orig,
  */
 int
 nhgrp_get_group(struct rib_head *rh, struct weightened_nhop *wn, int num_nhops,
-    struct route_nhop_data *rnd)
+    struct nhgrp_object **pnhg)
 {
 	struct nh_control *ctl = rh->nh_control;
 	struct nhgrp_priv *nhg_priv;
@@ -606,8 +606,7 @@ nhgrp_get_group(struct rib_head *rh, struct weightened_nhop *wn, int num_nhops,
 
 	nhg_priv = get_nhgrp(ctl, wn, num_nhops, &error);
 	if (nhg_priv != NULL)
-		rnd->rnd_nhgrp = nhg_priv->nhg;
-	rnd->rnd_weight = 0;
+		*pnhg = nhg_priv->nhg;
 
 	return (error);
 }
@@ -718,14 +717,14 @@ nhgrp_get_addition_group(struct rib_head *rh, struct route_nhop_data *rnd_orig,
  * Returns pointer to array of nexthops with weights for
  * given @nhg. Stores number of items in the array into @pnum_nhops.
  */
-struct weightened_nhop *
-nhgrp_get_nhops(struct nhgrp_object *nhg, uint32_t *pnum_nhops)
+const struct weightened_nhop *
+nhgrp_get_nhops(const struct nhgrp_object *nhg, uint32_t *pnum_nhops)
 {
-	struct nhgrp_priv *nhg_priv;
+	const struct nhgrp_priv *nhg_priv;
 
 	KASSERT(((nhg->nhg_flags & MPF_MULTIPATH) != 0), ("nhop is not mpath"));
 
-	nhg_priv = NHGRP_PRIV(nhg);
+	nhg_priv = NHGRP_PRIV_CONST(nhg);
 	*pnum_nhops = nhg_priv->nhg_nh_count;
 
 	return (nhg_priv->nhg_nh_weights);
diff --git a/sys/net/route/route_ctl.c b/sys/net/route/route_ctl.c
index 80682b7f3b87..394260e1421c 100644
--- a/sys/net/route/route_ctl.c
+++ b/sys/net/route/route_ctl.c
@@ -155,7 +155,7 @@ destroy_rtentry(struct rtentry *rt)
 	 */
 #ifdef ROUTE_MPATH
 	if (NH_IS_NHGRP(nh)) {
-		struct weightened_nhop *wn;
+		const struct weightened_nhop *wn;
 		uint32_t num_nhops;
 		wn = nhgrp_get_nhops((struct nhgrp_object *)nh, &num_nhops);
 		nh = wn[0].nh;
@@ -1010,8 +1010,9 @@ change_mpath_route(struct rib_head *rnh, struct rt_addrinfo *info,
 {
 	int error = 0, found_idx = 0;
 	struct nhop_object *nh_orig = NULL, *nh_new;
-	struct route_nhop_data rnd_new;
-	struct weightened_nhop *wn = NULL, *wn_new;
+	struct route_nhop_data rnd_new = {};
+	const struct weightened_nhop *wn = NULL;
+	struct weightened_nhop *wn_new;
 	uint32_t num_nhops;
 
 	wn = nhgrp_get_nhops(rnd_orig->rnd_nhgrp, &num_nhops);
@@ -1041,7 +1042,7 @@ change_mpath_route(struct rib_head *rnh, struct rt_addrinfo *info,
 	wn_new[found_idx].nh = nh_new;
 	wn_new[found_idx].weight = get_info_weight(info, wn[found_idx].weight);
 
-	error = nhgrp_get_group(rnh, wn_new, num_nhops, &rnd_new);
+	error = nhgrp_get_group(rnh, wn_new, num_nhops, &rnd_new.rnd_nhgrp);
 	nhop_free(nh_new);
 	free(wn_new, M_TEMP);
 
@@ -1375,7 +1376,7 @@ rib_walk_del(u_int fibnum, int family, rib_filter_f_t *filter_f, void *arg, bool
 		if (report) {
 #ifdef ROUTE_MPATH
 			struct nhgrp_object *nhg;
-			struct weightened_nhop *wn;
+			const struct weightened_nhop *wn;
 			uint32_t num_nhops;
 			if (NH_IS_NHGRP(nh)) {
 				nhg = (struct nhgrp_object *)nh;
diff --git a/sys/net/route/route_ctl.h b/sys/net/route/route_ctl.h
index a670979df8c9..7a1f7f04be9b 100644
--- a/sys/net/route/route_ctl.h
+++ b/sys/net/route/route_ctl.h
@@ -135,7 +135,7 @@ uint32_t nhops_get_count(struct rib_head *rh);
 /* Multipath */
 struct weightened_nhop;
 
-struct weightened_nhop *nhgrp_get_nhops(struct nhgrp_object *nhg,
+const struct weightened_nhop *nhgrp_get_nhops(const struct nhgrp_object *nhg,
     uint32_t *pnum_nhops);
 uint32_t nhgrp_get_count(struct rib_head *rh);
 
diff --git a/sys/net/route/route_helpers.c b/sys/net/route/route_helpers.c
index 6c7f16eb047e..5472465d4f5f 100644
--- a/sys/net/route/route_helpers.c
+++ b/sys/net/route/route_helpers.c
@@ -290,7 +290,7 @@ decompose_change_notification(struct rib_cmd_info *rc, route_notification_t *cb,
     void *cbdata)
 {
 	uint32_t num_old, num_new;
-	struct weightened_nhop *wn_old, *wn_new;
+	const struct weightened_nhop *wn_old, *wn_new;
 	struct weightened_nhop tmp = { NULL, 0 };
 	uint32_t idx_old = 0, idx_new = 0;
 
@@ -378,7 +378,7 @@ void
 rib_decompose_notification(struct rib_cmd_info *rc, route_notification_t *cb,
     void *cbdata)
 {
-	struct weightened_nhop *wn;
+	const struct weightened_nhop *wn;
 	uint32_t num_nhops;
 	struct rib_cmd_info rc_new;
 
diff --git a/sys/net/route/route_var.h b/sys/net/route/route_var.h
index e54ea08f4e80..403e432ea836 100644
--- a/sys/net/route/route_var.h
+++ b/sys/net/route/route_var.h
@@ -295,7 +295,7 @@ void nhgrp_ctl_unlink_all(struct nh_control *ctl);
 int nhgrp_dump_sysctl(struct rib_head *rh, struct sysctl_req *w);
 
 int nhgrp_get_group(struct rib_head *rh, struct weightened_nhop *wn,
-    int num_nhops, struct route_nhop_data *rnd);
+    int num_nhops, struct nhgrp_object **pnhg);
 typedef bool nhgrp_filter_cb_t(const struct nhop_object *nh, void *data);
 int nhgrp_get_filtered_group(struct rib_head *rh, const struct nhgrp_object *src,
     nhgrp_filter_cb_t flt_func, void *flt_data, struct route_nhop_data *rnd);
diff --git a/sys/net/rtsock.c b/sys/net/rtsock.c
index b116319d96d6..6826b4e82368 100644
--- a/sys/net/rtsock.c
+++ b/sys/net/rtsock.c
@@ -721,7 +721,7 @@ select_nhop(struct nhop_object *nh, const struct sockaddr *gw)
 	if (!NH_IS_NHGRP(nh))
 		return (nh);
 #ifdef ROUTE_MPATH
-	struct weightened_nhop *wn;
+	const struct weightened_nhop *wn;
 	uint32_t num_nhops;
 	wn = nhgrp_get_nhops((struct nhgrp_object *)nh, &num_nhops);
 	if (gw == NULL)
@@ -2243,7 +2243,7 @@ sysctl_dumpentry(struct rtentry *rt, void *vw)
 	nh = rt_get_raw_nhop(rt);
 #ifdef ROUTE_MPATH
 	if (NH_IS_NHGRP(nh)) {
-		struct weightened_nhop *wn;
+		const struct weightened_nhop *wn;
 		uint32_t num_nhops;
 		int error;
 		wn = nhgrp_get_nhops((struct nhgrp_object *)nh, &num_nhops);
diff --git a/sys/netinet/in_fib.c b/sys/netinet/in_fib.c
index 8a6e64876b3d..957262fc70b9 100644
--- a/sys/netinet/in_fib.c
+++ b/sys/netinet/in_fib.c
@@ -196,7 +196,7 @@ check_urpf(struct nhop_object *nh, uint32_t flags,
 {
 #ifdef ROUTE_MPATH
 	if (NH_IS_NHGRP(nh)) {
-		struct weightened_nhop *wn;
+		const struct weightened_nhop *wn;
 		uint32_t num_nhops;
 		wn = nhgrp_get_nhops((struct nhgrp_object *)nh, &num_nhops);
 			for (int i = 0; i < num_nhops; i++) {
diff --git a/sys/netinet6/in6_fib.c b/sys/netinet6/in6_fib.c
index 614f8111409a..8a0760aff02a 100644
--- a/sys/netinet6/in6_fib.c
+++ b/sys/netinet6/in6_fib.c
@@ -205,7 +205,7 @@ check_urpf(struct nhop_object *nh, uint32_t flags,
 {
 #ifdef ROUTE_MPATH
 	if (NH_IS_NHGRP(nh)) {
-		struct weightened_nhop *wn;
+		const struct weightened_nhop *wn;
 		uint32_t num_nhops;
 		wn = nhgrp_get_nhops((struct nhgrp_object *)nh, &num_nhops);
 		for (int i = 0; i < num_nhops; i++) {