summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVadim Yanitskiy <axilirator@gmail.com>2016-06-30 00:41:58 +0600
committerVadim Yanitskiy <axilirator@gmail.com>2017-10-23 22:05:49 +0330
commit03265a13ef5110a00e3a8be8a74aeee9d76a9832 (patch)
tree744af61c7ba6a6ed44d449cbc49a37d3c7d16225
parent363d4d22da0e2bb03645affa32fe7443d8f8befc (diff)
host/trxcon: introduce a new 'trxcon' application
This app is similar to the osmocon, but designed to connect L2 & L3 apps with SDR transceiver insted of obsolete Calypso based hardware. Change-Id: Ie3c17f19aad9c26f3c49966a7c96b65911f62369
-rw-r--r--src/Makefile18
-rw-r--r--src/host/trxcon/.gitignore26
-rw-r--r--src/host/trxcon/Makefile.am29
-rw-r--r--src/host/trxcon/configure.ac23
-rw-r--r--src/host/trxcon/logging.c52
-rw-r--r--src/host/trxcon/logging.h11
-rw-r--r--src/host/trxcon/trxcon.c193
7 files changed, 350 insertions, 2 deletions
diff --git a/src/Makefile b/src/Makefile
index f5e2128..dedc40e 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -12,8 +12,7 @@ CROSS_TOOL_PREFIX=$(CROSS_HOST)-
TOPDIR=$(shell pwd)
all: libosmocore-target nofirmware firmware mtk-firmware
-
-nofirmware: layer23 osmocon gsmmap virtphy
+nofirmware: layer23 osmocon trxcon gsmmap virtphy
libosmocore-target: shared/libosmocore/build-target/src/.libs/libosmocore.a
@@ -58,6 +57,19 @@ host/virt_phy/Makefile: host/virt_phy/configure
host/virt_phy/virtphy: host/virt_phy/Makefile
make -C host/virt_phy
+.PHONY: trxcon
+trxcon: host/trxcon/trxcon
+
+host/trxcon/configure: host/trxcon/configure.ac
+ cd host/trxcon && autoreconf -i
+
+host/trxcon/Makefile: host/trxcon/configure
+ cd host/trxcon && ./configure $(HOST_CONFARGS)
+
+host/trxcon/trxcon: host/trxcon/Makefile
+ make -C host/trxcon
+
+
.PHONY: gsmmap
gsmmap: host/gsmmap/gsmmap
@@ -99,6 +111,7 @@ clean:
make -C host/osmocon $@
make -C host/gsmmap $@
make -C host/virt_phy $@
+ make -C host/trxcon $@
make -C target/firmware $@
make -C target/firmware -f Makefile.mtk $@
@@ -108,5 +121,6 @@ distclean:
make -C host/osmocon $@
make -C host/gsmmap $@
make -C host/virt_phy $@
+ make -C host/trxcon $@
# 'firmware' also handles 'mtk-firmware'
make -C target/firmware $@
diff --git a/src/host/trxcon/.gitignore b/src/host/trxcon/.gitignore
new file mode 100644
index 0000000..d6b28ee
--- /dev/null
+++ b/src/host/trxcon/.gitignore
@@ -0,0 +1,26 @@
+# autoreconf by-products
+*.in
+
+aclocal.m4
+autom4te.cache/
+configure
+depcomp
+install-sh
+missing
+compile
+
+# configure by-products
+.deps/
+Makefile
+
+config.status
+version.h
+
+# build by-products
+*.o
+
+trxcon
+
+# various
+.version
+.tarball-version
diff --git a/src/host/trxcon/Makefile.am b/src/host/trxcon/Makefile.am
new file mode 100644
index 0000000..00869d9
--- /dev/null
+++ b/src/host/trxcon/Makefile.am
@@ -0,0 +1,29 @@
+AUTOMAKE_OPTIONS = foreign dist-bzip2 1.6
+
+# versioning magic
+BUILT_SOURCES = $(top_srcdir)/.version
+$(top_srcdir)/.version:
+ echo $(VERSION) > $@-t && mv $@-t $@
+dist-hook:
+ echo $(VERSION) > $(distdir)/.tarball-version
+
+AM_CPPFLAGS = \
+ $(all_includes) \
+ -I$(top_srcdir)/include \
+ $(NULL)
+
+AM_CFLAGS = \
+ -Wall \
+ $(LIBOSMOCORE_CFLAGS) \
+ $(NULL)
+
+bin_PROGRAMS = trxcon
+
+trxcon_SOURCES = \
+ logging.c \
+ trxcon.c \
+ $(NULL)
+
+trxcon_LDADD = \
+ $(LIBOSMOCORE_LIBS) \
+ $(NULL)
diff --git a/src/host/trxcon/configure.ac b/src/host/trxcon/configure.ac
new file mode 100644
index 0000000..c411d04
--- /dev/null
+++ b/src/host/trxcon/configure.ac
@@ -0,0 +1,23 @@
+dnl Process this file with autoconf to produce a configure script
+AC_INIT([trxcon], [0.0.0])
+AM_INIT_AUTOMAKE
+
+dnl kernel style compile messages
+m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+
+dnl checks for programs
+AC_PROG_MAKE_SET
+AC_PROG_CC
+AC_PROG_INSTALL
+
+dnl checks for libraries
+PKG_CHECK_MODULES(LIBOSMOCORE, libosmocore)
+PKG_CHECK_MODULES(LIBOSMOCODING, libosmocoding)
+
+dnl checks for header files
+AC_HEADER_STDC
+
+dnl Checks for typedefs, structures and compiler characteristics
+
+AC_OUTPUT(
+ Makefile)
diff --git a/src/host/trxcon/logging.c b/src/host/trxcon/logging.c
new file mode 100644
index 0000000..136cc76
--- /dev/null
+++ b/src/host/trxcon/logging.c
@@ -0,0 +1,52 @@
+/*
+ * OsmocomBB <-> SDR connection bridge
+ *
+ * (C) 2016-2017 by Vadim Yanitskiy <axilirator@gmail.com>
+ *
+ * All Rights Reserved
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ */
+
+#include <osmocom/core/application.h>
+#include <osmocom/core/logging.h>
+#include <osmocom/core/utils.h>
+
+#include "logging.h"
+
+static struct log_info_cat trx_log_info_cat[] = {
+ [DAPP] = {
+ .name = "DAPP",
+ .description = "Application",
+ .color = "\033[1;35m",
+ .enabled = 1, .loglevel = LOGL_NOTICE,
+ },
+};
+
+static const struct log_info trx_log_info = {
+ .cat = trx_log_info_cat,
+ .num_cat = ARRAY_SIZE(trx_log_info_cat),
+};
+
+int trx_log_init(const char *category_mask)
+{
+ osmo_init_logging(&trx_log_info);
+
+ if (category_mask)
+ log_parse_category_mask(osmo_stderr_target, category_mask);
+
+ return 0;
+}
diff --git a/src/host/trxcon/logging.h b/src/host/trxcon/logging.h
new file mode 100644
index 0000000..4149e4f
--- /dev/null
+++ b/src/host/trxcon/logging.h
@@ -0,0 +1,11 @@
+#pragma once
+
+#include <osmocom/core/logging.h>
+
+#define DEBUG_DEFAULT "DAPP"
+
+enum {
+ DAPP
+};
+
+int trx_log_init(const char *category_mask);
diff --git a/src/host/trxcon/trxcon.c b/src/host/trxcon/trxcon.c
new file mode 100644
index 0000000..03664ca
--- /dev/null
+++ b/src/host/trxcon/trxcon.c
@@ -0,0 +1,193 @@
+/*
+ * OsmocomBB <-> SDR connection bridge
+ *
+ * (C) 2016-2017 by Vadim Yanitskiy <axilirator@gmail.com>
+ *
+ * All Rights Reserved
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <string.h>
+#include <getopt.h>
+#include <unistd.h>
+#include <signal.h>
+
+#include <osmocom/core/msgb.h>
+#include <osmocom/core/talloc.h>
+#include <osmocom/core/signal.h>
+#include <osmocom/core/select.h>
+#include <osmocom/core/application.h>
+
+#include "logging.h"
+
+#define COPYRIGHT \
+ "Copyright (C) 2016-2017 by Vadim Yanitskiy <axilirator@gmail.com>\n" \
+ "License GPLv2+: GNU GPL version 2 or later " \
+ "<http://gnu.org/licenses/gpl.html>\n" \
+ "This is free software: you are free to change and redistribute it.\n" \
+ "There is NO WARRANTY, to the extent permitted by law.\n\n"
+
+static struct {
+ const char *debug_mask;
+ int daemonize;
+ int quit;
+
+ const char *trx_ip;
+ uint16_t trx_base_port;
+ const char *bind_socket;
+} app_data;
+
+void *tall_trx_ctx = NULL;
+
+static void print_usage(const char *app)
+{
+ printf("Usage: %s\n", app);
+}
+
+static void print_help(void)
+{
+ printf(" Some help...\n");
+ printf(" -h --help this text\n");
+ printf(" -d --debug Change debug flags. Default: %s\n", DEBUG_DEFAULT);
+ printf(" -i --trx-ip IP address of host runing TRX (default 127.0.0.1)\n");
+ printf(" -p --trx-port Base port of TRX instance (default 5700)\n");
+ printf(" -s --socket Listening socket for layer23 (default /tmp/osmocom_l2)\n");
+ printf(" -D --daemonize Run as daemon\n");
+}
+
+static void handle_options(int argc, char **argv)
+{
+ while (1) {
+ int option_index = 0, c;
+ static struct option long_options[] = {
+ {"help", 0, 0, 'h'},
+ {"debug", 1, 0, 'd'},
+ {"socket", 1, 0, 's'},
+ {"trx-ip", 1, 0, 'i'},
+ {"trx-port", 1, 0, 'p'},
+ {"daemonize", 0, 0, 'D'},
+ {0, 0, 0, 0}
+ };
+
+ c = getopt_long(argc, argv, "d:i:p:s:Dh",
+ long_options, &option_index);
+ if (c == -1)
+ break;
+
+ switch (c) {
+ case 'h':
+ print_usage(argv[0]);
+ print_help();
+ exit(0);
+ break;
+ case 'd':
+ app_data.debug_mask = optarg;
+ break;
+ case 'i':
+ app_data.trx_ip = optarg;
+ break;
+ case 'p':
+ app_data.trx_base_port = atoi(optarg);
+ break;
+ case 's':
+ app_data.bind_socket = optarg;
+ break;
+ case 'D':
+ app_data.daemonize = 1;
+ break;
+ default:
+ break;
+ }
+ }
+}
+
+static void init_defaults(void)
+{
+ app_data.bind_socket = "/tmp/osmocom_l2";
+ app_data.trx_ip = "127.0.0.1";
+ app_data.trx_base_port = 5700;
+
+ app_data.debug_mask = NULL;
+ app_data.daemonize = 0;
+ app_data.quit = 0;
+}
+
+static void signal_handler(int signal)
+{
+ fprintf(stderr, "signal %u received\n", signal);
+
+ switch (signal) {
+ case SIGINT:
+ app_data.quit++;
+ break;
+ case SIGABRT:
+ case SIGUSR1:
+ case SIGUSR2:
+ talloc_report_full(tall_trx_ctx, stderr);
+ break;
+ default:
+ break;
+ }
+}
+
+int main(int argc, char **argv)
+{
+ int rc = 0;
+
+ printf("%s", COPYRIGHT);
+ init_defaults();
+ handle_options(argc, argv);
+
+ /* Init talloc memory management system */
+ tall_trx_ctx = talloc_init("trxcon context");
+ msgb_talloc_ctx_init(tall_trx_ctx, 0);
+
+ /* Setup signal handlers */
+ signal(SIGINT, &signal_handler);
+ signal(SIGUSR1, &signal_handler);
+ signal(SIGUSR2, &signal_handler);
+ osmo_init_ignore_signals();
+
+ /* Init logging system */
+ trx_log_init(app_data.debug_mask);
+
+ /* Currently nothing to do */
+ print_usage(argv[0]);
+ print_help();
+ goto exit;
+
+ if (app_data.daemonize) {
+ rc = osmo_daemonize();
+ if (rc < 0) {
+ perror("Error during daemonize");
+ goto exit;
+ }
+ }
+
+ while (!app_data.quit)
+ osmo_select_main(0);
+
+exit:
+ /* Make Valgrind happy */
+ log_fini();
+ talloc_free(tall_trx_ctx);
+
+ return rc;
+}