diff options
author | Neels Hofmeyr <neels@hofmeyr.de> | 2019-07-13 01:12:53 +0200 |
---|---|---|
committer | Neels Hofmeyr <neels@hofmeyr.de> | 2019-08-13 23:47:23 +0200 |
commit | 91a202d4885d1e3aff6cb090ec688d695c2cd26b (patch) | |
tree | d3a0ebfff0c2acdce868a4756cd3231e41563443 /include/osmocom/bsc/handover.h | |
parent | 12224e7ca7201b78cdf78b055065f07d223a060d (diff) |
neighbor config: allow re-using ARFCN+BSIC pairs
Fix neighbor config to match OsmoBSC manual: implement the plan for neighbor
configuration that was so far only described in the manual without actually
being in operation.
This first allows re-using ARFCN+BSIC pairs in and across BSS.
So far the handover_start() code always looked for handover target cells across
*all* local cells, even if they were not listed as neighbors to a source cell.
Imply all cells as neighbors only as long as there are no explicit neighbors
configured. As soon as the first 'neighbor' line appears in a 'bts' config,
only the listed neighbors are regarded as handover target cells. (The
'neighbor-list' commands are not related to this, only the relatively new
'neighbor (bts|lac|cgi|...)' commands affect actual handover procedures.)
TTCN3 tests TC_ho_neighbor_config_1 thru _7 play through the various aspects of
neighbor configuration: both the legacy implicit all-cells-are-neighbors as
well as allowing only explicit neighbors by config.
Related: OS#4056
Related: osmo-ttcn3-hacks Ia4ba0e75abd3d45a3422b2525e5f938cdc5a04cc
Change-Id: I29bca59ab232eddc74e0d4698efb9c9992443983
Diffstat (limited to 'include/osmocom/bsc/handover.h')
-rw-r--r-- | include/osmocom/bsc/handover.h | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/include/osmocom/bsc/handover.h b/include/osmocom/bsc/handover.h index 322913da4..b00ee60f8 100644 --- a/include/osmocom/bsc/handover.h +++ b/include/osmocom/bsc/handover.h @@ -10,6 +10,15 @@ #include <osmocom/bsc/neighbor_ident.h> #include <osmocom/bsc/gsm_data.h> +#define LOG_HO(conn, level, fmt, args...) do { \ + if (conn->ho.fi) \ + LOGPFSML(conn->ho.fi, level, "%s: " fmt, \ + handover_status(conn), ## args); \ + else \ + LOGP(DHODEC, level, "%s: " fmt, \ + handover_status(conn), ## args); \ + } while(0) + struct gsm_network; struct gsm_lchan; struct gsm_bts; @@ -25,6 +34,8 @@ enum handover_result { HO_RESULT_ERROR, }; +const char *handover_status(struct gsm_subscriber_connection *conn); + extern const struct value_string handover_result_names[]; inline static const char *handover_result_name(enum handover_result val) { return get_value_string(handover_result_names, val); } @@ -70,8 +81,11 @@ enum handover_result bsc_tx_bssmap_ho_complete(struct gsm_subscriber_connection struct gsm_lchan *lchan); void bsc_tx_bssmap_ho_failure(struct gsm_subscriber_connection *conn); -struct gsm_bts *bts_by_neighbor_ident(const struct gsm_network *net, - const struct neighbor_ident_key *search_for); +int find_handover_target_cell(struct gsm_bts **local_target_cell_p, + const struct gsm0808_cell_id_list2 **remote_target_cell_p, + struct gsm_subscriber_connection *conn, const struct neighbor_ident_key *search_for, + bool log_errors); + struct neighbor_ident_key *bts_ident_key(const struct gsm_bts *bts); void handover_parse_inter_bsc_mt(struct gsm_subscriber_connection *conn, |