diff options
author | Neels Hofmeyr <neels@hofmeyr.de> | 2020-08-29 03:24:18 +0000 |
---|---|---|
committer | Neels Hofmeyr <neels@hofmeyr.de> | 2020-08-31 18:01:17 +0200 |
commit | cd219d88f7895688637036dcd91f99aaa4247177 (patch) | |
tree | f4c9923a8ab682db6a382fc95c037ec6421e8e7b | |
parent | 90f7c3c08db3ca0150540262c47241b850133f96 (diff) |
handover_fsm: signal Clear from gscon, for proper HO result counts
An inter-BSC-OUT handover ends with a Clear Command, which HO_OUT_ST_WAIT_CLEAR
waits for. Actually tell the handover_fsm.c about an incoming Clear Command, so
that the inter-BSC-OUT success can be counted.
Similarly, count failing handover results for an unexpected Clear Command from
the MSC.
Related: OS#4736
Change-Id: I0c489838a99f930e2104619ca745191d2a736f1b
-rw-r--r-- | src/osmo-bsc/bsc_subscr_conn_fsm.c | 5 | ||||
-rw-r--r-- | src/osmo-bsc/handover_fsm.c | 2 |
2 files changed, 7 insertions, 0 deletions
diff --git a/src/osmo-bsc/bsc_subscr_conn_fsm.c b/src/osmo-bsc/bsc_subscr_conn_fsm.c index e7c6efe09..b6ea59f48 100644 --- a/src/osmo-bsc/bsc_subscr_conn_fsm.c +++ b/src/osmo-bsc/bsc_subscr_conn_fsm.c @@ -771,6 +771,11 @@ static void gscon_fsm_allstate(struct osmo_fsm_inst *fi, uint32_t event, void *d case GSCON_EV_A_CLEAR_CMD: conn->rx_clear_command = true; + /* Give the handover_fsm a chance to book this as handover success before tearing down everything, + * making it look like a sudden death failure. */ + if (conn->ho.fi) + osmo_fsm_inst_dispatch(conn->ho.fi, HO_EV_CONN_RELEASING, NULL); + OSMO_ASSERT(data); ccd = data; if (conn->lchan) diff --git a/src/osmo-bsc/handover_fsm.c b/src/osmo-bsc/handover_fsm.c index d93e5bcb8..8e231e0eb 100644 --- a/src/osmo-bsc/handover_fsm.c +++ b/src/osmo-bsc/handover_fsm.c @@ -1269,6 +1269,8 @@ static void ho_out_fsm_wait_clear(struct osmo_fsm_inst *fi, uint32_t event, void { struct gsm_subscriber_connection *conn = ho_fi_conn(fi); switch (event) { + /* See also ho_fsm_allstate_action() for ho_success() on HO_EV_CONN_RELEASING */ + case HO_EV_RR_HO_FAIL: ho_fail(HO_RESULT_FAIL_RR_HO_FAIL, "Received RR Handover Failure message"); return; |