[MERGED] osmo-sgsn[master]: gtphub: make rate_ctr unique

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

Max gerrit-no-reply at lists.osmocom.org
Fri Jan 12 16:17:26 UTC 2018


Max has submitted this change and it was merged.

Change subject: gtphub: make rate_ctr unique
......................................................................


gtphub: make rate_ctr unique

* compute unique rate counter index when allocating new gtphub tunnel
* propagate rate counter allocation error to upper layers
* log and gracefully handle tunnel allocation error

Change-Id: I0e07f95c36de369bcd0691b8d0fd47c844abe5da
Related: OS#2757
---
M src/gprs/gtphub.c
1 file changed, 25 insertions(+), 8 deletions(-)

Approvals:
  Harald Welte: Looks good to me, approved
  Jenkins Builder: Verified



diff --git a/src/gprs/gtphub.c b/src/gprs/gtphub.c
index 76eebb1..b0e75ca 100644
--- a/src/gprs/gtphub.c
+++ b/src/gprs/gtphub.c
@@ -879,14 +879,14 @@
 	ofd->cb = NULL;
 }
 
-static void gtphub_bind_init(struct gtphub_bind *b)
+static void gtphub_bind_init(struct gtphub_bind *b, uint32_t idx)
 {
 	ZERO_STRUCT(b);
 
 	INIT_LLIST_HEAD(&b->peers);
 
 	b->counters_io = rate_ctr_group_alloc(osmo_gtphub_ctx,
-					      &gtphub_ctrg_io_desc, 0);
+					      &gtphub_ctrg_io_desc, idx);
 	OSMO_ASSERT(b->counters_io);
 }
 
@@ -913,7 +913,8 @@
 static void gtphub_bind_free(struct gtphub_bind *b)
 {
 	OSMO_ASSERT(llist_empty(&b->peers));
-	rate_ctr_group_free(b->counters_io);
+	if (b->counters_io)
+		rate_ctr_group_free(b->counters_io);
 }
 
 static void gtphub_bind_stop(struct gtphub_bind *b) {
@@ -1107,6 +1108,14 @@
 	talloc_free(tun);
 }
 
+#define CTR_IDX(s, p, a, b) (a + s + (p + b) * 2)
+
+/* rate counter index for tunnels: [3; 6] */
+#define CTR_IDX_TUN(s, p) CTR_IDX(s, p, 1, 1)
+
+/* rate counter index for hubs: [7; 10] */
+#define CTR_IDX_HUB(s, p) CTR_IDX(s, p, 3, 2)
+
 static struct gtphub_tunnel *gtphub_tunnel_new()
 {
 	struct gtphub_tunnel *tun;
@@ -1121,8 +1130,9 @@
 		struct gtphub_tunnel_endpoint *te = &tun->endpoint[side_idx][plane_idx];
 		te->counters_io = rate_ctr_group_alloc(osmo_gtphub_ctx,
 						       &gtphub_ctrg_io_desc,
-						       0);
-		OSMO_ASSERT(te->counters_io);
+						       CTR_IDX_TUN(side_idx, plane_idx));
+		if (!te->counters_io)
+			return NULL;
 	}
 
 	tun->expiry_entry.del_cb = gtphub_tunnel_del_cb;
@@ -1486,7 +1496,13 @@
 		}
 
 		/* A new tunnel. */
-		p->tun = tun = gtphub_tunnel_new();
+		tun = gtphub_tunnel_new();
+		if (!tun) {
+			LOG(LOGL_ERROR, "Failed to allocate new tunnel %s <-> %s\n",
+			    gtphub_port_str(from_ctrl), gtphub_port_str(to_ctrl));
+			return -1;
+		}
+		p->tun = tun;
 
 		/* Create TEI mapping */
 		tun->tei_repl = nr_pool_next(&hub->tei_pool);
@@ -2460,7 +2476,7 @@
 	int side_idx;
 	int plane_idx;
 	for_each_side_and_plane(side_idx, plane_idx) {
-		gtphub_bind_init(&hub->to_gsns[side_idx][plane_idx]);
+		gtphub_bind_init(&hub->to_gsns[side_idx][plane_idx], CTR_IDX_HUB(side_idx, plane_idx));
 	}
 
 	hub->to_gsns[GTPH_SIDE_SGSN][GTPH_PLANE_CTRL].label = "SGSN Ctrl";
@@ -2709,8 +2725,9 @@
 	}
 
 	pp->counters_io = rate_ctr_group_alloc(osmo_gtphub_ctx,
-					       &gtphub_ctrg_io_desc, 0);
+					       &gtphub_ctrg_io_desc, port);
 	if (!pp->counters_io) {
+		LOG(LOGL_ERROR, "Failed to allocate rate counters for %s:%u\n", gsn_addr_to_str(&a->addr), port);
 		talloc_free(pp);
 		return NULL;
 	}

-- 
To view, visit https://gerrit.osmocom.org/5524
To unsubscribe, visit https://gerrit.osmocom.org/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I0e07f95c36de369bcd0691b8d0fd47c844abe5da
Gerrit-PatchSet: 5
Gerrit-Project: osmo-sgsn
Gerrit-Branch: master
Gerrit-Owner: Max <msuraev at sysmocom.de>
Gerrit-Reviewer: Harald Welte <laforge at gnumonks.org>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: Max <msuraev at sysmocom.de>
Gerrit-Reviewer: Neels Hofmeyr <nhofmeyr at sysmocom.de>



More information about the gerrit-log mailing list