[PATCH] osmo-sgsn[master]: implement support for 3-digit MNC with leading zeros

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/.

Neels Hofmeyr gerrit-no-reply at lists.osmocom.org
Tue Feb 27 14:53:08 UTC 2018


Hello Jenkins Builder,

I'd like you to reexamine a change.  Please visit

    https://gerrit.osmocom.org/6672

to look at the new patch set (#2).

implement support for 3-digit MNC with leading zeros

Add 3-digit flags and use the new RAI and LAI API from libosmocore throughout
the code base to be able to handle an MNC < 100 that has three digits (leading
zeros).

Note that in gbproxy_test.ok, 0-0 changes to 000-000 instead of 000-00, because
the parsed ra buffer is 000000 which results in 000-000, while 00f000 would
result in 000-00. IOW this is expected.

Change-Id: I7437dfaa586689e2bef0d4be6537e5577a8f6c26
---
M include/osmocom/sgsn/gb_proxy.h
M src/gprs/gb_proxy.c
M src/gprs/gb_proxy_patch.c
M src/gprs/gb_proxy_vty.c
M src/gprs/gprs_gb_parse.c
M src/gprs/gprs_gmm.c
M src/gprs/gprs_utils.c
M src/gprs/sgsn_auth.c
M src/gprs/sgsn_vty.c
M tests/gbproxy/gbproxy_test.c
M tests/gbproxy/gbproxy_test.ok
11 files changed, 103 insertions(+), 105 deletions(-)


  git pull ssh://gerrit.osmocom.org:29418/osmo-sgsn refs/changes/72/6672/2

diff --git a/include/osmocom/sgsn/gb_proxy.h b/include/osmocom/sgsn/gb_proxy.h
index e10894f..2540a7e 100644
--- a/include/osmocom/sgsn/gb_proxy.h
+++ b/include/osmocom/sgsn/gb_proxy.h
@@ -3,6 +3,7 @@
 
 
 #include <osmocom/core/msgb.h>
+#include <osmocom/gsm/gsm23003.h>
 
 #include <osmocom/gprs/gprs_ns.h>
 #include <osmocom/vty/command.h>
@@ -101,8 +102,7 @@
 	struct rate_ctr_group *ctrg;
 
 	/* force mcc/mnc */
-	int core_mnc;
-	int core_mcc;
+	struct osmo_plmn_id core_plmn;
 	uint8_t* core_apn;
 	size_t core_apn_size;
 	int tlli_max_age;
@@ -120,8 +120,7 @@
 };
 
 struct gbproxy_patch_state {
-	int local_mnc;
-	int local_mcc;
+	struct osmo_plmn_id local_plmn;
 
 	/* List of TLLIs for which patching is enabled */
 	struct llist_head logical_links;
diff --git a/src/gprs/gb_proxy.c b/src/gprs/gb_proxy.c
index 63c3a61..7d21518 100644
--- a/src/gprs/gb_proxy.c
+++ b/src/gprs/gb_proxy.c
@@ -192,8 +192,7 @@
 				       const char *log_text)
 {
 	struct gbproxy_patch_state *state = &peer->patch_state;
-	const int old_local_mcc = state->local_mcc;
-	const int old_local_mnc = state->local_mnc;
+	const struct osmo_plmn_id old_plmn = state->local_plmn;
 	struct gprs_ra_id raid;
 
 	if (!raid_enc)
@@ -202,28 +201,31 @@
 	gsm48_parse_ra(&raid, raid_enc);
 
 	/* save source side MCC/MNC */
-	if (!peer->cfg->core_mcc || raid.mcc == peer->cfg->core_mcc) {
-		state->local_mcc = 0;
+	if (!peer->cfg->core_plmn.mcc || raid.mcc == peer->cfg->core_plmn.mcc) {
+		state->local_plmn.mcc = 0;
 	} else {
-		state->local_mcc = raid.mcc;
+		state->local_plmn.mcc = raid.mcc;
 	}
 
-	if (!peer->cfg->core_mnc || raid.mnc == peer->cfg->core_mnc) {
-		state->local_mnc = 0;
+	if (!peer->cfg->core_plmn.mnc
+	    || !osmo_mnc_cmp(raid.mnc, raid.mnc_3_digits,
+			     peer->cfg->core_plmn.mnc, peer->cfg->core_plmn.mnc_3_digits)) {
+		state->local_plmn.mnc = 0;
+		state->local_plmn.mnc_3_digits = false;
 	} else {
-		state->local_mnc = raid.mnc;
+		state->local_plmn.mnc = raid.mnc;
+		state->local_plmn.mnc_3_digits = raid.mnc_3_digits;
 	}
 
-	if (old_local_mcc != state->local_mcc ||
-	    old_local_mnc != state->local_mnc)
+	if (osmo_plmn_cmp(&old_plmn, &state->local_plmn))
 		LOGP(DGPRS, LOGL_NOTICE,
 		     "Patching RAID %sactivated, msg: %s, "
-		     "local: %d-%d, core: %d-%d\n",
-		     state->local_mcc || state->local_mnc ?
+		     "local: %s, core: %s\n",
+		     state->local_plmn.mcc || state->local_plmn.mnc ?
 		     "" : "de",
 		     log_text,
-		     state->local_mcc, state->local_mnc,
-		     peer->cfg->core_mcc, peer->cfg->core_mnc);
+		     osmo_plmn_name(&state->local_plmn),
+		     osmo_plmn_name2(&peer->cfg->core_plmn));
 }
 
 uint32_t gbproxy_make_bss_ptmsi(struct gbproxy_peer *peer,
@@ -559,7 +561,7 @@
 	struct gbproxy_link_info *link_info = NULL;
 	uint32_t sgsn_nsei = cfg->nsip_sgsn_nsei;
 
-	if (!cfg->core_mcc && !cfg->core_mnc && !cfg->core_apn &&
+	if (!cfg->core_plmn.mcc && !cfg->core_plmn.mnc && !cfg->core_apn &&
 	    !cfg->acquire_imsi && !cfg->patch_ptmsi && !cfg->route_to_sgsn2)
 		return 1;
 
@@ -665,7 +667,7 @@
 	return 1;
 }
 
-/* patch BSSGP message to use core_mcc/mnc on the SGSN side */
+/* patch BSSGP message to use core_plmn.mcc/mnc on the SGSN side */
 static void gbprox_process_bssgp_dl(struct gbproxy_config *cfg,
 				    struct msgb *msg,
 				    struct gbproxy_peer *peer)
@@ -677,7 +679,7 @@
 	struct timespec ts = {0,};
 	struct gbproxy_link_info *link_info = NULL;
 
-	if (!cfg->core_mcc && !cfg->core_mnc && !cfg->core_apn &&
+	if (!cfg->core_plmn.mcc && !cfg->core_plmn.mnc && !cfg->core_apn &&
 	    !cfg->acquire_imsi && !cfg->patch_ptmsi && !cfg->route_to_sgsn2)
 		return;
 
@@ -994,9 +996,8 @@
 			sizeof(from_peer->ra));
 		gsm48_parse_ra(&raid, from_peer->ra);
 		LOGP(DGPRS, LOGL_INFO, "NSEI=%u BSSGP SUSPEND/RESUME "
-			"RAI snooping: RAI %u-%u-%u-%u behind BVCI=%u\n",
-			nsei, raid.mcc, raid.mnc, raid.lac,
-			raid.rac , from_peer->bvci);
+			"RAI snooping: RAI %s behind BVCI=%u\n",
+			nsei, osmo_rai_name(&raid), from_peer->bvci);
 		/* FIXME: This only supports one BSS per RA */
 		break;
 	case BSSGP_PDUT_BVC_RESET:
@@ -1037,10 +1038,8 @@
 					TLVP_VAL(&tp, BSSGP_IE_CELL_ID),
 					sizeof(from_peer->ra));
 				gsm48_parse_ra(&raid, from_peer->ra);
