diff --git a/include/osmocom/bsc/bts.h b/include/osmocom/bsc/bts.h index 68e7cfed5..7e73acd9d 100644 --- a/include/osmocom/bsc/bts.h +++ b/include/osmocom/bsc/bts.h @@ -131,6 +131,13 @@ enum bts_counter_id { BTS_CTR_INTRA_BSC_HO_TIMEOUT, BTS_CTR_INTRA_BSC_HO_FAILED, BTS_CTR_INTRA_BSC_HO_ERROR, + BTS_CTR_INCOMING_INTRA_BSC_HO_ATTEMPTED, + BTS_CTR_INCOMING_INTRA_BSC_HO_COMPLETED, + BTS_CTR_INCOMING_INTRA_BSC_HO_STOPPED, + BTS_CTR_INCOMING_INTRA_BSC_HO_NO_CHANNEL, + BTS_CTR_INCOMING_INTRA_BSC_HO_TIMEOUT, + BTS_CTR_INCOMING_INTRA_BSC_HO_FAILED, + BTS_CTR_INCOMING_INTRA_BSC_HO_ERROR, BTS_CTR_INTER_BSC_HO_OUT_ATTEMPTED, BTS_CTR_INTER_BSC_HO_OUT_COMPLETED, BTS_CTR_INTER_BSC_HO_OUT_STOPPED, diff --git a/src/osmo-bsc/bts.c b/src/osmo-bsc/bts.c index ee2e7918b..83adcc469 100644 --- a/src/osmo-bsc/bts.c +++ b/src/osmo-bsc/bts.c @@ -1166,6 +1166,28 @@ const struct rate_ctr_desc bts_ctr_description[] = { { "intra_bsc_ho:error", "Intra-BSC inter-cell HO failed for other reason" }, + [BTS_CTR_INCOMING_INTRA_BSC_HO_ATTEMPTED] = \ + { "incoming_intra_bsc_ho:attempted", + "Incoming intra-BSC inter-cell handover attempts" }, + [BTS_CTR_INCOMING_INTRA_BSC_HO_COMPLETED] = \ + { "incoming_intra_bsc_ho:completed", + "Incoming intra-BSC inter-cell handover completed" }, + [BTS_CTR_INCOMING_INTRA_BSC_HO_STOPPED] = \ + { "incoming_intra_bsc_ho:stopped", + "Connection ended during HO" }, + [BTS_CTR_INCOMING_INTRA_BSC_HO_NO_CHANNEL] = \ + { "incoming_intra_bsc_ho:no_channel", + "Failure to allocate lchan for HO" }, + [BTS_CTR_INCOMING_INTRA_BSC_HO_TIMEOUT] = \ + { "incoming_intra_bsc_ho:timeout", + "Handover timed out" }, + [BTS_CTR_INCOMING_INTRA_BSC_HO_FAILED] = \ + { "incoming_intra_bsc_ho:failed", + "Received Handover Fail messages" }, + [BTS_CTR_INCOMING_INTRA_BSC_HO_ERROR] = \ + { "incoming_intra_bsc_ho:error", + "Incoming intra-BSC inter-cell HO failed for other reason" }, + [BTS_CTR_INTER_BSC_HO_OUT_ATTEMPTED] = \ { "interbsc_ho_out:attempted", "Attempts to handover to remote BSS" }, diff --git a/src/osmo-bsc/handover_fsm.c b/src/osmo-bsc/handover_fsm.c index 7cf11cc3e..37e74176d 100644 --- a/src/osmo-bsc/handover_fsm.c +++ b/src/osmo-bsc/handover_fsm.c @@ -387,6 +387,7 @@ static void handover_start_intra_bsc(struct gsm_subscriber_connection *conn) } else { ho_count(bts, CTR_INTRA_BSC_HO_ATTEMPTED); ho_fsm_update_id(fi, "intraBSC"); + ho_count_bts(ho->new_bts, BTS_CTR_INCOMING_INTRA_BSC_HO_ATTEMPTED); } if (!ho->new_lchan) { @@ -829,6 +830,7 @@ static int result_counter_bsc(enum handover_scope scope, enum handover_result re FUNC_RESULT_COUNTER(BTS, HANDOVER) FUNC_RESULT_COUNTER(BTS, INTRA_CELL_HO) FUNC_RESULT_COUNTER(BTS, INTRA_BSC_HO) +FUNC_RESULT_COUNTER(BTS, INCOMING_INTRA_BSC_HO) FUNC_RESULT_COUNTER(BTS, INTER_BSC_HO_IN) /* INTRA_BSC_HO_OUT does not have a NO_CHANNEL result, so can't do this with FUNC_RESULT_COUNTER() macro. */ @@ -1020,6 +1022,9 @@ void handover_end(struct gsm_subscriber_connection *conn, enum handover_result r ho_count_bsc(result_counter_bsc(ho->scope, result)); ho_count_bts(bts, result_counter_BTS_HANDOVER(result)); ho_count_bts(bts, result_counter_bts(ho->scope, result)); + /* For inter-cell HO, also increment the "INCOMING" counters on the target BTS. */ + if (ho->scope & HO_INTRA_BSC) + ho_count_bts(ho->new_bts, result_counter_BTS_INCOMING_INTRA_BSC_HO(result)); if (ho->scope & HO_INTER_BSC_IN && conn->fast_return.last_eutran_plmn_valid) { /* From outside local BSC and with Last EUTRAN PLMN Id => SRVCC */ ho_count_bsc(result_counter_BSC_SRVCC(result));