aboutsummaryrefslogtreecommitdiffstats
path: root/src/libbsc/bsc_api.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libbsc/bsc_api.c')
-rw-r--r--src/libbsc/bsc_api.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/libbsc/bsc_api.c b/src/libbsc/bsc_api.c
index 271eb4a7b..a321669e8 100644
--- a/src/libbsc/bsc_api.c
+++ b/src/libbsc/bsc_api.c
@@ -485,12 +485,27 @@ int gsm0808_page(struct gsm_bts *bts, unsigned int page_group, unsigned int mi_l
return rsl_paging_cmd(bts, page_group, mi_len, mi, chan_type);
}
+static void send_siemens_mrpci_after_ass_ho(struct gsm_subscriber *subscr,
+ struct gsm_lchan *lchan)
+{
+ struct gsm_equipment *equipment = &subscr->equipment;
+ uint8_t classmark2_lv[equipment->classmark2_len + 1];
+
+ classmark2_lv[0] = equipment->classmark2_len;
+ memcpy(classmark2_lv + 1, equipment->classmark2, classmark2_lv[0]);
+
+ send_siemens_mrpci(lchan, classmark2_lv);
+}
+
static void handle_ass_compl(struct gsm_subscriber_connection *conn,
struct msgb *msg)
{
struct gsm48_hdr *gh;
struct bsc_api *api = conn->bts->network->bsc_api;
+ if (is_siemens_bts(conn->bts))
+ send_siemens_mrpci_after_ass_ho(conn->subscr, msg->lchan);
+
if (conn->ho_lchan) {
struct lchan_signal_data sig;
struct gsm48_hdr *gh = msgb_l3(msg);
@@ -655,6 +670,10 @@ static void handle_rr_ho_compl(struct msgb *msg)
osmo_signal_dispatch(SS_LCHAN, S_LCHAN_HANDOVER_COMPL, &sig);
/* FIXME: release old channel */
+ if (is_siemens_bts(msg->lchan->conn->bts))
+ send_siemens_mrpci_after_ass_ho(msg->lchan->conn->subscr,
+ msg->lchan);
+
/* send pending messages, if any */
flush_assignment_queue(msg->lchan->conn, 1);
}