aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2020-08-01 17:03:31 +0200
committerlaforge <laforge@osmocom.org>2021-02-03 08:50:07 +0000
commitf1c82b8e1250277db3ccc6a83cdb6837643b8f99 (patch)
tree4259b6afe8a28a28348546f9160721beeba4af5e
parentb4364a4adc5322181b2d0975290fc6a9d7f88aed (diff)
BS-11: Send proprietary MRPCI message after assignment + HO complete
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
-rw-r--r--src/osmo-bsc/assignment_fsm.c10
-rw-r--r--src/osmo-bsc/handover_fsm.c9
2 files changed, 19 insertions, 0 deletions
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 <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 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);