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 <[email protected]>
Gerrit-MessageType: newchange

Reply via email to