diff options
Diffstat (limited to 'include/osmocom/msc/neighbor_ident.h')
-rw-r--r-- | include/osmocom/msc/neighbor_ident.h | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/include/osmocom/msc/neighbor_ident.h b/include/osmocom/msc/neighbor_ident.h new file mode 100644 index 000000000..8cd74ab57 --- /dev/null +++ b/include/osmocom/msc/neighbor_ident.h @@ -0,0 +1,68 @@ +/* Manage identity of neighboring BSS cells for inter-BSC handover */ +#pragma once + +#include <stdint.h> +#include <stdbool.h> + +#include <osmocom/core/linuxlist.h> +#include <osmocom/gsm/gsm0808.h> +#include <osmocom/sigtran/sccp_sap.h> + +struct vty; +struct gsm_network; + +enum msc_neighbor_type { + MSC_NEIGHBOR_TYPE_NONE = 0, + MSC_NEIGHBOR_TYPE_LOCAL_RAN_PEER, + MSC_NEIGHBOR_TYPE_REMOTE_MSC, +}; + +struct msc_ipa_name { + char buf[64]; + size_t len; +}; + +int msc_ipa_name_from_str(struct msc_ipa_name *min, const char *name); +int msc_ipa_name_cmp(const struct msc_ipa_name *a, const struct msc_ipa_name *b); + +struct neighbor_ident_addr { + enum osmo_rat_type ran_type; + enum msc_neighbor_type type; + union { + char local_ran_peer_pc_str[23]; + struct msc_ipa_name remote_msc_ipa_name; + }; +}; + +struct neighbor_ident_entry { + struct llist_head entry; + + struct neighbor_ident_addr addr; + + /* A list of struct cell_ids_entry. A gsm0808_cell_id_list2 would in principle suffice, but to support + * storing more than 127 cell ids and to allow storing IDs of differing types, have a list of any number of + * gsm0808_cell_id_list2. */ + struct llist_head cell_ids; +}; + +void neighbor_ident_init(struct gsm_network *net); +const char *neighbor_ident_addr_name(const struct neighbor_ident_addr *nia); + +const struct neighbor_ident_entry *neighbor_ident_add(struct llist_head *ni_list, + const struct neighbor_ident_addr *nia, + const struct gsm0808_cell_id *cid); + +const struct neighbor_ident_entry *neighbor_ident_find_by_cell(const struct llist_head *ni_list, + enum osmo_rat_type ran_type, + const struct gsm0808_cell_id *cell_id); + +const struct neighbor_ident_entry *neighbor_ident_find_by_addr(const struct llist_head *ni_list, + const struct neighbor_ident_addr *nia); + +void neighbor_ident_del(const struct neighbor_ident_entry *nie); + +void neighbor_ident_clear(struct llist_head *ni_list); + +void neighbor_ident_vty_init(struct gsm_network *net); +void neighbor_ident_vty_write(struct vty *vty); + |