<p>osmith has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-bts/+/15539">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">vty: add "logging filter sapi" command<br><br>Set the PCU interface data as log context, and add VTY commands to<br>filter by SAPI. Allow to filter by multiple SAPIs by running the filter<br>command multiple times:<br><br>OsmoBTS> logging filter sapi agch<br>OsmoBTS> logging filter sapi pch<br><br>Related: OS#2356<br>Test: (osmo-ttcn3-hacks) I8c7f113eae7a93c6d4943cac9e3f49f153b323b1<br>Depends: (libosmocore) I814cb3328d99faca9220adb5a80ffb934f219d7d<br>Change-Id: I6b7bb2e1d61502b61214f854a4ec5cbb7267545b<br>---<br>M src/common/logging.c<br>M src/common/pcu_sock.c<br>M src/common/vty.c<br>3 files changed, 87 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-bts refs/changes/39/15539/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/common/logging.c b/src/common/logging.c</span><br><span>index 3315a01..ace0341 100644</span><br><span>--- a/src/common/logging.c</span><br><span>+++ b/src/common/logging.c</span><br><span>@@ -29,6 +29,7 @@</span><br><span> </span><br><span> #include <osmo-bts/bts.h></span><br><span> #include <osmo-bts/logging.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmo-bts/pcuif_proto.h></span><br><span> </span><br><span> static struct log_info_cat bts_log_info_cat[] = {</span><br><span>        [DRSL] = {</span><br><span>@@ -144,7 +145,21 @@</span><br><span>    },</span><br><span> };</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+static int filter_fn(const struct log_context *ctx, struct log_target *tgt)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+  const struct gsm_pcu_if_data *pcu_if_data = ctx->ctx[LOG_CTX_PCU_IF_DATA];</span><br><span style="color: hsl(120, 100%, 40%);">+ uint16_t *sapi_mask = tgt->filter_data[LOG_FLT_SAPI];</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    if ((tgt->filter_map & (1 << LOG_FLT_SAPI)) != 0</span><br><span style="color: hsl(120, 100%, 40%);">+     && sapi_mask && pcu_if_data</span><br><span style="color: hsl(120, 100%, 40%);">+           && (*sapi_mask & (1 << pcu_if_data->sapi)) == 0)</span><br><span style="color: hsl(120, 100%, 40%);">+             return 0;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   return 1;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> const struct log_info bts_log_info = {</span><br><span style="color: hsl(120, 100%, 40%);">+      .filter_fn = filter_fn,</span><br><span>      .cat = bts_log_info_cat,</span><br><span>     .num_cat = ARRAY_SIZE(bts_log_info_cat),</span><br><span> };</span><br><span>diff --git a/src/common/pcu_sock.c b/src/common/pcu_sock.c</span><br><span>index ba9e172..7125b01 100644</span><br><span>--- a/src/common/pcu_sock.c</span><br><span>+++ b/src/common/pcu_sock.c</span><br><span>@@ -336,6 +336,7 @@</span><br><span>        rts_req->ts_nr = ts->nr;</span><br><span>       rts_req->block_nr = block_nr;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+  log_set_context(LOG_CTX_PCU_IF_DATA, (void *)rts_req);</span><br><span>       return pcu_sock_send(&bts_gsmnet, msg);</span><br><span> }</span><br><span> </span><br><span>@@ -376,6 +377,7 @@</span><br><span>   memcpy(data_ind->data, data, len);</span><br><span>        data_ind->len = len;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+   log_set_context(LOG_CTX_PCU_IF_DATA, (void *)data_ind);</span><br><span>      return pcu_sock_send(&bts_gsmnet, msg);</span><br><span> }</span><br><span> </span><br><span>@@ -402,6 +404,7 @@</span><br><span>   rach_ind->is_11bit = is_11bit;</span><br><span>    rach_ind->burst_type = burst_type;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+     log_set_context(LOG_CTX_PCU_IF_DATA, (void *)rach_ind);</span><br><span>      return pcu_sock_send(&bts_gsmnet, msg);</span><br><span> }</span><br><span> </span><br><span>@@ -484,6 +487,7 @@</span><br><span>   memcpy(data_cnf->data, data, len);</span><br><span>        data_cnf->len = len;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+   log_set_context(LOG_CTX_PCU_IF_DATA, (void *)data_cnf);</span><br><span>      return pcu_sock_send(&bts_gsmnet, msg);</span><br><span> }</span><br><span> </span><br><span>@@ -513,6 +517,7 @@</span><br><span>   struct msgb *msg;</span><br><span>    int rc = 0;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+       log_set_context(LOG_CTX_PCU_IF_DATA, (void *)data_req);</span><br><span>      LOGP(DPCU, LOGL_DEBUG, "Data request received: sapi=%s arfcn=%d "</span><br><span>          "block=%d data=%s\n", sapi_string[data_req->sapi],</span><br><span>              data_req->arfcn, data_req->block_nr,</span><br><span>diff --git a/src/common/vty.c b/src/common/vty.c</span><br><span>index 801f34c..e99c889 100644</span><br><span>--- a/src/common/vty.c</span><br><span>+++ b/src/common/vty.c</span><br><span>@@ -1600,6 +1600,71 @@</span><br><span>     return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#define SAPI_STR "Filter log messages by SAPI\n"</span><br><span style="color: hsl(120, 100%, 40%);">+#define SAPI_ARG_STR "SAPI to be used as filter\n"</span><br><span style="color: hsl(120, 100%, 40%);">+#define SAPI_CMD_STR "logging filter sapi (rach|agch|pch|bcch|pdtch|prach|ptcch|agch_dt)"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+uint16_t parse_sapi_str(const char *sapi) {</span><br><span style="color: hsl(120, 100%, 40%);">+  if (!strcmp(sapi, "rach"))</span><br><span style="color: hsl(120, 100%, 40%);">+          return PCU_IF_SAPI_RACH;</span><br><span style="color: hsl(120, 100%, 40%);">+      else if (!strcmp(sapi, "agch"))</span><br><span style="color: hsl(120, 100%, 40%);">+             return PCU_IF_SAPI_AGCH;</span><br><span style="color: hsl(120, 100%, 40%);">+      else if (!strcmp(sapi, "pch"))</span><br><span style="color: hsl(120, 100%, 40%);">+              return PCU_IF_SAPI_PCH;</span><br><span style="color: hsl(120, 100%, 40%);">+       else if (!strcmp(sapi, "bcch"))</span><br><span style="color: hsl(120, 100%, 40%);">+             return PCU_IF_SAPI_BCCH;</span><br><span style="color: hsl(120, 100%, 40%);">+      else if (!strcmp(sapi, "pdtch"))</span><br><span style="color: hsl(120, 100%, 40%);">+            return PCU_IF_SAPI_PDTCH;</span><br><span style="color: hsl(120, 100%, 40%);">+     else if (!strcmp(sapi, "prach"))</span><br><span style="color: hsl(120, 100%, 40%);">+            return PCU_IF_SAPI_PRACH;</span><br><span style="color: hsl(120, 100%, 40%);">+     else if (!strcmp(sapi, "ptcch"))</span><br><span style="color: hsl(120, 100%, 40%);">+            return PCU_IF_SAPI_PTCCH;</span><br><span style="color: hsl(120, 100%, 40%);">+     else if (!strcmp(sapi, "agch_dt"))</span><br><span style="color: hsl(120, 100%, 40%);">+          return PCU_IF_SAPI_AGCH_DT;</span><br><span style="color: hsl(120, 100%, 40%);">+   return 0;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN(logging_fltr_sapi,</span><br><span style="color: hsl(120, 100%, 40%);">+      logging_fltr_sapi_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+      SAPI_CMD_STR,</span><br><span style="color: hsl(120, 100%, 40%);">+      LOGGING_STR FILTER_STR SAPI_STR SAPI_ARG_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+   struct log_target *tgt = osmo_log_vty2tgt(vty);</span><br><span style="color: hsl(120, 100%, 40%);">+       uint16_t **sapi_mask;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       if (!tgt)</span><br><span style="color: hsl(120, 100%, 40%);">+             return CMD_WARNING;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ sapi_mask = (uint16_t **)&tgt->filter_data[LOG_FLT_SAPI];</span><br><span style="color: hsl(120, 100%, 40%);">+      if (!*sapi_mask)</span><br><span style="color: hsl(120, 100%, 40%);">+              *sapi_mask = talloc(tgt, uint16_t);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ **sapi_mask |= (1 << parse_sapi_str(argv[0]));</span><br><span style="color: hsl(120, 100%, 40%);">+  tgt->filter_map |= (1 << LOG_FLT_SAPI);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    return CMD_SUCCESS;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN(no_logging_fltr_sapi,</span><br><span style="color: hsl(120, 100%, 40%);">+      no_logging_fltr_sapi_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+      "no " SAPI_CMD_STR,</span><br><span style="color: hsl(120, 100%, 40%);">+      NO_STR LOGGING_STR FILTER_STR SAPI_STR SAPI_ARG_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+    struct log_target *tgt = osmo_log_vty2tgt(vty);</span><br><span style="color: hsl(120, 100%, 40%);">+       uint16_t *sapi_mask;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        if (!tgt)</span><br><span style="color: hsl(120, 100%, 40%);">+             return CMD_WARNING;</span><br><span style="color: hsl(120, 100%, 40%);">+   if (!tgt->filter_data[LOG_FLT_SAPI])</span><br><span style="color: hsl(120, 100%, 40%);">+               return CMD_SUCCESS;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ sapi_mask = (uint16_t *)tgt->filter_data[LOG_FLT_SAPI];</span><br><span style="color: hsl(120, 100%, 40%);">+    *sapi_mask &= ~(1 << parse_sapi_str(argv[0]));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    return CMD_SUCCESS;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> int bts_vty_init(struct gsm_bts *bts)</span><br><span> {</span><br><span>       cfg_trx_gsmtap_sapi_cmd.string = vty_cmd_string_from_valstr(bts, gsmtap_sapi_names,</span><br><span>@@ -1621,6 +1686,8 @@</span><br><span>  install_element_ve(&show_ts_cmd);</span><br><span>        install_element_ve(&show_lchan_cmd);</span><br><span>     install_element_ve(&show_lchan_summary_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+      install_element_ve(&logging_fltr_sapi_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+       install_element_ve(&no_logging_fltr_sapi_cmd);</span><br><span> </span><br><span>       logging_vty_add_cmds();</span><br><span>      osmo_talloc_vty_add_cmds();</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-bts/+/15539">change 15539</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/osmo-bts/+/15539"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-bts </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I6b7bb2e1d61502b61214f854a4ec5cbb7267545b </div>
<div style="display:none"> Gerrit-Change-Number: 15539 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: osmith <osmith@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>