-				LOGP(DGPRS, LOGL_INFO, "NSEI=%u/BVCI=%u "
-				     "Cell ID %u-%u-%u-%u\n", nsei,
-				     bvci, raid.mcc, raid.mnc, raid.lac,
-				     raid.rac);
+				LOGP(DGPRS, LOGL_INFO, "NSEI=%u/BVCI=%u Cell ID %s\n",
+				     nsei, bvci, osmo_rai_name(&raid));
 			}
 			if (cfg->route_to_sgsn2)
 				copy_to_sgsn2 = 1;
diff --git a/src/gprs/gb_proxy_patch.c b/src/gprs/gb_proxy_patch.c
index 1be9c24..496f605 100644
--- a/src/gprs/gb_proxy_patch.c
+++ b/src/gprs/gb_proxy_patch.c
@@ -36,45 +36,51 @@
 			       int to_bss, const char *log_text)
 {
 	struct gbproxy_patch_state *state = &peer->patch_state;
-	int old_mcc;
-	int old_mnc;
+	struct osmo_plmn_id old_plmn;
 	struct gprs_ra_id raid;
 	enum gbproxy_peer_ctr counter =
 		to_bss ?
 		GBPROX_PEER_CTR_RAID_PATCHED_SGSN :
 		GBPROX_PEER_CTR_RAID_PATCHED_BSS;
 
-	if (!state->local_mcc || !state->local_mnc)
+	if (!state->local_plmn.mcc || !state->local_plmn.mnc)
 		return;
 
 	gsm48_parse_ra(&raid, (uint8_t *)raid_enc);
 
-	old_mcc = raid.mcc;
-	old_mnc = raid.mnc;
+	old_plmn = (struct osmo_plmn_id){
+		.mcc = raid.mcc,
+		.mnc = raid.mnc,
+		.mnc_3_digits = raid.mnc_3_digits,
+	};
 
 	if (!to_bss) {
 		/* BSS -> SGSN */
-		if (state->local_mcc)
-			raid.mcc = peer->cfg->core_mcc;
+		if (state->local_plmn.mcc)
+			raid.mcc = peer->cfg->core_plmn.mcc;
 
-		if (state->local_mnc)
-			raid.mnc = peer->cfg->core_mnc;
+		if (state->local_plmn.mnc) {
+			raid.mnc = peer->cfg->core_plmn.mnc;
+			raid.mnc_3_digits = peer->cfg->core_plmn.mnc_3_digits;
+		}
 	} else {
 		/* SGSN -> BSS */
-		if (state->local_mcc)
-			raid.mcc = state->local_mcc;
+		if (state->local_plmn.mcc)
+			raid.mcc = state->local_plmn.mcc;
 
-		if (state->local_mnc)
-			raid.mnc = state->local_mnc;
+		if (state->local_plmn.mnc) {
+			raid.mnc = state->local_plmn.mnc;
+			raid.mnc_3_digits = state->local_plmn.mnc_3_digits;
+		}
 	}
 
 	LOGP(DGPRS, LOGL_DEBUG,
 	     "Patching %s to %s: "
-	     "%d-%d-%d-%d -> %d-%d-%d-%d\n",
+	     "%s-%d-%d -> %s\n",
 	     log_text,
 	     to_bss ? "BSS" : "SGSN",
-	     old_mcc, old_mnc, raid.lac, raid.rac,
-	     raid.mcc, raid.mnc, raid.lac, raid.rac);
+	     osmo_plmn_name(&old_plmn), raid.lac, raid.rac,
+	     osmo_rai_name(&raid));
 
 	gsm48_encode_ra(raid_enc, &raid);
 	rate_ctr_inc(&peer->ctrg->ctr[counter]);
