<p>laforge has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-mgw/+/17425">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Update per-trunk global packet/byte counters in real-time<br><br>We used to update only the per-connection rx/tx packet/byte counters<br>on-the-fly, but not the per-trunk global counters.  The latter would<br>only be updated at the end of a connection.  As MGCP connections<br>can last quite long (think of a long phone call) this is maybe<br>not the best of ideas.<br><br>Note: The all_rtp:err_tstmp_in and all_rt:err_tstmp_out are still<br>only updated at the end of a connection.<br><br>Change-Id: Ib3866cb8149d3257fcf39733846c97c33881c4ee<br>Related: OS#4437<br>---<br>M src/libosmo-mgcp/mgcp_conn.c<br>M src/libosmo-mgcp/mgcp_network.c<br>2 files changed, 28 insertions(+), 10 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-mgw refs/changes/25/17425/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/libosmo-mgcp/mgcp_conn.c b/src/libosmo-mgcp/mgcp_conn.c</span><br><span>index 60a1700..7a86274 100644</span><br><span>--- a/src/libosmo-mgcp/mgcp_conn.c</span><br><span>+++ b/src/libosmo-mgcp/mgcp_conn.c</span><br><span>@@ -259,7 +259,6 @@</span><br><span> {</span><br><span>    struct rate_ctr_group *all_stats = trunk->all_rtp_conn_stats;</span><br><span>     struct rate_ctr_group *conn_stats = conn_rtp->rate_ctr_group;</span><br><span style="color: hsl(0, 100%, 40%);">-        int i;</span><br><span> </span><br><span>   if (all_stats == NULL || conn_stats == NULL)</span><br><span>                 return;</span><br><span>@@ -269,8 +268,11 @@</span><br><span>        * All other counters in both counter groups correspond to each other. */</span><br><span>    OSMO_ASSERT(conn_stats->desc->num_ctr + 1 == all_stats->desc->num_ctr);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- for (i = 0; i < conn_stats->desc->num_ctr; i++)</span><br><span style="color: hsl(0, 100%, 40%);">-                rate_ctr_add(&all_stats->ctr[i], conn_stats->ctr[i].current);</span><br><span style="color: hsl(120, 100%, 40%);">+       /* all other counters are [now] updated in real-time */</span><br><span style="color: hsl(120, 100%, 40%);">+       rate_ctr_add(&all_stats->ctr[IN_STREAM_ERR_TSTMP_CTR],</span><br><span style="color: hsl(120, 100%, 40%);">+              conn_stats->ctr[IN_STREAM_ERR_TSTMP_CTR].current);</span><br><span style="color: hsl(120, 100%, 40%);">+    rate_ctr_add(&all_stats->ctr[OUT_STREAM_ERR_TSTMP_CTR],</span><br><span style="color: hsl(120, 100%, 40%);">+                     conn_stats->ctr[OUT_STREAM_ERR_TSTMP_CTR].current);</span><br><span> </span><br><span>      rate_ctr_inc(&all_stats->ctr[RTP_NUM_CONNECTIONS]);</span><br><span> }</span><br><span>diff --git a/src/libosmo-mgcp/mgcp_network.c b/src/libosmo-mgcp/mgcp_network.c</span><br><span>index 53cdc06..cd60ce2 100644</span><br><span>--- a/src/libosmo-mgcp/mgcp_network.c</span><br><span>+++ b/src/libosmo-mgcp/mgcp_network.c</span><br><span>@@ -57,6 +57,22 @@</span><br><span>        MGCP_PROTO_RTCP,</span><br><span> };</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+static void rtpconn_rate_ctr_add(struct mgcp_conn_rtp *conn_rtp, struct mgcp_endpoint *endp,</span><br><span style="color: hsl(120, 100%, 40%);">+                               int id, int inc)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+  struct rate_ctr_group *conn_stats = conn_rtp->rate_ctr_group;</span><br><span style="color: hsl(120, 100%, 40%);">+      struct rate_ctr_group *trunk_stats = endp->tcfg->all_rtp_conn_stats;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  /* add to both the per-connection and the per-trunk global stats */</span><br><span style="color: hsl(120, 100%, 40%);">+   rate_ctr_add(&conn_stats->ctr[id], inc);</span><br><span style="color: hsl(120, 100%, 40%);">+       rate_ctr_add(&trunk_stats->ctr[id], inc);</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 void rtpconn_rate_ctr_inc(struct mgcp_conn_rtp *conn_rtp, struct mgcp_endpoint *endp, int id)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+        rtpconn_rate_ctr_add(conn_rtp, endp, id, 1);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /*! Determine the local rtp bind IP-address.</span><br><span>  *  \param[out] addr caller provided memory to store the resulting IP-Address</span><br><span>  *  \param[in] endp mgcp endpoint, that holds a copy of the VTY parameters</span><br><span>@@ -845,7 +861,7 @@</span><br><span>       dest_name = conn_dst->conn->name;</span><br><span> </span><br><span>  if (!rtp_end->output_enabled) {</span><br><span style="color: hsl(0, 100%, 40%);">-              rate_ctr_inc(&conn_dst->rate_ctr_group->ctr[RTP_DROPPED_PACKETS_CTR]);</span><br><span style="color: hsl(120, 100%, 40%);">+              rtpconn_rate_ctr_inc(conn_dst, endp, RTP_DROPPED_PACKETS_CTR);</span><br><span>               LOGPENDP(endp, DRTP, LOGL_DEBUG,</span><br><span>                      "output disabled, drop to %s %s "</span><br><span>                          "rtp_port:%u rtcp_port:%u\n",</span><br><span>@@ -924,8 +940,8 @@</span><br><span>                       if (len <= 0)</span><br><span>                             return len;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-                 rate_ctr_inc(&conn_dst->rate_ctr_group->ctr[RTP_PACKETS_TX_CTR]);</span><br><span style="color: hsl(0, 100%, 40%);">-                     rate_ctr_add(&conn_dst->rate_ctr_group->ctr[RTP_OCTETS_TX_CTR], len);</span><br><span style="color: hsl(120, 100%, 40%);">+                       rtpconn_rate_ctr_inc(conn_dst, endp, RTP_PACKETS_TX_CTR);</span><br><span style="color: hsl(120, 100%, 40%);">+                     rtpconn_rate_ctr_add(conn_dst, endp, RTP_OCTETS_TX_CTR, len);</span><br><span> </span><br><span>                    nbytes += len;</span><br><span>                       buflen = cont;</span><br><span>@@ -942,8 +958,8 @@</span><br><span>                                     &rtp_end->addr,</span><br><span>                               rtp_end->rtcp_port, buf, len);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-               rate_ctr_inc(&conn_dst->rate_ctr_group->ctr[RTP_PACKETS_TX_CTR]);</span><br><span style="color: hsl(0, 100%, 40%);">-             rate_ctr_add(&conn_dst->rate_ctr_group->ctr[RTP_OCTETS_TX_CTR], len);</span><br><span style="color: hsl(120, 100%, 40%);">+               rtpconn_rate_ctr_inc(conn_dst, endp, RTP_PACKETS_TX_CTR);</span><br><span style="color: hsl(120, 100%, 40%);">+             rtpconn_rate_ctr_add(conn_dst, endp, RTP_OCTETS_TX_CTR, len);</span><br><span> </span><br><span>            return len;</span><br><span>  }</span><br><span>@@ -1189,8 +1205,8 @@</span><br><span>    }</span><br><span> </span><br><span>        /* Increment RX statistics */</span><br><span style="color: hsl(0, 100%, 40%);">-   rate_ctr_inc(&conn->rate_ctr_group->ctr[RTP_PACKETS_RX_CTR]);</span><br><span style="color: hsl(0, 100%, 40%);">- rate_ctr_add(&conn->rate_ctr_group->ctr[RTP_OCTETS_RX_CTR], rc);</span><br><span style="color: hsl(120, 100%, 40%);">+    rtpconn_rate_ctr_inc(conn, endp, RTP_PACKETS_RX_CTR);</span><br><span style="color: hsl(120, 100%, 40%);">+ rtpconn_rate_ctr_add(conn, endp, RTP_OCTETS_RX_CTR, rc);</span><br><span> </span><br><span>         /* Forward a copy of the RTP data to a debug ip/port */</span><br><span>      forward_data(fd->fd, &conn->tap_in, buf, rc);</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-mgw/+/17425">change 17425</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-mgw/+/17425"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-mgw </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: Ib3866cb8149d3257fcf39733846c97c33881c4ee </div>
<div style="display:none"> Gerrit-Change-Number: 17425 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>