diff options
authorNeels Hofmeyr <neels@hofmeyr.de>2019-07-08 17:41:25 +0200
committerneels <nhofmeyr@sysmocom.de>2019-07-09 15:45:41 +0000
commit00a2721e4c881f3b2b7c629a9e665071f99d4d00 (patch)
parent08371ecc01a996f552ecfd4be9b3b738a9809e05 (diff)
remove double BSSMAP Clear on HO failure
If a handover fails when the new lchan is already fully established, osmo-bsc so far caused two BSSMAP Clear Requests to be sent out to the MSC: one caused by detaching the lchan from the gscon, one from returning the gscon back to ST_ACTIVE, which detects that no lchan is present and Clears. In fact only one of those is necessary. Checking for the presence of an lchan when entering ST_ACTIVE is an earlier attempt to catch insane situations. Since then, osmo-bsc has acquired other logic that will ensure sending a Clear Request in all cases, see gscon_forget_lchan(). Sending another BSSMAP Clear Request in ST_ACTIVE's onenter is simply not necessary. Drop gscon_fsm_active_onenter() entirely. Note: the double Clear Request is currently hit by TC_ho_out_fail_no_ho_detect(), which currently fails and will pass again after this patch; however, osmo-bsc should actually not release the lchan at all during this test, see OS#4093. In other words, osmo-bsc behavior for this scenario as well as TC_ho_out_fail_no_ho_detect() need to be changed, and the test will, once fixed, not be useful to trigger this issue anymore. Related: OS#4078 Change-Id: Iac1519eb8b24e8523caec682f9ac8e6dcf1327ce
1 files changed, 0 insertions, 8 deletions
diff --git a/src/osmo-bsc/bsc_subscr_conn_fsm.c b/src/osmo-bsc/bsc_subscr_conn_fsm.c
index bc5cb27fa..f8784f9ba 100644
--- a/src/osmo-bsc/bsc_subscr_conn_fsm.c
+++ b/src/osmo-bsc/bsc_subscr_conn_fsm.c
@@ -343,13 +343,6 @@ static void gscon_fsm_wait_cc(struct osmo_fsm_inst *fi, uint32_t event, void *da
-static void gscon_fsm_active_onenter(struct osmo_fsm_inst *fi, uint32_t prev_state)
- struct gsm_subscriber_connection *conn = fi->priv;
- if (!conn->lchan)
- gscon_bssmap_clear(conn, GSM0808_CAUSE_EQUIPMENT_FAILURE);
/* We're on an active subscriber connection, passing DTAP back and forth */
static void gscon_fsm_active(struct osmo_fsm_inst *fi, uint32_t event, void *data)
@@ -605,7 +598,6 @@ static const struct osmo_fsm_state gscon_fsm_states[] = {
.out_state_mask = S(ST_CLEARING) | S(ST_ASSIGNMENT) |
- .onenter = gscon_fsm_active_onenter,
.action = gscon_fsm_active,