diff --git a/src/osmo-bsc/assignment_fsm.c b/src/osmo-bsc/assignment_fsm.c index 6dba214aa..e5ef1c5c7 100644 --- a/src/osmo-bsc/assignment_fsm.c +++ b/src/osmo-bsc/assignment_fsm.c @@ -32,6 +32,7 @@ #include #include #include +#include #include #include #include @@ -224,10 +225,19 @@ static void send_assignment_complete(struct gsm_subscriber_connection *conn) static void assignment_success(struct gsm_subscriber_connection *conn) { + struct gsm_bts *bts; + /* Take on the new lchan */ gscon_change_primary_lchan(conn, conn->assignment.new_lchan); conn->assignment.new_lchan = NULL; + bts = conn_get_bts(conn); + if (is_siemens_bts(bts) && ts_is_tch(conn->lchan->ts)) { + /* HACK: store the actual Classmark 2 LV from the subscriber and use it here! */ + uint8_t cm2_lv[] = { 0x02, 0x00, 0x00 }; + send_siemens_mrpci(conn->lchan, cm2_lv); + } + /* apply LCLS configuration (if any) */ lcls_apply_config(conn); diff --git a/src/osmo-bsc/handover_fsm.c b/src/osmo-bsc/handover_fsm.c index 573f249a1..b9caf045f 100644 --- a/src/osmo-bsc/handover_fsm.c +++ b/src/osmo-bsc/handover_fsm.c @@ -937,9 +937,18 @@ void handover_end(struct gsm_subscriber_connection *conn, enum handover_result r LOG_HO(conn, LOGL_INFO, "Result: %s\n", handover_result_name(result)); if (ho->new_lchan && result == HO_RESULT_OK) { + struct gsm_bts *bts; + gscon_change_primary_lchan(conn, conn->ho.new_lchan); ho->new_lchan = NULL; + bts = conn_get_bts(conn); + if (is_siemens_bts(bts) && ts_is_tch(conn->lchan->ts)) { + /* HACK: store the actual Classmark 2 LV from the subscriber and use it here! */ + uint8_t cm2_lv[] = { 0x02, 0x00, 0x00 }; + send_siemens_mrpci(conn->lchan, cm2_lv); + } + /* If a Perform Location Request (LCS) is busy, inform the SMLC that there is a new lchan */ if (conn->lcs.loc_req) osmo_fsm_inst_dispatch(conn->lcs.loc_req->fi, LCS_LOC_REQ_EV_HANDOVER_PERFORMED, NULL);