69 lines
2.0 KiB
C
69 lines
2.0 KiB
C
/* 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);
|
|
|