laforge has uploaded this change for review. ( 
https://gerrit.osmocom.org/c/libosmocore/+/36362?usp=email )


Change subject: WIP: migrate gsmtap logging over to osmo_io
......................................................................

WIP: migrate gsmtap logging over to osmo_io

This is working in principle;  The problem is just that osmo_io itself
contains LOGP calls from within osmo_iofd_write_msgb() and downstream
code, so we might easily get up in an infinite recursion bug.

This needs further study; possibly we need a "safe" logging function
which will never use osmo_io.  Or something like a per-thread global
boolean variable which the code can check to know if it's re-entering?

Change-Id: I69d7eca7d50666b4fcfe73a1dc03f8e8491b32fc
---
M include/osmocom/core/gsmtap_util.h
M src/core/gsmtap_util.c
M src/core/libosmocore.map
M src/vty/logging_vty.c
4 files changed, 41 insertions(+), 5 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/62/36362/1

diff --git a/include/osmocom/core/gsmtap_util.h 
b/include/osmocom/core/gsmtap_util.h
index d24ee95..e755931 100644
--- a/include/osmocom/core/gsmtap_util.h
+++ b/include/osmocom/core/gsmtap_util.h
@@ -1,5 +1,6 @@
 #pragma once

+#include <stdbool.h>
 #include <stdint.h>
 #include <osmocom/core/write_queue.h>
 #include <osmocom/core/select.h>
@@ -31,6 +32,8 @@

 int gsmtap_inst_fd2(const struct gsmtap_inst *gti);

+bool gsmtap_inst_get_osmo_io_mode(const struct gsmtap_inst *gti);
+
 int gsmtap_source_init_fd(const char *host, uint16_t port);
 int gsmtap_source_init_fd2(const char *local_host, uint16_t local_port, const 
char *rem_host, uint16_t rem_port);

diff --git a/src/core/gsmtap_util.c b/src/core/gsmtap_util.c
index b64c7b0..6c36b28 100644
--- a/src/core/gsmtap_util.c
+++ b/src/core/gsmtap_util.c
@@ -38,6 +38,7 @@
 #include <stdio.h>
 #include <unistd.h>
 #include <stdint.h>
+#include <stdbool.h>
 #include <string.h>
 #include <errno.h>

@@ -85,6 +86,12 @@
        return gti->wq.bfd.fd;
 }

+/*! determine whether the gsmtap_inst is in osmo_io mode or not. */
+bool gsmtap_inst_get_osmo_io_mode(const struct gsmtap_inst *gti)
+{
+       return gti->osmo_io_mode;
+}
+
 /*! convert RSL channel number to GSMTAP channel type
  *  \param[in] rsl_chantype RSL channel type
  *  \param[in] link_id RSL link identifier
diff --git a/src/core/libosmocore.map b/src/core/libosmocore.map
index 072efee..bdbfe07 100644
--- a/src/core/libosmocore.map
+++ b/src/core/libosmocore.map
@@ -41,6 +41,7 @@
 gsmtap_gsm_channel_names;
 gsmtap_inst_fd;
 gsmtap_inst_fd2;
+gsmtap_inst_get_osmo_io_mode;
 gsmtap_makemsg;
 gsmtap_makemsg_ex;
 gsmtap_send;
diff --git a/src/vty/logging_vty.c b/src/vty/logging_vty.c
index 2a07422..bfe73bb 100644
--- a/src/vty/logging_vty.c
+++ b/src/vty/logging_vty.c
@@ -29,6 +29,7 @@
 #include <osmocom/core/strrb.h>
 #include <osmocom/core/loggingrb.h>
 #include <osmocom/core/gsmtap.h>
+#include <osmocom/core/gsmtap_util.h>
 #include <osmocom/core/application.h>

 #include <osmocom/vty/command.h>
@@ -803,18 +804,24 @@
 }

 DEFUN(cfg_log_gsmtap, cfg_log_gsmtap_cmd,
-       "log gsmtap [HOSTNAME]",
+       "log gsmtap [HOSTNAME] [sync-io]",
        LOG_STR "Logging via GSMTAP\n"
        "Host name to send the GSMTAP logging to (UDP port 4729)\n")
 {
-       const char *hostname = argc ? argv[0] : "127.0.0.1";
+       const char *hostname = "127.0.0.1";
+       bool async_io = true;
        struct log_target *tgt;

+       if (argc >= 1)
+               hostname = argv[0];
+       if (argc >= 2 && !strcmp(argv[1], "sync-io"))
+               async_io = false;
+
        log_tgt_mutex_lock();
        tgt = log_target_find(LOG_TGT_TYPE_GSMTAP, hostname);
        if (!tgt) {
                tgt = log_target_create_gsmtap(hostname, GSMTAP_UDP_PORT,
-                                              host.app_info->name, false,
+                                              host.app_info->name, async_io,
                                               true);
                if (!tgt) {
                        vty_out(vty, "%% Unable to create GSMTAP log for %s%s",
@@ -1032,8 +1039,9 @@
                        log_target_rb_avail_size(tgt), VTY_NEWLINE);
                break;
        case LOG_TGT_TYPE_GSMTAP:
-               vty_out(vty, "log gsmtap %s%s",
-                       tgt->tgt_gsmtap.hostname, VTY_NEWLINE);
+               vty_out(vty, "log gsmtap %s%s%s", tgt->tgt_gsmtap.hostname,
+                       
gsmtap_inst_get_osmo_io_mode(tgt->tgt_gsmtap.gsmtap_inst) ? "" : " sync-io",
+                       VTY_NEWLINE);
                break;
        case LOG_TGT_TYPE_SYSTEMD:
                vty_out(vty, "log systemd-journal%s%s",

--
To view, visit https://gerrit.osmocom.org/c/libosmocore/+/36362?usp=email
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: libosmocore
Gerrit-Branch: master
Gerrit-Change-Id: I69d7eca7d50666b4fcfe73a1dc03f8e8491b32fc
Gerrit-Change-Number: 36362
Gerrit-PatchSet: 1
Gerrit-Owner: laforge <lafo...@osmocom.org>
Gerrit-MessageType: newchange

Reply via email to