diff options
Diffstat (limited to 'openbsc/include/openbsc')
-rw-r--r-- | openbsc/include/openbsc/gb_proxy.h | 58 |
1 files changed, 53 insertions, 5 deletions
diff --git a/openbsc/include/openbsc/gb_proxy.h b/openbsc/include/openbsc/gb_proxy.h index 528b0c4a9..4305d137d 100644 --- a/openbsc/include/openbsc/gb_proxy.h +++ b/openbsc/include/openbsc/gb_proxy.h @@ -7,6 +7,8 @@ #include <osmocom/gprs/gprs_ns.h> #include <osmocom/vty/command.h> +struct rate_ctr_group; + enum gbproxy_patch_mode { GBPROX_PATCH_DEFAULT, GBPROX_PATCH_BSSGP, /*!< BSGGP messages only */ @@ -24,6 +26,9 @@ struct gbproxy_config { /* misc */ struct gprs_ns_inst *nsi; + /* Linked list of all Gb peers (except SGSN) */ + struct llist_head bts_peers; + /* force mcc/mnc */ int core_mnc; int core_mcc; @@ -35,12 +40,45 @@ struct gbproxy_config { int tlli_max_len; }; +struct gbprox_patch_state { + int local_mnc; + int local_mcc; + + /* List of TLLIs for which patching is enabled */ + struct llist_head enabled_tllis; + int enabled_tllis_count; +}; + +struct gbprox_peer { + struct llist_head list; + + /* NSEI of the peer entity */ + uint16_t nsei; + + /* BVCI used for Point-to-Point to this peer */ + uint16_t bvci; + int blocked; + + /* Routeing Area that this peer is part of (raw 04.08 encoding) */ + uint8_t ra[6]; + + /* Counter */ + struct rate_ctr_group *ctrg; + + struct gbprox_patch_state patch_state; +}; + +struct gbprox_tlli_info { + struct llist_head list; + + uint32_t tlli; + time_t timestamp; + uint8_t *mi_data; + size_t mi_data_len; +}; + + extern struct gbproxy_config gbcfg; -extern struct cmd_element show_gbproxy_cmd; -extern struct cmd_element show_gbproxy_tllis_cmd; -extern struct cmd_element delete_gb_bvci_cmd; -extern struct cmd_element delete_gb_nsei_cmd; -extern struct cmd_element delete_gb_tlli_cmd; /* gb_proxy_vty .c */ @@ -49,6 +87,7 @@ int gbproxy_parse_config(const char *config_file, struct gbproxy_config *cfg); /* gb_proxy.c */ +int gbproxy_init_config(struct gbproxy_config *cfg); /* Main input function for Gb proxy */ int gbprox_rcvmsg(struct msgb *msg, uint16_t nsei, uint16_t ns_bvci, uint16_t nsvci); @@ -67,4 +106,13 @@ char *gbprox_apn_to_str(char *str, const uint8_t *apn_enc, size_t max_chars); int gbprox_str_to_apn(uint8_t *apn_enc, const char *str, size_t max_chars); int gbprox_set_patch_filter(const char *filter, const char **err_msg); + +void gbprox_delete_tlli(struct gbprox_peer *peer, + struct gbprox_tlli_info *tlli_info); +int gbprox_remove_stale_ttlis(struct gbprox_peer *peer, time_t now); +int gbprox_cleanup_peers(uint16_t nsei, uint16_t bvci); + +/* tmp */ +struct rate_ctr_group *get_global_ctrg(void); +struct gbprox_peer *peer_by_nsei(uint16_t nsei); #endif |