[PATCH] Added option for mobile-app to bind to other interfaces than localhost. Signed-off-by: Tim Ehlers <osmocom at ehlers.info>

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/baseband-devel@lists.osmocom.org/.

Tim Ehlers osmocom at ehlers.info
Tue Feb 21 12:22:20 UTC 2012


---
 .../layer23/include/osmocom/bb/common/l23_app.h    |    1 +
 .../layer23/include/osmocom/bb/mobile/app_mobile.h |    2 +-
 src/host/layer23/src/common/main.c                 |   11 ++++-
 src/host/layer23/src/mobile/app_mobile.c           |    4 +-
 src/host/layer23/src/mobile/main.c                 |   13 ++++-
 .../include/osmocom/vty/telnet_interface.h         |    1 +
 src/shared/libosmocore/src/vty/telnet_interface.c  |   45 ++++++++++++++++++++
 7 files changed, 70 insertions(+), 7 deletions(-)

diff --git a/src/host/layer23/include/osmocom/bb/common/l23_app.h b/src/host/layer23/include/osmocom/bb/common/l23_app.h
index e4c5d55..0b9994c 100644
--- a/src/host/layer23/include/osmocom/bb/common/l23_app.h
+++ b/src/host/layer23/include/osmocom/bb/common/l23_app.h
@@ -10,6 +10,7 @@ enum {
 	L23_OPT_TAP	= 4,
 	L23_OPT_VTY	= 8,
 	L23_OPT_DBG	= 16,
+	L23_OPT_VTYIP	= 32,
 };
 
 /* initialization, called once when starting the app, before entering
diff --git a/src/host/layer23/include/osmocom/bb/mobile/app_mobile.h b/src/host/layer23/include/osmocom/bb/mobile/app_mobile.h
index 4010a68..351dec3 100644
--- a/src/host/layer23/include/osmocom/bb/mobile/app_mobile.h
+++ b/src/host/layer23/include/osmocom/bb/mobile/app_mobile.h
@@ -4,7 +4,7 @@
 char *config_dir;
 
 int l23_app_init(int (*mncc_recv)(struct osmocom_ms *ms, int, void *),
-	const char *config_file, uint16_t vty_port);
+	const char *config_file, const char *vty_ip, uint16_t vty_port);
 int l23_app_exit(void);
 int l23_app_work(int *quit);
 int mobile_delete(struct osmocom_ms *ms, int force);
diff --git a/src/host/layer23/src/common/main.c b/src/host/layer23/src/common/main.c
index eb47b26..59cee03 100644
--- a/src/host/layer23/src/common/main.c
+++ b/src/host/layer23/src/common/main.c
@@ -56,6 +56,7 @@ static char *sap_socket_path = "/tmp/osmocom_sap";
 struct llist_head ms_list;
 static struct osmocom_ms *ms = NULL;
 static char *gsmtap_ip = NULL;
+static char *vty_ip = "127.0.0.1";
 
 unsigned short vty_port = 4247;
 int (*l23_app_work) (struct osmocom_ms *ms) = NULL;
@@ -106,6 +107,10 @@ static void print_help()
 	if (options & L23_OPT_DBG)
 		printf("  -d --debug		Change debug flags.\n");
 
+	if (options & L23_OPT_VTYIP)
+		printf("  -u --vty-ip		The VTY IP to bind telnet to. "
+			"(default %s)\n", vty_ip);
+
 	if (app && app->cfg_print_help)
 		app->cfg_print_help();
 }
@@ -122,13 +127,14 @@ static void build_config(char **opt, struct option **option)
 		{"sap", 1, 0, 'S'},
 		{"arfcn", 1, 0, 'a'},
 		{"gsmtap-ip", 1, 0, 'i'},
+		{"vty-ip", 1, 0, 'u'},
 		{"vty-port", 1, 0, 'v'},
 		{"debug", 1, 0, 'd'},
 	};
 
 
 	app = l23_app_info();
-	*opt = talloc_asprintf(l23_ctx, "hs:S:a:i:v:d:%s",
+	*opt = talloc_asprintf(l23_ctx, "hs:S:a:i:v:d:u:%s",
 			       app && app->getopt_string ? app->getopt_string : "");
 
 	len = ARRAY_SIZE(long_options);
@@ -174,6 +180,9 @@ static void handle_options(int argc, char **argv)
 		case 'i':
 			gsmtap_ip = optarg;
 			break;
+		case 'u':
+			vty_ip = optarg;
+			break;
 		case 'v':
 			vty_port = atoi(optarg);
 			break;
diff --git a/src/host/layer23/src/mobile/app_mobile.c b/src/host/layer23/src/mobile/app_mobile.c
index da388b2..d911ab3 100644
--- a/src/host/layer23/src/mobile/app_mobile.c
+++ b/src/host/layer23/src/mobile/app_mobile.c
@@ -352,7 +352,7 @@ static struct vty_app_info vty_info = {
 
 /* global init */
 int l23_app_init(int (*mncc_recv)(struct osmocom_ms *ms, int, void *),
-	const char *config_file, uint16_t vty_port)
+	const char *config_file, const char *vty_ip, uint16_t vty_port)
 {
 	struct telnet_connection dummy_conn;
 	int rc = 0;
@@ -376,7 +376,7 @@ int l23_app_init(int (*mncc_recv)(struct osmocom_ms *ms, int, void *),
 		}
 	}
 	vty_reading = 0;
-	telnet_init(l23_ctx, NULL, vty_port);
+	telnet_init_dynif(l23_ctx, NULL, vty_ip, vty_port);
 	if (rc < 0)
 		return rc;
 	printf("VTY available on port %u.\n", vty_port);
