diff options
author | Neels Hofmeyr <neels@hofmeyr.de> | 2021-07-19 19:07:28 +0200 |
---|---|---|
committer | Neels Hofmeyr <neels@hofmeyr.de> | 2021-07-24 00:00:40 +0200 |
commit | bb56236e59726daa9950ec9350c6acf1c112feed (patch) | |
tree | 37bae8b5f9f49621bc0cac4954ce7be5f9508343 | |
parent | 56eda358741a871a519db52a7eae896af503a712 (diff) |
fix CM Re-Establishment Request: allocate new A conn
For a call re-establishment, the MS shows up on a different cell and
requests CM Re-Establishment (3GPP TS 24.008 9.2.4). As soon as the
Layer 3 is established, the MSC will clear the first A-connection; the
re-establishment *has* to happen on a new separate A-connection. So for
a brief moment we must allow two distinct A-interface connections to be
used for the same subscriber.
Tested by BSC_Tests.TC_cm_reestablishment
added in I1e7d446644f46b8a0a94688e618ffb4f23a8900e
Related: SYS#5130
Change-Id: I2da9a971dd36c4289a78040adfe85704c8282c59
-rw-r--r-- | src/osmo-bsc/gsm_08_08.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/src/osmo-bsc/gsm_08_08.c b/src/osmo-bsc/gsm_08_08.c index 80ed874be..1f6b38ef6 100644 --- a/src/osmo-bsc/gsm_08_08.c +++ b/src/osmo-bsc/gsm_08_08.c @@ -415,8 +415,13 @@ int bsc_compl_l3(struct gsm_lchan *lchan, struct msgb *msg, uint16_t chosen_chan /* If this Mobile Identity already has an active bsc_subscr, look whether there also is an active A-interface * conn for this subscriber. This may be the case during a Perform Location Request (LCS) from the MSC that - * started on an IDLE MS, and now the MS is becoming active. Associate with the existing conn. */ - if (bsub) + * started on an IDLE MS, and now the MS is becoming active. Associate with the existing conn. + * + * However, for a CM Re-Establishment Request, we must *not* re-use the existing conn, but allocate a second + * conn for the same bsub. The previous conn will be Clear'ed by the MSC as soon as it receives the L3 Complete + * message == the CM Re-Establishment Request. + */ + if (bsub && !(pdisc == GSM48_PDISC_MM && mtype == GSM48_MT_MM_CM_REEST_REQ)) conn = bsc_conn_by_bsub(bsub); if (!conn) { |