remove all local config related freeDiameter

This commit is contained in:
Sukchan Lee 2017-08-17 09:43:33 +09:00
parent d32c4b9743
commit 64d03a8cf1
26 changed files with 115 additions and 600 deletions

View File

@ -5,10 +5,10 @@ SUBDIRS = extensions gx s6a
noinst_LTLIBRARIES = libfd.la
libfd_la_SOURCES = \
fd_context.h fd_message.h fd_logger.h fd_init.h fd_lib.h
fd_message.h fd_logger.h fd_init.h fd_lib.h
nodist_libfd_la_SOURCES = \
libapp_sip.c fd_context.c fd_message.c fd_logger.c fd_init.c
libapp_sip.c fd_message.c fd_logger.c fd_init.c
AM_CPPFLAGS = \
-I$(top_srcdir)/lib/core/include

View File

@ -1,113 +0,0 @@
#define TRACE_MODULE _fd_context
#include "core_debug.h"
#include "core_lib.h"
#include "core_file.h"
#include "fd_context.h"
static struct fd_context_t self;
int fd_context_init(int mode)
{
memset(&self, 0, sizeof(struct fd_context_t));
self.mode = mode;
self.duration = 10; /* 10 seconds */
return 0;
}
struct fd_context_t* fd_self()
{
return &self;
}
static int fd_default_context()
{
struct peer_info fddpi;
struct addrinfo hints, *ai;
int ret;
int disc = 0;
/* disable SCTP */
fd_g_config->cnf_flags.no_sctp = 1;
fd_g_config->cnf_diamid = self.cnf_diamid;
fd_os_validate_DiameterIdentity(
&fd_g_config->cnf_diamid, &fd_g_config->cnf_diamid_len, 1);
fd_g_config->cnf_diamrlm = self.cnf_diamrlm;
fd_os_validate_DiameterIdentity(
&fd_g_config->cnf_diamrlm, &fd_g_config->cnf_diamrlm_len, 1);
if (self.cnf_addr == NULL)
return CORE_ERROR;
memset(&hints, 0, sizeof(hints));
hints.ai_flags = AI_PASSIVE | AI_NUMERICHOST;
if (self.cnf_addr == NULL)
return CORE_ERROR;
ret = getaddrinfo(self.cnf_addr, NULL, &hints, &ai);
if (ret)
return CORE_ERROR;
fd_ep_add_merge( &fd_g_config->cnf_endpoints,
ai->ai_addr, ai->ai_addrlen, EP_FL_CONF),
freeaddrinfo(ai);
if (self.cnf_port)
fd_g_config->cnf_port = self.cnf_port;
if (self.cnf_port_tls)
fd_g_config->cnf_port_tls = self.cnf_port_tls;
memset(&fddpi, 0, sizeof(fddpi));
fddpi.config.pic_flags.persist = PI_PRST_ALWAYS;
fddpi.config.pic_flags.pro3 = PI_P3_IP;
fddpi.config.pic_flags.pro4 = PI_P4_TCP;
fddpi.config.pic_flags.alg = PI_ALGPREF_TCP;
fddpi.config.pic_flags.sec |= PI_SEC_NONE;
fddpi.config.pic_port = self.pic_port;
fddpi.pi_diamid = self.pi_diamid;
fd_list_init( &fddpi.pi_endpoints, NULL );
memset(&hints, 0, sizeof(hints));
hints.ai_flags = AI_ADDRCONFIG | AI_NUMERICHOST;
if (self.pi_addr == NULL)
return CORE_ERROR;
ret = getaddrinfo(self.pi_addr, NULL, &hints, &ai);
if (ret)
return CORE_ERROR;
fd_ep_add_merge( &fddpi.pi_endpoints,
ai->ai_addr, ai->ai_addrlen, EP_FL_CONF | (disc ?: EP_ACCEPTALL) );
fd_peer_add ( &fddpi, NULL, NULL, NULL );
freeaddrinfo(ai);
return 0;
}
status_t fd_set_default_context()
{
char * buf = NULL, *b;
size_t len = 0;
CHECK_FCT( fd_default_context() );
/* The following module use data from the configuration */
int fd_rtdisp_init(void);
CHECK_FCT( fd_rtdisp_init() );
/* Display configuration */
b = fd_conf_dump(&buf, &len, NULL);
LOG_SPLIT(FD_LOG_NOTICE, NULL,
b ?: "<Error during configuration dump...>", NULL);
free(buf);
/* Since some extensions might have modified the definitions from the dict_base_protocol, we only load the objects now */
int fd_msg_init(void);
CHECK_FCT( fd_msg_init() );
return CORE_OK;
}

View File

