laforge has uploaded this change for review. (
https://gerrit.osmocom.org/c/osmocom-bb/+/33318 )
Change subject: [untested] layer23: migrate away from gsm48_generate_mid_from_*
......................................................................
[untested] layer23: migrate away from gsm48_generate_mid_from_*
Migrate from deprecated gsm48_mi_to_string to osmo_mobile_identity
Change-Id: Ib0d7f76cd635e8d1092ffc1d07ecb29ec0435dda
Depends: libosmocore.git If4f7be606e54cfa1c59084cf169785b1cbda5cf5
---
M src/host/layer23/src/mobile/gsm48_mm.c
M src/host/layer23/src/mobile/gsm48_rr.c
2 files changed, 69 insertions(+), 49 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmocom-bb refs/changes/18/33318/1
diff --git a/src/host/layer23/src/mobile/gsm48_mm.c
b/src/host/layer23/src/mobile/gsm48_mm.c
index 2bba0e1..bdd7642 100644
--- a/src/host/layer23/src/mobile/gsm48_mm.c
+++ b/src/host/layer23/src/mobile/gsm48_mm.c
@@ -278,20 +278,24 @@
{
struct gsm_subscriber *subscr = &ms->subscr;
struct gsm_settings *set = &ms->settings;
- uint8_t *ie;
+ struct osmo_mobile_identity mi;
switch(mi_type) {
case GSM_MI_TYPE_TMSI:
- gsm48_generate_mid_from_tmsi(buf, subscr->tmsi);
+ mi.type = GSM_MI_TYPE_TMSI;
+ mi.tmsi = subscr->tmsi;
break;
case GSM_MI_TYPE_IMSI:
- gsm48_generate_mid_from_imsi(buf, subscr->imsi);
+ mi.type = GSM_MI_TYPE_IMSI;
+ OSMO_STRLCPY_ARRAY(mi.imsi, subscr->imsi);
break;
case GSM_MI_TYPE_IMEI:
- gsm48_generate_mid_from_imsi(buf, set->imei);
+ mi.type = GSM_MI_TYPE_IMEI;
+ OSMO_STRLCPY_ARRAY(mi.imei, set->imei);
break;
case GSM_MI_TYPE_IMEISV:
- gsm48_generate_mid_from_imsi(buf, set->imeisv);
+ mi.type = GSM_MI_TYPE_IMEISV;
+ OSMO_STRLCPY_ARRAY(mi.imeisv, set->imeisv);
break;
case GSM_MI_TYPE_NONE:
default:
@@ -300,13 +304,13 @@
buf[2] = 0xf0;
break;
}
- /* alter MI type */
- buf[2] = (buf[2] & ~GSM_MI_TYPE_MASK) | mi_type;
if (msg) {
- /* MI as LV */
- ie = msgb_put(msg, 1 + buf[1]);
- memcpy(ie, buf + 1, 1 + buf[1]);
+ if (mi_type != GSM_MI_TYPE_NONE) {
+ int rc = osmo_mobile_identity_encode_buf(buf, 11, &mi, false);
+ if (rc < 0)
+ return rc;
+ }
}
return 0;
@@ -2793,9 +2797,12 @@
: rr->cd_now.arfcn);
/* MI */
if (mm->est_cause == RR_EST_CAUSE_EMERGENCY && set->emergency_imsi[0]) {
+ struct osmo_mobile_identity mi;
LOGP(DMM, LOGL_INFO, "-> Using IMSI %s for emergency\n",
set->emergency_imsi);
- gsm48_generate_mid_from_imsi(buf, set->emergency_imsi);
+ mi.type = GSM_MI_TYPE_IMSI;
+ OSMO_STRLCPY_ARRAY(mi.imsi, set->emergency_imsi);
+ osmo_mobile_identity_encode_buf(buf, sizeof(buf), &mi, false);
} else
if (!subscr->sim_valid) { /* have no SIM ? */
LOGP(DMM, LOGL_INFO, "-> Using IMEI %s\n",
diff --git a/src/host/layer23/src/mobile/gsm48_rr.c
b/src/host/layer23/src/mobile/gsm48_rr.c
index a0aad3c..9cf9294 100644
--- a/src/host/layer23/src/mobile/gsm48_rr.c
+++ b/src/host/layer23/src/mobile/gsm48_rr.c
@@ -926,7 +926,6 @@
struct msgb *nmsg;
struct gsm48_hdr *gh;
struct gsm48_rr_hdr *nrrh;
- uint8_t buf[11], *tlv;
LOGP(DRR, LOGL_INFO, "CIPHERING MODE COMPLETE (cr %d)\n", cr);
@@ -940,11 +939,17 @@
/* MI */
if (cr) {
- gsm48_generate_mid_from_imsi(buf, set->imeisv);
- /* alter MI type */
- buf[2] = (buf[2] & ~GSM_MI_TYPE_MASK) | GSM_MI_TYPE_IMEISV;
- tlv = msgb_put(nmsg, 2 + buf[1]);
- memcpy(tlv, buf, 2 + buf[1]);
+ struct osmo_mobile_identity mi;
+ uint8_t *l;
+ int rc;
+
+ mi.type = GSM_MI_TYPE_IMEISV;
+ OSMO_STRLCPY_ARRAY(mi.imeisv, set->imeisv);
+ l = msgb_tl_put(nmsg, GSM48_IE_MOBILE_ID);
+ rc = osmo_mobile_identity_encode_msgb(nmsg, &mi, false);
+ if (rc < 0)
+ return rc;
+ *l = rc;
}
gsm48_send_rsl(ms, RSL_MT_DATA_REQ, nmsg, 0);
@@ -2128,43 +2133,37 @@
};
/* given LV of mobile identity is checked against ms */
-static uint8_t gsm_match_mi(struct osmocom_ms *ms, uint8_t *mi)
+static uint8_t gsm_match_mi(struct osmocom_ms *ms, const uint8_t *mi_lv)
{
struct gsm322_cellsel *cs = &ms->cellsel;
- char imsi[16];
- uint32_t tmsi;
- uint8_t mi_type;
+ struct osmo_mobile_identity mi;
+ char buf[32];
+ int rc;
- if (mi[0] < 1)
- return 0;
- mi_type = mi[1] & GSM_MI_TYPE_MASK;
- switch (mi_type) {
+ rc = osmo_mobile_identity_decode(&mi, mi_lv+1, mi_lv[0], false);
+ if (rc < 0)
+ return rc;
+ osmo_mobile_identity_to_str_buf(buf, sizeof(buf), &mi);
+
+ switch (mi.type) {
case GSM_MI_TYPE_TMSI:
- if (mi[0] < 5)
- return 0;
- memcpy(&tmsi, mi+2, 4);
- if (ms->subscr.tmsi == ntohl(tmsi)
+ if ((ms->subscr.tmsi == mi.tmsi)
&& (osmo_lai_cmp(&ms->subscr.lai, &cs->sel_cgi.lai) == 0)) {
- LOGP(DPAG, LOGL_INFO, " TMSI %08x matches\n",
- ntohl(tmsi));
-
- return mi_type;
+ LOGP(DPAG, LOGL_INFO, " %s matches\n", buf);
+ return mi.type;
} else
- LOGP(DPAG, LOGL_INFO, " TMSI %08x (not for us)\n",
- ntohl(tmsi));
+ LOGP(DPAG, LOGL_INFO, " %s (not for us)\n", buf);
break;
case GSM_MI_TYPE_IMSI:
- gsm48_mi_to_string(imsi, sizeof(imsi), mi + 1, mi[0]);
- if (!strcmp(imsi, ms->subscr.imsi)) {
- LOGP(DPAG, LOGL_INFO, " IMSI %s matches\n", imsi);
-
- return mi_type;
+ if (!strcmp(mi.imsi, ms->subscr.imsi)) {
+ LOGP(DPAG, LOGL_INFO, " %s matches\n", buf);
+ return mi.type;
} else
- LOGP(DPAG, LOGL_INFO, " IMSI %s (not for us)\n", imsi);
+ LOGP(DPAG, LOGL_INFO, " %s (not for us)\n", buf);
break;
default:
LOGP(DPAG, LOGL_NOTICE, "Paging with unsupported MI type %d.\n",
- mi_type);
+ mi.type);
}
return 0;
@@ -3217,7 +3216,6 @@
struct msgb *nmsg;
struct gsm48_hdr *gh;
struct gsm48_pag_rsp *pr;
- uint8_t mi[11];
uint16_t ma[64];
uint8_t ma_len;
@@ -3277,6 +3275,7 @@
/* set sequence number and increment */
gsm48_apply_v_sd(rr, nmsg);
} else {
+ struct osmo_mobile_identity mid;
/* create paging response */
nmsg = gsm48_l3_msgb_alloc();
if (!nmsg)
@@ -3294,21 +3293,23 @@
if (ms->subscr.tmsi != GSM_RESERVED_TMSI
&& (osmo_lai_cmp(&ms->subscr.lai, &cs->sel_cgi.lai) == 0)
&& rr->paging_mi_type == GSM_MI_TYPE_TMSI) {
- gsm48_generate_mid_from_tmsi(mi, subscr->tmsi);
+ mid.type = GSM_MI_TYPE_TMSI;
+ mid.tmsi = ms->subscr.tmsi;
+ osmo_mobile_identity_encode_msgb(nmsg, &mid, false);
LOGP(DRR, LOGL_INFO, "sending paging response with "
"TMSI\n");
} else if (subscr->imsi[0]) {
- gsm48_generate_mid_from_imsi(mi, subscr->imsi);
+ mid.type = GSM_MI_TYPE_IMSI;
+ OSMO_STRLCPY_ARRAY(mid.imsi, subscr->imsi);
+ osmo_mobile_identity_encode_msgb(nmsg, &mid, false);
LOGP(DRR, LOGL_INFO, "sending paging response with "
"IMSI\n");
} else {
- mi[1] = 1;
- mi[2] = 0xf0 | GSM_MI_TYPE_NONE;
+ msgb_put_u8(nmsg, 1);
+ msgb_put_u8(nmsg, 0xf0 | GSM_MI_TYPE_NONE);
LOGP(DRR, LOGL_INFO, "sending paging response without "
"TMSI/IMSI\n");
}
- msgb_put(nmsg, 1 + mi[1]);
- memcpy(pr->data, mi + 1, 1 + mi[1]);
}
#ifdef TEST_FREQUENCY_MOD
--
To view, visit
https://gerrit.osmocom.org/c/osmocom-bb/+/33318
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings
Gerrit-Project: osmocom-bb
Gerrit-Branch: master
Gerrit-Change-Id: Ib0d7f76cd635e8d1092ffc1d07ecb29ec0435dda
Gerrit-Change-Number: 33318
Gerrit-PatchSet: 1
Gerrit-Owner: laforge <laforge(a)osmocom.org>
Gerrit-MessageType: newchange