fixeria has submitted this change. (
https://gerrit.osmocom.org/c/libosmocore/+/26708 )
Change subject: VTY: implement 'no log gsmtap [HOSTNAME]' command
......................................................................
VTY: implement 'no log gsmtap [HOSTNAME]' command
Change-Id: I9a4efa1e35cbc22cea06a64a15a369522c32d3c4
---
M include/osmocom/core/gsmtap_util.h
M src/gsmtap_util.c
M src/logging.c
M src/vty/logging_vty.c
4 files changed, 43 insertions(+), 0 deletions(-)
Approvals:
laforge: Looks good to me, approved
pespin: Looks good to me, but someone else must approve
Jenkins Builder: Verified
diff --git a/include/osmocom/core/gsmtap_util.h b/include/osmocom/core/gsmtap_util.h
index 1cc8d75..33ade95 100644
--- a/include/osmocom/core/gsmtap_util.h
+++ b/include/osmocom/core/gsmtap_util.h
@@ -44,6 +44,7 @@
struct gsmtap_inst *gsmtap_source_init(const char *host, uint16_t port,
int ofd_wq_mode);
+void gsmtap_source_free(struct gsmtap_inst *gti);
int gsmtap_source_add_sink(struct gsmtap_inst *gti);
diff --git a/src/gsmtap_util.c b/src/gsmtap_util.c
index 671a6c3..2571b85 100644
--- a/src/gsmtap_util.c
+++ b/src/gsmtap_util.c
@@ -486,6 +486,22 @@
return gti;
}
+void gsmtap_source_free(struct gsmtap_inst *gti)
+{
+ if (gti->ofd_wq_mode) {
+ osmo_fd_unregister(>i->wq.bfd);
+ osmo_wqueue_clear(>i->wq);
+
+ if (gti->sink_ofd.fd != -1) {
+ osmo_fd_unregister(>i->sink_ofd);
+ close(gti->sink_ofd.fd);
+ }
+ }
+
+ close(gti->wq.bfd.fd);
+ talloc_free(gti);
+}
+
#endif /* HAVE_SYS_SOCKET_H */
const struct value_string gsmtap_gsm_channel_names[] = {
diff --git a/src/logging.c b/src/logging.c
index 24b5553..7f6dbb5 100644
--- a/src/logging.c
+++ b/src/logging.c
@@ -67,6 +67,7 @@
#include <osmocom/core/thread.h>
#include <osmocom/core/select.h>
#include <osmocom/core/write_queue.h>
+#include <osmocom/core/gsmtap_util.h>
#include <osmocom/vty/logging.h> /* for LOGGING_STR. */
@@ -1313,6 +1314,9 @@
talloc_free((void *)target->tgt_file.fname);
target->tgt_file.fname = NULL;
break;
+ case LOG_TGT_TYPE_GSMTAP:
+ gsmtap_source_free(target->tgt_gsmtap.gsmtap_inst);
+ break;
#ifdef HAVE_SYSLOG_H
case LOG_TGT_TYPE_SYSLOG:
closelog();
diff --git a/src/vty/logging_vty.c b/src/vty/logging_vty.c
index 4e5725b..c83dafd 100644
--- a/src/vty/logging_vty.c
+++ b/src/vty/logging_vty.c
@@ -830,6 +830,27 @@
RET_WITH_UNLOCK(CMD_SUCCESS);
}
+DEFUN(cfg_no_log_gsmtap, cfg_no_log_gsmtap_cmd,
+ "no log gsmtap [HOSTNAME]",
+ NO_STR 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";
+ struct log_target *tgt;
+
+ log_tgt_mutex_lock();
+ tgt = log_target_find(LOG_TGT_TYPE_GSMTAP, hostname);
+ if (tgt == NULL) {
+ vty_out(vty, "%% Unable to find GSMTAP log target for %s%s",
+ hostname, VTY_NEWLINE);
+ RET_WITH_UNLOCK(CMD_WARNING);
+ }
+
+ log_target_destroy(tgt);
+
+ RET_WITH_UNLOCK(CMD_SUCCESS);
+}
+
DEFUN(cfg_log_stderr, cfg_log_stderr_cmd,
"log stderr [blocking-io]",
LOG_STR "Logging via STDERR of the process\n"
@@ -1245,4 +1266,5 @@
install_lib_element(CONFIG_NODE, &cfg_log_systemd_journal_cmd);
install_lib_element(CONFIG_NODE, &cfg_no_log_systemd_journal_cmd);
install_lib_element(CONFIG_NODE, &cfg_log_gsmtap_cmd);
+ install_lib_element(CONFIG_NODE, &cfg_no_log_gsmtap_cmd);
}
--
To view, visit
https://gerrit.osmocom.org/c/libosmocore/+/26708
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings
Gerrit-Project: libosmocore
Gerrit-Branch: master
Gerrit-Change-Id: I9a4efa1e35cbc22cea06a64a15a369522c32d3c4
Gerrit-Change-Number: 26708
Gerrit-PatchSet: 2
Gerrit-Owner: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-Reviewer: laforge <laforge(a)osmocom.org>
Gerrit-Reviewer: pespin <pespin(a)sysmocom.de>
Gerrit-MessageType: merged