@ -1,61 +0,0 @@
#ifndef __FD_CONTEXT_H__
#define __FD_CONTEXT_H__
#include "core_errno.h"
#include "freeDiameter/freeDiameter-host.h"
#include "freeDiameter/libfdcore.h"
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/* This is default diameter configuration if there is no config file
* The Configuration : No TLS, Only TCP */
struct fd_context_t {
/* Diameter Identity of the local peer (FQDN -- ASCII) */
char *cnf_diamid;
/* Diameter realm of the local peer, default to realm part of cnf_diamid */
char *cnf_diamrlm;
/* IP address of the local peer */
char *cnf_addr;
/* the local port for legacy Diameter (default: 3868) in host byte order */
c_uint16_t cnf_port;
/* the local port for Diameter/TLS (default: 5658) in host byte order */
c_uint16_t cnf_port_tls;
/* (supposedly) UTF-8, \0 terminated.
* The Diameter Identity of the remote peer. */
char *pi_diamid;
char *pi_addr; /* IP address of the remote peer */
c_uint16_t pic_port; /* port to connect to. 0: default. */
#define FD_MODE_SERVER 0x1
#define FD_MODE_CLIENT 0x2
int mode; /* default FD_MODE_SERVER | FD_MODE_CLIENT */
int duration; /* default 10 */
struct fd_stats {
unsigned long long nb_echoed; /* server */
unsigned long long nb_sent; /* client */
unsigned long long nb_recv; /* client */
unsigned long long nb_errs; /* client */
unsigned long shortest; /* fastest answer, in microseconds */
unsigned long longest; /* slowest answer, in microseconds */
unsigned long avg; /* average answer time, in microseconds */
} stats;
pthread_mutex_t stats_lock;
};
CORE_DECLARE(int) fd_context_init(int mode);
CORE_DECLARE(struct fd_context_t*) fd_self();
CORE_DECLARE(status_t) fd_set_default_context(void);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* ! __FD_CONTEXT_H__ */

View File

@ -5,14 +5,13 @@
#include "core_signal.h"
#include "core_semaphore.h"
#include "fd_context.h"
#include "fd_logger.h"
#include "fd_lib.h"
static void fd_gnutls_log_func(int level, const char *str);
static void fd_log_func(int printlevel, const char *format, va_list ap);
int fd_init(const char *conffile)
int fd_init(int mode, const char *conffile)
{
int ret;
@ -34,20 +33,13 @@ int fd_init(const char *conffile)
}
/* Parse the configuration file */
if (conffile)
{
CHECK_FCT_DO( fd_core_parseconf(conffile), goto error );
}
else
{
CHECK_FCT_DO( fd_set_default_context(), goto error );
}
CHECK_FCT_DO( fd_core_parseconf(conffile), goto error );
/* Initialize FD Message */
CHECK_FCT( fd_message_init() );
/* Initialize FD logger */
CHECK_FCT_DO( fd_logger_init(), goto error );
CHECK_FCT_DO( fd_logger_init(mode), goto error );
/* Start the servers */
CHECK_FCT_DO( fd_core_start(), goto error );

View File

