fixeria has uploaded this change for review.
logging: change gsmtap target to use wqueue by default
In b72867f0 ("logging: Change stderr + file target to use non-blocking
write") the `stderr` and `file` targets were changed to use the write
queue in order to avoid blocking. Do the same for the `gsmtap` logging
target, which can also be blocking under some circumstances.
Change-Id: I9d8c953a5b467ce4396d2d20ca6fa72a749723c0
Related: OS#6794, OS#4311
---
M include/osmocom/core/logging.h
M src/core/logging_gsmtap.c
M src/vty/logging_vty.c
3 files changed, 14 insertions(+), 5 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/85/41685/1
diff --git a/include/osmocom/core/logging.h b/include/osmocom/core/logging.h
index 9d4f1fb..de493a7 100644
--- a/include/osmocom/core/logging.h
+++ b/include/osmocom/core/logging.h
@@ -353,6 +353,7 @@
struct gsmtap_inst *gsmtap_inst;
const char *ident;
const char *hostname;
+ bool ofd_wq_mode;
} tgt_gsmtap;
struct {
diff --git a/src/core/logging_gsmtap.c b/src/core/logging_gsmtap.c
index 7775c27..b275ae7 100644
--- a/src/core/logging_gsmtap.c
+++ b/src/core/logging_gsmtap.c
@@ -156,6 +156,7 @@
target->tgt_gsmtap.gsmtap_inst = gti;
target->tgt_gsmtap.ident = talloc_strdup(target, ident);
target->tgt_gsmtap.hostname = talloc_strdup(target, host);
+ target->tgt_gsmtap.ofd_wq_mode = ofd_wq_mode;
target->type = LOG_TGT_TYPE_GSMTAP;
target->raw_output = _gsmtap_raw_output;
diff --git a/src/vty/logging_vty.c b/src/vty/logging_vty.c
index 678ae68..947da49 100644
--- a/src/vty/logging_vty.c
+++ b/src/vty/logging_vty.c
@@ -810,9 +810,10 @@
}
DEFUN(cfg_log_gsmtap, cfg_log_gsmtap_cmd,
- "log gsmtap [HOSTNAME]",
+ "log gsmtap [HOSTNAME] [blocking-io]",
LOG_STR "Logging via GSMTAP\n"
- "Host name to send the GSMTAP logging to (UDP port 4729)\n")
+ "Host name to send the GSMTAP logging to (UDP port 4729)\n"
+ "Use blocking, synchronous I/O\n")
{
const char *hostname = argc ? argv[0] : "127.0.0.1";
struct log_target *tgt;
@@ -820,8 +821,12 @@
log_tgt_mutex_lock();
tgt = log_target_find(LOG_TGT_TYPE_GSMTAP, hostname);
if (!tgt) {
+ bool ofd_wq_mode = true;
+ if (argc > 1 && !strcmp(argv[1], "blocking-io"))
+ ofd_wq_mode = false;
tgt = log_target_create_gsmtap(hostname, GSMTAP_UDP_PORT,
- host.app_info->name, false,
+ host.app_info->name,
+ ofd_wq_mode,
true);
if (!tgt) {
vty_out(vty, "%% Unable to create GSMTAP log for %s%s",
@@ -1039,8 +1044,10 @@
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);
+ if (tgt->tgt_gsmtap.ofd_wq_mode)
+ vty_out(vty, "log gsmtap %s%s", tgt->tgt_gsmtap.hostname, VTY_NEWLINE);
+ else
+ vty_out(vty, "log gsmtap %s blocking-io%s", tgt->tgt_gsmtap.hostname, VTY_NEWLINE);
break;
case LOG_TGT_TYPE_SYSTEMD:
vty_out(vty, "log systemd-journal%s%s",
To view, visit change 41685. To unsubscribe, or for help writing mail filters, visit settings.