From 64d03a8cf1d2a104c84717416c006ccbee912b4e Mon Sep 17 00:00:00 2001 From: Sukchan Lee Date: Thu, 17 Aug 2017 09:43:33 +0900 Subject: [PATCH] remove all local config related freeDiameter --- lib/fd/Makefile.am | 4 +- lib/fd/fd_context.c | 113 -------------------------------------- lib/fd/fd_context.h | 61 -------------------- lib/fd/fd_init.c | 14 +---- lib/fd/fd_lib.h | 3 +- lib/fd/fd_logger.c | 31 +++++++---- lib/fd/fd_logger.h | 24 +++++++- src/epc.c | 9 +-- src/hss/Makefile.am | 4 +- src/hss/hss_context.c | 102 +--------------------------------- src/hss/hss_fd.c | 35 ------------ src/hss/hss_fd.h | 18 ------ src/hss/hss_init.c | 5 -- src/hss/hss_s6a_handler.c | 16 ++++-- src/mme/Makefile.am | 4 +- src/mme/mme_context.c | 80 +-------------------------- src/mme/mme_fd.c | 35 ------------ src/mme/mme_fd.h | 20 ------- src/mme/mme_init.c | 5 -- src/mme/mme_s6a_handler.c | 74 +++++++++++++------------ src/pgw/Makefile.am | 2 +- src/pgw/pgw_context.c | 2 - src/pgw/pgw_fd.c | 19 ------- src/pgw/pgw_fd.h | 20 ------- src/pgw/pgw_gx_handler.c | 4 ++ src/pgw/pgw_init.c | 11 ---- 26 files changed, 115 insertions(+), 600 deletions(-) delete mode 100644 lib/fd/fd_context.c delete mode 100644 lib/fd/fd_context.h delete mode 100644 src/hss/hss_fd.c delete mode 100644 src/hss/hss_fd.h delete mode 100644 src/mme/mme_fd.c delete mode 100644 src/mme/mme_fd.h delete mode 100644 src/pgw/pgw_fd.c delete mode 100644 src/pgw/pgw_fd.h diff --git a/lib/fd/Makefile.am b/lib/fd/Makefile.am index da32c706e..0ede69ea5 100644 --- a/lib/fd/Makefile.am +++ b/lib/fd/Makefile.am @@ -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 diff --git a/lib/fd/fd_context.c b/lib/fd/fd_context.c deleted file mode 100644 index 47001ae30..000000000 --- a/lib/fd/fd_context.c +++ /dev/null @@ -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 ?: "", 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; -} diff --git a/lib/fd/fd_context.h b/lib/fd/fd_context.h deleted file mode 100644 index ae6c97a43..000000000 --- a/lib/fd/fd_context.h +++ /dev/null @@ -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__ */ diff --git a/lib/fd/fd_init.c b/lib/fd/fd_init.c index a4d50ac19..286eab154 100644 --- a/lib/fd/fd_init.c +++ b/lib/fd/fd_init.c @@ -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 ); diff --git a/lib/fd/fd_lib.h b/lib/fd/fd_lib.h index 9d520526c..a93d7c7c8 100644 --- a/lib/fd/fd_lib.h +++ b/lib/fd/fd_lib.h @@ -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, diff --git a/lib/fd/fd_logger.c b/lib/fd/fd_logger.c index 0359ffa98..16ca516bc 100644 --- a/lib/fd/fd_logger.c +++ b/lib/fd/fd_logger.c @@ -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(©, &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(©, &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); diff --git a/lib/fd/fd_logger.h b/lib/fd/fd_logger.h index 7be50f622..9c74e8411 100644 --- a/lib/fd/fd_logger.h +++ b/lib/fd/fd_logger.h @@ -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)( diff --git a/src/epc.c b/src/epc.c index 1d4c0fd3b..e5937005a 100644 --- a/src/epc.c +++ b/src/epc.c @@ -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) diff --git a/src/hss/Makefile.am b/src/hss/Makefile.am index 5607405d8..79db656d3 100644 --- a/src/hss/Makefile.am +++ b/src/hss/Makefile.am @@ -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 \ diff --git a/src/hss/hss_context.c b/src/hss/hss_context.c index 4b15bc0ad..c95918e17 100644 --- a/src/hss/hss_context.c +++ b/src/hss/hss_context.c @@ -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); } diff --git a/src/hss/hss_fd.c b/src/hss/hss_fd.c deleted file mode 100644 index aa5c03a18..000000000 --- a/src/hss/hss_fd.c +++ /dev/null @@ -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(); -} diff --git a/src/hss/hss_fd.h b/src/hss/hss_fd.h deleted file mode 100644 index 7466a0947..000000000 --- a/src/hss/hss_fd.h +++ /dev/null @@ -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__ */ - diff --git a/src/hss/hss_init.c b/src/hss/hss_init.c index a51526217..61e6b1390 100644 --- a/src/hss/hss_init.c +++ b/src/hss/hss_init.c @@ -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(); diff --git a/src/hss/hss_s6a_handler.c b/src/hss/hss_s6a_handler.c index 0f35dcbc9..f69299681 100644 --- a/src/hss/hss_s6a_handler.c +++ b/src/hss/hss_s6a_handler.c @@ -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(); } diff --git a/src/mme/Makefile.am b/src/mme/Makefile.am index cd7a3551f..9bc5b0135 100644 --- a/src/mme/Makefile.am +++ b/src/mme/Makefile.am @@ -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 \ diff --git a/src/mme/mme_context.c b/src/mme/mme_context.c index 62867b31b..33709937a 100644 --- a/src/mme/mme_context.c +++ b/src/mme/mme_context.c @@ -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); } diff --git a/src/mme/mme_fd.c b/src/mme/mme_fd.c deleted file mode 100644 index 09231e847..000000000 --- a/src/mme/mme_fd.c +++ /dev/null @@ -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(); -} diff --git a/src/mme/mme_fd.h b/src/mme/mme_fd.h deleted file mode 100644 index 6eceb3dfb..000000000 --- a/src/mme/mme_fd.h +++ /dev/null @@ -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__ */ - diff --git a/src/mme/mme_init.c b/src/mme/mme_init.c index 3fc664ae2..f72b26577 100644 --- a/src/mme/mme_init.c +++ b/src/mme/mme_init.c @@ -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(); diff --git a/src/mme/mme_s6a_handler.c b/src/mme/mme_s6a_handler.c index 5d5e7964c..98fcfac2c 100644 --- a/src/mme/mme_s6a_handler.c +++ b/src/mme/mme_s6a_handler.c @@ -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), diff --git a/src/pgw/Makefile.am b/src/pgw/Makefile.am index 07030f248..65021bd19 100644 --- a/src/pgw/Makefile.am +++ b/src/pgw/Makefile.am @@ -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 \ diff --git a/src/pgw/pgw_context.c b/src/pgw/pgw_context.c index fb9316e10..37bf9b7ba 100644 --- a/src/pgw/pgw_context.c +++ b/src/pgw/pgw_context.c @@ -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); } diff --git a/src/pgw/pgw_fd.c b/src/pgw/pgw_fd.c deleted file mode 100644 index c0e1e6da6..000000000 --- a/src/pgw/pgw_fd.c +++ /dev/null @@ -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(); -} diff --git a/src/pgw/pgw_fd.h b/src/pgw/pgw_fd.h deleted file mode 100644 index 819c46253..000000000 --- a/src/pgw/pgw_fd.h +++ /dev/null @@ -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__ */ - diff --git a/src/pgw/pgw_gx_handler.c b/src/pgw/pgw_gx_handler.c index c19b1fc2a..38d40adff 100644 --- a/src/pgw/pgw_gx_handler.c +++ b/src/pgw/pgw_gx_handler.c @@ -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), diff --git a/src/pgw/pgw_init.c b/src/pgw/pgw_init.c index 647dcccfe..5ac60016c 100644 --- a/src/pgw/pgw_init.c +++ b/src/pgw/pgw_init.c @@ -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();