aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPau Espin Pedrol <pespin@sysmocom.de>2021-04-14 21:30:01 +0200
committerlaforge <laforge@osmocom.org>2021-04-24 08:49:08 +0000
commit0ca738f4e33fca93adbf17eb68530f222508261d (patch)
tree78e962c06c6afd256ee1075f134240bcb9b03474
parentb0b76af0c3a2d54f07c7492184fa036da977c08f (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-RELEASE1
-rw-r--r--src/osmo-bsc/osmo_bsc_bssap.c15
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(&params);
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;
}