Files
openairinterface5g/openair-cn/OPENAIRHSS/db/db_proto.h
T

197 lines
5.4 KiB
C

/*******************************************************************************
Eurecom OpenAirInterface
Copyright(c) 1999 - 2013 Eurecom
This program is free software; you can redistribute it and/or modify it
under the terms and conditions of the GNU General Public License,
version 2, as published by the Free Software Foundation.
This program is distributed in the hope it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
more details.
You should have received a copy of the GNU General Public License along with
this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
The full GNU General Public License is included in this distribution in
the file called "COPYING".
Contact Information
Openair Admin: openair_admin@eurecom.fr
Openair Tech : openair_tech@eurecom.fr
Forums : http://forums.eurecom.fr/openairinterface
Address : EURECOM, Campus SophiaTech, 450 Route des Chappes
06410 Biot FRANCE
*******************************************************************************/
#include <stdio.h>
#include <stdint.h>
#include <mysql/mysql.h>
#include <netinet/in.h> /* To provide internet addresses strings helpers */
#ifndef DB_PROTO_H_
#define DB_PROTO_H_
#define DB_DEBUG(fmt, args...) fprintf(stdout, "%s:%d: "fmt, __FILE__, __LINE__, ##args)
#define DB_ERROR(fmt, args...) fprintf(stderr, "%s:%d: "fmt, __FILE__, __LINE__, ##args)
typedef struct {
/* The mysql reference connector object */
MYSQL *db_conn;
char *server;
char *user;
char *password;
char *database;
pthread_mutex_t db_cs_mutex;
} database_t;
extern database_t *db_desc;
typedef uint32_t pre_emp_vul_t;
typedef uint32_t pre_emp_cap_t;
typedef uint8_t access_restriction_t;
typedef uint32_t ambr_t;
typedef uint8_t qci_t;
typedef uint8_t prio_level_t;
typedef uint32_t rau_tau_t;
#define IMSI_LENGTH_MAX (15)
typedef struct {
char imsi[IMSI_LENGTH_MAX + 1];
} mysql_auth_info_req_t;
/* Expressed in bytes */
#define KEY_LENGTH (16)
#define SQN_LENGTH (6)
#define RAND_LENGTH (16)
typedef struct {
uint8_t key[KEY_LENGTH];
uint8_t sqn[SQN_LENGTH];
/* RAND should not be here... */
uint8_t rand[RAND_LENGTH];
} mysql_auth_info_resp_t;
typedef struct {
char imsi[IMSI_LENGTH_MAX + 1];
/* New computed SQN that will be used on next auth info req */
uint8_t sqn[SQN_LENGTH];
} mysql_sqn_push_t;
typedef struct {
/* An MME may have already been registered as serving the UE. */
char mme_host[255];
char mme_realm[200];
} mysql_mme_identity_t;
typedef struct {
char imsi[16];
/* MSISDN this parameter may be NULL */
char msisdn[16];
/* Maximum aggregated bitrates for the user */
ambr_t aggr_ul;
ambr_t aggr_dl;
/* Subscribed RAU-TAU timer */
rau_tau_t rau_tau;
access_restriction_t access_restriction;
mysql_mme_identity_t mme_identity;
} mysql_ul_ans_t;
typedef struct {
/* Bit masks indicating presence of optional fields */
#define MME_IDENTITY_PRESENT (0x1)
#define MME_SUPPORTED_FEATURES_PRESENT (0x1)
#define IMEI_PRESENT (0x1)
#define SV_PRESENT (0x1)
#define UE_SRVCC_PRESENT (0x1)
unsigned mme_identity_present:1;
unsigned mme_supported_features_present:1;
unsigned imei_present:1;
unsigned sv_present:1;
unsigned ue_srvcc_present:1;
/* IMSI */
char imsi[16];
/* Origin host and realm */
mysql_mme_identity_t mme_identity;
/* IMEISV */
char imei[16];
char software_version[2];
uint32_t ue_srvcc;
uint32_t mme_supported_features;
} mysql_ul_push_t;
typedef enum {
IPV4 = 0,
IPV6 = 1,
IPV4V6 = 2,
IPV4_OR_IPV6 = 3,
} pdn_type_t;
typedef struct {
char ipv4_address[INET_ADDRSTRLEN];
char ipv6_address[INET6_ADDRSTRLEN];
} pdn_address_t;
typedef struct {
char apn[61];
pdn_type_t pdn_type;
pdn_address_t pdn_address;
ambr_t aggr_ul;
ambr_t aggr_dl;
qci_t qci;
prio_level_t priority_level;
pre_emp_cap_t pre_emp_cap;
pre_emp_vul_t pre_emp_vul;
} mysql_pdn_t;
typedef struct {
/* IMSI */
char imsi[16];
} mysql_pu_req_t;
typedef mysql_mme_identity_t mysql_pu_ans_t;
int hss_mysql_connect(const hss_config_t *hss_config_p);
void hss_mysql_disconnect(void);
int hss_mysql_get_user(const char *imsi);
int hss_mysql_update_loc(const char *imsi, mysql_ul_ans_t *mysql_ul_ans);
int hss_mysql_query_mmeidentity(const int id_mme_identity,
mysql_mme_identity_t *mme_identity_p);
int hss_mysql_check_epc_equipment(mysql_mme_identity_t *mme_identity_p);
int mysql_push_up_loc(mysql_ul_push_t *ul_push_p);
int hss_mysql_purge_ue(mysql_pu_req_t *mysql_pu_req,
mysql_pu_ans_t *mysql_pu_ans);
int hss_mysql_query_pdns(const char *imsi,
mysql_pdn_t **pdns_p,
uint8_t *nb_pdns);
int hss_mysql_auth_info(mysql_auth_info_req_t *auth_info_req,
mysql_auth_info_resp_t *auth_info_resp);
int hss_mysql_push_rand_sqn(const char *imsi, uint8_t *rand_p, uint8_t *sqn);
int hss_mysql_increment_sqn(const char *imsi);
#endif /* DB_PROTO_H_ */