<p>laforge <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-e1d/+/21783">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Jenkins Builder: Verified
  laforge: Looks good to me, approved
  tnt: Looks good to me, but someone else must approve

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Add per-line rate counter group to count various errors<br><br>Change-Id: I766b717843d7cd8ac00d4ce18c38773ac50ec3e6<br>---<br>M src/e1d.h<br>M src/intf_line.c<br>M src/usb.c<br>M src/vty.c<br>4 files changed, 46 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/e1d.h b/src/e1d.h</span><br><span>index a7ba005..e5b541b 100644</span><br><span>--- a/src/e1d.h</span><br><span>+++ b/src/e1d.h</span><br><span>@@ -26,7 +26,17 @@</span><br><span> </span><br><span> #include <osmocom/core/isdnhdlc.h></span><br><span> #include <osmocom/core/linuxlist.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/core/rate_ctr.h></span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+#define line_ctr_add(line, idx, add) rate_ctr_add(&(line)->ctrs->ctr[idx], add)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+enum e1d_line_ctr {</span><br><span style="color: hsl(120, 100%, 40%);">+ LINE_CTR_LOS,</span><br><span style="color: hsl(120, 100%, 40%);">+ LINE_CTR_LOA,</span><br><span style="color: hsl(120, 100%, 40%);">+ LINE_CTR_CRC_ERR,</span><br><span style="color: hsl(120, 100%, 40%);">+     LINE_CTR_RX_OVFL,</span><br><span style="color: hsl(120, 100%, 40%);">+     LINE_CTR_TX_UNFL,</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span> </span><br><span> enum e1_ts_mode {</span><br><span>       E1_TS_MODE_OFF = 0,</span><br><span>@@ -81,6 +91,7 @@</span><br><span>      enum e1_line_mode mode;</span><br><span> </span><br><span>  void *drv_data;</span><br><span style="color: hsl(120, 100%, 40%);">+       struct rate_ctr_group *ctrs;</span><br><span> </span><br><span>     /* timeslots for channelized mode */</span><br><span>         struct e1_ts ts[32];</span><br><span>diff --git a/src/intf_line.c b/src/intf_line.c</span><br><span>index 5fd82b7..2ed9e66 100644</span><br><span>--- a/src/intf_line.c</span><br><span>+++ b/src/intf_line.c</span><br><span>@@ -33,6 +33,8 @@</span><br><span> </span><br><span> #include <osmocom/core/isdnhdlc.h></span><br><span> #include <osmocom/core/utils.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/core/stats.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/core/rate_ctr.h></span><br><span> #include <osmocom/e1d/proto.h></span><br><span> </span><br><span> #include "e1d.h"</span><br><span>@@ -44,6 +46,22 @@</span><br><span>   { 0, NULL }</span><br><span> };</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+static const struct rate_ctr_desc line_ctr_description[] = {</span><br><span style="color: hsl(120, 100%, 40%);">+   [LINE_CTR_LOS] =        { "rx:signal_lost",           "Rx Signal Lost" },</span><br><span style="color: hsl(120, 100%, 40%);">+ [LINE_CTR_LOA] =        { "rx:alignment_lost",                "Rx Alignment Lost" },</span><br><span style="color: hsl(120, 100%, 40%);">+      [LINE_CTR_CRC_ERR] =    { "rx:crc_errors",            "E1 Rx CRC Errors" },</span><br><span style="color: hsl(120, 100%, 40%);">+       [LINE_CTR_RX_OVFL] =    { "rx:overflow",              "E1 Rx Overflow" },</span><br><span style="color: hsl(120, 100%, 40%);">+ [LINE_CTR_TX_UNFL] =    { "tx:underflow",             "E1 Tx Underflow" },</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 rate_ctr_group_desc line_ctrg_desc = {</span><br><span style="color: hsl(120, 100%, 40%);">+      .group_name_prefix = "e1d_line",</span><br><span style="color: hsl(120, 100%, 40%);">+    .group_description = "Counters for each line in e1d",</span><br><span style="color: hsl(120, 100%, 40%);">+       .class_id = OSMO_STATS_CLASS_GLOBAL,</span><br><span style="color: hsl(120, 100%, 40%);">+  .num_ctr = ARRAY_SIZE(line_ctr_description),</span><br><span style="color: hsl(120, 100%, 40%);">+  .ctr_desc = line_ctr_description,</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> // ---------------------------------------------------------------------------</span><br><span> // e1d structures</span><br><span> // ---------------------------------------------------------------------------</span><br><span>@@ -122,6 +140,9 @@</span><br><span>               line->id = l->id + 1;</span><br><span>  }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ line->ctrs = rate_ctr_group_alloc(line, &line_ctrg_desc, line->id);</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_ASSERT(line->ctrs);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>        llist_add_tail(&line->list, &intf->lines);</span><br><span> </span><br><span>         LOGPLI(line, DE1D, LOGL_NOTICE, "Created\n");</span><br><span>diff --git a/src/usb.c b/src/usb.c</span><br><span>index 35d47ec..fcd4000 100644</span><br><span>--- a/src/usb.c</span><br><span>+++ b/src/usb.c</span><br><span>@@ -287,6 +287,12 @@</span><br><span> </span><br><span> static int resubmit_irq(struct e1_line *line);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* compute how much advanced 'cur' is copared to 'prev', in modulo-0xffff for wraps */</span><br><span style="color: hsl(120, 100%, 40%);">+static uint32_t delta_mod_u16(uint32_t cur, uint32_t prev)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+      return ((cur + 0xffff) - prev) % 0xffff;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> static void rx_interrupt_errcnt(struct e1_line *line, const struct ice1usb_irq_err *errcnt)</span><br><span> {</span><br><span>    struct e1_usb_line_data *ld = (struct e1_usb_line_data *) line->drv_data;</span><br><span>@@ -295,21 +301,25 @@</span><br><span>         if (errcnt->crc != last->crc) {</span><br><span>                LOGPLI(line, DE1D, LOGL_ERROR, "CRC error count %d (was %d)\n",</span><br><span>                    errcnt->crc, last->crc);</span><br><span style="color: hsl(120, 100%, 40%);">+                line_ctr_add(line, LINE_CTR_CRC_ERR, delta_mod_u16(errcnt->crc, last->crc));</span><br><span>   }</span><br><span> </span><br><span>        if (errcnt->align != last->align) {</span><br><span>            LOGPLI(line, DE1D, LOGL_ERROR, "ALIGNMENT error count %d (was %d)\n",</span><br><span>                      errcnt->align, last->align);</span><br><span style="color: hsl(120, 100%, 40%);">+            line_ctr_add(line, LINE_CTR_LOA, delta_mod_u16(errcnt->align, last->align));</span><br><span>   }</span><br><span> </span><br><span>        if (errcnt->ovfl != last->ovfl) {</span><br><span>              LOGPLI(line, DE1D, LOGL_ERROR, "OVERFLOW error count %d (was %d)\n",</span><br><span>                       errcnt->ovfl, last->ovfl);</span><br><span style="color: hsl(120, 100%, 40%);">+              line_ctr_add(line, LINE_CTR_RX_OVFL, delta_mod_u16(errcnt->ovfl, last->ovfl));</span><br><span>         }</span><br><span> </span><br><span>        if (errcnt->unfl != last->unfl) {</span><br><span>              LOGPLI(line, DE1D, LOGL_ERROR, "UNDERFLOW error count %d (was %d)\n",</span><br><span>                      errcnt->unfl, last->unfl);</span><br><span style="color: hsl(120, 100%, 40%);">+              line_ctr_add(line, LINE_CTR_TX_UNFL, delta_mod_u16(errcnt->unfl, last->unfl));</span><br><span>         }</span><br><span> </span><br><span>        if ((errcnt->flags & ICE1USB_ERR_F_ALIGN_ERR) != (last->flags & ICE1USB_ERR_F_ALIGN_ERR)) {</span><br><span>@@ -320,6 +330,8 @@</span><br><span>      if ((errcnt->flags & ICE1USB_ERR_F_TICK_ERR) != (last->flags & ICE1USB_ERR_F_TICK_ERR)) {</span><br><span>              LOGPLI(line, DE1D, LOGL_ERROR, "Rx Clock %s\n",</span><br><span>                    errcnt->flags & ICE1USB_ERR_F_TICK_ERR ? "LOST" : "REGAINED");</span><br><span style="color: hsl(120, 100%, 40%);">+             if (errcnt->flags & ICE1USB_ERR_F_TICK_ERR)</span><br><span style="color: hsl(120, 100%, 40%);">+                    line_ctr_add(line, LINE_CTR_LOS, 1);</span><br><span>         }</span><br><span> </span><br><span>        ld->irq.last_errcnt = *errcnt;</span><br><span>diff --git a/src/vty.c b/src/vty.c</span><br><span>index d4d26ef..cc45773 100644</span><br><span>--- a/src/vty.c</span><br><span>+++ b/src/vty.c</span><br><span>@@ -125,6 +125,8 @@</span><br><span>     vty_out(vty, " SC: Mode %s, FD %d, Peer PID %d%s",</span><br><span>                 get_value_string(e1_ts_mode_names, line->superchan.mode),</span><br><span>                 line->superchan.fd, get_remote_pid(line->superchan.fd), VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ vty_out_rate_ctr_group(vty, " ", line->ctrs);</span><br><span> }</span><br><span> </span><br><span> DEFUN(show_line, show_line_cmd, "show line [<0-255>]",</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-e1d/+/21783">change 21783</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-e1d/+/21783"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-e1d </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I766b717843d7cd8ac00d4ce18c38773ac50ec3e6 </div>
<div style="display:none"> Gerrit-Change-Number: 21783 </div>
<div style="display:none"> Gerrit-PatchSet: 5 </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: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: tnt <tnt@246tNt.com> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>