[PATCH 2/3] gtphub: fix number map range for TEIs.

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/OpenBSC@lists.osmocom.org/.

Neels Hofmeyr nhofmeyr at sysmocom.de
Tue Nov 17 13:38:46 UTC 2015


Use unsigned int for nr_map, just large enough to fit the TEI space.
Adjust log output formats and casts accordingly.

Fixes: TEIs are uint32_t, but the nr_map so far used int. This would cause TEIs
from 0x80000000 on to be handled and printed as a negative value.

Sponsored-by: On-Waves ehi
---
 openbsc/include/openbsc/gtphub.h   |  2 +-
 openbsc/src/gprs/gtphub.c          | 15 ++++++++-------
 openbsc/tests/gtphub/gtphub_test.c |  6 +++---
 3 files changed, 12 insertions(+), 11 deletions(-)

diff --git a/openbsc/include/openbsc/gtphub.h b/openbsc/include/openbsc/gtphub.h
index 68cf90e..c43a328 100644
--- a/openbsc/include/openbsc/gtphub.h
+++ b/openbsc/include/openbsc/gtphub.h
@@ -249,7 +249,7 @@ int expiry_tick(struct expiry *exq, time_t now);
  * NULL, no deallocation will be done (allowing statically allocated entries).
  */
 
-typedef int nr_t;
+typedef unsigned int nr_t;
 
 /* Generator for unused numbers. So far this counts upwards from zero, but the
  * implementation may change in the future. Treat this like an opaque struct.
diff --git a/openbsc/src/gprs/gtphub.c b/openbsc/src/gprs/gtphub.c
index 22da9a3..7c7f693 100644
--- a/openbsc/src/gprs/gtphub.c
+++ b/openbsc/src/gprs/gtphub.c
@@ -914,10 +914,10 @@ static void gtphub_mapping_del_cb(struct expiring_item *expi)
 	/* Just for log */
 	struct gtphub_peer_port *from = nrm->origin;
 	OSMO_ASSERT(from);
-	LOG(LOGL_DEBUG, "expired: %d: nr mapping from %s: %d->%d\n",
+	LOG(LOGL_DEBUG, "expired: %d: nr mapping from %s: %u->%u\n",
 	    (int)nrm->expiry_entry.expiry,
 	    gtphub_port_str(from),
-	    (int)nrm->orig, (int)nrm->repl);
+	    (unsigned int)nrm->orig, (unsigned int)nrm->repl);
 
 	gtphub_port_ref_count_dec(from);
 
@@ -960,10 +960,10 @@ static uint32_t gtphub_tei_mapping_have(struct gtphub *hub,
 {
 	struct nr_mapping *nrm = gtphub_mapping_have(&hub->tei_map[plane_idx],
 						     from, orig_tei, now);
-	LOG(LOGL_DEBUG, "New %s TEI: (from %s, TEI %d) <-- TEI %d\n",
+	LOG(LOGL_DEBUG, "New %s TEI: (from %s, TEI %u) <-- TEI %u\n",
 	    gtphub_plane_idx_names[plane_idx],
 	    gtphub_port_str(from),
-	    (int)orig_tei, (int)nrm->repl);
+	    (unsigned int)orig_tei, (unsigned int)nrm->repl);
 
 	return (uint32_t)nrm->repl;
 }
@@ -1115,8 +1115,9 @@ static int gtphub_unmap_header_tei(struct gtphub_peer_port **to_port_p,
 	uint32_t unmapped_tei = nrm->orig;
 	set_tei(p, unmapped_tei);
 
-	LOG(LOGL_DEBUG, "Unmapped TEI coming from %s: %d -> %d (to %s)\n",
-	    gtphub_port_str(from_port), tei, unmapped_tei,
+	LOG(LOGL_DEBUG, "Unmapped TEI coming from %s: %u -> %u (to %s)\n",
+	    gtphub_port_str(from_port),
+	    (unsigned int)tei, (unsigned int)unmapped_tei,
 	    gtphub_port_str2(to_port));
 
 	*to_port_p = to_port;
@@ -1309,7 +1310,7 @@ static int gtphub_unmap(struct gtphub *hub,
 		    gtphub_peer_str(from_peer),
 		    (int)p->seq,
 		    gtphub_port_str(from_seq),
-		    (int)p->header_tei,
+		    (unsigned int)p->header_tei,
 		    gtphub_port_str2(from_tei)
 		   );
 	}
diff --git a/openbsc/tests/gtphub/gtphub_test.c b/openbsc/tests/gtphub/gtphub_test.c
index 8434f61..4e22ac7 100644
--- a/openbsc/tests/gtphub/gtphub_test.c
+++ b/openbsc/tests/gtphub/gtphub_test.c
@@ -233,9 +233,9 @@ static int nr_map_is(struct nr_map *map, const char *str)
 	size_t len = sizeof(buf);
 	struct nr_mapping *m;
 	llist_for_each_entry(m, &map->mappings, entry) {
-		size_t wrote = snprintf(pos, len, "(%d->%d@%d), ",
-					(int)m->orig,
-					(int)m->repl,
+		size_t wrote = snprintf(pos, len, "(%u->%u@%d), ",
+					m->orig,
+					m->repl,
 					(int)m->expiry_entry.expiry);
 		OSMO_ASSERT(wrote < len);
 		pos += wrote;
-- 
2.1.4




More information about the OpenBSC mailing list