diff options
-rw-r--r-- | include/osmocom/bsc/handover.h | 2 | ||||
-rw-r--r-- | src/libbsc/handover_logic.c | 18 |
2 files changed, 20 insertions, 0 deletions
diff --git a/include/osmocom/bsc/handover.h b/include/osmocom/bsc/handover.h index 9e2ba1a59..a9349eeda 100644 --- a/include/osmocom/bsc/handover.h +++ b/include/osmocom/bsc/handover.h @@ -7,3 +7,5 @@ struct gsm_subscriber_connection; int bsc_handover_start(struct gsm_lchan *old_lchan, struct gsm_bts *bts); void bsc_clear_handover(struct gsm_subscriber_connection *conn, int free_lchan); struct gsm_lchan *bsc_handover_pending(struct gsm_lchan *new_lchan); + +int bsc_ho_count(struct gsm_bts *bts, bool inter_cell); diff --git a/src/libbsc/handover_logic.c b/src/libbsc/handover_logic.c index f525b21d5..ee7b6833e 100644 --- a/src/libbsc/handover_logic.c +++ b/src/libbsc/handover_logic.c @@ -389,3 +389,21 @@ static __attribute__((constructor)) void on_dso_load_ho_logic(void) { osmo_signal_register_handler(SS_LCHAN, ho_logic_sig_cb, NULL); } + +/* Count number of currently ongoing handovers + * inter_cell: if true, count only handovers between two cells. If false, count only handovers within one + * cell. */ +int bsc_ho_count(struct gsm_bts *bts, bool inter_cell) +{ + struct bsc_handover *ho; + int count = 0; + + llist_for_each_entry(ho, &bsc_handovers, list) { + if (ho->inter_cell != inter_cell) + continue; + if (ho->new_lchan->ts->trx->bts == bts) + count++; + } + + return count; +} |