aboutsummaryrefslogtreecommitdiffstats
path: root/src/pcu_main.cpp
diff options
context:
space:
mode:
authorMax <msuraev@sysmocom.de>2016-02-22 11:39:30 +0100
committerHolger Hans Peter Freyther <holger@moiji-mobile.com>2016-02-22 14:00:17 +0100
commit2efdf69734dc8d7f0953caad1563552f53c47b06 (patch)
treeebae76ede625d173c373946b83dc02214a851246 /src/pcu_main.cpp
parent9d5580b6dd8069dbb5cdfa00b65f73978f580bcc (diff)
Introduce --gsmtap-ip/-i option
This option allows user to use custom IP address instead of default "localhost". Correspondingly gsmtap init moved from sysmoBTS-specific code up to "bts" struct level. This way it can be easier reused by other implementations. The lack of regressions was verified by checking following command on sysmoBTS: "./osmo-pcu -c osmo-pcu.cfg -r 1 -i 192.168.10.1" where 192.168.10.1 is the host which was running wireshark and netcat: "nc -u -l 192.168.10.1 -p 4729" to accept gsmtap flow.
Diffstat (limited to 'src/pcu_main.cpp')
-rw-r--r--src/pcu_main.cpp17
1 files changed, 16 insertions, 1 deletions
diff --git a/src/pcu_main.cpp b/src/pcu_main.cpp
index 8eb7441a..4126d063 100644
--- a/src/pcu_main.cpp
+++ b/src/pcu_main.cpp
@@ -33,6 +33,8 @@ extern "C" {
#include <osmocom/vty/telnet_interface.h>
#include <osmocom/vty/logging.h>
#include <osmocom/core/stats.h>
+#include <osmocom/core/gsmtap.h>
+#include <osmocom/core/gsmtap_util.h>
}
extern struct gprs_nsvc *nsvc;
@@ -44,6 +46,7 @@ void *tall_pcu_ctx;
extern void *bv_tall_ctx;
static int quit = 0;
static int rt_prio = -1;
+static char *gsmtap_addr = "localhost"; // FIXME: use gengetopt's default value instead
static void print_help()
{
@@ -58,6 +61,7 @@ static void print_help()
" -V --version print version\n"
" -r --realtime PRIO Use SCHED_RR with the specified "
"priority\n"
+ " -i --gsmtap-ip The destination IP used for GSMTAP.\n"
);
}
@@ -74,10 +78,11 @@ static void handle_options(int argc, char **argv)
{ "version", 0, 0, 'V' },
{ "realtime", 1, 0, 'r' },
{ "exit", 0, 0, 'e' },
+ { "gsmtap-ip", 1, 0, 'i' },
{ 0, 0, 0, 0 }
};
- c = getopt_long(argc, argv, "hc:m:n:Vr:e",
+ c = getopt_long(argc, argv, "hc:m:n:Vr:e:i:",
long_options, &option_idx);
if (c == -1)
break;
@@ -102,6 +107,9 @@ static void handle_options(int argc, char **argv)
print_version(1);
exit(0);
break;
+ case 'i':
+ gsmtap_addr = optarg;
+ break;
case 'r':
rt_prio = atoi(optarg);
break;
@@ -219,6 +227,13 @@ int main(int argc, char *argv[])
exit(0);
}
+ bts->gsmtap = gsmtap_source_init(gsmtap_addr, GSMTAP_UDP_PORT, 1);
+
+ if (bts->gsmtap)
+ gsmtap_source_add_sink(bts->gsmtap);
+ else
+ fprintf(stderr, "Failed to initialize GSMTAP for %s\n", gsmtap_addr);
+
rc = vty_read_config_file(config_file, NULL);
if (rc < 0 && config_given) {
fprintf(stderr, "Failed to parse the config file: '%s'\n",