@@ -276,7 +282,7 @@
 	return have_patched;
 }
 
-/* patch BSSGP message to use core_mcc/mnc on the SGSN side */
+/* patch BSSGP message to use core_plmn.mcc/mnc on the SGSN side */
 void gbproxy_patch_bssgp(struct msgb *msg, uint8_t *bssgp, size_t bssgp_len,
 			 struct gbproxy_peer *peer,
 			 struct gbproxy_link_info *link_info, int *len_change,
diff --git a/src/gprs/gb_proxy_vty.c b/src/gprs/gb_proxy_vty.c
index 25ef756..423c582 100644
--- a/src/gprs/gb_proxy_vty.c
+++ b/src/gprs/gb_proxy_vty.c
@@ -71,9 +71,7 @@
 	gsm48_parse_ra(&raid, peer->ra);
 
 	vty_out(vty, "NSEI %5u, PTP-BVCI %5u, "
-		"RAI %u-%u-%u-%u",
-		peer->nsei, peer->bvci,
-		raid.mcc, raid.mnc, raid.lac, raid.rac);
+		"RAI %s", peer->nsei, peer->bvci, osmo_rai_name(&raid));
 	if (peer->blocked)
 		vty_out(vty, " [BVC-BLOCKED]");
 
@@ -89,12 +87,12 @@
 	vty_out(vty, " sgsn nsei %u%s", g_cfg->nsip_sgsn_nsei,
 		VTY_NEWLINE);
 
