hnbgw: make cmdline options stronger than config file
Now that a config file gets parsed after the command line options, e.g. the
'logging timestamp 0' config item is stronger than a -T commandline option. So
rather store the cmdline options to take effect after config file parsing.
This adds a stupid 'log_disable_color = true' reverse boolean logic, which is
unavoidable if we want to use the same default cmdline options as osmo-nitb /
osmo-cscn.
Change-Id: I16ad55b173a443c36b71dc6b70f58695f6665312
diff --git a/src/hnbgw.c b/src/hnbgw.c
index 01f64a7..4cb3c69 100644
--- a/src/hnbgw.c
+++ b/src/hnbgw.c
@@ -25,6 +25,7 @@
#include <getopt.h>
#include <errno.h>
#include <signal.h>
+#include <stdbool.h>
#include <sys/types.h>
#include <sys/socket.h>
@@ -390,9 +391,17 @@
static struct {
int daemonize;
const char *config_file;
+ bool log_disable_color;
+ bool log_enable_timestamp;
+ int log_level;
+ const char *log_category_mask;
} hnbgw_cmdline_config = {
0,
- "osmo-hnbgw.cfg"
+ "osmo-hnbgw.cfg",
+ true,
+ false,
+ 0,
+ NULL,
};
static void print_usage()
@@ -439,10 +448,10 @@
print_help();
exit(0);
case 's':
- log_set_use_color(osmo_stderr_target, 0);
+ hnbgw_cmdline_config.log_disable_color = true;
break;
case 'd':
- log_parse_category_mask(osmo_stderr_target, optarg);
+ hnbgw_cmdline_config.log_category_mask = optarg;
break;
case 'D':
hnbgw_cmdline_config.daemonize = 1;
@@ -451,10 +460,10 @@
hnbgw_cmdline_config.config_file = optarg;
break;
case 'T':
- log_set_print_timestamp(osmo_stderr_target, 1);
+ hnbgw_cmdline_config.log_enable_timestamp = true;
break;
case 'e':
- log_set_log_level(osmo_stderr_target, atoi(optarg));
+ hnbgw_cmdline_config.log_level = atoi(optarg);
break;
case 'V':
print_version(1);
@@ -502,6 +511,21 @@
return 1;
}
+ /*
+ * cmdline options take precedence over config file, but if no options
+ * were passed we must not override the config file.
+ */
+ if (hnbgw_cmdline_config.log_disable_color)
+ log_set_use_color(osmo_stderr_target, 0);
+ if (hnbgw_cmdline_config.log_category_mask)
+ log_parse_category_mask(osmo_stderr_target,
+ hnbgw_cmdline_config.log_category_mask);
+ if (hnbgw_cmdline_config.log_enable_timestamp)
+ log_set_print_timestamp(osmo_stderr_target, 1);
+ if (hnbgw_cmdline_config.log_level)
+ log_set_log_level(osmo_stderr_target,
+ hnbgw_cmdline_config.log_level);
+
LOGP(DMAIN, LOGL_NOTICE, "VTY at %s %d\n",
vty_get_bind_addr(), 2323);
rc = telnet_init_dynif(NULL, g_hnb_gw, vty_get_bind_addr(), 2323);