Files
openairinterface5g/openair-cn/OPENAIRHSS/db/db_proto.h
T
2015-05-28 12:38:52 +00:00

207 lines
5.7 KiB
C

/*******************************************************************************
OpenAirInterface
Copyright(c) 1999 - 2014 Eurecom
OpenAirInterface is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenAirInterface is distributed in the hope that 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 OpenAirInterface.The full GNU General Public License is
included in this distribution in the file called "COPYING". If not,
see <http://www.gnu.org/licenses/>.
Contact Information
OpenAirInterface Admin: openair_admin@eurecom.fr
OpenAirInterface Tech : openair_tech@eurecom.fr
OpenAirInterface Dev : openair4g-devel@eurecom.fr
Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France.
*******************************************************************************/
#include <stdio.h>
#include <stdint.h>
#include <pthread.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 mysql_auth_info_resp_s{
uint8_t key[KEY_LENGTH];
uint8_t sqn[SQN_LENGTH];
/* RAND should not be here... */
uint8_t rand[RAND_LENGTH];
uint8_t opc[KEY_LENGTH];
} mysql_auth_info_resp_t;
typedef struct mysql_opc_push_s{
char imsi[IMSI_LENGTH_MAX + 1];
/* New computed SQN that will be used on next auth info req */
uint8_t sqn[SQN_LENGTH];
} mysql_opc_push_t;
typedef struct mysql_sqn_push_s{
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 mysql_mme_identity_s{
/* 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 mysql_ul_ans_s{
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 mysql_ul_push_s{
/* 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 pdn_address_s{
char ipv4_address[INET_ADDRSTRLEN];
char ipv6_address[INET6_ADDRSTRLEN];
} pdn_address_t;
typedef struct mysql_pdn_s{
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 mysql_pu_req_s{
/* 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);
int hss_mysql_check_opc_keys(const uint8_t const opP[16]);
#endif /* DB_PROTO_H_ */