diff options
author | Max <msuraev@sysmocom.de> | 2016-02-22 11:39:30 +0100 |
---|---|---|
committer | Holger Hans Peter Freyther <holger@moiji-mobile.com> | 2016-02-22 14:00:17 +0100 |
commit | 2efdf69734dc8d7f0953caad1563552f53c47b06 (patch) | |
tree | ebae76ede625d173c373946b83dc02214a851246 /src/pcu_main.cpp | |
parent | 9d5580b6dd8069dbb5cdfa00b65f73978f580bcc (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.cpp | 17 |
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", |