-	if (g_cfg->core_mcc > 0)
-		vty_out(vty, " core-mobile-country-code %d%s",
-			g_cfg->core_mcc, VTY_NEWLINE);
-	if (g_cfg->core_mnc > 0)
-		vty_out(vty, " core-mobile-network-code %d%s",
-			g_cfg->core_mnc, VTY_NEWLINE);
+	if (g_cfg->core_plmn.mcc > 0)
+		vty_out(vty, " core-mobile-country-code %s%s",
+			osmo_mcc_name(g_cfg->core_plmn.mcc), VTY_NEWLINE);
+	if (g_cfg->core_plmn.mnc > 0)
+		vty_out(vty, " core-mobile-network-code %s%s",
+			osmo_mnc_name(g_cfg->core_plmn.mnc, g_cfg->core_plmn.mnc_3_digits), VTY_NEWLINE);
 
 	for (match_id = 0; match_id < ARRAY_SIZE(g_cfg->matches); ++match_id) {
 		struct gbproxy_match *match = &g_cfg->matches[match_id];
@@ -170,7 +168,14 @@
       "core-mobile-network-code <1-999>",
       GBPROXY_CORE_MNC_STR "NCC value\n")
 {
-	g_cfg->core_mnc = atoi(argv[0]);
+	uint16_t mnc;
+	bool mnc_3_digits;
+	if (osmo_mnc_from_str(argv[0], &mnc, &mnc_3_digits)) {
+		vty_out(vty, "%% Invalid MNC: %s%s", argv[0], VTY_NEWLINE);
+		return CMD_WARNING;
+	}
+	g_cfg->core_plmn.mnc = mnc;
+	g_cfg->core_plmn.mnc_3_digits = mnc_3_digits;
 	return CMD_SUCCESS;
 }
 
@@ -179,7 +184,8 @@
       "no core-mobile-network-code",
       NO_STR GBPROXY_CORE_MNC_STR)
 {
-	g_cfg->core_mnc = 0;
+	g_cfg->core_plmn.mnc = 0;
+	g_cfg->core_plmn.mnc_3_digits = false;
 	return CMD_SUCCESS;
 }
 
@@ -190,7 +196,7 @@
       "core-mobile-country-code <1-999>",
       GBPROXY_CORE_MCC_STR "MCC value\n")
 {
-	g_cfg->core_mcc = atoi(argv[0]);
+	g_cfg->core_plmn.mcc = atoi(argv[0]);
 	return CMD_SUCCESS;
 }
 
@@ -199,7 +205,7 @@
       "no core-mobile-country-code",
       NO_STR GBPROXY_CORE_MCC_STR)
 {
-	g_cfg->core_mcc = 0;
+	g_cfg->core_plmn.mcc = 0;
 	return CMD_SUCCESS;
 }
 
