[PATCH] libosmo-sccp[master]: osmo-stp: Add command line options and daemonize functionality

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

Harald Welte gerrit-no-reply at lists.osmocom.org
Fri Apr 14 15:12:46 UTC 2017


Review at  https://gerrit.osmocom.org/2342

osmo-stp: Add command line options and daemonize functionality

Change-Id: I267fbe2e5c774960f0b63cfdd9f60df121b4934d
---
M stp/stp_main.c
1 file changed, 75 insertions(+), 6 deletions(-)


  git pull ssh://gerrit.osmocom.org:29418/libosmo-sccp refs/changes/42/2342/1

diff --git a/stp/stp_main.c b/stp/stp_main.c
index 5412223..3110ec4 100644
--- a/stp/stp_main.c
+++ b/stp/stp_main.c
@@ -22,6 +22,7 @@
 #include <stdio.h>
 #include <string.h>
 #include <unistd.h>
+#include <getopt.h>
 
 #include <osmocom/core/select.h>
 #include <osmocom/core/utils.h>
@@ -29,6 +30,7 @@
 #include <osmocom/core/application.h>
 #include <osmocom/core/fsm.h>
 #include <osmocom/vty/vty.h>
+#include <osmocom/vty/command.h>
 #include <osmocom/vty/ports.h>
 #include <osmocom/vty/telnet_interface.h>
 #include <osmocom/vty/logging.h>
@@ -64,25 +66,82 @@
 	.is_config_node = osmo_ss7_is_config_node,
 };
 
+static struct {
+	bool daemonize;
+	const char *config_file;
+} cmdline_config = {
+	.daemonize = false,
+	.config_file = "osmo-stp.cfg",
+};
+
+static void print_help(void)
+{
+	printf("  -h --help			This text.\n");
+	printf("  -D --daemonize		Fork teh process into a background daemon\n");
+	printf("  -c --config-file filename	The config file to use. Default: ./osmo-stp.cfg\n");
+	printf("  -V --version			Print the version of OsmoSTP\n");
+}
+
+static void handle_options(int argc, char **argv)
+{
+	while (1) {
+		int option_index = 0, c;
+		static const struct option long_options[] = {
+			{ "help", 0, 0, 'h' },
+			{ "daemonize", 0, 0, 'D' },
+			{ "config-file", 1, 0, 'c' },
+			{ "version", 0, 0, 'V' },
+			{ NULL, 0, 0, 0 }
+		};
+
+		c = getopt_long(argc, argv, "hDc:V", long_options, &option_index);
+		if (c == -1)
+			break;
+
+		switch (c) {
+		case 'h':
+			print_help();
+			exit(0);
+			break;
+		case 'D':
+			cmdline_config.daemonize = true;
+			break;
+		case 'c':
+			cmdline_config.config_file = optarg;
+			break;
+		case 'V':
+			print_version(1);
+			exit(0);
+			break;
+		default:
+			fprintf(stderr, "Error in command line options. Exiting\n");
+			exit(1);
+			break;
+		}
+	}
+}
+
 int main(int argc, char **argv)
 {
-	char *config_file = "osmo-stp.cfg";
 	int rc;
+
+	osmo_init_logging(&log_info);
+	vty_init(&vty_info);
+
+	handle_options(argc, argv);
 
 	fputs(stp_copyright, stdout);
 	fputs("\n", stdout);
 
-	osmo_init_logging(&log_info);
 	osmo_ss7_init();
 	osmo_fsm_log_addr(false);
-	vty_init(&vty_info);
 	logging_vty_add_cmds(&log_info);
 	osmo_ss7_vty_init_sg();
 
-	rc = vty_read_config_file(config_file, NULL);
+	rc = vty_read_config_file(cmdline_config.config_file, NULL);
 	if (rc < 0) {
 		fprintf(stderr, "Failed to parse the config file '%s'\n",
-			config_file);
+			cmdline_config.config_file);
 		exit(1);
 	}
 
@@ -92,7 +151,17 @@
 		exit(1);
 	}
 
+	if (cmdline_config.daemonize) {
+		rc = osmo_daemonize();
+		if (rc < 0) {
+			perror("Error during daemonize");
+			exit(1);
+		}
+	}
+
 	while (1) {
-		osmo_select_main(0);
+		rc = osmo_select_main(0);
+		if (rc < 0)
+			exit(3);
 	}
 }

-- 
To view, visit https://gerrit.osmocom.org/2342
To unsubscribe, visit https://gerrit.osmocom.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I267fbe2e5c774960f0b63cfdd9f60df121b4934d
Gerrit-PatchSet: 1
Gerrit-Project: libosmo-sccp
Gerrit-Branch: master
Gerrit-Owner: Harald Welte <laforge at gnumonks.org>



More information about the gerrit-log mailing list