@ -6,7 +6,6 @@
#include "freeDiameter/freeDiameter-host.h"
#include "freeDiameter/libfdcore.h"
#include "fd_context.h"
#include "fd_message.h"
#include "fd_logger.h"
@ -18,7 +17,7 @@ extern "C" {
#define MME_IDENTITY "mme.localdomain" /* Default MME Identity */
#define HSS_IDENTITY "hss.localdomain" /* Default HSS Identity */
CORE_DECLARE(int) fd_init(const char *conffile);
CORE_DECLARE(int) fd_init(int mode, const char *conffile);
CORE_DECLARE(void) fd_final(void);
int fd_avp_search_avp ( struct avp * groupedavp,

View File

@ -2,9 +2,10 @@
#include "core_debug.h"
#include "fd_context.h"
#include "fd_logger.h"
static struct fd_logger_t self;
static struct fd_hook_hdl *logger_hdl = NULL;
static pthread_mutex_t mtx = PTHREAD_MUTEX_INITIALIZER;
static pthread_t fd_stats_th = (pthread_t)NULL;
@ -16,14 +17,19 @@ static void fd_logger_cb(enum fd_hook_type type, struct msg * msg,
void * regdata);
static void * fd_stats_worker(void * arg);
int fd_logger_init()
int fd_logger_init(int mode)
{
uint32_t mask_peers = HOOK_MASK( HOOK_PEER_CONNECT_SUCCESS );
memset(&self, 0, sizeof(struct fd_logger_t));
self.mode = mode;
self.duration = 60; /* 60 seconds */
CHECK_FCT( fd_hook_register(
mask_peers, fd_logger_cb, NULL, NULL, &logger_hdl) );
CHECK_POSIX( pthread_mutex_init(&fd_self()->stats_lock, NULL) );
CHECK_POSIX( pthread_mutex_init(&self.stats_lock, NULL) );
return 0;
}
@ -31,11 +37,16 @@ int fd_logger_init()
void fd_logger_final()
{
CHECK_FCT_DO( fd_thr_term(&fd_stats_th), );
CHECK_POSIX_DO( pthread_mutex_destroy(&fd_self()->stats_lock), );
CHECK_POSIX_DO( pthread_mutex_destroy(&self.stats_lock), );
if (logger_hdl) { CHECK_FCT_DO( fd_hook_unregister( logger_hdl ), ); }
}
struct fd_logger_t* fd_logger_self()
{
return &self;
}
int fd_logger_stats_start()
{
/* Start the statistics thread */
@ -100,12 +111,12 @@ static void * fd_stats_worker(void * arg)
/* Now, loop until canceled */
while (1) {
/* Display statistics every XX seconds */
sleep(fd_self()->duration);
sleep(self.duration);
/* Now, get the current stats */
CHECK_POSIX_DO( pthread_mutex_lock(&fd_self()->stats_lock), );
memcpy(&copy, &fd_self()->stats, sizeof(struct fd_stats));
CHECK_POSIX_DO( pthread_mutex_unlock(&fd_self()->stats_lock), );
CHECK_POSIX_DO( pthread_mutex_lock(&self.stats_lock), );
memcpy(&copy, &self.stats, sizeof(struct fd_stats));
CHECK_POSIX_DO( pthread_mutex_unlock(&self.stats_lock), );
/* Get the current execution time */
CHECK_SYS_DO( clock_gettime(CLOCK_REALTIME, &now), );
@ -125,11 +136,11 @@ static void * fd_stats_worker(void * arg)
(long)(now.tv_nsec + 1000000000 - start.tv_nsec) / 1000);
}
if (fd_self()->mode & FD_MODE_SERVER) {
if (self.mode & FD_MODE_SERVER) {
d_trace(3, " Server: %llu message(s) echoed\n",
copy.nb_echoed);
}
if (fd_self()->mode & FD_MODE_CLIENT) {
if (self.mode & FD_MODE_CLIENT) {
d_trace(3, " Client:\n");
d_trace(3, " %llu message(s) sent\n", copy.nb_sent);
d_trace(3, " %llu error(s) received\n", copy.nb_errs);

View File

@ -10,9 +10,31 @@
extern "C" {
#endif /* __cplusplus */
CORE_DECLARE(int) fd_logger_init();
struct fd_logger_t {
#define FD_MODE_SERVER 0x1
#define FD_MODE_CLIENT 0x2
int mode; /* default FD_MODE_SERVER | FD_MODE_CLIENT */
int duration; /* default 10 */
struct fd_stats {
unsigned long long nb_echoed; /* server */
unsigned long long nb_sent; /* client */
unsigned long long nb_recv; /* client */
unsigned long long nb_errs; /* client */
unsigned long shortest; /* fastest answer, in microseconds */
unsigned long longest; /* slowest answer, in microseconds */
unsigned long avg; /* average answer time, in microseconds */
} stats;
pthread_mutex_t stats_lock;
};
CORE_DECLARE(int) fd_logger_init(int mode);
CORE_DECLARE(void) fd_logger_final();
CORE_DECLARE(struct fd_logger_t*) fd_logger_self();
CORE_DECLARE(int) fd_logger_stats_start();
typedef void (*fd_logger_user_handler)(

View File

@ -44,13 +44,12 @@ status_t app_initialize(char *config_path, char *log_path)
if (pid == 0)
{
if (pgw_sem1) semaphore_post(pgw_sem1);
d_trace(1, "PGW try to initialize\n");
rv = pgw_initialize();
d_assert(rv == CORE_OK,, "Failed to intialize PGW");
d_trace(1, "PGW initialize...done\n");
if (pgw_sem1) semaphore_post(pgw_sem1);
if (pgw_sem2) semaphore_wait(pgw_sem2);
if (rv == CORE_OK)
@ -93,13 +92,12 @@ status_t app_initialize(char *config_path, char *log_path)
if (pgw_sem1) semaphore_delete(pgw_sem1);
if (pgw_sem2) semaphore_delete(pgw_sem2);
if (sgw_sem1) semaphore_post(sgw_sem1);
d_trace(1, "SGW try to initialize\n");
rv = sgw_initialize();
d_assert(rv == CORE_OK,, "Failed to intialize SGW");
d_trace(1, "SGW initialize...done\n");
if (sgw_sem1) semaphore_post(sgw_sem1);
if (sgw_sem2) semaphore_wait(sgw_sem2);
if (rv == CORE_OK)
@ -144,13 +142,12 @@ status_t app_initialize(char *config_path, char *log_path)
if (sgw_sem1) semaphore_delete(sgw_sem1);
if (sgw_sem2) semaphore_delete(sgw_sem2);
if (hss_sem1) semaphore_post(hss_sem1);
d_trace(1, "HSS try to initialize\n");
rv = hss_initialize();
d_assert(rv == CORE_OK,, "Failed to intialize HSS");
d_trace(1, "HSS initialize...done\n");
if (hss_sem1) semaphore_post(hss_sem1);
if (hss_sem2) semaphore_wait(hss_sem2);
if (rv == CORE_OK)

View File

@ -3,10 +3,10 @@
noinst_LTLIBRARIES = libhss.la
libhss_la_SOURCES = \
milenage.h hss_kdf.h hss_context.h hss_fd.h hss_s6a_handler.h
milenage.h hss_kdf.h hss_context.h hss_s6a_handler.h
nodist_libhss_la_SOURCES = \
milenage.c hss_kdf.c hss_init.c hss_context.c hss_fd.c hss_s6a_handler.c
milenage.c hss_kdf.c hss_init.c hss_context.c hss_s6a_handler.c
libhss_la_DEPENDENCIES = \
$(top_srcdir)/lib/core/src/libcore.la \

View File

@ -51,11 +51,6 @@ status_t hss_context_final(void)
static status_t hss_context_prepare()
{
self.mme_s6a_port = DIAMETER_PORT;
self.mme_s6a_tls_port = DIAMETER_SECURE_PORT;
self.hss_s6a_port = DIAMETER_PORT;
self.hss_s6a_tls_port = DIAMETER_SECURE_PORT;
return CORE_OK;
}
@ -82,7 +77,6 @@ status_t hss_context_parse_config()
typedef enum {
START, ROOT,
HSS_START, HSS_ROOT,
MME_START, MME_ROOT,
SKIP, STOP
} parse_state;
parse_state state = START;
@ -90,10 +84,8 @@ status_t hss_context_parse_config()
size_t root_tokens = 0;
size_t hss_tokens = 0;
size_t mme_tokens = 0;
size_t skip_tokens = 0;
int i, j, m, n;
int arr, size;
int i, j;
rv = hss_context_prepare();
if (rv != CORE_OK) return rv;
@ -119,10 +111,6 @@ status_t hss_context_parse_config()
{
state = HSS_START;
}
else if (jsmntok_equal(json, t, "MME") == 0)
{
state = MME_START;
}
else
{
state = SKIP;
@ -148,40 +136,6 @@ status_t hss_context_parse_config()
{
self.fd_conf_path = jsmntok_to_string(json, t+1);
}
else if (jsmntok_equal(json, t, "NETWORK") == 0)
{
m = 1;
size = 1;
if ((t+1)->type == JSMN_ARRAY)
{
m = 2;
}
for (arr = 0; arr < size; arr++)
{
for (n = 1; n > 0; m++, n--)
{
n += (t+m)->size;
if (jsmntok_equal(json, t+m, "S6A_ADDR") == 0)
{
self.hss_s6a_addr =
jsmntok_to_string(json, t+m+1);
}
else if (jsmntok_equal(json, t+m, "S6A_PORT") == 0)
{
char *v = jsmntok_to_string(json, t+m+1);
if (v) self.hss_s6a_port = atoi(v);
}
else if (jsmntok_equal(json, t+m, "S6A_TLS_PORT") == 0)
{
char *v = jsmntok_to_string(json, t+m+1);
if (v) self.hss_s6a_tls_port = atoi(v);
}
}
}
}
state = SKIP;
stack = HSS_ROOT;
@ -191,58 +145,6 @@ status_t hss_context_parse_config()
if (hss_tokens == 0) stack = ROOT;
break;
}
case MME_START:
{
state = MME_ROOT;
mme_tokens = t->size;
break;
}
case MME_ROOT:
{
if (jsmntok_equal(json, t, "NETWORK") == 0)
{
m = 1;
size = 1;
if ((t+1)->type == JSMN_ARRAY)
{
m = 2;
}
for (arr = 0; arr < size; arr++)
{
for (n = 1; n > 0; m++, n--)
{
n += (t+m)->size;
if (jsmntok_equal(json, t+m, "S6A_ADDR") == 0)
{
self.mme_s6a_addr =
jsmntok_to_string(json, t+m+1);
}
else if (jsmntok_equal(json, t+m, "S6A_PORT") == 0)
{
char *v = jsmntok_to_string(json, t+m+1);
if (v) self.mme_s6a_port = atoi(v);
}
else if (jsmntok_equal(json, t+m, "S6A_TLS_PORT") == 0)
{
char *v = jsmntok_to_string(json, t+m+1);
if (v) self.mme_s6a_tls_port = atoi(v);
}
}
}
}
state = SKIP;
stack = MME_ROOT;
skip_tokens = t->size;
mme_tokens--;
if (mme_tokens == 0) stack = ROOT;
break;
}
case SKIP:
{
skip_tokens += t->size;
@ -287,8 +189,6 @@ status_t hss_context_setup_trace_module()
d_trace_level(&_hss_s6a_handler, fd);
extern int _fd_init;
d_trace_level(&_fd_init, fd);
extern int _fd_context;
d_trace_level(&_fd_context, fd);
extern int _fd_logger;
d_trace_level(&_fd_logger, fd);
}

View File

@ -1,35 +0,0 @@
#define TRACE_MODULE _hss_fd
#include "fd_lib.h"
#include "hss_context.h"
int hss_fd_init(void)
{
fd_context_init(FD_MODE_SERVER);
if (hss_self()->fd_conf_path == NULL)
{
/* This is default diameter configuration if there is no config file
* The Configuration : No TLS, Only TCP */
fd_self()->cnf_diamid = HSS_IDENTITY;
fd_self()->cnf_diamrlm = FD_REALM;
fd_self()->cnf_addr = hss_self()->hss_s6a_addr;
fd_self()->cnf_port = hss_self()->hss_s6a_port;
fd_self()->cnf_port_tls = hss_self()->hss_s6a_tls_port;
fd_self()->pi_diamid = MME_IDENTITY;
fd_self()->pi_addr = hss_self()->mme_s6a_addr;
fd_self()->pic_port = hss_self()->mme_s6a_port;
}
CHECK_FCT( fd_init(hss_self()->fd_conf_path) );
return 0;
}
void hss_fd_final(void)
{
fd_final();
}

View File

@ -1,18 +0,0 @@
#ifndef __HSS_FD_H__
#define __HSS_FD_H__
#include "core_errno.h"
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
CORE_DECLARE(int) hss_fd_init(void);
CORE_DECLARE(void) hss_fd_final(void);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* __HSS_FD_H__ */

View File

@ -1,7 +1,6 @@
#define TRACE_MODULE _hss_init
#include "hss_context.h"
#include "hss_fd.h"
#include "hss_s6a_handler.h"
static int initialized = 0;
@ -23,9 +22,6 @@ status_t hss_initialize(void)
rv = hss_db_init();
if (rv != CORE_OK) return rv;
ret = hss_fd_init();
if (ret != 0) return CORE_ERROR;
ret = hss_s6a_init();
if (ret != CORE_OK) return CORE_ERROR;
@ -39,7 +35,6 @@ void hss_terminate(void)
if (!initialized) return;
hss_s6a_final();
hss_fd_final();
hss_db_final();
hss_context_final();

View File

@ -161,9 +161,9 @@ static int hss_air_cb( struct msg **msg, struct avp *avp,
CHECK_FCT( fd_msg_send(msg, NULL, NULL) );
/* Add this value to the stats */
CHECK_POSIX_DO( pthread_mutex_lock(&fd_self()->stats_lock), );
fd_self()->stats.nb_echoed++;
CHECK_POSIX_DO( pthread_mutex_unlock(&fd_self()->stats_lock), );
CHECK_POSIX_DO( pthread_mutex_lock(&fd_logger_self()->stats_lock), );
fd_logger_self()->stats.nb_echoed++;
CHECK_POSIX_DO( pthread_mutex_unlock(&fd_logger_self()->stats_lock), );
return 0;
@ -439,9 +439,9 @@ static int hss_ulr_cb( struct msg **msg, struct avp *avp,
CHECK_FCT( fd_msg_send(msg, NULL, NULL) );
/* Add this value to the stats */
CHECK_POSIX_DO( pthread_mutex_lock(&fd_self()->stats_lock), );
fd_self()->stats.nb_echoed++;
CHECK_POSIX_DO( pthread_mutex_unlock(&fd_self()->stats_lock), );
CHECK_POSIX_DO( pthread_mutex_lock(&fd_logger_self()->stats_lock), );
fd_logger_self()->stats.nb_echoed++;
CHECK_POSIX_DO( pthread_mutex_unlock(&fd_logger_self()->stats_lock), );
return 0;
@ -457,6 +457,8 @@ int hss_s6a_init(void)
{
struct disp_when data;
CHECK_FCT( fd_init(FD_MODE_SERVER, hss_self()->fd_conf_path) );
/* Install objects definitions for this application */
CHECK_FCT( s6a_dict_init() );
@ -494,4 +496,6 @@ void hss_s6a_final(void)
if (hdl_ulr) {
(void) fd_disp_unregister(&hdl_ulr, NULL);
}
fd_final();
}

View File

@ -6,7 +6,7 @@ libmme_la_SOURCES = \
mme_kdf.h kasumi.h snow_3g.h zuc.h \
mme_event.h mme_context.h \
s1ap_build.h s1ap_handler.h s1ap_conv.h s1ap_path.h \
mme_fd.h mme_s6a_handler.h \
mme_s6a_handler.h \
nas_conv.h nas_security.h nas_path.h \
emm_handler.h emm_build.h \
esm_handler.h esm_build.h \
@ -17,7 +17,7 @@ nodist_libmme_la_SOURCES = \
mme_kdf.c kasumi.c snow_3g.c zuc.c \
mme_init.c mme_event.c mme_context.c \
s1ap_sm.c s1ap_build.c s1ap_handler.c s1ap_conv.c s1ap_path.c \
mme_fd.c mme_s6a_handler.c \
mme_s6a_handler.c \
nas_conv.c nas_security.c nas_path.c \
emm_sm.c emm_handler.c emm_build.c \
esm_sm.c esm_handler.c esm_build.c \

View File

@ -215,7 +215,6 @@ status_t mme_context_parse_config()
typedef enum {
START, ROOT,
HSS_START, HSS_ROOT,
MME_START, MME_ROOT,
SGW_START, SGW_ROOT,
SKIP, STOP
@ -224,7 +223,6 @@ status_t mme_context_parse_config()
parse_state stack = STOP;
size_t root_tokens = 0;
size_t hss_tokens = 0;
size_t mme_tokens = 0;
size_t sgw_tokens = 0;
size_t skip_tokens = 0;
@ -251,11 +249,7 @@ status_t mme_context_parse_config()
}
case ROOT:
{
if (jsmntok_equal(json, t, "HSS") == 0)
{
state = HSS_START;
}
else if (jsmntok_equal(json, t, "MME") == 0)
if (jsmntok_equal(json, t, "MME") == 0)
{
state = MME_START;
}
@ -275,59 +269,6 @@ status_t mme_context_parse_config()
break;
}
case HSS_START:
{
state = HSS_ROOT;
hss_tokens = t->size;
break;
}
case HSS_ROOT:
{
if (jsmntok_equal(json, t, "NETWORK") == 0)
{
m = 1;
size = 1;
if ((t+1)->type == JSMN_ARRAY)
{
m = 2;
}
for (arr = 0; arr < size; arr++)
{
for (n = 1; n > 0; m++, n--)
{
n += (t+m)->size;
if (jsmntok_equal(json, t+m, "S6A_ADDR") == 0)
{
self.hss_s6a_addr =
jsmntok_to_string(json, t+m+1);
}
else if (jsmntok_equal(json, t+m, "S6A_PORT") == 0)
{
char *v = jsmntok_to_string(json, t+m+1);
if (v) self.hss_s6a_port = atoi(v);
}
else if (jsmntok_equal(json, t+m, "S6A_TLS_PORT")
== 0)
{
char *v = jsmntok_to_string(json, t+m+1);
if (v) self.hss_s6a_tls_port = atoi(v);
}
}
}
}
state = SKIP;
stack = HSS_ROOT;
skip_tokens = t->size;
hss_tokens--;
if (hss_tokens == 0) stack = ROOT;
break;
}
case MME_START:
{
state = MME_ROOT;
@ -362,22 +303,7 @@ status_t mme_context_parse_config()
{
n += (t+m)->size;
if (jsmntok_equal(json, t+m, "S6A_ADDR") == 0)
{
self.mme_s6a_addr =
jsmntok_to_string(json, t+m+1);
}
else if (jsmntok_equal(json, t+m, "S6A_PORT") == 0)
{
char *v = jsmntok_to_string(json, t+m+1);
if (v) self.mme_s6a_port = atoi(v);
}
else if (jsmntok_equal(json, t+m, "S6A_TLS_PORT") == 0)
{
char *v = jsmntok_to_string(json, t+m+1);
if (v) self.mme_s6a_tls_port = atoi(v);
}
else if (jsmntok_equal(json, t+m, "S1AP_ADDR") == 0)
if (jsmntok_equal(json, t+m, "S1AP_ADDR") == 0)
{
char *v = jsmntok_to_string(json, t+m+1);
if (v) self.s1ap_addr = inet_addr(v);
@ -827,8 +753,6 @@ status_t mme_context_setup_trace_module()
d_trace_level(&_mme_s6a_handler, fd);
extern int _fd_init;
d_trace_level(&_fd_init, fd);
extern int _fd_context;
d_trace_level(&_fd_context, fd);
extern int _fd_logger;
d_trace_level(&_fd_logger, fd);
}

View File

@ -1,35 +0,0 @@
#define TRACE_MODULE _mme_fd
#include "fd_lib.h"
#include "mme_context.h"
int mme_fd_init(void)
{
fd_context_init(FD_MODE_CLIENT);
if (mme_self()->fd_conf_path == NULL)
{
/* This is default diameter configuration if there is no config file
* The Configuration : No TLS, Only TCP */
fd_self()->cnf_diamid = MME_IDENTITY;
fd_self()->cnf_diamrlm = FD_REALM;
fd_self()->cnf_addr = mme_self()->mme_s6a_addr;
fd_self()->cnf_port = mme_self()->mme_s6a_port;
fd_self()->cnf_port_tls = mme_self()->mme_s6a_tls_port;
fd_self()->pi_diamid = HSS_IDENTITY;
fd_self()->pi_addr = mme_self()->hss_s6a_addr;
fd_self()->pic_port = mme_self()->hss_s6a_port;
}
CHECK_FCT( fd_init(mme_self()->fd_conf_path) );
return 0;
}
void mme_fd_final(void)
{
fd_final();
}

View File

@ -1,20 +0,0 @@
#ifndef __MME_FD_H__
#define __MME_FD_H__
#include "core_errno.h"
#include "mme_context.h"
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
CORE_DECLARE(int) mme_fd_init(void);
CORE_DECLARE(void) mme_fd_final(void);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* __MME_FD_H__ */

View File

@ -5,7 +5,6 @@
#include "mme_event.h"
#include "mme_fd.h"
#include "mme_s6a_handler.h"
static thread_id sm_thread;
@ -30,9 +29,6 @@ status_t mme_initialize()
rv = mme_context_setup_trace_module();
if (rv != CORE_OK) return rv;
ret = mme_fd_init();
if (ret != 0) return CORE_ERROR;
ret = mme_s6a_init();
if (ret != 0) return CORE_ERROR;
@ -54,7 +50,6 @@ void mme_terminate(void)
thread_delete(sm_thread);
mme_s6a_final();
mme_fd_final();
mme_context_final();

View File

@ -186,32 +186,33 @@ out:
mme_event_send(&e);
/* Free the message */
CHECK_POSIX_DO( pthread_mutex_lock(&fd_self()->stats_lock), );
CHECK_POSIX_DO( pthread_mutex_lock(&fd_logger_self()->stats_lock), );
dur = ((ts.tv_sec - mi->ts.tv_sec) * 1000000) +
((ts.tv_nsec - mi->ts.tv_nsec) / 1000);
if (fd_self()->stats.nb_recv)
if (fd_logger_self()->stats.nb_recv)
{
/* Ponderate in the avg */
fd_self()->stats.avg = (fd_self()->stats.avg *
fd_self()->stats.nb_recv + dur) / (fd_self()->stats.nb_recv + 1);
fd_logger_self()->stats.avg = (fd_logger_self()->stats.avg *
fd_logger_self()->stats.nb_recv + dur) /
(fd_logger_self()->stats.nb_recv + 1);
/* Min, max */
if (dur < fd_self()->stats.shortest)
fd_self()->stats.shortest = dur;
if (dur > fd_self()->stats.longest)
fd_self()->stats.longest = dur;
if (dur < fd_logger_self()->stats.shortest)
fd_logger_self()->stats.shortest = dur;
if (dur > fd_logger_self()->stats.longest)
fd_logger_self()->stats.longest = dur;
}
else
{
fd_self()->stats.shortest = dur;
fd_self()->stats.longest = dur;
fd_self()->stats.avg = dur;
fd_logger_self()->stats.shortest = dur;
fd_logger_self()->stats.longest = dur;
fd_logger_self()->stats.avg = dur;
}
if (error)
fd_self()->stats.nb_errs++;
fd_logger_self()->stats.nb_errs++;
else
fd_self()->stats.nb_recv++;
fd_logger_self()->stats.nb_recv++;
CHECK_POSIX_DO( pthread_mutex_unlock(&fd_self()->stats_lock), );
CHECK_POSIX_DO( pthread_mutex_unlock(&fd_logger_self()->stats_lock), );
/* Display how long it took */
if (ts.tv_nsec > mi->ts.tv_nsec)
@ -324,9 +325,9 @@ void mme_s6a_send_air(mme_ue_t *mme_ue)
CHECK_FCT_DO( fd_msg_send(&req, mme_s6a_aia_cb, svg), goto out );
/* Increment the counter */
CHECK_POSIX_DO( pthread_mutex_lock(&fd_self()->stats_lock), );
fd_self()->stats.nb_sent++;
CHECK_POSIX_DO( pthread_mutex_unlock(&fd_self()->stats_lock), );
CHECK_POSIX_DO( pthread_mutex_lock(&fd_logger_self()->stats_lock), );
fd_logger_self()->stats.nb_sent++;
CHECK_POSIX_DO( pthread_mutex_unlock(&fd_logger_self()->stats_lock), );
d_trace(3, "[S6A] Authentication-Information-Request : UE[%s] --> HSS\n",
mme_ue->imsi_bcd);
@ -658,32 +659,33 @@ static void mme_s6a_ula_cb(void *data, struct msg **msg)
mme_event_send(&e);
/* Free the message */
CHECK_POSIX_DO( pthread_mutex_lock(&fd_self()->stats_lock), );
CHECK_POSIX_DO( pthread_mutex_lock(&fd_logger_self()->stats_lock), );
dur = ((ts.tv_sec - mi->ts.tv_sec) * 1000000) +
((ts.tv_nsec - mi->ts.tv_nsec) / 1000);
if (fd_self()->stats.nb_recv)
if (fd_logger_self()->stats.nb_recv)
{
/* Ponderate in the avg */
fd_self()->stats.avg = (fd_self()->stats.avg *
fd_self()->stats.nb_recv + dur) / (fd_self()->stats.nb_recv + 1);
fd_logger_self()->stats.avg = (fd_logger_self()->stats.avg *
fd_logger_self()->stats.nb_recv + dur) /
(fd_logger_self()->stats.nb_recv + 1);
/* Min, max */
if (dur < fd_self()->stats.shortest)
fd_self()->stats.shortest = dur;
if (dur > fd_self()->stats.longest)
fd_self()->stats.longest = dur;
if (dur < fd_logger_self()->stats.shortest)
fd_logger_self()->stats.shortest = dur;
if (dur > fd_logger_self()->stats.longest)
fd_logger_self()->stats.longest = dur;
}
else
{
fd_self()->stats.shortest = dur;
fd_self()->stats.longest = dur;
fd_self()->stats.avg = dur;
fd_logger_self()->stats.shortest = dur;
fd_logger_self()->stats.longest = dur;
fd_logger_self()->stats.avg = dur;
}
if (error)
fd_self()->stats.nb_errs++;
fd_logger_self()->stats.nb_errs++;
else
fd_self()->stats.nb_recv++;
fd_logger_self()->stats.nb_recv++;
CHECK_POSIX_DO( pthread_mutex_unlock(&fd_self()->stats_lock), );
CHECK_POSIX_DO( pthread_mutex_unlock(&fd_logger_self()->stats_lock), );
/* Display how long it took */
if (ts.tv_nsec > mi->ts.tv_nsec)
@ -791,9 +793,9 @@ void mme_s6a_send_ulr(mme_ue_t *mme_ue)
CHECK_FCT_DO( fd_msg_send(&req, mme_s6a_ula_cb, svg), goto out );
/* Increment the counter */
CHECK_POSIX_DO( pthread_mutex_lock(&fd_self()->stats_lock), );
fd_self()->stats.nb_sent++;
CHECK_POSIX_DO( pthread_mutex_unlock(&fd_self()->stats_lock), );
CHECK_POSIX_DO( pthread_mutex_lock(&fd_logger_self()->stats_lock), );
fd_logger_self()->stats.nb_sent++;
CHECK_POSIX_DO( pthread_mutex_unlock(&fd_logger_self()->stats_lock), );
d_trace(3, "[S6A] Update-Location-Request : UE[%s] --> HSS\n",
mme_ue->imsi_bcd);
@ -807,6 +809,8 @@ int mme_s6a_init(void)
{
pool_init(&mme_s6a_sess_pool, MAX_NUM_SESSION_STATE);
CHECK_FCT( fd_init(FD_MODE_CLIENT, mme_self()->fd_conf_path) );
/* Install objects definitions for this application */
CHECK_FCT( s6a_dict_init() );
@ -822,6 +826,8 @@ void mme_s6a_final(void)
{
CHECK_FCT_DO( fd_sess_handler_destroy(&mme_s6a_reg, NULL), );
fd_final();
if (pool_size(&mme_s6a_sess_pool) != pool_avail(&mme_s6a_sess_pool))
d_error("%d not freed in mme_s6a_sess_pool[%d] of S6A-SM",
pool_size(&mme_s6a_sess_pool) - pool_avail(&mme_s6a_sess_pool),

View File

@ -10,7 +10,7 @@ libpgw_la_SOURCES = \
nodist_libpgw_la_SOURCES = \
pgw_init.c pgw_event.c pgw_context.c pgw_sm.c \
pgw_gtp_path.c pgw_s5c_handler.c \
pgw_fd.c pgw_gx_handler.c
pgw_gx_handler.c
libpgw_la_DEPENDENCIES = \
$(top_srcdir)/lib/core/src/libcore.la \

View File

@ -433,8 +433,6 @@ status_t pgw_context_setup_trace_module()
d_trace_level(&_pgw_gx_handler, fd);
extern int _fd_init;
d_trace_level(&_fd_init, fd);
extern int _fd_context;
d_trace_level(&_fd_context, fd);
extern int _fd_logger;
d_trace_level(&_fd_logger, fd);
}

View File

@ -1,19 +0,0 @@
#define TRACE_MODULE _pgw_fd
#include "fd_lib.h"
#include "pgw_context.h"
int pgw_fd_init(void)
{
fd_context_init(FD_MODE_CLIENT);
CHECK_FCT( fd_init(pgw_self()->fd_conf_path) );
return 0;
}
void pgw_fd_final(void)
{
fd_final();
}

View File

@ -1,20 +0,0 @@
#ifndef __PGW_FD_H__
#define __PGW_FD_H__
#include "core_errno.h"
#include "pgw_context.h"
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
CORE_DECLARE(int) pgw_fd_init(void);
CORE_DECLARE(void) pgw_fd_final(void);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* __PGW_FD_H__ */

View File

@ -33,6 +33,8 @@ int pgw_gx_init(void)
{
pool_init(&pgw_gx_sess_pool, MAX_NUM_SESSION_STATE);
CHECK_FCT( fd_init(FD_MODE_CLIENT, pgw_self()->fd_conf_path) );
/* Install objects definitions for this application */
CHECK_FCT( gx_dict_init() );
@ -48,6 +50,8 @@ void pgw_gx_final(void)
{
CHECK_FCT_DO( fd_sess_handler_destroy(&pgw_gx_reg, NULL), );
fd_final();
if (pool_size(&pgw_gx_sess_pool) != pool_avail(&pgw_gx_sess_pool))
d_error("%d not freed in pgw_gx_sess_pool[%d] of S6A-SM",
pool_size(&pgw_gx_sess_pool) - pool_avail(&pgw_gx_sess_pool),

View File

@ -6,7 +6,6 @@
#include "pgw_context.h"
#include "pgw_event.h"
#include "pgw_fd.h"
#include "pgw_gx_handler.h"
static thread_id sm_thread;
@ -20,9 +19,7 @@ static int initialized = 0;
status_t pgw_initialize()
{
status_t rv;
#if 0
int ret;
#endif
rv = pgw_context_init();
if (rv != CORE_OK) return rv;
@ -36,13 +33,8 @@ status_t pgw_initialize()
rv = pgw_ip_pool_generate();
if (rv != CORE_OK) return rv;
#if 0
ret = pgw_fd_init();
if (ret != 0) return CORE_ERROR;
ret = pgw_gx_init();
if (ret != 0) return CORE_ERROR;
#endif
rv = thread_create(&sm_thread, NULL, sm_main, NULL);
if (rv != CORE_OK) return rv;
@ -61,10 +53,7 @@ void pgw_terminate(void)
thread_delete(net_thread);
thread_delete(sm_thread);
#if 0
pgw_gx_final();
pgw_fd_final();
#endif
pgw_context_final();