summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas.Eversberg <jolly@eversberg.eu>2010-08-15 18:44:16 +0000
committerAndreas.Eversberg <jolly@eversberg.eu>2010-08-15 18:44:16 +0000
commit5fcccd39331a63f901d7ace17d890bf34db8baf9 (patch)
treeae2ab3cb355b75c8faee32af8a139db3d3add0ef
parent4337d3bb2e2a0d205a2f846160633d4bf4b6ec83 (diff)
[layer23] Fixed handling of IMSI in special cases
-rw-r--r--src/host/layer23/src/mobile/gsm48_mm.c22
1 files changed, 15 insertions, 7 deletions
diff --git a/src/host/layer23/src/mobile/gsm48_mm.c b/src/host/layer23/src/mobile/gsm48_mm.c
index d048e89d..8228a1c1 100644
--- a/src/host/layer23/src/mobile/gsm48_mm.c
+++ b/src/host/layer23/src/mobile/gsm48_mm.c
@@ -2669,16 +2669,24 @@ static int gsm48_mm_tx_cm_serv_req(struct osmocom_ms *ms, int rr_prim,
cm2lv[0] = sizeof(struct gsm48_classmark2);
gsm48_rr_enc_cm2(ms, (struct gsm48_classmark2 *)(cm2lv + 1));
/* MI */
+ if (cause == RR_EST_CAUSE_EMERGENCY && set->emergency_imsi[0]) {
+ LOGP(DMM, LOGL_INFO, "-> Using IMSI %s for emergency\n",
+ set->emergency_imsi);
+ gsm48_generate_mid_from_imsi(buf, set->emergency_imsi);
+ } else
if (!subscr->sim_valid) { /* have no SIM ? */
- if (set->emergency_imsi[0])
- gsm48_generate_mid_from_imsi(buf,
- set->emergency_imsi);
- else
- gsm48_encode_mi(buf, NULL, ms, GSM_MI_TYPE_IMEI);
- } else if (subscr->tmsi_valid) /* have TMSI ? */
+ LOGP(DMM, LOGL_INFO, "-> Using IMEI %s\n",
+ set->imei);
+ gsm48_encode_mi(buf, NULL, ms, GSM_MI_TYPE_IMEI);
+ } else
+ if (subscr->tmsi_valid) { /* have TMSI ? */
gsm48_encode_mi(buf, NULL, ms, GSM_MI_TYPE_TMSI);
- else
+ LOGP(DMM, LOGL_INFO, "-> Using TMSI\n");
+ } else {
gsm48_encode_mi(buf, NULL, ms, GSM_MI_TYPE_IMSI);
+ LOGP(DMM, LOGL_INFO, "-> Using IMSI %s\n",
+ subscr->imsi);
+ }
msgb_put(nmsg, buf[1]); /* length is part of nsr */
memcpy(&nsr->mi_len, buf + 1, 1 + buf[1]);
/* prio is optional for eMLPP */