<p>pespin has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-mgw/+/24554">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Use new stat item/ctr getter APIs<br><br>Generated with spatch with this and similat snippets:<br>"""<br>@@<br>expression E1, E2;<br>@@<br>- &E2->ctr[E1]<br>+ rate_c<br><br>Change-Id: I53b75ea8a88bc1ae4ceb479ed272865054de9665<br>---<br>M src/libosmo-mgcp/mgcp_conn.c<br>M src/libosmo-mgcp/mgcp_e1.c<br>M src/libosmo-mgcp/mgcp_network.c<br>M src/libosmo-mgcp/mgcp_protocol.c<br>M src/libosmo-mgcp/mgcp_stat.c<br>M src/libosmo-mgcp/mgcp_vty.c<br>M tests/mgcp/mgcp_test.c<br>7 files changed, 79 insertions(+), 79 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/54/24554/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 6424dcb..7988c48 100644</span><br><span>--- a/src/libosmo-mgcp/mgcp_conn.c</span><br><span>+++ b/src/libosmo-mgcp/mgcp_conn.c</span><br><span>@@ -114,8 +114,8 @@</span><br><span>      if (!conn_rtp->rate_ctr_group)</span><br><span>            return -1;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-  conn_rtp->state.in_stream.err_ts_ctr = &conn_rtp->rate_ctr_group->ctr[IN_STREAM_ERR_TSTMP_CTR];</span><br><span style="color: hsl(0, 100%, 40%);">-    conn_rtp->state.out_stream.err_ts_ctr = &conn_rtp->rate_ctr_group->ctr[OUT_STREAM_ERR_TSTMP_CTR];</span><br><span style="color: hsl(120, 100%, 40%);">+        conn_rtp->state.in_stream.err_ts_ctr = rate_ctr_group_get_ctr(conn_rtp->rate_ctr_group, IN_STREAM_ERR_TSTMP_CTR);</span><br><span style="color: hsl(120, 100%, 40%);">+       conn_rtp->state.out_stream.err_ts_ctr = rate_ctr_group_get_ctr(conn_rtp->rate_ctr_group, OUT_STREAM_ERR_TSTMP_CTR);</span><br><span>    rate_ctr_index++;</span><br><span> </span><br><span>        /* Make sure codec table is reset */</span><br><span>@@ -270,12 +270,12 @@</span><br><span>         OSMO_ASSERT(conn_stats->desc->num_ctr + 1 == all_stats->desc->num_ctr);</span><br><span> </span><br><span>      /* all other counters are [now] updated in real-time */</span><br><span style="color: hsl(0, 100%, 40%);">- rate_ctr_add(&all_stats->ctr[IN_STREAM_ERR_TSTMP_CTR],</span><br><span style="color: hsl(0, 100%, 40%);">-                conn_stats->ctr[IN_STREAM_ERR_TSTMP_CTR].current);</span><br><span style="color: hsl(0, 100%, 40%);">-      rate_ctr_add(&all_stats->ctr[OUT_STREAM_ERR_TSTMP_CTR],</span><br><span style="color: hsl(0, 100%, 40%);">-               conn_stats->ctr[OUT_STREAM_ERR_TSTMP_CTR].current);</span><br><span style="color: hsl(120, 100%, 40%);">+   rate_ctr_add(rate_ctr_group_get_ctr(all_stats, IN_STREAM_ERR_TSTMP_CTR),</span><br><span style="color: hsl(120, 100%, 40%);">+                   rate_ctr_group_get_ctr(conn_stats, IN_STREAM_ERR_TSTMP_CTR)->current);</span><br><span style="color: hsl(120, 100%, 40%);">+        rate_ctr_add(rate_ctr_group_get_ctr(all_stats, OUT_STREAM_ERR_TSTMP_CTR),</span><br><span style="color: hsl(120, 100%, 40%);">+                  rate_ctr_group_get_ctr(conn_stats, OUT_STREAM_ERR_TSTMP_CTR)->current);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-     rate_ctr_inc(&all_stats->ctr[RTP_NUM_CONNECTIONS]);</span><br><span style="color: hsl(120, 100%, 40%);">+    rate_ctr_inc(rate_ctr_group_get_ctr(all_stats, RTP_NUM_CONNECTIONS));</span><br><span> }</span><br><span> </span><br><span> /*! free a connection by its ID.</span><br><span>diff --git a/src/libosmo-mgcp/mgcp_e1.c b/src/libosmo-mgcp/mgcp_e1.c</span><br><span>index 7e810bc..effbe77 100644</span><br><span>--- a/src/libosmo-mgcp/mgcp_e1.c</span><br><span>+++ b/src/libosmo-mgcp/mgcp_e1.c</span><br><span>@@ -197,7 +197,7 @@</span><br><span>        const uint8_t *ptr_ft;</span><br><span>       enum osmo_trau_frame_type ft;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-       rate_ctr_inc(&rate_ctrs->ctr[E1_I460_TRAU_MUX_EMPTY_CTR]);</span><br><span style="color: hsl(120, 100%, 40%);">+     rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, E1_I460_TRAU_MUX_EMPTY_CTR));</span><br><span> </span><br><span>     /* Choose an appropiate idle frame type */</span><br><span>   ft = endp->e1.trau_rtp_st->type;</span><br><span>@@ -304,7 +304,7 @@</span><br><span>         msgb_free(msg);</span><br><span>      return;</span><br><span> skip:</span><br><span style="color: hsl(0, 100%, 40%);">-        rate_ctr_inc(&rate_ctrs->ctr[E1_I460_TRAU_RX_FAIL_CTR]);</span><br><span style="color: hsl(120, 100%, 40%);">+       rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, E1_I460_TRAU_RX_FAIL_CTR));</span><br><span>   msgb_free(msg);</span><br><span>      return;</span><br><span> }</span><br><span>@@ -679,7 +679,7 @@</span><br><span> </span><br><span>       return 0;</span><br><span> skip:</span><br><span style="color: hsl(0, 100%, 40%);">-      rate_ctr_inc(&rate_ctrs->ctr[E1_I460_TRAU_TX_FAIL_CTR]);</span><br><span style="color: hsl(120, 100%, 40%);">+       rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, E1_I460_TRAU_TX_FAIL_CTR));</span><br><span>   msgb_free(msg_tf);</span><br><span>   return -1;</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 e03c100..79ddf8a 100644</span><br><span>--- a/src/libosmo-mgcp/mgcp_network.c</span><br><span>+++ b/src/libosmo-mgcp/mgcp_network.c</span><br><span>@@ -66,8 +66,8 @@</span><br><span>         struct rate_ctr_group *mgw_stats = endp->trunk->ratectr.all_rtp_conn_stats;</span><br><span> </span><br><span>        /* add to both the per-connection and the global stats */</span><br><span style="color: hsl(0, 100%, 40%);">-       rate_ctr_add(&conn_stats->ctr[id], inc);</span><br><span style="color: hsl(0, 100%, 40%);">- rate_ctr_add(&mgw_stats->ctr[id], inc);</span><br><span style="color: hsl(120, 100%, 40%);">+        rate_ctr_add(rate_ctr_group_get_ctr(conn_stats, id), inc);</span><br><span style="color: hsl(120, 100%, 40%);">+    rate_ctr_add(rate_ctr_group_get_ctr(mgw_stats, id), inc);</span><br><span> }</span><br><span> </span><br><span> static void rtpconn_rate_ctr_inc(struct mgcp_conn_rtp *conn_rtp, struct mgcp_endpoint *endp, int id)</span><br><span>@@ -1475,8 +1475,8 @@</span><br><span>                                   sizeof(struct sockaddr_in)));</span><br><span> </span><br><span>    /* Increment RX statistics */</span><br><span style="color: hsl(0, 100%, 40%);">-   rate_ctr_inc(&conn_src->rate_ctr_group->ctr[RTP_PACKETS_RX_CTR]);</span><br><span style="color: hsl(0, 100%, 40%);">-     rate_ctr_add(&conn_src->rate_ctr_group->ctr[RTP_OCTETS_RX_CTR], msgb_length(msg));</span><br><span style="color: hsl(120, 100%, 40%);">+  rate_ctr_inc(rate_ctr_group_get_ctr(conn_src->rate_ctr_group, RTP_PACKETS_RX_CTR));</span><br><span style="color: hsl(120, 100%, 40%);">+        rate_ctr_add(rate_ctr_group_get_ctr(conn_src->rate_ctr_group, RTP_OCTETS_RX_CTR), msgb_length(msg));</span><br><span>      /* FIXME: count RTP and RTCP separately, also count IuUP payload-less separately */</span><br><span> </span><br><span>      /* Forward a copy of the RTP data to a debug ip/port */</span><br><span>diff --git a/src/libosmo-mgcp/mgcp_protocol.c b/src/libosmo-mgcp/mgcp_protocol.c</span><br><span>index 902c079..3014048 100644</span><br><span>--- a/src/libosmo-mgcp/mgcp_protocol.c</span><br><span>+++ b/src/libosmo-mgcp/mgcp_protocol.c</span><br><span>@@ -289,16 +289,16 @@</span><br><span>         char *data;</span><br><span> </span><br><span>      /* Count all messages, even incorect ones */</span><br><span style="color: hsl(0, 100%, 40%);">-    rate_ctr_inc(&rate_ctrs->ctr[MGCP_GENERAL_RX_MSGS_TOTAL]);</span><br><span style="color: hsl(120, 100%, 40%);">+     rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_GENERAL_RX_MSGS_TOTAL));</span><br><span> </span><br><span>     if (msgb_l2len(msg) < 4) {</span><br><span>                LOGP(DLMGCP, LOGL_ERROR, "msg too short: %d\n", msg->len);</span><br><span style="color: hsl(0, 100%, 40%);">-         rate_ctr_inc(&rate_ctrs->ctr[MGCP_GENERAL_RX_FAIL_MSG_PARSE]);</span><br><span style="color: hsl(120, 100%, 40%);">+         rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_GENERAL_RX_FAIL_MSG_PARSE));</span><br><span>             return NULL;</span><br><span>         }</span><br><span> </span><br><span>        if (mgcp_msg_terminate_nul(msg)) {</span><br><span style="color: hsl(0, 100%, 40%);">-              rate_ctr_inc(&rate_ctrs->ctr[MGCP_GENERAL_RX_FAIL_MSG_PARSE]);</span><br><span style="color: hsl(120, 100%, 40%);">+         rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_GENERAL_RX_FAIL_MSG_PARSE));</span><br><span>             return NULL;</span><br><span>         }</span><br><span> </span><br><span>@@ -307,7 +307,7 @@</span><br><span>  /* attempt to treat it as a response */</span><br><span>      if (sscanf((const char *)&msg->l2h[0], "%3d %*s", &code) == 1) {</span><br><span>                LOGP(DLMGCP, LOGL_DEBUG, "Response: Code: %d\n", code);</span><br><span style="color: hsl(0, 100%, 40%);">-               rate_ctr_inc(&rate_ctrs->ctr[MGCP_GENERAL_RX_FAIL_MSG_PARSE]);</span><br><span style="color: hsl(120, 100%, 40%);">+         rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_GENERAL_RX_FAIL_MSG_PARSE));</span><br><span>             return NULL;</span><br><span>         }</span><br><span> </span><br><span>@@ -323,14 +323,14 @@</span><br><span>        if (pdata.endp && pdata.trans</span><br><span>            && pdata.endp->last_trans</span><br><span>         && strcmp(pdata.endp->last_trans, pdata.trans) == 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-           rate_ctr_inc(&rate_ctrs->ctr[MGCP_GENERAL_RX_MSGS_RETRANSMITTED]);</span><br><span style="color: hsl(120, 100%, 40%);">+             rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_GENERAL_RX_MSGS_RETRANSMITTED));</span><br><span>                 return do_retransmission(pdata.endp);</span><br><span>        }</span><br><span> </span><br><span>        /* check for general parser failure */</span><br><span>       if (rc < 0) {</span><br><span>             LOGP(DLMGCP, LOGL_NOTICE, "%s: failed to find the endpoint\n", msg->l2h);</span><br><span style="color: hsl(0, 100%, 40%);">-          rate_ctr_inc(&rate_ctrs->ctr[MGCP_GENERAL_RX_FAIL_NO_ENDPOINT]);</span><br><span style="color: hsl(120, 100%, 40%);">+               rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_GENERAL_RX_FAIL_NO_ENDPOINT));</span><br><span>           return create_err_response(NULL, -rc, (const char *) msg->l2h, pdata.trans);</span><br><span>      }</span><br><span> </span><br><span>@@ -345,9 +345,9 @@</span><br><span>  }</span><br><span> </span><br><span>        if (handled) {</span><br><span style="color: hsl(0, 100%, 40%);">-          rate_ctr_inc(&rate_ctrs->ctr[MGCP_GENERAL_RX_MSGS_HANDLED]);</span><br><span style="color: hsl(120, 100%, 40%);">+           rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_GENERAL_RX_MSGS_HANDLED));</span><br><span>       } else {</span><br><span style="color: hsl(0, 100%, 40%);">-                rate_ctr_inc(&rate_ctrs->ctr[MGCP_GENERAL_RX_MSGS_UNHANDLED]);</span><br><span style="color: hsl(120, 100%, 40%);">+         rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_GENERAL_RX_MSGS_UNHANDLED));</span><br><span>             LOGP(DLMGCP, LOGL_NOTICE, "MSG with type: '%.4s' not handled\n",</span><br><span>                &msg->l2h[0]);</span><br><span>   }</span><br><span>@@ -751,7 +751,7 @@</span><br><span>      LOGPENDP(endp, DLMGCP, LOGL_NOTICE, "CRCX: creating new connection ...\n");</span><br><span> </span><br><span>    if (!mgcp_endp_avail(endp)) {</span><br><span style="color: hsl(0, 100%, 40%);">-           rate_ctr_inc(&rate_ctrs->ctr[MGCP_CRCX_FAIL_AVAIL]);</span><br><span style="color: hsl(120, 100%, 40%);">+           rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_CRCX_FAIL_AVAIL));</span><br><span>               LOGPENDP(endp, DLMGCP, LOGL_ERROR,</span><br><span>                    "CRCX: selected endpoint not available!\n");</span><br><span>              return create_err_response(NULL, 501, "CRCX", p->trans);</span><br><span>@@ -773,7 +773,7 @@</span><br><span>                  /* It is illegal to send a connection identifier</span><br><span>                      * together with a CRCX, the MGW will assign the</span><br><span>                      * connection identifier by itself on CRCX */</span><br><span style="color: hsl(0, 100%, 40%);">-                   rate_ctr_inc(&rate_ctrs->ctr[MGCP_CRCX_FAIL_BAD_ACTION]);</span><br><span style="color: hsl(120, 100%, 40%);">+                      rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_CRCX_FAIL_BAD_ACTION));</span><br><span>                  return create_err_response(NULL, 523, "CRCX", p->trans);</span><br><span>                        break;</span><br><span>               case 'M':</span><br><span>@@ -799,7 +799,7 @@</span><br><span>              default:</span><br><span>                     LOGPENDP(endp, DLMGCP, LOGL_NOTICE,</span><br><span>                           "CRCX: unhandled option: '%c'/%d\n", *line, *line);</span><br><span style="color: hsl(0, 100%, 40%);">-                  rate_ctr_inc(&rate_ctrs->ctr[MGCP_CRCX_FAIL_UNHANDLED_PARAM]);</span><br><span style="color: hsl(120, 100%, 40%);">+                 rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_CRCX_FAIL_UNHANDLED_PARAM));</span><br><span>                     return create_err_response(NULL, 539, "CRCX", p->trans);</span><br><span>                        break;</span><br><span>               }</span><br><span>@@ -810,14 +810,14 @@</span><br><span>    if (!callid) {</span><br><span>               LOGPENDP(endp, DLMGCP, LOGL_ERROR,</span><br><span>                    "CRCX: insufficient parameters, missing callid\n");</span><br><span style="color: hsl(0, 100%, 40%);">-          rate_ctr_inc(&rate_ctrs->ctr[MGCP_CRCX_FAIL_MISSING_CALLID]);</span><br><span style="color: hsl(120, 100%, 40%);">+          rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_CRCX_FAIL_MISSING_CALLID));</span><br><span>              return create_err_response(endp, 516, "CRCX", p->trans);</span><br><span>        }</span><br><span> </span><br><span>        if (!mode) {</span><br><span>                 LOGPENDP(endp, DLMGCP, LOGL_ERROR,</span><br><span>                    "CRCX: insufficient parameters, missing mode\n");</span><br><span style="color: hsl(0, 100%, 40%);">-            rate_ctr_inc(&rate_ctrs->ctr[MGCP_CRCX_FAIL_INVALID_MODE]);</span><br><span style="color: hsl(120, 100%, 40%);">+            rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_CRCX_FAIL_INVALID_MODE));</span><br><span>                return create_err_response(endp, 517, "CRCX", p->trans);</span><br><span>        }</span><br><span> </span><br><span>@@ -834,7 +834,7 @@</span><br><span>          } else {</span><br><span>                     /* There is no more room for a connection, leave</span><br><span>                      * everything as it is and return with an error */</span><br><span style="color: hsl(0, 100%, 40%);">-                      rate_ctr_inc(&rate_ctrs->ctr[MGCP_CRCX_FAIL_LIMIT_EXCEEDED]);</span><br><span style="color: hsl(120, 100%, 40%);">+                  rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_CRCX_FAIL_LIMIT_EXCEEDED));</span><br><span>                      return create_err_response(endp, 540, "CRCX", p->trans);</span><br><span>                }</span><br><span>    }</span><br><span>@@ -852,7 +852,7 @@</span><br><span>              else {</span><br><span>                       /* This is not our call, leave everything as it is and</span><br><span>                        * return with an error. */</span><br><span style="color: hsl(0, 100%, 40%);">-                     rate_ctr_inc(&rate_ctrs->ctr[MGCP_CRCX_FAIL_UNKNOWN_CALLID]);</span><br><span style="color: hsl(120, 100%, 40%);">+                  rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_CRCX_FAIL_UNKNOWN_CALLID));</span><br><span>                      return create_err_response(endp, 400, "CRCX", p->trans);</span><br><span>                }</span><br><span>    }</span><br><span>@@ -863,7 +863,7 @@</span><br><span>               * the callid matches up (see above). */</span><br><span>             rc = mgcp_endp_claim(endp, callid);</span><br><span>          if (rc != 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-                  rate_ctr_inc(&rate_ctrs->ctr[MGCP_CRCX_FAIL_CLAIM]);</span><br><span style="color: hsl(120, 100%, 40%);">+                   rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_CRCX_FAIL_CLAIM));</span><br><span>                       return create_err_response(endp, 502, "CRCX", p->trans);</span><br><span>                }</span><br><span>    }</span><br><span>@@ -873,7 +873,7 @@</span><br><span>      if (!_conn) {</span><br><span>                LOGPENDP(endp, DLMGCP, LOGL_ERROR,</span><br><span>                    "CRCX: unable to allocate RTP connection\n");</span><br><span style="color: hsl(0, 100%, 40%);">-                rate_ctr_inc(&rate_ctrs->ctr[MGCP_CRCX_FAIL_ALLOC_CONN]);</span><br><span style="color: hsl(120, 100%, 40%);">+              rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_CRCX_FAIL_ALLOC_CONN));</span><br><span>          goto error2;</span><br><span> </span><br><span>     }</span><br><span>@@ -883,7 +883,7 @@</span><br><span> </span><br><span>  if (mgcp_parse_conn_mode(mode, endp, conn->conn) != 0) {</span><br><span>          error_code = 517;</span><br><span style="color: hsl(0, 100%, 40%);">-               rate_ctr_inc(&rate_ctrs->ctr[MGCP_CRCX_FAIL_INVALID_MODE]);</span><br><span style="color: hsl(120, 100%, 40%);">+            rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_CRCX_FAIL_INVALID_MODE));</span><br><span>                goto error2;</span><br><span>         }</span><br><span> </span><br><span>@@ -893,13 +893,13 @@</span><br><span>        if (osmux_cid >= -1) { /* -1 is wilcard, alloc next avail CID */</span><br><span>          conn->osmux.state = OSMUX_STATE_ACTIVATING;</span><br><span>               if (conn_osmux_allocate_cid(conn, osmux_cid) == -1) {</span><br><span style="color: hsl(0, 100%, 40%);">-                   rate_ctr_inc(&rate_ctrs->ctr[MGCP_CRCX_FAIL_NO_OSMUX]);</span><br><span style="color: hsl(120, 100%, 40%);">+                        rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_CRCX_FAIL_NO_OSMUX));</span><br><span>                    goto error2;</span><br><span>                 }</span><br><span>    } else if (endp->cfg->osmux == OSMUX_USAGE_ONLY) {</span><br><span>             LOGPCONN(_conn, DLMGCP, LOGL_ERROR,</span><br><span>                   "CRCX: osmux only and no osmux offered\n");</span><br><span style="color: hsl(0, 100%, 40%);">-          rate_ctr_inc(&rate_ctrs->ctr[MGCP_CRCX_FAIL_NO_OSMUX]);</span><br><span style="color: hsl(120, 100%, 40%);">+                rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_CRCX_FAIL_NO_OSMUX));</span><br><span>            goto error2;</span><br><span>         }</span><br><span> </span><br><span>@@ -911,7 +911,7 @@</span><br><span>                  LOGPCONN(_conn, DLMGCP, LOGL_ERROR,</span><br><span>                           "CRCX: inavlid local connection options!\n");</span><br><span>                     error_code = rc;</span><br><span style="color: hsl(0, 100%, 40%);">-                        rate_ctr_inc(&rate_ctrs->ctr[MGCP_CRCX_FAIL_INVALID_CONN_OPTIONS]);</span><br><span style="color: hsl(120, 100%, 40%);">+                    rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_CRCX_FAIL_INVALID_CONN_OPTIONS));</span><br><span>                        goto error2;</span><br><span>                 }</span><br><span>    }</span><br><span>@@ -921,7 +921,7 @@</span><br><span>      mgcp_codec_summary(conn);</span><br><span>    if (rc) {</span><br><span>            error_code = rc;</span><br><span style="color: hsl(0, 100%, 40%);">-                rate_ctr_inc(&rate_ctrs->ctr[MGCP_CRCX_FAIL_CODEC_NEGOTIATION]);</span><br><span style="color: hsl(120, 100%, 40%);">+               rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_CRCX_FAIL_CODEC_NEGOTIATION));</span><br><span>           goto error2;</span><br><span>         }</span><br><span> </span><br><span>@@ -942,7 +942,7 @@</span><br><span>          LOGPCONN(_conn, DLMGCP, LOGL_ERROR,</span><br><span>                   "CRCX: selected connection mode type requires an opposite end!\n");</span><br><span>               error_code = 527;</span><br><span style="color: hsl(0, 100%, 40%);">-               rate_ctr_inc(&rate_ctrs->ctr[MGCP_CRCX_FAIL_NO_REMOTE_CONN_DESC]);</span><br><span style="color: hsl(120, 100%, 40%);">+             rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_CRCX_FAIL_NO_REMOTE_CONN_DESC));</span><br><span>                 goto error2;</span><br><span>         }</span><br><span> </span><br><span>@@ -950,14 +950,14 @@</span><br><span>           information, then find a free port for it */</span><br><span>      mgcp_get_local_addr(conn->end.local_addr, conn);</span><br><span>  if (allocate_port(endp, conn) != 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-           rate_ctr_inc(&rate_ctrs->ctr[MGCP_CRCX_FAIL_BIND_PORT]);</span><br><span style="color: hsl(120, 100%, 40%);">+               rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_CRCX_FAIL_BIND_PORT));</span><br><span>           goto error2;</span><br><span>         }</span><br><span> </span><br><span>        if (setup_rtp_processing(endp, conn) != 0) {</span><br><span>                 LOGPCONN(_conn, DLMGCP, LOGL_ERROR,</span><br><span>                   "CRCX: could not start RTP processing!\n");</span><br><span style="color: hsl(0, 100%, 40%);">-          rate_ctr_inc(&rate_ctrs->ctr[MGCP_CRCX_FAIL_START_RTP]);</span><br><span style="color: hsl(120, 100%, 40%);">+               rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_CRCX_FAIL_START_RTP));</span><br><span>           goto error2;</span><br><span>         }</span><br><span> </span><br><span>@@ -970,7 +970,7 @@</span><br><span>                  LOGPCONN(_conn, DLMGCP, LOGL_NOTICE,</span><br><span>                                  "CRCX: CRCX rejected by policy\n");</span><br><span>                       mgcp_endp_release(endp);</span><br><span style="color: hsl(0, 100%, 40%);">-                        rate_ctr_inc(&rate_ctrs->ctr[MGCP_CRCX_FAIL_REJECTED_BY_POLICY]);</span><br><span style="color: hsl(120, 100%, 40%);">+                      rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_CRCX_FAIL_REJECTED_BY_POLICY));</span><br><span>                  return create_err_response(endp, 400, "CRCX", p->trans);</span><br><span>                        break;</span><br><span>               case MGCP_POLICY_DEFER:</span><br><span>@@ -996,7 +996,7 @@</span><br><span> </span><br><span>    LOGPCONN(_conn, DLMGCP, LOGL_NOTICE,</span><br><span>                  "CRCX: connection successfully created\n");</span><br><span style="color: hsl(0, 100%, 40%);">-  rate_ctr_inc(&rate_ctrs->ctr[MGCP_CRCX_SUCCESS]);</span><br><span style="color: hsl(120, 100%, 40%);">+      rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_CRCX_SUCCESS));</span><br><span>  mgcp_endp_update(endp);</span><br><span>      return create_response_with_sdp(endp, conn, "CRCX", p->trans, true);</span><br><span> error2:</span><br><span>@@ -1026,7 +1026,7 @@</span><br><span>         LOGPENDP(endp, DLMGCP, LOGL_NOTICE, "MDCX: modifying existing connection ...\n");</span><br><span> </span><br><span>      if (!mgcp_endp_avail(endp)) {</span><br><span style="color: hsl(0, 100%, 40%);">-           rate_ctr_inc(&rate_ctrs->ctr[MGCP_MDCX_FAIL_AVAIL]);</span><br><span style="color: hsl(120, 100%, 40%);">+           rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_MDCX_FAIL_AVAIL));</span><br><span>               LOGPENDP(endp, DLMGCP, LOGL_ERROR,</span><br><span>                    "MDCX: selected endpoint not available!\n");</span><br><span>              return create_err_response(NULL, 501, "MDCX", p->trans);</span><br><span>@@ -1036,14 +1036,14 @@</span><br><span>      if (endp->wildcarded_req) {</span><br><span>               LOGPENDP(endp, DLMGCP, LOGL_ERROR,</span><br><span>                    "MDCX: wildcarded endpoint names not supported.\n");</span><br><span style="color: hsl(0, 100%, 40%);">-         rate_ctr_inc(&rate_ctrs->ctr[MGCP_MDCX_FAIL_WILDCARD]);</span><br><span style="color: hsl(120, 100%, 40%);">+                rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_MDCX_FAIL_WILDCARD));</span><br><span>            return create_err_response(endp, 507, "MDCX", p->trans);</span><br><span>        }</span><br><span> </span><br><span>        if (llist_count(&endp->conns) <= 0) {</span><br><span>              LOGPENDP(endp, DLMGCP, LOGL_ERROR,</span><br><span>                    "MDCX: endpoint is not holding a connection.\n");</span><br><span style="color: hsl(0, 100%, 40%);">-            rate_ctr_inc(&rate_ctrs->ctr[MGCP_MDCX_FAIL_NO_CONN]);</span><br><span style="color: hsl(120, 100%, 40%);">+         rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_MDCX_FAIL_NO_CONN));</span><br><span>             return create_err_response(endp, 400, "MDCX", p->trans);</span><br><span>        }</span><br><span> </span><br><span>@@ -1054,7 +1054,7 @@</span><br><span>                switch (toupper(line[0])) {</span><br><span>          case 'C':</span><br><span>                    if (mgcp_verify_call_id(endp, line + 3) != 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-                         rate_ctr_inc(&rate_ctrs->ctr[MGCP_MDCX_FAIL_INVALID_CALLID]);</span><br><span style="color: hsl(120, 100%, 40%);">+                          rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_MDCX_FAIL_INVALID_CALLID));</span><br><span>                              error_code = 516;</span><br><span>                            goto error3;</span><br><span>                         }</span><br><span>@@ -1062,7 +1062,7 @@</span><br><span>            case 'I':</span><br><span>                    conn_id = (const char *)line + 3;</span><br><span>                    if ((error_code = mgcp_verify_ci(endp, conn_id))) {</span><br><span style="color: hsl(0, 100%, 40%);">-                             rate_ctr_inc(&rate_ctrs->ctr[MGCP_MDCX_FAIL_INVALID_CONNID]);</span><br><span style="color: hsl(120, 100%, 40%);">+                          rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_MDCX_FAIL_INVALID_CONNID));</span><br><span>                              goto error3;</span><br><span>                         }</span><br><span>                    break;</span><br><span>@@ -1093,7 +1093,7 @@</span><br><span>                       LOGPENDP(endp, DLMGCP, LOGL_NOTICE,</span><br><span>                           "MDCX: Unhandled MGCP option: '%c'/%d\n",</span><br><span>                                  line[0], line[0]);</span><br><span style="color: hsl(0, 100%, 40%);">-                     rate_ctr_inc(&rate_ctrs->ctr[MGCP_MDCX_FAIL_UNHANDLED_PARAM]);</span><br><span style="color: hsl(120, 100%, 40%);">+                 rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_MDCX_FAIL_UNHANDLED_PARAM));</span><br><span>                     return create_err_response(NULL, 539, "MDCX", p->trans);</span><br><span>                        break;</span><br><span>               }</span><br><span>@@ -1103,13 +1103,13 @@</span><br><span>  if (!conn_id) {</span><br><span>              LOGPENDP(endp, DLMGCP, LOGL_ERROR,</span><br><span>                    "MDCX: insufficient parameters, missing ci (connectionIdentifier)\n");</span><br><span style="color: hsl(0, 100%, 40%);">-               rate_ctr_inc(&rate_ctrs->ctr[MGCP_MDCX_FAIL_NO_CONNID]);</span><br><span style="color: hsl(120, 100%, 40%);">+               rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_MDCX_FAIL_NO_CONNID));</span><br><span>           return create_err_response(endp, 515, "MDCX", p->trans);</span><br><span>        }</span><br><span> </span><br><span>        conn = mgcp_conn_get_rtp(endp, conn_id);</span><br><span>     if (!conn) {</span><br><span style="color: hsl(0, 100%, 40%);">-            rate_ctr_inc(&rate_ctrs->ctr[MGCP_MDCX_FAIL_CONN_NOT_FOUND]);</span><br><span style="color: hsl(120, 100%, 40%);">+          rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_MDCX_FAIL_CONN_NOT_FOUND));</span><br><span>              return create_err_response(endp, 400, "MDCX", p->trans);</span><br><span>        }</span><br><span> </span><br><span>@@ -1117,7 +1117,7 @@</span><br><span> </span><br><span>    if (mode) {</span><br><span>          if (mgcp_parse_conn_mode(mode, endp, conn->conn) != 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-                     rate_ctr_inc(&rate_ctrs->ctr[MGCP_MDCX_FAIL_INVALID_MODE]);</span><br><span style="color: hsl(120, 100%, 40%);">+                    rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_MDCX_FAIL_INVALID_MODE));</span><br><span>                        error_code = 517;</span><br><span>                    goto error3;</span><br><span>                 }</span><br><span>@@ -1132,7 +1132,7 @@</span><br><span>                    LOGPCONN(conn->conn, DLMGCP, LOGL_ERROR,</span><br><span>                           "MDCX: invalid local connection options!\n");</span><br><span>                     error_code = rc;</span><br><span style="color: hsl(0, 100%, 40%);">-                        rate_ctr_inc(&rate_ctrs->ctr[MGCP_MDCX_FAIL_INVALID_CONN_OPTIONS]);</span><br><span style="color: hsl(120, 100%, 40%);">+                    rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_MDCX_FAIL_INVALID_CONN_OPTIONS));</span><br><span>                        goto error3;</span><br><span>                 }</span><br><span>    }</span><br><span>@@ -1152,7 +1152,7 @@</span><br><span>            LOGPCONN(conn->conn, DLMGCP, LOGL_ERROR,</span><br><span>                   "MDCX: selected connection mode type requires an opposite end!\n");</span><br><span>               error_code = 527;</span><br><span style="color: hsl(0, 100%, 40%);">-               rate_ctr_inc(&rate_ctrs->ctr[MGCP_MDCX_FAIL_NO_REMOTE_CONN_DESC]);</span><br><span style="color: hsl(120, 100%, 40%);">+             rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_MDCX_FAIL_NO_REMOTE_CONN_DESC));</span><br><span>                 goto error3;</span><br><span>         }</span><br><span> </span><br><span>@@ -1185,13 +1185,13 @@</span><br><span>              osmo_strlcpy(conn->end.local_addr, new_local_addr, sizeof(conn->end.local_addr));</span><br><span>              mgcp_free_rtp_port(&conn->end);</span><br><span>               if (allocate_port(endp, conn) != 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-                   rate_ctr_inc(&rate_ctrs->ctr[MGCP_CRCX_FAIL_BIND_PORT]);</span><br><span style="color: hsl(120, 100%, 40%);">+                       rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_CRCX_FAIL_BIND_PORT));</span><br><span>                   goto error3;</span><br><span>                 }</span><br><span>    }</span><br><span> </span><br><span>        if (setup_rtp_processing(endp, conn) != 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-            rate_ctr_inc(&rate_ctrs->ctr[MGCP_MDCX_FAIL_START_RTP]);</span><br><span style="color: hsl(120, 100%, 40%);">+               rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_MDCX_FAIL_START_RTP));</span><br><span>           goto error3;</span><br><span>         }</span><br><span> </span><br><span>@@ -1204,7 +1204,7 @@</span><br><span>                case MGCP_POLICY_REJECT:</span><br><span>                     LOGPCONN(conn->conn, DLMGCP, LOGL_NOTICE,</span><br><span>                                  "MDCX: rejected by policy\n");</span><br><span style="color: hsl(0, 100%, 40%);">-                       rate_ctr_inc(&rate_ctrs->ctr[MGCP_MDCX_FAIL_REJECTED_BY_POLICY]);</span><br><span style="color: hsl(120, 100%, 40%);">+                      rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_MDCX_FAIL_REJECTED_BY_POLICY));</span><br><span>                  if (silent)</span><br><span>                          goto out_silent;</span><br><span>                     return create_err_response(endp, 400, "MDCX", p->trans);</span><br><span>@@ -1213,7 +1213,7 @@</span><br><span>                        /* stop processing */</span><br><span>                        LOGPCONN(conn->conn, DLMGCP, LOGL_DEBUG,</span><br><span>                           "MDCX: deferred by policy\n");</span><br><span style="color: hsl(0, 100%, 40%);">-                       rate_ctr_inc(&rate_ctrs->ctr[MGCP_MDCX_DEFERRED_BY_POLICY]);</span><br><span style="color: hsl(120, 100%, 40%);">+                   rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_MDCX_DEFERRED_BY_POLICY));</span><br><span>                       return NULL;</span><br><span>                         break;</span><br><span>               case MGCP_POLICY_CONT:</span><br><span>@@ -1236,7 +1236,7 @@</span><br><span>           && endp->trunk->keepalive_interval != MGCP_KEEPALIVE_NEVER)</span><br><span>                send_dummy(endp, conn);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-     rate_ctr_inc(&rate_ctrs->ctr[MGCP_MDCX_SUCCESS]);</span><br><span style="color: hsl(120, 100%, 40%);">+      rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_MDCX_SUCCESS));</span><br><span>  if (silent)</span><br><span>          goto out_silent;</span><br><span> </span><br><span>@@ -1268,7 +1268,7 @@</span><br><span>                  "DLCX: deleting connection ...\n");</span><br><span> </span><br><span>   if (!mgcp_endp_avail(endp)) {</span><br><span style="color: hsl(0, 100%, 40%);">-           rate_ctr_inc(&rate_ctrs->ctr[MGCP_DLCX_FAIL_AVAIL]);</span><br><span style="color: hsl(120, 100%, 40%);">+           rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_DLCX_FAIL_AVAIL));</span><br><span>               LOGPENDP(endp, DLMGCP, LOGL_ERROR,</span><br><span>                    "DLCX: selected endpoint not available!\n");</span><br><span>              return create_err_response(NULL, 501, "DLCX", p->trans);</span><br><span>@@ -1278,14 +1278,14 @@</span><br><span>      if (endp->wildcarded_req) {</span><br><span>               LOGPENDP(endp, DLMGCP, LOGL_ERROR,</span><br><span>                    "DLCX: wildcarded endpoint names not supported.\n");</span><br><span style="color: hsl(0, 100%, 40%);">-         rate_ctr_inc(&rate_ctrs->ctr[MGCP_DLCX_FAIL_WILDCARD]);</span><br><span style="color: hsl(120, 100%, 40%);">+                rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_DLCX_FAIL_WILDCARD));</span><br><span>            return create_err_response(endp, 507, "DLCX", p->trans);</span><br><span>        }</span><br><span> </span><br><span>        if (llist_count(&endp->conns) <= 0) {</span><br><span>              LOGPENDP(endp, DLMGCP, LOGL_ERROR,</span><br><span>                    "DLCX: endpoint is not holding a connection.\n");</span><br><span style="color: hsl(0, 100%, 40%);">-            rate_ctr_inc(&rate_ctrs->ctr[MGCP_DLCX_FAIL_NO_CONN]);</span><br><span style="color: hsl(120, 100%, 40%);">+         rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_DLCX_FAIL_NO_CONN));</span><br><span>             return create_err_response(endp, 515, "DLCX", p->trans);</span><br><span>        }</span><br><span> </span><br><span>@@ -1297,14 +1297,14 @@</span><br><span>              case 'C':</span><br><span>                    if (mgcp_verify_call_id(endp, line + 3) != 0) {</span><br><span>                              error_code = 516;</span><br><span style="color: hsl(0, 100%, 40%);">-                               rate_ctr_inc(&rate_ctrs->ctr[MGCP_DLCX_FAIL_INVALID_CALLID]);</span><br><span style="color: hsl(120, 100%, 40%);">+                          rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_DLCX_FAIL_INVALID_CALLID));</span><br><span>                              goto error3;</span><br><span>                         }</span><br><span>                    break;</span><br><span>               case 'I':</span><br><span>                    conn_id = (const char *)line + 3;</span><br><span>                    if ((error_code = mgcp_verify_ci(endp, conn_id))) {</span><br><span style="color: hsl(0, 100%, 40%);">-                             rate_ctr_inc(&rate_ctrs->ctr[MGCP_DLCX_FAIL_INVALID_CONNID]);</span><br><span style="color: hsl(120, 100%, 40%);">+                          rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_DLCX_FAIL_INVALID_CONNID));</span><br><span>                              goto error3;</span><br><span>                         }</span><br><span>                    break;</span><br><span>@@ -1315,7 +1315,7 @@</span><br><span>                       LOGPENDP(endp, DLMGCP, LOGL_NOTICE,</span><br><span>                           "DLCX: Unhandled MGCP option: '%c'/%d\n",</span><br><span>                                  line[0], line[0]);</span><br><span style="color: hsl(0, 100%, 40%);">-                     rate_ctr_inc(&rate_ctrs->ctr[MGCP_DLCX_FAIL_UNHANDLED_PARAM]);</span><br><span style="color: hsl(120, 100%, 40%);">+                 rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_DLCX_FAIL_UNHANDLED_PARAM));</span><br><span>                     return create_err_response(NULL, 539, "DLCX", p->trans);</span><br><span>                        break;</span><br><span>               }</span><br><span>@@ -1328,14 +1328,14 @@</span><br><span>          switch (rc) {</span><br><span>                case MGCP_POLICY_REJECT:</span><br><span>                     LOGPENDP(endp, DLMGCP, LOGL_NOTICE, "DLCX: rejected by policy\n");</span><br><span style="color: hsl(0, 100%, 40%);">-                    rate_ctr_inc(&rate_ctrs->ctr[MGCP_DLCX_FAIL_REJECTED_BY_POLICY]);</span><br><span style="color: hsl(120, 100%, 40%);">+                      rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_DLCX_FAIL_REJECTED_BY_POLICY));</span><br><span>                  if (silent)</span><br><span>                          goto out_silent;</span><br><span>                     return create_err_response(endp, 400, "DLCX", p->trans);</span><br><span>                        break;</span><br><span>               case MGCP_POLICY_DEFER:</span><br><span>                      /* stop processing */</span><br><span style="color: hsl(0, 100%, 40%);">-                   rate_ctr_inc(&rate_ctrs->ctr[MGCP_DLCX_DEFERRED_BY_POLICY]);</span><br><span style="color: hsl(120, 100%, 40%);">+                   rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_DLCX_DEFERRED_BY_POLICY));</span><br><span>                       return NULL;</span><br><span>                         break;</span><br><span>               case MGCP_POLICY_CONT:</span><br><span>@@ -1354,7 +1354,7 @@</span><br><span>                        num_conns);</span><br><span> </span><br><span>             if (num_conns > 0)</span><br><span style="color: hsl(0, 100%, 40%);">-                   rate_ctr_add(&rate_ctrs->ctr[MGCP_DLCX_SUCCESS], num_conns);</span><br><span style="color: hsl(120, 100%, 40%);">+                   rate_ctr_add(rate_ctr_group_get_ctr(rate_ctrs, MGCP_DLCX_SUCCESS), num_conns);</span><br><span> </span><br><span>           mgcp_endp_release(endp);</span><br><span> </span><br><span>@@ -1367,7 +1367,7 @@</span><br><span>         /* Find the connection */</span><br><span>    conn = mgcp_conn_get_rtp(endp, conn_id);</span><br><span>     if (!conn) {</span><br><span style="color: hsl(0, 100%, 40%);">-            rate_ctr_inc(&rate_ctrs->ctr[MGCP_DLCX_FAIL_INVALID_CONNID]);</span><br><span style="color: hsl(120, 100%, 40%);">+          rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_DLCX_FAIL_INVALID_CONNID));</span><br><span>              goto error3;</span><br><span>         }</span><br><span>    /* save the statistics of the current connection */</span><br><span>@@ -1390,7 +1390,7 @@</span><br><span>  if (p->cfg->change_cb)</span><br><span>                 p->cfg->change_cb(endp, MGCP_ENDP_DLCX);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-      rate_ctr_inc(&rate_ctrs->ctr[MGCP_DLCX_SUCCESS]);</span><br><span style="color: hsl(120, 100%, 40%);">+      rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_DLCX_SUCCESS));</span><br><span>  if (silent)</span><br><span>          goto out_silent;</span><br><span>     return create_ok_resp_with_param(endp, 250, "DLCX", p->trans, stats);</span><br><span>diff --git a/src/libosmo-mgcp/mgcp_stat.c b/src/libosmo-mgcp/mgcp_stat.c</span><br><span>index 2e74238..89891b5 100644</span><br><span>--- a/src/libosmo-mgcp/mgcp_stat.c</span><br><span>+++ b/src/libosmo-mgcp/mgcp_stat.c</span><br><span>@@ -33,7 +33,7 @@</span><br><span> void calc_loss(struct mgcp_conn_rtp *conn, uint32_t *expected, int *loss)</span><br><span> {</span><br><span>        struct mgcp_rtp_state *state = &conn->state;</span><br><span style="color: hsl(0, 100%, 40%);">-     struct rate_ctr *packets_rx = &conn->rate_ctr_group->ctr[RTP_PACKETS_RX_CTR];</span><br><span style="color: hsl(120, 100%, 40%);">+       struct rate_ctr *packets_rx = rate_ctr_group_get_ctr(conn->rate_ctr_group, RTP_PACKETS_RX_CTR);</span><br><span> </span><br><span>       *expected = state->stats.cycles + state->stats.max_seq;</span><br><span>        *expected = *expected - state->stats.base_seq + 1;</span><br><span>@@ -74,10 +74,10 @@</span><br><span>  int ploss;</span><br><span>   int nchars;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- struct rate_ctr *packets_rx = &conn->rate_ctr_group->ctr[RTP_PACKETS_RX_CTR];</span><br><span style="color: hsl(0, 100%, 40%);">- struct rate_ctr *octets_rx = &conn->rate_ctr_group->ctr[RTP_OCTETS_RX_CTR];</span><br><span style="color: hsl(0, 100%, 40%);">-   struct rate_ctr *packets_tx = &conn->rate_ctr_group->ctr[RTP_PACKETS_TX_CTR];</span><br><span style="color: hsl(0, 100%, 40%);">- struct rate_ctr *octets_tx = &conn->rate_ctr_group->ctr[RTP_OCTETS_TX_CTR];</span><br><span style="color: hsl(120, 100%, 40%);">+ struct rate_ctr *packets_rx = rate_ctr_group_get_ctr(conn->rate_ctr_group, RTP_PACKETS_RX_CTR);</span><br><span style="color: hsl(120, 100%, 40%);">+    struct rate_ctr *octets_rx = rate_ctr_group_get_ctr(conn->rate_ctr_group, RTP_OCTETS_RX_CTR);</span><br><span style="color: hsl(120, 100%, 40%);">+      struct rate_ctr *packets_tx = rate_ctr_group_get_ctr(conn->rate_ctr_group, RTP_PACKETS_TX_CTR);</span><br><span style="color: hsl(120, 100%, 40%);">+    struct rate_ctr *octets_tx = rate_ctr_group_get_ctr(conn->rate_ctr_group, RTP_OCTETS_TX_CTR);</span><br><span> </span><br><span>         calc_loss(conn, &expected, &ploss);</span><br><span>  jitter = calc_jitter(&conn->state);</span><br><span>diff --git a/src/libosmo-mgcp/mgcp_vty.c b/src/libosmo-mgcp/mgcp_vty.c</span><br><span>index 5892df1..369c1c1 100644</span><br><span>--- a/src/libosmo-mgcp/mgcp_vty.c</span><br><span>+++ b/src/libosmo-mgcp/mgcp_vty.c</span><br><span>@@ -169,11 +169,11 @@</span><br><span>  struct rate_ctr *rx_packets, *rx_bytes;</span><br><span>      struct rate_ctr *dropped_packets;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   tx_packets = &conn->rate_ctr_group->ctr[RTP_PACKETS_TX_CTR];</span><br><span style="color: hsl(0, 100%, 40%);">-  tx_bytes = &conn->rate_ctr_group->ctr[RTP_OCTETS_TX_CTR];</span><br><span style="color: hsl(0, 100%, 40%);">-     rx_packets = &conn->rate_ctr_group->ctr[RTP_PACKETS_RX_CTR];</span><br><span style="color: hsl(0, 100%, 40%);">-  rx_bytes = &conn->rate_ctr_group->ctr[RTP_OCTETS_RX_CTR];</span><br><span style="color: hsl(0, 100%, 40%);">-     dropped_packets = &conn->rate_ctr_group->ctr[RTP_DROPPED_PACKETS_CTR];</span><br><span style="color: hsl(120, 100%, 40%);">+      tx_packets = rate_ctr_group_get_ctr(conn->rate_ctr_group, RTP_PACKETS_TX_CTR);</span><br><span style="color: hsl(120, 100%, 40%);">+     tx_bytes = rate_ctr_group_get_ctr(conn->rate_ctr_group, RTP_OCTETS_TX_CTR);</span><br><span style="color: hsl(120, 100%, 40%);">+        rx_packets = rate_ctr_group_get_ctr(conn->rate_ctr_group, RTP_PACKETS_RX_CTR);</span><br><span style="color: hsl(120, 100%, 40%);">+     rx_bytes = rate_ctr_group_get_ctr(conn->rate_ctr_group, RTP_OCTETS_RX_CTR);</span><br><span style="color: hsl(120, 100%, 40%);">+        dropped_packets = rate_ctr_group_get_ctr(conn->rate_ctr_group, RTP_DROPPED_PACKETS_CTR);</span><br><span> </span><br><span>      vty_out(vty,</span><br><span>                 "   Packets Sent: %" PRIu64 " (%" PRIu64 " bytes total)%s"</span><br><span>diff --git a/tests/mgcp/mgcp_test.c b/tests/mgcp/mgcp_test.c</span><br><span>index 620b0d1..74ecfe8 100644</span><br><span>--- a/tests/mgcp/mgcp_test.c</span><br><span>+++ b/tests/mgcp/mgcp_test.c</span><br><span>@@ -1071,7 +1071,7 @@</span><br><span>                                    "test-connection");</span><br><span>            conn = mgcp_conn_get_rtp(&endp, _conn->id);</span><br><span>           state = &conn->state;</span><br><span style="color: hsl(0, 100%, 40%);">-            packets_rx = &conn->rate_ctr_group->ctr[RTP_PACKETS_RX_CTR];</span><br><span style="color: hsl(120, 100%, 40%);">+                packets_rx = rate_ctr_group_get_ctr(conn->rate_ctr_group, RTP_PACKETS_RX_CTR);</span><br><span> </span><br><span>                state->stats.initialized = 1;</span><br><span>             state->stats.base_seq = pl_test_dat[i].base_seq;</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-mgw/+/24554">change 24554</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/+/24554"/><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: I53b75ea8a88bc1ae4ceb479ed272865054de9665 </div>
<div style="display:none"> Gerrit-Change-Number: 24554 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>