diff --git a/main.c b/main.c index b94d45918c..90af5b3dd2 100644 --- a/main.c +++ b/main.c @@ -145,7 +145,7 @@ int main(int argc, char *argv[]) #endif } - if (nextepc_initialize(config_path, log_path) != CORE_OK) + if (epc_initialize(config_path, log_path) != CORE_OK) { d_fatal("NextEPC initialization failed. Aborted"); return EXIT_FAILURE; @@ -157,7 +157,7 @@ int main(int argc, char *argv[]) d_info("NextEPC daemon terminating..."); - nextepc_terminate(); + epc_terminate(); return EXIT_SUCCESS; } diff --git a/src/Makefile.am b/src/Makefile.am index 4ced6bf21b..e04c0aa256 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -8,7 +8,7 @@ libepc_la_SOURCES = \ init.h nodist_libepc_la_SOURCES = \ - init.c + epc.c init.c libepc_la_DEPENDENCIES = \ $(top_srcdir)/lib/logger/liblogger.la \ diff --git a/src/init.c b/src/init.c index b9d09453e5..06aa9a40e9 100644 --- a/src/init.c +++ b/src/init.c @@ -1,28 +1,22 @@ -#define TRACE_MODULE _common_init +#define TRACE_MODULE _init #include "core_general.h" #include "core_debug.h" #include "core_thread.h" #include "core_net.h" #include "core_signal.h" -#include "core_semaphore.h" #include "logger.h" #include "init.h" -static pid_t hss_pid; static pid_t logger_pid; static thread_id net_thread; -static int check_signal(int signum); void *THREAD_FUNC net_main(thread_id id, void *data); -status_t nextepc_initialize(char *config_path, char *log_path) +status_t will_initialize(char *config_path, char *log_path) { - status_t rv; - semaphore_id semaphore; - core_initialize(); if (config_path) @@ -36,80 +30,31 @@ status_t nextepc_initialize(char *config_path, char *log_path) d_assert(logger_pid > 0, return -1, "logger_start() failed"); } - rv = semaphore_create(&semaphore, 0); - d_assert(rv == CORE_OK, return -1, "semaphore_create() failed"); + return CORE_OK; +} - hss_pid = fork(); - d_assert(hss_pid >= 0, _exit(EXIT_FAILURE), "fork() failed"); +status_t did_initialize() +{ + status_t rv; - if (hss_pid == 0) - { - /* Child */ - rv = semaphore_wait(semaphore); - d_assert(rv == CORE_OK, _exit(EXIT_FAILURE), "semaphore_wait() failed"); - rv = semaphore_delete(semaphore); - d_assert(rv == CORE_OK, _exit(EXIT_FAILURE), "semaphore_delete() failed"); - - rv = hss_initialize(); - if (rv != CORE_OK) _exit(EXIT_FAILURE); - - signal_thread(check_signal); - hss_terminate(); - - _exit(EXIT_SUCCESS); - } - - /* Parent */ - rv = pgw_initialize(); - if (rv != CORE_OK) return rv; - rv = sgw_initialize(); - if (rv != CORE_OK) return rv; - rv = mme_initialize(); - if (rv != CORE_OK) return rv; rv = thread_create(&net_thread, NULL, net_main, NULL); if (rv != CORE_OK) return rv; - rv = semaphore_post(semaphore); - d_assert(rv == CORE_OK, return -1, "semaphore_post() failed"); - return CORE_OK; } -void nextepc_terminate(void) +void will_terminate(void) { thread_delete(net_thread); - mme_terminate(); - sgw_terminate(); - pgw_terminate(); +} - core_kill(hss_pid, SIGTERM); +void did_terminate(void) +{ core_kill(logger_pid, SIGTERM); core_terminate(); } -static int check_signal(int signum) -{ - switch (signum) - { - case SIGTERM: - case SIGINT: - { - d_info("%s received", - signum == SIGTERM ? "SIGTERM" : "SIGINT"); - - return 1; - } - default: - { - d_error("Unknown signal number = %d\n", signum); - break; - } - - } - return 0; -} - void *THREAD_FUNC net_main(thread_id id, void *data) { while (!thread_should_stop()) @@ -119,4 +64,3 @@ void *THREAD_FUNC net_main(thread_id id, void *data) return NULL; } - diff --git a/src/init.h b/src/init.h index 7db6dc2a9a..94da16bdde 100644 --- a/src/init.h +++ b/src/init.h @@ -1,5 +1,5 @@ -#ifndef __COMMON_INIT_H__ -#define __COMMON_INIT_H__ +#ifndef __INIT_H__ +#define __INIT_H__ #include "core.h" #include "core_errno.h" @@ -8,8 +8,13 @@ extern "C" { #endif /* __cplusplus */ -CORE_DECLARE(status_t) nextepc_initialize(char *config_path, char *log_path); -CORE_DECLARE_NONSTD(void) nextepc_terminate(void); +CORE_DECLARE(status_t) will_initialize(char *config_path, char *log_path); +CORE_DECLARE(status_t) did_initialize(char *config_path, char *log_path); +CORE_DECLARE_NONSTD(void) will_terminate(void); +CORE_DECLARE_NONSTD(void) did_terminate(void); + +CORE_DECLARE(status_t) epc_initialize(char *config_path, char *log_path); +CORE_DECLARE_NONSTD(void) epc_terminate(void); CORE_DECLARE(status_t) mme_initialize(); CORE_DECLARE_NONSTD(void) mme_terminate(void); diff --git a/test/testutil.c b/test/testutil.c index 088bd377b8..70b289be73 100644 --- a/test/testutil.c +++ b/test/testutil.c @@ -38,12 +38,12 @@ void core_assert_ok(abts_case* tc, const char* context, status_t rv, void test_terminate(void) { - nextepc_terminate(); + epc_terminate(); } void test_initialize(void) { - nextepc_initialize(NULL, NULL); + epc_initialize(NULL, NULL); #if 0 inet_pton(AF_INET, "10.1.35.215", &mme_self()->s1ap_addr);