aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Eversberg <jolly@eversberg.eu>2014-01-20 10:43:37 +0100
committerAndreas Eversberg <jolly@eversberg.eu>2014-01-20 10:43:37 +0100
commitcf61099780be486844c9f5a1a350e4b11276b06e (patch)
tree64dc49fa62264ca9d8d55f999a48c35c232b7129
parenta1196c9aea109201859eb9d6f5f732df2c268a29 (diff)
BS11: send MRPCI message after HANDOVER COMPLETE and ASSIGNMENT COMPLETEjolly/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--openbsc/src/libbsc/bsc_api.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/openbsc/src/libbsc/bsc_api.c b/openbsc/src/libbsc/bsc_api.c
index 271eb4a7b..a321669e8 100644
--- a/openbsc/src/libbsc/bsc_api.c
+++ b/openbsc/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);
}