diff options
author | Pau Espin Pedrol <pespin@sysmocom.de> | 2021-04-27 18:20:15 +0200 |
---|---|---|
committer | Pau Espin Pedrol <pespin@sysmocom.de> | 2021-04-29 14:22:33 +0200 |
commit | 6710670cb14a6bafb8c708e0ec673428a36a92bd (patch) | |
tree | c051f42f5347044223fe85ac4cd0a6282db69c0e /include | |
parent | a361cab54a6404572c76ac36e127fc3e3e4ceaab (diff) |
Fill Last Used E-UTRAN PLMN Id when in CSFB
Since recently, osmo-bsc behaves strictly as per specs, meaning it will
only send the "Cell selection indicator after release of all TCH and SDCCH IE"
in RR Channel Release iff:
* "Last Used E-UTRAN PLMN Id" was received in the CommonID sent MSC->BSC
* "Last Used E-UTRAN PLMN Id" was received insider "old BSS to new BSS Information"
in the HandoverRequest sent MSC->BSC.
On the other hand, CSFB_Indicator from ClearCommand MSC->BSC is nw
ignored and not taken into account.
Hence, let's update osmo-msc to also behave correctly by sending the
Last Used E-UTRAN PLMN ID at CommonID tx time to avoid regressions in
CSFB support when running against newer osmo-bsc.
Let's keep sending the CSFB Indicator in ClearCommand as we used too, in
order to keep compatibility with older BSCs (as per spec).
Related: SYS#5337
Change-Id: Ic5f175b179973d0a50d94f00e15f5a3e332605fc
Diffstat (limited to 'include')
-rw-r--r-- | include/osmocom/msc/ran_msg.h | 2 | ||||
-rw-r--r-- | include/osmocom/msc/vlr.h | 4 | ||||
-rw-r--r-- | include/osmocom/msc/vlr_sgs.h | 2 |
3 files changed, 7 insertions, 1 deletions
diff --git a/include/osmocom/msc/ran_msg.h b/include/osmocom/msc/ran_msg.h index 3b08b466c..1303ba3f9 100644 --- a/include/osmocom/msc/ran_msg.h +++ b/include/osmocom/msc/ran_msg.h @@ -220,6 +220,8 @@ struct ran_msg { } cipher_mode_reject; struct { const char *imsi; + bool last_eutran_plmn_present; + struct osmo_plmn_id last_eutran_plmn; } common_id; struct { enum gsm48_reject_value cause; diff --git a/include/osmocom/msc/vlr.h b/include/osmocom/msc/vlr.h index 3b9bbc41c..6e65283d8 100644 --- a/include/osmocom/msc/vlr.h +++ b/include/osmocom/msc/vlr.h @@ -193,6 +193,8 @@ struct vlr_subscr { vlr_sgs_lu_mminfo_cb_t mminfo_cb; enum sgsap_service_ind paging_serv_ind; struct osmo_timer_list Ts5; + bool last_eutran_plmn_present; + struct osmo_plmn_id last_eutran_plmn; } sgs; struct osmo_gsm48_classmark classmark; @@ -398,6 +400,8 @@ void vlr_subscr_set_imsi(struct vlr_subscr *vsub, const char *imsi); void vlr_subscr_set_imei(struct vlr_subscr *vsub, const char *imei); void vlr_subscr_set_imeisv(struct vlr_subscr *vsub, const char *imeisv); void vlr_subscr_set_msisdn(struct vlr_subscr *vsub, const char *msisdn); +void vlr_subscr_set_last_used_eutran_plmn_id(struct vlr_subscr *vsub, + const struct osmo_plmn_id *last_eutran_plmn); bool vlr_subscr_matches_imsi(struct vlr_subscr *vsub, const char *imsi); bool vlr_subscr_matches_tmsi(struct vlr_subscr *vsub, uint32_t tmsi); diff --git a/include/osmocom/msc/vlr_sgs.h b/include/osmocom/msc/vlr_sgs.h index fa9d948a1..1a4984db8 100644 --- a/include/osmocom/msc/vlr_sgs.h +++ b/include/osmocom/msc/vlr_sgs.h @@ -97,7 +97,7 @@ void vlr_sgs_reset(struct vlr_instance *vlr); int vlr_sgs_loc_update(struct vlr_instance *vlr, struct vlr_sgs_cfg *cfg, vlr_sgs_lu_response_cb_t response_cb, vlr_sgs_lu_paging_cb_t paging_cb, vlr_sgs_lu_mminfo_cb_t mminfo_cb, char *mme_name, enum vlr_lu_type type, const char *imsi, - struct osmo_location_area_id *new_lai); + struct osmo_location_area_id *new_lai, struct osmo_plmn_id *last_eutran_plmn); void vlr_sgs_loc_update_acc_sent(struct vlr_subscr *vsub); void vlr_sgs_loc_update_rej_sent(struct vlr_subscr *vsub); void vlr_sgs_detach(struct vlr_instance *vlr, const char *imsi, bool eps); |