diff --git a/src/gprs/gprs_gb_parse.c b/src/gprs/gprs_gb_parse.c
index ba78e89..18565ae 100644
--- a/src/gprs/gprs_gb_parse.c
+++ b/src/gprs/gprs_gb_parse.c
@@ -551,24 +551,21 @@
 	if (parse_ctx->bssgp_raid_enc) {
 		struct gprs_ra_id raid;
 		gsm48_parse_ra(&raid, parse_ctx->bssgp_raid_enc);
-		LOGPC(DGPRS, log_level, "%s BSSGP RAID %u-%u-%u-%u", sep,
-		     raid.mcc, raid.mnc, raid.lac, raid.rac);
+		LOGPC(DGPRS, log_level, "%s BSSGP RAID %s", sep, osmo_rai_name(&raid));
 		sep = ",";
 	}
 
 	if (parse_ctx->raid_enc) {
 		struct gprs_ra_id raid;
 		gsm48_parse_ra(&raid, parse_ctx->raid_enc);
-		LOGPC(DGPRS, log_level, "%s RAID %u-%u-%u-%u", sep,
-		     raid.mcc, raid.mnc, raid.lac, raid.rac);
+		LOGPC(DGPRS, log_level, "%s RAID %s", sep, osmo_rai_name(&raid));
 		sep = ",";
 	}
 
 	if (parse_ctx->old_raid_enc) {
 		struct gprs_ra_id raid;
 		gsm48_parse_ra(&raid, parse_ctx->old_raid_enc);
-		LOGPC(DGPRS, log_level, "%s old RAID %u-%u-%u-%u", sep,
-		     raid.mcc, raid.mnc, raid.lac, raid.rac);
+		LOGPC(DGPRS, log_level, "%s old RAID %s", sep, osmo_rai_name(&raid));
 		sep = ",";
 	}
 
diff --git a/src/gprs/gprs_gmm.c b/src/gprs/gprs_gmm.c
index 9313e98..c9fb8da 100644
--- a/src/gprs/gprs_gmm.c
+++ b/src/gprs/gprs_gmm.c
@@ -1673,12 +1673,11 @@
 			LOGMMCTXP(LOGL_INFO, mmctx,
 				"Looked up by matching TLLI and P_TMSI. "
 				"BSSGP TLLI: %08x, P-TMSI: %08x (%08x), "
-				"TLLI: %08x (%08x), RA: %d-%d-%d-%d\n",
+				"TLLI: %08x (%08x), RA: %s\n",
 				msgb_tlli(msg),
 				mmctx->p_tmsi, mmctx->p_tmsi_old,
 				mmctx->gb.tlli, mmctx->gb.tlli_new,
-				mmctx->ra.mcc, mmctx->ra.mnc,
-				mmctx->ra.lac, mmctx->ra.rac);
+				osmo_rai_name(&mmctx->ra));
 
 			mmctx->gmm_state = GMM_COMMON_PROC_INIT;
 		}
@@ -1687,8 +1686,8 @@
 	{
 		/* We cannot use the mmctx */
 		LOGMMCTXP(LOGL_INFO, mmctx,
-			"The MM context cannot be used, RA: %d-%d-%d-%d\n",
-			mmctx->ra.mcc, mmctx->ra.mnc,
+			"The MM context cannot be used, RA: %03d-%0*d-%d-%d\n",
+			mmctx->ra.mcc, mmctx->ra.mnc_3_digits, mmctx->ra.mnc,
 			mmctx->ra.lac, mmctx->ra.rac);
 		mmctx = NULL;
 	}
diff --git a/src/gprs/gprs_utils.c b/src/gprs/gprs_utils.c
index 307699b..d7cef1c 100644
--- a/src/gprs/gprs_utils.c
+++ b/src/gprs/gprs_utils.c
@@ -239,8 +239,10 @@
 }
 
 int gprs_ra_id_equals(const struct gprs_ra_id *id1,
-			const struct gprs_ra_id *id2)
+		      const struct gprs_ra_id *id2)
 {
-	return (id1->mcc == id2->mcc && id1->mnc == id2->mnc &&
-		id1->lac == id2->lac && id1->rac == id2->rac);
+	return (id1->mcc == id2->mcc
+		&& !osmo_mnc_cmp(id1->mnc, id1->mnc_3_digits,
+				 id2->mnc, id2->mnc_3_digits)
+		&& id1->lac == id2->lac && id1->rac == id2->rac);
 }
