aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Eversberg <jolly@eversberg.eu>2014-01-20 10:43:37 +0100
committerNeels Hofmeyr <neels@hofmeyr.de>2017-12-01 03:37:44 +0100
commit8156494f36e2ef8f388aeb698baf964b5e3eb349 (patch)
tree84da93bbb8c700279a42bf7739df49c1e7c8fd26
parentaa9874da852b8673b2cee87ab8513cb5d6e7bb8b (diff)
BS11: send MRPCI message after HANDOVER COMPLETE and ASSIGNMENT COMPLETEneels/jolly/new_handover
This message is required for each activated channel. It is sent after activating channel, due to IMMEDIATE ASSIGNMENT already (after paging response or CM service request). Also it is required for the activated channel after late assignment or handover. It has been successfully tested with late assignment and handover to the same BTS.
-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);
}