diff options
author | Pau Espin Pedrol <pespin@sysmocom.de> | 2021-04-14 21:30:01 +0200 |
---|---|---|
committer | laforge <laforge@osmocom.org> | 2021-04-24 08:49:08 +0000 |
commit | 0ca738f4e33fca93adbf17eb68530f222508261d (patch) | |
tree | 78e962c06c6afd256ee1075f134240bcb9b03474 | |
parent | b0b76af0c3a2d54f07c7492184fa036da977c08f (diff) |
SRVCC: Forward Last EUTRAN PLMN Id in Handover Required
"""
The old BSS shall inform the new BSS of the MS's last used E-UTRAN PLMN
in the "Last used E-UTRAN PLMN ID" information element included in the
"Old BSS to New BSS information" Information Element if this information
is present.
"""
Depends: libosmocore.git Change-Id I6280ce1abc283f1491bc6f391b2dd952df33a16b
Related: SYS#5337
Change-Id: I6cf54f9a16d598f98dc56b25f0fef56225a25a28
-rw-r--r-- | TODO-RELEASE | 1 | ||||
-rw-r--r-- | src/osmo-bsc/osmo_bsc_bssap.c | 15 |
2 files changed, 12 insertions, 4 deletions
diff --git a/TODO-RELEASE b/TODO-RELEASE index de9e62cca..d0e3ff09e 100644 --- a/TODO-RELEASE +++ b/TODO-RELEASE @@ -9,3 +9,4 @@ #library what description / commit summary line libosmocore >1.5.1 needs osmo_bts_features_name(), osmo_bts_features_desc() libosmogsm >1.5.1 enum entry GSM0808_FE_IE_LAST_USED_EUTRAN_PLMN_ID +libosmogsm >1.5.1 introduced struct needed gsm0808_old_bss_to_new_bss_info->last_eutran_plmn_id diff --git a/src/osmo-bsc/osmo_bsc_bssap.c b/src/osmo-bsc/osmo_bsc_bssap.c index fc1484e4f..c3716ce0a 100644 --- a/src/osmo-bsc/osmo_bsc_bssap.c +++ b/src/osmo-bsc/osmo_bsc_bssap.c @@ -1358,6 +1358,7 @@ int bsc_tx_bssmap_ho_required(struct gsm_lchan *lchan, const struct gsm0808_cell { int rc; struct msgb *msg; + struct gsm_subscriber_connection *conn = lchan->conn; struct gsm0808_handover_required params = { .cause = GSM0808_CAUSE_BETTER_CELL, .cil = *target_cells, @@ -1365,6 +1366,12 @@ int bsc_tx_bssmap_ho_required(struct gsm_lchan *lchan, const struct gsm0808_cell .current_channel_type_1 = gsm0808_current_channel_type_1(lchan->type), }; + if (conn->last_eutran_plmn_valid) { + params.old_bss_to_new_bss_info_present = true; + params.old_bss_to_new_bss_info.last_eutran_plmn_id_present = true; + params.old_bss_to_new_bss_info.last_eutran_plmn_id = conn->last_eutran_plmn; + } + switch (lchan->type) { case GSM_LCHAN_TCH_F: case GSM_LCHAN_TCH_H: @@ -1383,14 +1390,14 @@ int bsc_tx_bssmap_ho_required(struct gsm_lchan *lchan, const struct gsm0808_cell msg = gsm0808_create_handover_required(¶ms); if (!msg) { - LOG_HO(lchan->conn, LOGL_ERROR, "Cannot compose BSSMAP Handover Required message\n"); + LOG_HO(conn, LOGL_ERROR, "Cannot compose BSSMAP Handover Required message\n"); return -EINVAL; } - rate_ctr_inc(&lchan->conn->sccp.msc->msc_ctrs->ctr[MSC_CTR_BSSMAP_TX_DT1_HANDOVER_REQUIRED]); - rc = gscon_sigtran_send(lchan->conn, msg); + rate_ctr_inc(&conn->sccp.msc->msc_ctrs->ctr[MSC_CTR_BSSMAP_TX_DT1_HANDOVER_REQUIRED]); + rc = gscon_sigtran_send(conn, msg); if (rc) { - LOG_HO(lchan->conn, LOGL_ERROR, "Cannot send BSSMAP Handover Required message\n"); + LOG_HO(conn, LOGL_ERROR, "Cannot send BSSMAP Handover Required message\n"); return rc; } |