diff --git a/src/gprs/sgsn_auth.c b/src/gprs/sgsn_auth.c
index 92712ef..6fb32b7 100644
--- a/src/gprs/sgsn_auth.c
+++ b/src/gprs/sgsn_auth.c
@@ -133,9 +133,10 @@
 	if (check_net) {
 		/* We simply assume that the IMSI exists, as long as it is part
 		 * of 'our' network */
-		snprintf(mccmnc, sizeof(mccmnc), "%03d%02d",
-			 mmctx->ra.mcc, mmctx->ra.mnc);
-		if (strncmp(mccmnc, mmctx->imsi, 5) == 0)
+		snprintf(mccmnc, sizeof(mccmnc), "%s%s",
+			 osmo_mcc_name(mmctx->ra.mcc),
+			 osmo_mnc_name(mmctx->ra.mnc, mmctx->ra.mnc_3_digits));
+		if (strncmp(mccmnc, mmctx->imsi, mmctx->ra.mnc_3_digits ? 6 : 5) == 0)
 			return SGSN_AUTH_ACCEPTED;
 	}
 
diff --git a/src/gprs/sgsn_vty.c b/src/gprs/sgsn_vty.c
index c2c03b5..f963022 100644
--- a/src/gprs/sgsn_vty.c
+++ b/src/gprs/sgsn_vty.c
@@ -473,11 +473,9 @@
 		pfx, mm->imsi, mm->imei, mm->p_tmsi, VTY_NEWLINE);
 	vty_out(vty, "%s  MSISDN: %s, TLLI: %08x%s HLR: %s",
 		pfx, mm->msisdn, mm->gb.tlli, mm->hlr, VTY_NEWLINE);
-	vty_out(vty, "%s  MM State: %s, Routeing Area: %u-%u-%u-%u, "
-		"Cell ID: %u%s", pfx,
-		get_value_string(gprs_mm_st_strs, mm->gmm_state),
-		mm->ra.mcc, mm->ra.mnc, mm->ra.lac, mm->ra.rac,
-		mm->gb.cell_id, VTY_NEWLINE);
+	vty_out(vty, "%s  MM State: %s, Routeing Area: %s, Cell ID: %u%s",
+		pfx, get_value_string(gprs_mm_st_strs, mm->gmm_state),
+		osmo_rai_name(&mm->ra), mm->gb.cell_id, VTY_NEWLINE);
 
 	vty_out_rate_ctr_group(vty, " ", mm->ctrg);
 
diff --git a/tests/gbproxy/gbproxy_test.c b/tests/gbproxy/gbproxy_test.c
index 080c96b..8edb171 100644
--- a/tests/gbproxy/gbproxy_test.c
+++ b/tests/gbproxy/gbproxy_test.c
@@ -131,12 +131,11 @@
 		struct gbproxy_patch_state *state = &peer->patch_state;
 		gsm48_parse_ra(&raid, peer->ra);
 
-		rc = fprintf(stream, "%*s  NSEI %u, BVCI %u, %sblocked, "
-			     "RAI %u-%u-%u-%u\n",
+		rc = fprintf(stream, "%*s  NSEI %u, BVCI %u, %sblocked, RAI %s\n",
 			     indent, "",
 			     peer->nsei, peer->bvci,
 			     peer->blocked ? "" : "not ",
-			     raid.mcc, raid.mnc, raid.lac, raid.rac);
+			     osmo_rai_name(&raid));
 
 		if (rc < 0)
 			return rc;
@@ -1657,8 +1656,7 @@
 	bssgp_nsi = nsi;
 	gbcfg.nsi = bssgp_nsi;
 	gbcfg.nsip_sgsn_nsei = SGSN_NSEI;
-	gbcfg.core_mcc = 123;
-	gbcfg.core_mnc = 456;
+	gbcfg.core_plmn = (struct osmo_plmn_id){ .mcc = 123, .mnc = 456 };
 	gbcfg.core_apn = talloc_zero_size(NULL, 100);
 	gbcfg.core_apn_size = gprs_str_to_apn(gbcfg.core_apn, 100, "foo.bar");
 	gbcfg.patch_ptmsi = 0;