diff --git a/src/host/layer23/src/mobile/main.c b/src/host/layer23/src/mobile/main.c
index 89c9b94..312bcd6 100644
--- a/src/host/layer23/src/mobile/main.c
+++ b/src/host/layer23/src/mobile/main.c
@@ -52,6 +52,7 @@ void *l23_ctx = NULL;
 struct llist_head ms_list;
 static char *gsmtap_ip = 0;
 struct gsmtap_inst *gsmtap_inst = NULL;
+static char *vty_ip = "127.0.0.1";
 unsigned short vty_port = 4247;
 int debug_set = 0;
 char *config_dir = NULL;
@@ -88,6 +89,8 @@ static void print_help()
 	printf(" Some help...\n");
 	printf("  -h --help		this text\n");
 	printf("  -i --gsmtap-ip	The destination IP used for GSMTAP.\n");
+	printf("  -u --vty-ip           The VTY IP to telnet to. "
+		"(default %s)\n", vty_ip);
 	printf("  -v --vty-port		The VTY port number to telnet to. "
 		"(default %u)\n", vty_port);
 	printf("  -d --debug		Change debug flags. default: %s\n",
@@ -104,6 +107,7 @@ static void handle_options(int argc, char **argv)
 		static struct option long_options[] = {
 			{"help", 0, 0, 'h'},
 			{"gsmtap-ip", 1, 0, 'i'},
+			{"vty-ip", 1, 0, 'u'},
 			{"vty-port", 1, 0, 'v'},
 			{"debug", 1, 0, 'd'},
 			{"daemonize", 0, 0, 'D'},
@@ -111,7 +115,7 @@ static void handle_options(int argc, char **argv)
 			{0, 0, 0, 0},
 		};
 
-		c = getopt_long(argc, argv, "hi:v:d:Dm",
+		c = getopt_long(argc, argv, "hi:u:v:d:Dm",
 				long_options, &option_index);
 		if (c == -1)
 			break;
@@ -125,6 +129,9 @@ static void handle_options(int argc, char **argv)
 		case 'i':
 			gsmtap_ip = optarg;
 			break;
+		case 'u':
+			vty_ip = optarg;
+			break;
 		case 'v':
 			vty_port = atoi(optarg);
 			break;
@@ -226,9 +233,9 @@ int main(int argc, char **argv)
 	config_dir = dirname(config_dir);
 
 	if (use_mncc_sock)
-		rc = l23_app_init(mncc_recv_socket, config_file, vty_port);
+		rc = l23_app_init(mncc_recv_socket, config_file, vty_ip, vty_port);
 	else
-		rc = l23_app_init(NULL, config_file, vty_port);
+		rc = l23_app_init(NULL, config_file, vty_ip, vty_port);
 	if (rc)
 		exit(rc);
 
diff --git a/src/shared/libosmocore/include/osmocom/vty/telnet_interface.h b/src/shared/libosmocore/include/osmocom/vty/telnet_interface.h
index 2de4f19..65a1dd9 100644
--- a/src/shared/libosmocore/include/osmocom/vty/telnet_interface.h
+++ b/src/shared/libosmocore/include/osmocom/vty/telnet_interface.h
@@ -47,6 +47,7 @@ struct telnet_connection {
 };
 
 int telnet_init(void *tall_ctx, void *priv, int port);
+int telnet_init_dynif(void *tall_ctx, void *priv, const char *ip, int port);
 
 void telnet_exit(void);
 
diff --git a/src/shared/libosmocore/src/vty/telnet_interface.c b/src/shared/libosmocore/src/vty/telnet_interface.c
index 167acc1..d74ec09 100644
--- a/src/shared/libosmocore/src/vty/telnet_interface.c
+++ b/src/shared/libosmocore/src/vty/telnet_interface.c
@@ -18,6 +18,7 @@
  *
  */
 
+#include <arpa/inet.h>
 #include <sys/socket.h>
 #include <netinet/in.h>
 #include <stdlib.h>
@@ -101,6 +102,50 @@ int telnet_init(void *tall_ctx, void *priv, int port)
 	return 0;
 }
 
+int telnet_init_dynif(void *tall_ctx, void *priv, const char *ip, int port)
+{
+	struct sockaddr_in sock_addr;
+	int fd, rc, on = 1;
+
+	tall_telnet_ctx = talloc_named_const(tall_ctx, 1,
+					     "telnet_connection");
+
+	/* FIXME: use new socket.c code of libosmocore */
+	fd = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
+
+	if (fd < 0) {
+		LOGP(0, LOGL_ERROR, "Telnet interface socket creation failed\n");
+		return fd;
+	}
+
+	setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));
+
+	memset(&sock_addr, 0, sizeof(sock_addr));
+	sock_addr.sin_family = AF_INET;
+	sock_addr.sin_port = htons(port);
+	sock_addr.sin_addr.s_addr = inet_addr(ip);
+
+	rc = bind(fd, (struct sockaddr*)&sock_addr, sizeof(sock_addr));
+	if (rc < 0) {
+		LOGP(0, LOGL_ERROR, "Telnet interface failed to bind\n");
+		close(fd);
+		return rc;
+	}
+
+	rc = listen(fd, 0);
+	if (rc < 0) {
+		LOGP(0, LOGL_ERROR, "Telnet interface failed to listen\n");
+		close(fd);
+		return rc;
+	}
+
+	server_socket.data = priv;
+	server_socket.fd = fd;
+	osmo_fd_register(&server_socket);
+
+	return 0;
+}
+
 extern struct host host;
 
 static void print_welcome(int fd)
-- 
1.7.1





More information about the baseband-devel mailing list