[PATCH] Added option for mobile-app to bind to other interfaces than localhost.
Tim Ehlers
osmocom at ehlers.info
Tue Feb 21 15:32:34 CET 2012
Signed-off-by: Tim Ehlers <osmocom at ehlers.info>
---
.../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 | 11 ++++++++++-
7 files changed, 35 insertions(+), 8 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..bbc0791 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>
@@ -59,6 +60,14 @@ static struct osmo_fd server_socket = {
*/
int telnet_init(void *tall_ctx, void *priv, int port)
{
+ int rc;
+ rc = telnet_init_dynif(tall_ctx, priv, "127.0.0.1", port);
+
+ return rc;
+}
+
+int telnet_init_dynif(void *tall_ctx, void *priv, const char *ip, int port)
+{
struct sockaddr_in sock_addr;
int fd, rc, on = 1;
@@ -78,7 +87,7 @@ int telnet_init(void *tall_ctx, void *priv, int port)
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 = htonl(INADDR_LOOPBACK);
+ sock_addr.sin_addr.s_addr = inet_addr(ip);
rc = bind(fd, (struct sockaddr*)&sock_addr, sizeof(sock_addr));
if (rc < 0) {
--
1.7.1
More information about the baseband-devel
mailing list