@@ -1998,8 +1996,7 @@
 	bssgp_nsi = nsi;
 	gbcfg.nsi = bssgp_nsi;
 	gbcfg.nsip_sgsn_nsei = SGSN_NSEI;
-	gbcfg.core_mcc = 0;
-	gbcfg.core_mnc = 0;
+	gbcfg.core_plmn = (struct osmo_plmn_id){};
 	gbcfg.core_apn = talloc_zero_size(NULL, 100);
 	gbcfg.core_apn_size = gprs_str_to_apn(gbcfg.core_apn, 100, "foo.bar");
 	gbcfg.patch_ptmsi = 0;
@@ -2232,8 +2229,7 @@
 	bssgp_nsi = nsi;
 	gbcfg.nsi = bssgp_nsi;
 	gbcfg.nsip_sgsn_nsei = SGSN_NSEI;
-	gbcfg.core_mcc = 123;
-	gbcfg.core_mnc = 456;
+	gbcfg.core_plmn = (struct osmo_plmn_id){ .mcc = 123, .mnc = 456 };
 	gbcfg.core_apn = talloc_zero_size(NULL, 100);
 	gbcfg.core_apn_size = gprs_str_to_apn(gbcfg.core_apn, 100, "foo.bar");
 	gbcfg.patch_ptmsi = 1;
@@ -2551,8 +2547,7 @@
 	bssgp_nsi = nsi;
 	gbcfg.nsi = bssgp_nsi;
 	gbcfg.nsip_sgsn_nsei = SGSN_NSEI;
-	gbcfg.core_mcc = 123;
-	gbcfg.core_mnc = 456;
+	gbcfg.core_plmn = (struct osmo_plmn_id){ .mcc = 123, .mnc = 456 };
 	gbcfg.core_apn = talloc_zero_size(NULL, 100);
 	gbcfg.core_apn_size = gprs_str_to_apn(gbcfg.core_apn, 100, "foo.bar");
 	gbcfg.patch_ptmsi = 1;
@@ -2735,8 +2730,7 @@
 	bssgp_nsi = nsi;
 	gbcfg.nsi = bssgp_nsi;
 	gbcfg.nsip_sgsn_nsei = SGSN_NSEI;
-	gbcfg.core_mcc = 123;
-	gbcfg.core_mnc = 456;
+	gbcfg.core_plmn = (struct osmo_plmn_id){ .mcc = 123, .mnc = 456 };
 	gbcfg.core_apn = talloc_zero_size(NULL, 100);
 	gbcfg.core_apn_size = gprs_str_to_apn(gbcfg.core_apn, 100, "foo.bar");
 	gbcfg.patch_ptmsi = 1;
@@ -3061,8 +3055,7 @@
 	bssgp_nsi = nsi;
 	gbcfg.nsi = bssgp_nsi;
 	gbcfg.nsip_sgsn_nsei = SGSN_NSEI;
-	gbcfg.core_mcc = 123;
-	gbcfg.core_mnc = 456;
+	gbcfg.core_plmn = (struct osmo_plmn_id){ .mcc = 123, .mnc = 456 };
 	gbcfg.core_apn = talloc_zero_size(NULL, 100);
 	gbcfg.core_apn_size = gprs_str_to_apn(gbcfg.core_apn, 100, "foo.bar");
 	gbcfg.patch_ptmsi = 1;
@@ -3540,8 +3533,7 @@
 	gbcfg.nsip_sgsn_nsei = SGSN_NSEI;
 	gbcfg.patch_ptmsi = 0;
 	gbcfg.acquire_imsi = 1;
-	gbcfg.core_mcc = 0;
-	gbcfg.core_mnc = 0;
+	gbcfg.core_plmn = (struct osmo_plmn_id){};
 	gbcfg.core_apn = NULL;
 	gbcfg.core_apn_size = 0;
 	gbcfg.route_to_sgsn2 = 0;
@@ -4841,8 +4833,7 @@
 	bssgp_nsi = nsi;
 	gbcfg.nsi = bssgp_nsi;
 	gbcfg.nsip_sgsn_nsei = SGSN_NSEI;
