diff options
author | Pau Espin Pedrol <pespin@sysmocom.de> | 2021-04-12 19:48:39 +0200 |
---|---|---|
committer | Pau Espin Pedrol <pespin@sysmocom.de> | 2021-04-15 16:36:23 +0200 |
commit | da6dae0daa0b33edaf715cdee88b6a9cd1761182 (patch) | |
tree | bb06b82ec4c178e6e603570aa9e51b8d76e774e1 /src/osmo-bsc/bsc_subscr_conn_fsm.c | |
parent | 00ae40262753ed8ffd52de0e7552723cf3329bed (diff) |
bssap: pass whole tlv_parsed to event GSCON_EV_A_COMMON_ID_IND
This change will allow handling more IEs in the future, like
"Last used E-UTRAN PLMN ID" one.
Related: SYS#5337
Change-Id: I96a0e1a7491fabf7aaad62207886821ad6194927
Diffstat (limited to 'src/osmo-bsc/bsc_subscr_conn_fsm.c')
-rw-r--r-- | src/osmo-bsc/bsc_subscr_conn_fsm.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/src/osmo-bsc/bsc_subscr_conn_fsm.c b/src/osmo-bsc/bsc_subscr_conn_fsm.c index 954c6a5d7..a0c53cb84 100644 --- a/src/osmo-bsc/bsc_subscr_conn_fsm.c +++ b/src/osmo-bsc/bsc_subscr_conn_fsm.c @@ -809,7 +809,8 @@ static void gscon_fsm_allstate(struct osmo_fsm_inst *fi, uint32_t event, void *d { struct gsm_subscriber_connection *conn = fi->priv; const struct gscon_clear_cmd_data *ccd; - struct osmo_mobile_identity *mi_imsi; + const struct tlv_parsed *tp; + struct osmo_mobile_identity mi_imsi; /* Regular allstate event processing */ switch (event) { @@ -868,14 +869,19 @@ static void gscon_fsm_allstate(struct osmo_fsm_inst *fi, uint32_t event, void *d break; case GSCON_EV_A_COMMON_ID_IND: OSMO_ASSERT(data); - mi_imsi = data; + tp = data; + if (osmo_mobile_identity_decode(&mi_imsi, TLVP_VAL(tp, GSM0808_IE_IMSI), TLVP_LEN(tp, GSM0808_IE_IMSI), false) + || mi_imsi.type != GSM_MI_TYPE_IMSI) { + LOGPFSML(fi, LOGL_ERROR, "CommonID: could not parse IMSI\n"); + return; + } if (!conn->bsub) - conn->bsub = bsc_subscr_find_or_create_by_imsi(conn->network->bsc_subscribers, mi_imsi->imsi, + conn->bsub = bsc_subscr_find_or_create_by_imsi(conn->network->bsc_subscribers, mi_imsi.imsi, BSUB_USE_CONN); else { /* we already have a bsc_subscr associated; maybe that subscriber has no IMSI yet? */ if (!conn->bsub->imsi[0]) - bsc_subscr_set_imsi(conn->bsub, mi_imsi->imsi); + bsc_subscr_set_imsi(conn->bsub, mi_imsi.imsi); } gscon_update_id(conn); break; |