diff options
author | Andreas Eversberg <jolly@eversberg.eu> | 2014-01-20 10:43:37 +0100 |
---|---|---|
committer | Andreas Eversberg <jolly@eversberg.eu> | 2014-01-20 10:43:37 +0100 |
commit | cf61099780be486844c9f5a1a350e4b11276b06e (patch) | |
tree | 64dc49fa62264ca9d8d55f999a48c35c232b7129 | |
parent | a1196c9aea109201859eb9d6f5f732df2c268a29 (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.c | 19 |
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); } |