diff options
author | Harald Welte <laforge@gnumonks.org> | 2020-08-01 17:03:31 +0200 |
---|---|---|
committer | Harald Welte <laforge@osmocom.org> | 2020-08-01 17:21:58 +0200 |
commit | 34363908b1d87e88b4c428972dbed88751c23e84 (patch) | |
tree | 71f34085f4dc25e09e6b785b1fa4acce81e9d36b /src | |
parent | 2428bab7c053b4428855cb2c4e95c32f7374db82 (diff) |
BS-11: Send proprietary MRPCI message after assignment + HO completelaforge/e1
This is a non-standard RSL message that must be sent after each traffic
channel has been established. Without it, any voice call will be
disconnected within seconds.
This is a hack; we need to store the subscribers classmark2 value and
use it here.
Change-Id: I6cb6d25e405aa888c4df4022d897330a6af9e946
Related: OS#2389
Diffstat (limited to 'src')
-rw-r--r-- | src/osmo-bsc/assignment_fsm.c | 10 | ||||
-rw-r--r-- | src/osmo-bsc/handover_fsm.c | 9 |
2 files changed, 19 insertions, 0 deletions
diff --git a/src/osmo-bsc/assignment_fsm.c b/src/osmo-bsc/assignment_fsm.c index ca29daabb..4034dae64 100644 --- a/src/osmo-bsc/assignment_fsm.c +++ b/src/osmo-bsc/assignment_fsm.c @@ -32,6 +32,7 @@ #include <osmocom/bsc/osmo_bsc_lcls.h> #include <osmocom/bsc/bsc_msc_data.h> #include <osmocom/bsc/gsm_08_08.h> +#include <osmocom/bsc/gsm_04_08_rr.h> #include <osmocom/bsc/lchan_select.h> #include <osmocom/bsc/abis_rsl.h> #include <osmocom/bsc/bts.h> @@ -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 8ed5945c5..48668e55b 100644 --- a/src/osmo-bsc/handover_fsm.c +++ b/src/osmo-bsc/handover_fsm.c @@ -863,8 +863,17 @@ 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); + } } osmo_fsm_inst_dispatch(conn->fi, GSCON_EV_HANDOVER_END, &result); |