/* Manage identity of neighboring BSS cells for inter-BSC handover */ #pragma once #include #include #include #include #include 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);