<p>laforge <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/libosmocore/+/22569">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Jenkins Builder: Verified
  lynxis lazus: Looks good to me, approved

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">ns2: Introduce a per-bind stat_item group with backlog length<br><br>The backlog length indicates the instantaneous length of the backlog.<br><br>Change-Id: I1c55b4619b1221d7e607ace58649323407faf86b<br>---<br>M src/gb/gprs_ns2.c<br>M src/gb/gprs_ns2_fr.c<br>M src/gb/gprs_ns2_internal.h<br>M src/gb/gprs_ns2_vty.c<br>4 files changed, 37 insertions(+), 1 deletion(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/gb/gprs_ns2.c b/src/gb/gprs_ns2.c</span><br><span>index 9c9da79..1f7525e 100644</span><br><span>--- a/src/gb/gprs_ns2.c</span><br><span>+++ b/src/gb/gprs_ns2.c</span><br><span>@@ -198,6 +198,18 @@</span><br><span>   .class_id = OSMO_STATS_CLASS_PEER,</span><br><span> };</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+const struct osmo_stat_item_desc nsbind_stat_description[] = {</span><br><span style="color: hsl(120, 100%, 40%);">+  [NS2_BIND_STAT_BACKLOG_LEN] = { "tx_backlog_length",  "Transmit backlog length", "packets", 16, 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%);">+static const struct osmo_stat_item_group_desc nsbind_statg_desc = {</span><br><span style="color: hsl(120, 100%, 40%);">+ .group_name_prefix = "ns.bind",</span><br><span style="color: hsl(120, 100%, 40%);">+     .group_description = "NS Bind Statistics",</span><br><span style="color: hsl(120, 100%, 40%);">+  .num_items = ARRAY_SIZE(nsbind_stat_description),</span><br><span style="color: hsl(120, 100%, 40%);">+     .item_desc = nsbind_stat_description,</span><br><span style="color: hsl(120, 100%, 40%);">+ .class_id = OSMO_STATS_CLASS_PEER,</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> const struct value_string gprs_ns2_aff_cause_prim_strs[] = {</span><br><span>     { GPRS_NS2_AFF_CAUSE_VC_FAILURE,        "NSVC failure" },</span><br><span>  { GPRS_NS2_AFF_CAUSE_VC_RECOVERY,       "NSVC recovery" },</span><br><span>@@ -1245,6 +1257,7 @@</span><br><span>                 bind->driver->free_bind(bind);</span><br><span> </span><br><span>     llist_del(&bind->list);</span><br><span style="color: hsl(120, 100%, 40%);">+        osmo_stat_item_group_free(bind->statg);</span><br><span>   talloc_free((char *)bind->name);</span><br><span>  talloc_free(bind);</span><br><span> }</span><br><span>@@ -1375,10 +1388,18 @@</span><br><span>            return -ENOMEM;</span><br><span>      }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ bind->statg = osmo_stat_item_group_alloc(bind, &nsbind_statg_desc, nsi->bind_rate_ctr_idx);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (!bind->statg) {</span><br><span style="color: hsl(120, 100%, 40%);">+                talloc_free(bind);</span><br><span style="color: hsl(120, 100%, 40%);">+            return -ENOMEM;</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>  bind->nsi = nsi;</span><br><span>  INIT_LLIST_HEAD(&bind->nsvc);</span><br><span>         llist_add(&bind->list, &nsi->binding);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+      nsi->bind_rate_ctr_idx++;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>       if (result)</span><br><span>          *result = bind;</span><br><span> </span><br><span>diff --git a/src/gb/gprs_ns2_fr.c b/src/gb/gprs_ns2_fr.c</span><br><span>index c32bce8..49e92ae 100644</span><br><span>--- a/src/gb/gprs_ns2_fr.c</span><br><span>+++ b/src/gb/gprs_ns2_fr.c</span><br><span>@@ -47,6 +47,7 @@</span><br><span> </span><br><span> #include <osmocom/gprs/frame_relay.h></span><br><span> #include <osmocom/core/byteswap.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/core/stat_item.h></span><br><span> #include <osmocom/core/logging.h></span><br><span> #include <osmocom/core/msgb.h></span><br><span> #include <osmocom/core/select.h></span><br><span>@@ -327,6 +328,7 @@</span><br><span> {</span><br><span>       struct priv_bind *priv = bind->priv;</span><br><span>      llist_add(&msg->list, &priv->backlog.list);</span><br><span style="color: hsl(120, 100%, 40%);">+     osmo_stat_item_inc(bind->statg->items[NS2_BIND_STAT_BACKLOG_LEN], 1);</span><br><span>  osmo_timer_schedule(&priv->backlog.timer, 0, priv->backlog.retry_us);</span><br><span> }</span><br><span> </span><br><span>@@ -334,6 +336,7 @@</span><br><span> {</span><br><span>  struct priv_bind *priv = bind->priv;</span><br><span>      llist_add_tail(&msg->list, &priv->backlog.list);</span><br><span style="color: hsl(120, 100%, 40%);">+        osmo_stat_item_inc(bind->statg->items[NS2_BIND_STAT_BACKLOG_LEN], 1);</span><br><span>  osmo_timer_schedule(&priv->backlog.timer, 0, priv->backlog.retry_us);</span><br><span> }</span><br><span> </span><br><span>@@ -402,6 +405,7 @@</span><br><span>                       llist_add(&msg->list, &priv->backlog.list);</span><br><span>                    break;</span><br><span>               }</span><br><span style="color: hsl(120, 100%, 40%);">+             osmo_stat_item_dec(bind->statg->items[NS2_BIND_STAT_BACKLOG_LEN], 1);</span><br><span>  }</span><br><span> </span><br><span>        /* re-start timer if we still have data in the queue */</span><br><span>diff --git a/src/gb/gprs_ns2_internal.h b/src/gb/gprs_ns2_internal.h</span><br><span>index f3c68f5..6462907 100644</span><br><span>--- a/src/gb/gprs_ns2_internal.h</span><br><span>+++ b/src/gb/gprs_ns2_internal.h</span><br><span>@@ -72,10 +72,14 @@</span><br><span>   _NSVC_TIMER_NR,</span><br><span> };</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-enum ns_stat {</span><br><span style="color: hsl(120, 100%, 40%);">+enum ns2_vc_stat {</span><br><span>  NS_STAT_ALIVE_DELAY,</span><br><span> };</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+enum ns2_bind_stat {</span><br><span style="color: hsl(120, 100%, 40%);">+  NS2_BIND_STAT_BACKLOG_LEN,</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /*! Osmocom NS2 VC create status */</span><br><span> enum ns2_cs {</span><br><span>     NS2_CS_CREATED,     /*!< A NSVC object has been created */</span><br><span>@@ -129,6 +133,7 @@</span><br><span> </span><br><span>      /*! workaround for rate counter until rate counter accepts char str as index */</span><br><span>      uint32_t nsvc_rate_ctr_idx;</span><br><span style="color: hsl(120, 100%, 40%);">+   uint32_t bind_rate_ctr_idx;</span><br><span> </span><br><span>      /*! libmnl netlink socket for link state monitoring */</span><br><span>       struct osmo_mnl *linkmon_mnl;</span><br><span>@@ -251,6 +256,8 @@</span><br><span>  /*! allow to show information for the vty */</span><br><span>         void (*dump_vty)(const struct gprs_ns2_vc_bind *bind,</span><br><span>                         struct vty *vty, bool stats);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      struct osmo_stat_item_group *statg;</span><br><span> };</span><br><span> </span><br><span> struct gprs_ns2_vc_driver {</span><br><span>diff --git a/src/gb/gprs_ns2_vty.c b/src/gb/gprs_ns2_vty.c</span><br><span>index c2b9bd9..5d0f5c0 100644</span><br><span>--- a/src/gb/gprs_ns2_vty.c</span><br><span>+++ b/src/gb/gprs_ns2_vty.c</span><br><span>@@ -1374,6 +1374,10 @@</span><br><span> {</span><br><span>  if (bind->dump_vty)</span><br><span>               bind->dump_vty(bind, vty, stats);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        if (stats) {</span><br><span style="color: hsl(120, 100%, 40%);">+          vty_out_stat_item_group(vty, "  ", bind->statg);</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span> }</span><br><span> </span><br><span> static void dump_ns_bind(struct vty *vty, const struct gprs_ns2_inst *nsi, bool stats)</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/libosmocore/+/22569">change 22569</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/libosmocore/+/22569"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: libosmocore </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I1c55b4619b1221d7e607ace58649323407faf86b </div>
<div style="display:none"> Gerrit-Change-Number: 22569 </div>
<div style="display:none"> Gerrit-PatchSet: 3 </div>
<div style="display:none"> Gerrit-Owner: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: daniel <dwillmann@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: lynxis lazus <lynxis@fe80.eu> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>