-	gbcfg.core_mcc = 0;
-	gbcfg.core_mnc = 0;
+	gbcfg.core_plmn = (struct osmo_plmn_id){};
 	gbcfg.core_apn = talloc_zero_size(NULL, 100);
 	gbcfg.core_apn_size = gprs_str_to_apn(gbcfg.core_apn, 100, "foo.bar");
 	gbcfg.patch_ptmsi = 0;
diff --git a/tests/gbproxy/gbproxy_test.ok b/tests/gbproxy/gbproxy_test.ok
index ff86b67..5d77dc9 100644
--- a/tests/gbproxy/gbproxy_test.ok
+++ b/tests/gbproxy/gbproxy_test.ok
@@ -7249,7 +7249,7 @@
   Add TLLI 1, IMSI 1
   Add TLLI 2, IMSI 1 (should replace TLLI 1)
   Peers:
-    NSEI 0, BVCI 20, not blocked, RAI 0-0-0-0
+    NSEI 0, BVCI 20, not blocked, RAI 000-000-0-0
       TLLI cache size                 : 1
       TLLI-Cache: 1
         TLLI c000162e, IMSI 03242526, AGE 0, IMSI matches
@@ -7258,7 +7258,7 @@
   Add TLLI 1, IMSI 1
   Add TLLI 1, IMSI 2 (should replace IMSI 1)
   Peers:
-    NSEI 0, BVCI 20, not blocked, RAI 0-0-0-0
+    NSEI 0, BVCI 20, not blocked, RAI 000-000-0-0
       TLLI cache size                 : 1
       TLLI-Cache: 1
         TLLI c00004d2, IMSI 06272829, AGE 0, IMSI matches
@@ -7267,7 +7267,7 @@
   Add TLLI 1, IMSI 1
   Add TLLI 2, IMSI 2 (should replace IMSI 1)
   Peers:
-    NSEI 0, BVCI 20, not blocked, RAI 0-0-0-0
+    NSEI 0, BVCI 20, not blocked, RAI 000-000-0-0
       TLLI cache size                 : 1
       TLLI-Cache: 1
         TLLI c000162e, IMSI 06272829, AGE 0, IMSI matches
@@ -7276,7 +7276,7 @@
   Add TLLI 1, IMSI 1 (should expire after timeout)
   Add TLLI 2, IMSI 2 (should not expire after timeout)
   Peers:
-    NSEI 0, BVCI 20, not blocked, RAI 0-0-0-0
+    NSEI 0, BVCI 20, not blocked, RAI 000-000-0-0
       TLLI cache size                 : 1
       TLLI-Cache: 1
         TLLI c000162e, IMSI 06272829, AGE 1, IMSI matches
@@ -7286,7 +7286,7 @@
   Add TLLI 2, IMSI 2 (should expire after timeout)
   Add TLLI 3, IMSI 3 (should not expire after timeout)
   Peers:
-    NSEI 0, BVCI 20, not blocked, RAI 0-0-0-0
+    NSEI 0, BVCI 20, not blocked, RAI 000-000-0-0
       TLLI cache size                 : 3
       TLLI-Cache: 3
         TLLI c0000d80, IMSI 12345678, AGE 0, IMSI matches
@@ -7294,7 +7294,7 @@
         TLLI c00004d2, IMSI 03242526, AGE 2, IMSI matches
   Remove stale TLLIs
   Peers:
-    NSEI 0, BVCI 20, not blocked, RAI 0-0-0-0
+    NSEI 0, BVCI 20, not blocked, RAI 000-000-0-0
       TLLI cache size                 : 1
       TLLI-Cache: 1
         TLLI c0000d80, IMSI 12345678, AGE 0, IMSI matches

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

Gerrit-MessageType: newpatchset
Gerrit-Change-Id: I7437dfaa586689e2bef0d4be6537e5577a8f6c26
Gerrit-PatchSet: 2
Gerrit-Project: osmo-sgsn
Gerrit-Branch: master
Gerrit-Owner: Neels Hofmeyr <nhofmeyr at sysmocom.de>
Gerrit-Reviewer: Harald Welte <laforge at gnumonks.org>
Gerrit-Reviewer: Jenkins Builder



More information about the gerrit-log mailing list