2017-02-02 11:34:37 +00:00
|
|
|
/**
|
|
|
|
* @file main.c
|
|
|
|
*/
|
|
|
|
|
2019-04-27 14:54:30 +00:00
|
|
|
#include "ogs-core.h"
|
|
|
|
#include "base/context.h"
|
2017-02-02 11:34:37 +00:00
|
|
|
|
|
|
|
/* Server */
|
2019-04-27 14:54:30 +00:00
|
|
|
#include "app/application.h"
|
2019-06-11 09:28:25 +00:00
|
|
|
#include "app-init.h"
|
2017-02-02 11:34:37 +00:00
|
|
|
|
2019-05-01 07:56:46 +00:00
|
|
|
static char *version = "NextEPC daemon v" PACKAGE_VERSION;
|
2017-02-02 11:34:37 +00:00
|
|
|
|
|
|
|
static void show_version()
|
|
|
|
{
|
2019-04-27 14:54:30 +00:00
|
|
|
printf("%s", version);
|
2017-02-02 11:34:37 +00:00
|
|
|
}
|
|
|
|
|
2017-07-11 05:16:15 +00:00
|
|
|
static void show_help(const char *name)
|
2017-02-02 11:34:37 +00:00
|
|
|
{
|
2019-04-27 14:54:30 +00:00
|
|
|
printf("%s", version);
|
2017-02-02 11:34:37 +00:00
|
|
|
|
|
|
|
printf("\n"
|
2017-07-11 05:16:15 +00:00
|
|
|
"Usage: %s [arguments]\n"
|
2017-02-02 11:34:37 +00:00
|
|
|
"\n"
|
|
|
|
"Arguments:\n"
|
|
|
|
" -v Show version\n"
|
|
|
|
" -h Show help\n"
|
2019-04-27 14:54:30 +00:00
|
|
|
" -D Start as daemon\n"
|
2017-02-02 11:34:37 +00:00
|
|
|
" -f Set configuration file name\n"
|
2017-10-29 11:48:17 +00:00
|
|
|
" -l log_file Log file path to be logged to\n"
|
|
|
|
" -p pid_file PID file path\n"
|
2019-04-27 14:54:30 +00:00
|
|
|
" -d core:gtp:event Enable debugging\n"
|
|
|
|
" -t sock:mem: Enable trace\n"
|
2017-07-11 05:16:15 +00:00
|
|
|
"\n", name);
|
2017-02-02 11:34:37 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static int check_signal(int signum)
|
|
|
|
{
|
|
|
|
switch (signum)
|
|
|
|
{
|
|
|
|
case SIGTERM:
|
|
|
|
case SIGINT:
|
|
|
|
{
|
2019-04-27 14:54:30 +00:00
|
|
|
ogs_info("%s received",
|
2017-02-02 11:34:37 +00:00
|
|
|
signum == SIGTERM ? "SIGTERM" : "SIGINT");
|
|
|
|
|
|
|
|
return 1;
|
|
|
|
}
|
2017-10-24 06:55:28 +00:00
|
|
|
case SIGHUP:
|
|
|
|
{
|
2019-04-27 14:54:30 +00:00
|
|
|
ogs_info("SIGHUP received");
|
2017-10-29 10:22:22 +00:00
|
|
|
app_logger_restart();
|
2017-10-24 06:55:28 +00:00
|
|
|
break;
|
|
|
|
}
|
2017-02-02 11:34:37 +00:00
|
|
|
default:
|
|
|
|
{
|
2019-04-27 14:54:30 +00:00
|
|
|
ogs_error("Signal-%d received (%s)",
|
|
|
|
signum, ogs_signal_description_get(signum));
|
2017-02-02 11:34:37 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2017-08-03 01:18:45 +00:00
|
|
|
void terminate()
|
|
|
|
{
|
|
|
|
app_terminate();
|
2019-04-27 14:54:30 +00:00
|
|
|
base_finalize();
|
|
|
|
ogs_core_finalize();
|
2017-08-03 01:18:45 +00:00
|
|
|
}
|
|
|
|
|
2017-02-02 11:34:37 +00:00
|
|
|
int main(int argc, char *argv[])
|
|
|
|
{
|
|
|
|
/**************************************************************************
|
|
|
|
* Starting up process.
|
|
|
|
*
|
|
|
|
* Keep the order of starting-up
|
|
|
|
*/
|
2019-04-27 14:54:30 +00:00
|
|
|
int rv;
|
|
|
|
int i;
|
|
|
|
app_param_t param;
|
|
|
|
const char *debug_mask = NULL;
|
|
|
|
const char *trace_mask = NULL;
|
|
|
|
|
|
|
|
memset(¶m, 0, sizeof(param));
|
|
|
|
for (i = 1; i < argc; i++)
|
2017-02-02 11:34:37 +00:00
|
|
|
{
|
2019-04-27 14:54:30 +00:00
|
|
|
if (!strcmp(argv[i], "-v"))
|
2017-02-02 11:34:37 +00:00
|
|
|
{
|
2019-04-27 14:54:30 +00:00
|
|
|
show_version();
|
|
|
|
return EXIT_SUCCESS;
|
|
|
|
}
|
|
|
|
if (!strcmp(argv[i], "-h"))
|
|
|
|
{
|
|
|
|
show_help(argv[0]);
|
|
|
|
return EXIT_SUCCESS;
|
|
|
|
}
|
|
|
|
if (!strcmp(argv[i], "-D"))
|
|
|
|
{
|
|
|
|
pid_t pid;
|
|
|
|
pid = fork();
|
2017-02-27 05:55:35 +00:00
|
|
|
|
2019-04-27 14:54:30 +00:00
|
|
|
ogs_assert(pid >= 0);
|
2017-02-27 05:55:35 +00:00
|
|
|
|
2019-04-27 14:54:30 +00:00
|
|
|
if (pid != 0)
|
|
|
|
{
|
|
|
|
/* Parent */
|
|
|
|
return EXIT_SUCCESS;
|
2017-02-27 05:55:35 +00:00
|
|
|
}
|
2019-04-27 14:54:30 +00:00
|
|
|
/* Child */
|
|
|
|
|
|
|
|
setsid();
|
|
|
|
umask(027);
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
if (!strcmp(argv[i], "-f"))
|
|
|
|
{
|
|
|
|
param.config_path = argv[++i];
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
if (!strcmp(argv[i], "-l"))
|
|
|
|
{
|
|
|
|
param.log_path = argv[++i];
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
if (!strcmp(argv[i], "-p"))
|
|
|
|
{
|
|
|
|
param.pid_path = argv[++i];
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
if (!strcmp(argv[i], "-d"))
|
|
|
|
{
|
|
|
|
param.log_level = OGS_LOG_DEBUG;
|
|
|
|
param.log_domain = argv[++i];
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
if (!strcmp(argv[i], "-t"))
|
|
|
|
{
|
|
|
|
param.log_level = OGS_LOG_TRACE;
|
|
|
|
param.log_domain = argv[++i];
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
if (argv[i][0] == '-') {
|
|
|
|
show_help(argv[0]);
|
|
|
|
return EXIT_FAILURE;
|
2017-02-02 11:34:37 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-08-03 01:18:45 +00:00
|
|
|
atexit(terminate);
|
2019-04-27 14:54:30 +00:00
|
|
|
ogs_core_initialize();
|
|
|
|
ogs_setup_signal_thread();
|
|
|
|
base_initialize();
|
|
|
|
|
|
|
|
ogs_info("NextEPC daemon start");
|
|
|
|
ogs_log_print(OGS_LOG_INFO, "\n");
|
2017-08-03 01:18:45 +00:00
|
|
|
|
2019-04-27 14:54:30 +00:00
|
|
|
rv = app_initialize(¶m);
|
|
|
|
if (rv != OGS_OK)
|
2017-02-02 11:34:37 +00:00
|
|
|
{
|
2019-04-27 14:54:30 +00:00
|
|
|
if (rv == OGS_RETRY)
|
2017-10-31 12:29:39 +00:00
|
|
|
return EXIT_SUCCESS;
|
|
|
|
|
2019-04-27 14:54:30 +00:00
|
|
|
ogs_fatal("NextEPC initialization failed. Aborted");
|
2017-02-02 11:34:37 +00:00
|
|
|
return EXIT_FAILURE;
|
|
|
|
}
|
2017-02-27 06:09:41 +00:00
|
|
|
|
2019-04-27 14:54:30 +00:00
|
|
|
ogs_log_print(OGS_LOG_INFO, "\n\n%s\n\n", version);
|
|
|
|
ogs_signal_thread(check_signal);
|
2017-02-02 11:34:37 +00:00
|
|
|
|
2019-04-27 14:54:30 +00:00
|
|
|
ogs_info("NextEPC daemon terminating...");
|
2017-02-02 11:34:37 +00:00
|
|
|
|
|
|
|
return EXIT_SUCCESS;
|
|
|
|
}
|