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

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">stp: Add basic RX/TX rate counters on AS and ASP level<br><br>This adds some very basic rx/px rate counters to the SS7 AS and ASP<br><br>OsmoSTP> show rate-counters<br>SIGTRAN Application Server 0 (as-rkm-1):<br>             rx:msu:total:      86078 (1888/s 86078/m 0/h 0/d)<br>             tx:msu:total:          0 (0/s 0/m 0/h 0/d)<br>SIGTRAN Application Server Process 0 (asp-dyn-0):<br>         rx:packets:total:      86081 (1888/s 86081/m 0/h 0/d)<br>         tx:packets:total:          5 (0/s 5/m 0/h 0/d)<br><br>Change-Id: Idb811ca81adfe47152d484f6b981e661dc569e15<br>---<br>M include/osmocom/sigtran/osmo_ss7.h<br>M src/ipa.c<br>M src/m3ua.c<br>M src/osmo_ss7.c<br>M src/osmo_ss7_hmrt.c<br>M src/ss7_internal.h<br>M src/sua.c<br>M stp/stp_main.c<br>8 files changed, 83 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/sigtran/osmo_ss7.h b/include/osmocom/sigtran/osmo_ss7.h</span><br><span>index 3d13b6a..1755859 100644</span><br><span>--- a/include/osmocom/sigtran/osmo_ss7.h</span><br><span>+++ b/include/osmocom/sigtran/osmo_ss7.h</span><br><span>@@ -9,6 +9,7 @@</span><br><span> #include <osmocom/core/msgb.h></span><br><span> #include <osmocom/core/prim.h></span><br><span> #include <osmocom/core/socket.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/core/rate_ctr.h></span><br><span> </span><br><span> extern struct llist_head osmo_ss7_instances;</span><br><span> </span><br><span>@@ -310,6 +311,9 @@</span><br><span>      /*! Were we allocated by "simple client" support? */</span><br><span>       bool simple_client_allocated;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+     /*! Rate Counter Group */</span><br><span style="color: hsl(120, 100%, 40%);">+     struct rate_ctr_group *ctrg;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>       struct {</span><br><span>             char *name;</span><br><span>          char *description;</span><br><span>@@ -412,6 +416,9 @@</span><br><span>     /*! Were we allocated by "simple client" support? */</span><br><span>       bool simple_client_allocated;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+     /*! Rate Counter Group */</span><br><span style="color: hsl(120, 100%, 40%);">+     struct rate_ctr_group *ctrg;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>       /*! Pending message for non-blocking IPA read */</span><br><span>     struct msgb *pending_msg;</span><br><span> </span><br><span>diff --git a/src/ipa.c b/src/ipa.c</span><br><span>index 93edef8..5b1eb54 100644</span><br><span>--- a/src/ipa.c</span><br><span>+++ b/src/ipa.c</span><br><span>@@ -47,6 +47,7 @@</span><br><span> #include <osmocom/sigtran/protocol/mtp.h></span><br><span> </span><br><span> #include "xua_internal.h"</span><br><span style="color: hsl(120, 100%, 40%);">+#include "ss7_internal.h"</span><br><span> #include "xua_asp_fsm.h"</span><br><span> </span><br><span> </span><br><span>@@ -224,6 +225,8 @@</span><br><span>            return -1;</span><br><span>   }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ rate_ctr_inc2(as->ctrg, SS7_AS_CTR_RX_MSU_TOTAL);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>       /* pull the IPA header */</span><br><span>    msgb_pull_to_l2(msg);</span><br><span> </span><br><span>diff --git a/src/m3ua.c b/src/m3ua.c</span><br><span>index 607813f..26acc1b 100644</span><br><span>--- a/src/m3ua.c</span><br><span>+++ b/src/m3ua.c</span><br><span>@@ -44,6 +44,7 @@</span><br><span> #include "xua_as_fsm.h"</span><br><span> #include "xua_asp_fsm.h"</span><br><span> #include "xua_internal.h"</span><br><span style="color: hsl(120, 100%, 40%);">+#include "ss7_internal.h"</span><br><span> </span><br><span> #define M3UA_MSGB_SIZE 1500</span><br><span> </span><br><span>@@ -553,6 +554,8 @@</span><br><span>       if (rc)</span><br><span>              return rc;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+        rate_ctr_inc2(as->ctrg, SS7_AS_CTR_RX_MSU_TOTAL);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>       /* FIXME: check for AS state == ACTIVE */</span><br><span> </span><br><span>        /* store the MTP-level information in the xua_msg for use by</span><br><span>diff --git a/src/osmo_ss7.c b/src/osmo_ss7.c</span><br><span>index 38206fb..5dd4a26 100644</span><br><span>--- a/src/osmo_ss7.c</span><br><span>+++ b/src/osmo_ss7.c</span><br><span>@@ -48,6 +48,7 @@</span><br><span> </span><br><span> #include "sccp_internal.h"</span><br><span> #include "xua_internal.h"</span><br><span style="color: hsl(120, 100%, 40%);">+#include "ss7_internal.h"</span><br><span> #include "xua_asp_fsm.h"</span><br><span> #include "xua_as_fsm.h"</span><br><span> </span><br><span>@@ -895,6 +896,19 @@</span><br><span>  * SS7 Application Server</span><br><span>  ***********************************************************************/</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+static const struct rate_ctr_desc ss7_as_rcd[] = {</span><br><span style="color: hsl(120, 100%, 40%);">+ [SS7_AS_CTR_RX_MSU_TOTAL] = { "rx.msu.total", "Total number of MSU received" },</span><br><span style="color: hsl(120, 100%, 40%);">+   [SS7_AS_CTR_TX_MSU_TOTAL] = { "tx.msu.total", "Total number of MSU transmitted" },</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 ss7_as_rcgd = {</span><br><span style="color: hsl(120, 100%, 40%);">+ .group_name_prefix = "sigtran.as",</span><br><span style="color: hsl(120, 100%, 40%);">+  .group_description = "SIGTRAN Application Server",</span><br><span style="color: hsl(120, 100%, 40%);">+  .num_ctr = ARRAY_SIZE(ss7_as_rcd),</span><br><span style="color: hsl(120, 100%, 40%);">+    .ctr_desc = ss7_as_rcd,</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+static unsigned int g_ss7_as_rcg_idx;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /*! \brief Find Application Server by given name</span><br><span>  *  \param[in] inst SS7 Instance on which we operate</span><br><span>  *  \param[in] name Name of AS</span><br><span>@@ -1002,6 +1016,12 @@</span><br><span>          as = talloc_zero(inst, struct osmo_ss7_as);</span><br><span>          if (!as)</span><br><span>                     return NULL;</span><br><span style="color: hsl(120, 100%, 40%);">+          as->ctrg = rate_ctr_group_alloc(as, &ss7_as_rcgd, g_ss7_as_rcg_idx++);</span><br><span style="color: hsl(120, 100%, 40%);">+         if (!as->ctrg) {</span><br><span style="color: hsl(120, 100%, 40%);">+                   talloc_free(as);</span><br><span style="color: hsl(120, 100%, 40%);">+                      return NULL;</span><br><span style="color: hsl(120, 100%, 40%);">+          }</span><br><span style="color: hsl(120, 100%, 40%);">+             rate_ctr_group_set_name(as->ctrg, name);</span><br><span>          as->inst = inst;</span><br><span>          as->cfg.name = talloc_strdup(as, name);</span><br><span>           as->cfg.proto = proto;</span><br><span>@@ -1125,6 +1145,26 @@</span><br><span>  * SS7 Application Server Process</span><br><span>  ***********************************************************************/</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+enum ss7_asp_ctr {</span><br><span style="color: hsl(120, 100%, 40%);">+  SS7_ASP_CTR_PKT_RX_TOTAL,</span><br><span style="color: hsl(120, 100%, 40%);">+     SS7_ASP_CTR_PKT_RX_UNKNOWN,</span><br><span style="color: hsl(120, 100%, 40%);">+   SS7_ASP_CTR_PKT_TX_TOTAL,</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_desc ss7_asp_rcd[] = {</span><br><span style="color: hsl(120, 100%, 40%);">+  [SS7_ASP_CTR_PKT_RX_TOTAL] = { "rx.packets.total", "Total number of packets received" },</span><br><span style="color: hsl(120, 100%, 40%);">+  [SS7_ASP_CTR_PKT_RX_UNKNOWN] = { "rx.packets.unknown", "Number of packets received for unknown PPID" },</span><br><span style="color: hsl(120, 100%, 40%);">+   [SS7_ASP_CTR_PKT_TX_TOTAL] = { "tx.packets.total", "Total number of packets transmitted" },</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 ss7_asp_rcgd = {</span><br><span style="color: hsl(120, 100%, 40%);">+       .group_name_prefix = "sigtran.asp",</span><br><span style="color: hsl(120, 100%, 40%);">+ .group_description = "SIGTRAN Application Server Process",</span><br><span style="color: hsl(120, 100%, 40%);">+  .num_ctr = ARRAY_SIZE(ss7_asp_rcd),</span><br><span style="color: hsl(120, 100%, 40%);">+   .ctr_desc = ss7_asp_rcd,</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+static unsigned int g_ss7_asp_rcg_idx;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> int osmo_ss7_asp_peer_snprintf(char* buf, size_t buf_len, struct osmo_ss7_asp_peer *peer)</span><br><span> {</span><br><span>     int len = 0, offset = 0, rem = buf_len;</span><br><span>@@ -1485,6 +1525,12 @@</span><br><span>     if (!asp) {</span><br><span>          /* FIXME: check if local port has SCTP? */</span><br><span>           asp = talloc_zero(inst, struct osmo_ss7_asp);</span><br><span style="color: hsl(120, 100%, 40%);">+         asp->ctrg = rate_ctr_group_alloc(asp, &ss7_asp_rcgd, g_ss7_asp_rcg_idx++);</span><br><span style="color: hsl(120, 100%, 40%);">+             if (!asp->ctrg) {</span><br><span style="color: hsl(120, 100%, 40%);">+                  talloc_free(asp);</span><br><span style="color: hsl(120, 100%, 40%);">+                     return NULL;</span><br><span style="color: hsl(120, 100%, 40%);">+          }</span><br><span style="color: hsl(120, 100%, 40%);">+             rate_ctr_group_set_name(asp->ctrg, name);</span><br><span>                 asp->inst = inst;</span><br><span>                 asp->cfg.remote.port = remote_port;</span><br><span>               asp->cfg.local.port = local_port;</span><br><span>@@ -1781,6 +1827,8 @@</span><br><span>         msgb_sctp_stream(msg) = sinfo.sinfo_stream;</span><br><span>  msg->dst = asp;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+        rate_ctr_inc2(asp->ctrg, SS7_ASP_CTR_PKT_RX_TOTAL);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>     if (ppid == SUA_PPID && asp->cfg.proto == OSMO_SS7_ASP_PROT_SUA)</span><br><span>          rc = sua_rx_msg(asp, msg);</span><br><span>   else if (ppid == M3UA_PPID && asp->cfg.proto == OSMO_SS7_ASP_PROT_M3UA)</span><br><span>@@ -1860,6 +1908,7 @@</span><br><span>           return -1;</span><br><span>   }</span><br><span>    msg->dst = asp;</span><br><span style="color: hsl(120, 100%, 40%);">+    rate_ctr_inc2(asp->ctrg, SS7_ASP_CTR_PKT_RX_TOTAL);</span><br><span>       return ipa_rx_msg(asp, msg);</span><br><span> }</span><br><span> </span><br><span>@@ -1918,6 +1967,8 @@</span><br><span>        msgb_sctp_stream(msg) = sinfo.sinfo_stream;</span><br><span>  msg->dst = asp;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+        rate_ctr_inc2(asp->ctrg, SS7_ASP_CTR_PKT_RX_TOTAL);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>     if (ppid == SUA_PPID && asp->cfg.proto == OSMO_SS7_ASP_PROT_SUA)</span><br><span>          rc = sua_rx_msg(asp, msg);</span><br><span>   else if (ppid == M3UA_PPID && asp->cfg.proto == OSMO_SS7_ASP_PROT_M3UA)</span><br><span>@@ -2086,6 +2137,8 @@</span><br><span>           OSMO_ASSERT(0);</span><br><span>      }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ rate_ctr_inc2(asp->ctrg, SS7_ASP_CTR_PKT_TX_TOTAL);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>     if (asp->cfg.is_server) {</span><br><span>                 if (!asp->server) {</span><br><span>                       LOGPASP(asp, DLSS7, LOGL_ERROR, "Cannot transmit, no asp->server\n");</span><br><span>@@ -2361,6 +2414,8 @@</span><br><span> </span><br><span> int ss7_asp_rx_unknown(struct osmo_ss7_asp *asp, int ppid_mux, struct msgb *msg)</span><br><span> {</span><br><span style="color: hsl(120, 100%, 40%);">+       rate_ctr_inc2(asp->ctrg, SS7_ASP_CTR_PKT_RX_UNKNOWN);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>   if (g_osmo_ss7_asp_rx_unknown_cb)</span><br><span>            return (*g_osmo_ss7_asp_rx_unknown_cb)(asp, ppid_mux, msg);</span><br><span> </span><br><span>diff --git a/src/osmo_ss7_hmrt.c b/src/osmo_ss7_hmrt.c</span><br><span>index 882d85d..f5fcd64 100644</span><br><span>--- a/src/osmo_ss7_hmrt.c</span><br><span>+++ b/src/osmo_ss7_hmrt.c</span><br><span>@@ -35,6 +35,7 @@</span><br><span> #include <osmocom/sigtran/protocol/m3ua.h></span><br><span> </span><br><span> #include "xua_internal.h"</span><br><span style="color: hsl(120, 100%, 40%);">+#include "ss7_internal.h"</span><br><span> </span><br><span> /* convert from M3UA message to MTP-TRANSFER.ind osmo_mtp_prim */</span><br><span> struct osmo_mtp_prim *m3ua_to_xfer_ind(struct xua_msg *xua)</span><br><span>@@ -227,6 +228,8 @@</span><br><span>                                      dpc, osmo_ss7_pointcode_print(inst, dpc), rt_name);</span><br><span>                   }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+                 rate_ctr_inc2(as->ctrg, SS7_AS_CTR_TX_MSU_TOTAL);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>                       switch (as->cfg.proto) {</span><br><span>                  case OSMO_SS7_ASP_PROT_M3UA:</span><br><span>                                 DEBUGP(DLSS7, "rt->dest.as proto is M3UA for dpc=%u=%s\n",</span><br><span>diff --git a/src/ss7_internal.h b/src/ss7_internal.h</span><br><span>index 28e239c..712a6ed 100644</span><br><span>--- a/src/ss7_internal.h</span><br><span>+++ b/src/ss7_internal.h</span><br><span>@@ -7,3 +7,8 @@</span><br><span> </span><br><span> bool osmo_ss7_asp_set_default_peer_hosts(struct osmo_ss7_asp *asp);</span><br><span> bool osmo_ss7_xua_server_set_default_local_hosts(struct osmo_xua_server *oxs);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+enum ss7_as_ctr {</span><br><span style="color: hsl(120, 100%, 40%);">+      SS7_AS_CTR_RX_MSU_TOTAL,</span><br><span style="color: hsl(120, 100%, 40%);">+      SS7_AS_CTR_TX_MSU_TOTAL,</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span>diff --git a/src/sua.c b/src/sua.c</span><br><span>index 8415fa3..000f064 100644</span><br><span>--- a/src/sua.c</span><br><span>+++ b/src/sua.c</span><br><span>@@ -46,6 +46,7 @@</span><br><span> #include "xua_asp_fsm.h"</span><br><span> #include "xua_internal.h"</span><br><span> #include "sccp_internal.h"</span><br><span style="color: hsl(120, 100%, 40%);">+#include "ss7_internal.h"</span><br><span> </span><br><span> /* Appendix C.4 of Q.714 (all in milliseconds) */</span><br><span> #define CONNECTION_TIMER        ( 1 * 60 * 100)</span><br><span>@@ -521,6 +522,8 @@</span><br><span>        if (rc)</span><br><span>              return rc;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+        rate_ctr_inc2(as->ctrg, SS7_AS_CTR_RX_MSU_TOTAL);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>       switch (xua->hdr.msg_type) {</span><br><span>      case 0: /* Reserved, permitted by ETSI TS 101 592 5.2.3.2 */</span><br><span>         case SUA_CL_CLDT:</span><br><span>@@ -549,6 +552,8 @@</span><br><span>      if (rc)</span><br><span>              return rc;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+        rate_ctr_inc2(as->ctrg, SS7_AS_CTR_RX_MSU_TOTAL);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>       switch (xua->hdr.msg_type) {</span><br><span>      case 0: /* Reserved, permitted by ETSI TS 101 592 5.2.3.2 */</span><br><span>         case SUA_CO_CORE:</span><br><span>diff --git a/stp/stp_main.c b/stp/stp_main.c</span><br><span>index 1e83615..569cf8e 100644</span><br><span>--- a/stp/stp_main.c</span><br><span>+++ b/stp/stp_main.c</span><br><span>@@ -32,6 +32,7 @@</span><br><span> #include <osmocom/core/utils.h></span><br><span> #include <osmocom/core/logging.h></span><br><span> #include <osmocom/core/application.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/core/rate_ctr.h></span><br><span> #include <osmocom/core/fsm.h></span><br><span> #include <osmocom/vty/vty.h></span><br><span> #include <osmocom/vty/stats.h></span><br><span>@@ -254,6 +255,7 @@</span><br><span>   signal(SIGUSR1, &signal_handler);</span><br><span>        signal(SIGUSR2, &signal_handler);</span><br><span>        osmo_init_ignore_signals();</span><br><span style="color: hsl(120, 100%, 40%);">+   rate_ctr_init(tall_stp_ctx);</span><br><span> </span><br><span>     if (cmdline_config.daemonize) {</span><br><span>              rc = osmo_daemonize();</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/libosmo-sccp/+/26234">change 26234</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/libosmo-sccp/+/26234"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: libosmo-sccp </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: Idb811ca81adfe47152d484f6b981e661dc569e15 </div>
<div style="display:none"> Gerrit-Change-Number: 26234 </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: dexter <pmaier@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: fixeria <vyanitskiy@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-CC: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>