<p>pespin has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/libosmocore/+/24561">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:<br>"""<br>@@<br>expression E1, E2;<br>@@<br>- &E2->ctr[E1]<br>+ rate_ctr_group_get_ctr(E2, E1)<br>"""<br><br>"""<br>@@<br>expression E1, E2, E3;<br>@@<br>- E2->items[E1]<br>+ osmo_stat_item_group_get_item(E2, E1)<br>"""<br><br>Change-Id: I41297a8df68e28dfc6016330ac82b0ed5dd0ebc1<br>---<br>M src/ctrl/control_if.c<br>M src/gb/gprs_bssgp.c<br>M src/gb/gprs_bssgp_bss.c<br>M src/gb/gprs_ns.c<br>M src/gb/gprs_ns2.c<br>M src/gb/gprs_ns2_fr.c<br>M src/gb/gprs_ns2_message.c<br>M src/gb/gprs_ns2_vc_fsm.c<br>M tests/gb/gprs_ns_test.c<br>M tests/stats/stats_test.c<br>10 files changed, 93 insertions(+), 93 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/61/24561/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/ctrl/control_if.c b/src/ctrl/control_if.c</span><br><span>index 5eb81c7..d117fcf 100644</span><br><span>--- a/src/ctrl/control_if.c</span><br><span>+++ b/src/ctrl/control_if.c</span><br><span>@@ -589,12 +589,12 @@</span><br><span>       }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static int get_rate_ctr_group_idx(const struct rate_ctr_group *ctrg, int intv, struct ctrl_cmd *cmd)</span><br><span style="color: hsl(120, 100%, 40%);">+static int get_rate_ctr_group_idx(struct rate_ctr_group *ctrg, int intv, struct ctrl_cmd *cmd)</span><br><span> {</span><br><span>  unsigned int i;</span><br><span>      for (i = 0; i < ctrg->desc->num_ctr; i++) {</span><br><span>                 ctrl_cmd_reply_printf(cmd, "%s %"PRIu64";", ctrg->desc->ctr_desc[i].name,</span><br><span style="color: hsl(0, 100%, 40%);">-                                   get_rate_ctr_value(&ctrg->ctr[i], intv, ctrg->desc->group_name_prefix));</span><br><span style="color: hsl(120, 100%, 40%);">+                                 get_rate_ctr_value(rate_ctr_group_get_ctr(ctrg, i), intv, ctrg->desc->group_name_prefix));</span><br><span>               if (!cmd->reply) {</span><br><span>                        cmd->reply = "OOM";</span><br><span>                     return CTRL_CMD_ERROR;</span><br><span>diff --git a/src/gb/gprs_bssgp.c b/src/gb/gprs_bssgp.c</span><br><span>index 207c9a8..14a5e9d 100644</span><br><span>--- a/src/gb/gprs_bssgp.c</span><br><span>+++ b/src/gb/gprs_bssgp.c</span><br><span>@@ -441,7 +441,7 @@</span><br><span>                return bssgp_tx_status(BSSGP_CAUSE_UNKNOWN_BVCI, &bvci, msg);</span><br><span> </span><br><span>        ptp_ctx->state |= BVC_S_BLOCKED;</span><br><span style="color: hsl(0, 100%, 40%);">-     rate_ctr_inc(&ptp_ctx->ctrg->ctr[BSSGP_CTR_BLOCKED]);</span><br><span style="color: hsl(120, 100%, 40%);">+       rate_ctr_inc(rate_ctr_group_get_ctr(ptp_ctx->ctrg, BSSGP_CTR_BLOCKED));</span><br><span> </span><br><span>       /* Send NM_BVC_BLOCK.ind to NM */</span><br><span>    memset(&nmp, 0, sizeof(nmp));</span><br><span>@@ -634,7 +634,7 @@</span><br><span>      DEBUGP(DLBSSGP, "BSSGP BVCI=%u TLLI=%08x Rx LLC DISCARDED\n",</span><br><span>              ctx->bvci, tlli);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        rate_ctr_inc(&ctx->ctrg->ctr[BSSGP_CTR_DISCARDED]);</span><br><span style="color: hsl(120, 100%, 40%);">+ rate_ctr_inc(rate_ctr_group_get_ctr(ctx->ctrg, BSSGP_CTR_DISCARDED));</span><br><span> </span><br><span>         /* send NM_LLC_DISCARDED to NM */</span><br><span>    memset(&nmp, 0, sizeof(nmp));</span><br><span>@@ -675,7 +675,7 @@</span><br><span>      }</span><br><span> </span><br><span>        if (bctx)</span><br><span style="color: hsl(0, 100%, 40%);">-               rate_ctr_inc(&bctx->ctrg->ctr[BSSGP_CTR_STATUS]);</span><br><span style="color: hsl(120, 100%, 40%);">+           rate_ctr_inc(rate_ctr_group_get_ctr(bctx->ctrg, BSSGP_CTR_STATUS));</span><br><span> </span><br><span>   /* send NM_STATUS to NM */</span><br><span>   memset(&nmp, 0, sizeof(nmp));</span><br><span>@@ -1194,8 +1194,8 @@</span><br><span> </span><br><span>        if (bctx) {</span><br><span>          log_set_context(LOG_CTX_GB_BVC, bctx);</span><br><span style="color: hsl(0, 100%, 40%);">-          rate_ctr_inc(&bctx->ctrg->ctr[BSSGP_CTR_PKTS_IN]);</span><br><span style="color: hsl(0, 100%, 40%);">-            rate_ctr_add(&bctx->ctrg->ctr[BSSGP_CTR_BYTES_IN],</span><br><span style="color: hsl(120, 100%, 40%);">+          rate_ctr_inc(rate_ctr_group_get_ctr(bctx->ctrg, BSSGP_CTR_PKTS_IN));</span><br><span style="color: hsl(120, 100%, 40%);">+               rate_ctr_add(rate_ctr_group_get_ctr(bctx->ctrg, BSSGP_CTR_BYTES_IN),</span><br><span>                           msgb_bssgp_len(msg));</span><br><span>   }</span><br><span> </span><br><span>@@ -1319,8 +1319,8 @@</span><br><span>        budh->tlli = osmo_htonl(msgb_tlli(msg));</span><br><span>  budh->pdu_type = BSSGP_PDUT_DL_UNITDATA;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- rate_ctr_inc(&bctx->ctrg->ctr[BSSGP_CTR_PKTS_OUT]);</span><br><span style="color: hsl(0, 100%, 40%);">-   rate_ctr_add(&bctx->ctrg->ctr[BSSGP_CTR_BYTES_OUT], msg->len);</span><br><span style="color: hsl(120, 100%, 40%);">+   rate_ctr_inc(rate_ctr_group_get_ctr(bctx->ctrg, BSSGP_CTR_PKTS_OUT));</span><br><span style="color: hsl(120, 100%, 40%);">+      rate_ctr_add(rate_ctr_group_get_ctr(bctx->ctrg, BSSGP_CTR_BYTES_OUT), msg->len);</span><br><span> </span><br><span>   /* Identifiers down: BVCI, NSEI (in msgb->cb) */</span><br><span> </span><br><span>diff --git a/src/gb/gprs_bssgp_bss.c b/src/gb/gprs_bssgp_bss.c</span><br><span>index a066e91..8230d87 100644</span><br><span>--- a/src/gb/gprs_bssgp_bss.c</span><br><span>+++ b/src/gb/gprs_bssgp_bss.c</span><br><span>@@ -466,8 +466,8 @@</span><br><span>       msgb_nsei(msg) = bctx->nsei;</span><br><span>      msgb_bvci(msg) = bctx->bvci;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-     rate_ctr_inc(&bctx->ctrg->ctr[BSSGP_CTR_PKTS_OUT]);</span><br><span style="color: hsl(0, 100%, 40%);">-   rate_ctr_add(&bctx->ctrg->ctr[BSSGP_CTR_BYTES_OUT], msg->len);</span><br><span style="color: hsl(120, 100%, 40%);">+   rate_ctr_inc(rate_ctr_group_get_ctr(bctx->ctrg, BSSGP_CTR_PKTS_OUT));</span><br><span style="color: hsl(120, 100%, 40%);">+      rate_ctr_add(rate_ctr_group_get_ctr(bctx->ctrg, BSSGP_CTR_BYTES_OUT), msg->len);</span><br><span> </span><br><span>   return bssgp_ns_send(bssgp_ns_send_data, msg);</span><br><span> }</span><br><span>diff --git a/src/gb/gprs_ns.c b/src/gb/gprs_ns.c</span><br><span>index f486333..6046dea 100644</span><br><span>--- a/src/gb/gprs_ns.c</span><br><span>+++ b/src/gb/gprs_ns.c</span><br><span>@@ -486,8 +486,8 @@</span><br><span>       }</span><br><span> </span><br><span>        /* Increment number of Uplink bytes */</span><br><span style="color: hsl(0, 100%, 40%);">-  rate_ctr_inc(&nsvc->ctrg->ctr[NS_CTR_PKTS_OUT]);</span><br><span style="color: hsl(0, 100%, 40%);">-      rate_ctr_add(&nsvc->ctrg->ctr[NS_CTR_BYTES_OUT], msgb_l2len(msg));</span><br><span style="color: hsl(120, 100%, 40%);">+  rate_ctr_inc(rate_ctr_group_get_ctr(nsvc->ctrg, NS_CTR_PKTS_OUT));</span><br><span style="color: hsl(120, 100%, 40%);">+ rate_ctr_add(rate_ctr_group_get_ctr(nsvc->ctrg, NS_CTR_BYTES_OUT), msgb_l2len(msg));</span><br><span> </span><br><span>  switch (nsvc->ll) {</span><br><span>       case GPRS_NS_LL_UDP:</span><br><span>@@ -643,7 +643,7 @@</span><br><span> </span><br><span>       /* be conservative and mark it as blocked even now! */</span><br><span>       ns_mark_blocked(nsvc);</span><br><span style="color: hsl(0, 100%, 40%);">-  rate_ctr_inc(&nsvc->ctrg->ctr[NS_CTR_BLOCKED]);</span><br><span style="color: hsl(120, 100%, 40%);">+     rate_ctr_inc(rate_ctr_group_get_ctr(nsvc->ctrg, NS_CTR_BLOCKED));</span><br><span> </span><br><span>     msg->l2h = msgb_put(msg, sizeof(*nsh));</span><br><span>   nsh = (struct gprs_ns_hdr *) msg->l2h;</span><br><span>@@ -781,15 +781,15 @@</span><br><span>    switch (nsvc->timer_mode) {</span><br><span>       case NSVC_TIMER_TNS_ALIVE:</span><br><span>           /* Tns-alive case: we expired without response ! */</span><br><span style="color: hsl(0, 100%, 40%);">-             rate_ctr_inc(&nsvc->ctrg->ctr[NS_CTR_LOST_ALIVE]);</span><br><span style="color: hsl(120, 100%, 40%);">+          rate_ctr_inc(rate_ctr_group_get_ctr(nsvc->ctrg, NS_CTR_LOST_ALIVE));</span><br><span>              nsvc->alive_retries++;</span><br><span>            if (nsvc->alive_retries ></span><br><span>                      nsvc->nsi->timeout[NS_TOUT_TNS_ALIVE_RETRIES]) {</span><br><span>                       /* mark as dead (and blocked unless IP-SNS) */</span><br><span style="color: hsl(0, 100%, 40%);">-                  rate_ctr_inc(&nsvc->ctrg->ctr[NS_CTR_DEAD]);</span><br><span style="color: hsl(120, 100%, 40%);">+                        rate_ctr_inc(rate_ctr_group_get_ctr(nsvc->ctrg, NS_CTR_DEAD));</span><br><span>                    if (!nsvc->nsi->bss_sns_fi && nsvc->nsi->nsip.use_reset_block_unblock) {</span><br><span>                                 ns_set_state(nsvc, NSE_S_BLOCKED);</span><br><span style="color: hsl(0, 100%, 40%);">-                              rate_ctr_inc(&nsvc->ctrg->ctr[NS_CTR_BLOCKED]);</span><br><span style="color: hsl(120, 100%, 40%);">+                             rate_ctr_inc(rate_ctr_group_get_ctr(nsvc->ctrg, NS_CTR_BLOCKED));</span><br><span>                         } else</span><br><span>                               ns_set_state(nsvc, 0);</span><br><span>                       LOGP(DNS, LOGL_NOTICE,</span><br><span>@@ -816,7 +816,7 @@</span><br><span>                 nsvc_start_timer(nsvc, NSVC_TIMER_TNS_ALIVE);</span><br><span>                break;</span><br><span>       case NSVC_TIMER_TNS_RESET:</span><br><span style="color: hsl(0, 100%, 40%);">-              rate_ctr_inc(&nsvc->ctrg->ctr[NS_CTR_LOST_RESET]);</span><br><span style="color: hsl(120, 100%, 40%);">+          rate_ctr_inc(rate_ctr_group_get_ctr(nsvc->ctrg, NS_CTR_LOST_RESET));</span><br><span>              if (!(nsvc->state & NSE_S_RESET))</span><br><span>                     LOGP(DNS, LOGL_NOTICE,</span><br><span>                               "NSEI=%u Reset timed out but RESET flag is not set\n",</span><br><span>@@ -1251,7 +1251,7 @@</span><br><span>                     ns_osmo_signal_dispatch_mismatch(*nsvc, msg,</span><br><span>                                                          NS_PDUT_RESET,</span><br><span>                                                       NS_IE_VCI);</span><br><span style="color: hsl(0, 100%, 40%);">-                    rate_ctr_inc(&(*nsvc)->ctrg->ctr[NS_CTR_INV_VCI]);</span><br><span style="color: hsl(120, 100%, 40%);">+                  rate_ctr_inc(rate_ctr_group_get_ctr((*nsvc)->ctrg, NS_CTR_INV_VCI));</span><br><span>                      gprs_ns_tx_reset_ack(*nsvc);</span><br><span>                         return 0;</span><br><span>            }</span><br><span>@@ -1277,14 +1277,14 @@</span><br><span>                  ns_osmo_signal_dispatch_mismatch(*nsvc, msg,</span><br><span>                                                          NS_PDUT_RESET,</span><br><span>                                                       NS_IE_NSEI);</span><br><span style="color: hsl(0, 100%, 40%);">-                   rate_ctr_inc(&(*nsvc)->ctrg->ctr[NS_CTR_INV_NSEI]);</span><br><span style="color: hsl(120, 100%, 40%);">+                 rate_ctr_inc(rate_ctr_group_get_ctr((*nsvc)->ctrg, NS_CTR_INV_NSEI));</span><br><span>                     rc = gprs_ns_tx_reset_ack(*nsvc);</span><br><span>                    CHECK_TX_RC(rc, *nsvc);</span><br><span>                      return 0;</span><br><span>            }</span><br><span> </span><br><span>                /* NSEI has changed */</span><br><span style="color: hsl(0, 100%, 40%);">-          rate_ctr_inc(&(*nsvc)->ctrg->ctr[NS_CTR_NSEI_CHG]);</span><br><span style="color: hsl(120, 100%, 40%);">+         rate_ctr_inc(rate_ctr_group_get_ctr((*nsvc)->ctrg, NS_CTR_NSEI_CHG));</span><br><span>             (*nsvc)->nsei = nsei;</span><br><span>     }</span><br><span> </span><br><span>@@ -1292,7 +1292,7 @@</span><br><span>        ns_set_state(*nsvc, NSE_S_BLOCKED | NSE_S_ALIVE);</span><br><span> </span><br><span>        if (orig_nsvc) {</span><br><span style="color: hsl(0, 100%, 40%);">-                rate_ctr_inc(&(*nsvc)->ctrg->ctr[NS_CTR_REPLACED]);</span><br><span style="color: hsl(120, 100%, 40%);">+         rate_ctr_inc(rate_ctr_group_get_ctr((*nsvc)->ctrg, NS_CTR_REPLACED));</span><br><span>             ns_osmo_signal_dispatch_replaced(*nsvc, orig_nsvc);</span><br><span> </span><br><span>              /* Update the ll info fields */</span><br><span>@@ -1390,7 +1390,7 @@</span><br><span>                      ns_osmo_signal_dispatch_mismatch(*nsvc, msg,</span><br><span>                                                          NS_PDUT_RESET_ACK,</span><br><span>                                                   NS_IE_VCI);</span><br><span style="color: hsl(0, 100%, 40%);">-                    rate_ctr_inc(&(*nsvc)->ctrg->ctr[NS_CTR_INV_VCI]);</span><br><span style="color: hsl(120, 100%, 40%);">+                  rate_ctr_inc(rate_ctr_group_get_ctr((*nsvc)->ctrg, NS_CTR_INV_VCI));</span><br><span>                      LOGP(DNS, LOGL_ERROR,</span><br><span>                             "NS RESET ACK Unknown NS-VCI %d (%s NSEI=%d) "</span><br><span>                             "from %s\n",</span><br><span>@@ -1401,7 +1401,7 @@</span><br><span>          }</span><br><span> </span><br><span>                /* Notify others */</span><br><span style="color: hsl(0, 100%, 40%);">-             rate_ctr_inc(&(*nsvc)->ctrg->ctr[NS_CTR_REPLACED]);</span><br><span style="color: hsl(120, 100%, 40%);">+         rate_ctr_inc(rate_ctr_group_get_ctr((*nsvc)->ctrg, NS_CTR_REPLACED));</span><br><span>             ns_osmo_signal_dispatch_replaced(*nsvc, orig_nsvc);</span><br><span> </span><br><span>              /* Update the ll info fields */</span><br><span>@@ -1415,7 +1415,7 @@</span><br><span>                      ns_osmo_signal_dispatch_mismatch(*nsvc, msg,</span><br><span>                                                          NS_PDUT_RESET_ACK,</span><br><span>                                                   NS_IE_NSEI);</span><br><span style="color: hsl(0, 100%, 40%);">-                   rate_ctr_inc(&(*nsvc)->ctrg->ctr[NS_CTR_INV_NSEI]);</span><br><span style="color: hsl(120, 100%, 40%);">+                 rate_ctr_inc(rate_ctr_group_get_ctr((*nsvc)->ctrg, NS_CTR_INV_NSEI));</span><br><span>                     LOGP(DNS, LOGL_ERROR,</span><br><span>                             "NS RESET ACK Unknown NSEI %d (NS-VCI=%u) from %s\n",</span><br><span>                              nsei, nsvci, gprs_ns_ll_str(*nsvc));</span><br><span>@@ -1423,14 +1423,14 @@</span><br><span>          }</span><br><span> </span><br><span>                /* NSEI has changed */</span><br><span style="color: hsl(0, 100%, 40%);">-          rate_ctr_inc(&(*nsvc)->ctrg->ctr[NS_CTR_NSEI_CHG]);</span><br><span style="color: hsl(120, 100%, 40%);">+         rate_ctr_inc(rate_ctr_group_get_ctr((*nsvc)->ctrg, NS_CTR_NSEI_CHG));</span><br><span>             (*nsvc)->nsei = nsei;</span><br><span>     }</span><br><span> </span><br><span>        /* Mark NS-VC as blocked and alive */</span><br><span>        ns_set_state(*nsvc, NSE_S_BLOCKED | NSE_S_ALIVE);</span><br><span>    ns_set_remote_state(*nsvc, NSE_S_BLOCKED | NSE_S_ALIVE);</span><br><span style="color: hsl(0, 100%, 40%);">-        rate_ctr_inc(&(*nsvc)->ctrg->ctr[NS_CTR_BLOCKED]);</span><br><span style="color: hsl(120, 100%, 40%);">+  rate_ctr_inc(rate_ctr_group_get_ctr((*nsvc)->ctrg, NS_CTR_BLOCKED));</span><br><span>      if ((*nsvc)->persistent || (*nsvc)->remote_end_is_sgsn) {</span><br><span>              /* stop RESET timer */</span><br><span>               osmo_timer_del(&(*nsvc)->timer);</span><br><span>@@ -1471,7 +1471,7 @@</span><br><span>      //nsvci = (uint16_t *) TLVP_VAL(&tp, NS_IE_VCI);</span><br><span> </span><br><span>     ns_osmo_signal_dispatch(nsvc, S_NS_BLOCK, *cause);</span><br><span style="color: hsl(0, 100%, 40%);">-      rate_ctr_inc(&nsvc->ctrg->ctr[NS_CTR_BLOCKED]);</span><br><span style="color: hsl(120, 100%, 40%);">+     rate_ctr_inc(rate_ctr_group_get_ctr(nsvc->ctrg, NS_CTR_BLOCKED));</span><br><span> </span><br><span>     return gprs_ns_tx_block_ack(nsvc);</span><br><span> }</span><br><span>@@ -1705,7 +1705,7 @@</span><br><span>              existing_nsvc->nsei  = nsei;</span><br><span> </span><br><span>          /* Do statistics */</span><br><span style="color: hsl(0, 100%, 40%);">-             rate_ctr_inc(&existing_nsvc->ctrg->ctr[NS_CTR_NSEI_CHG]);</span><br><span style="color: hsl(120, 100%, 40%);">+           rate_ctr_inc(rate_ctr_group_get_ctr(existing_nsvc->ctrg, NS_CTR_NSEI_CHG));</span><br><span>       }</span><br><span> </span><br><span>        *new_nsvc = existing_nsvc;</span><br><span>@@ -1734,8 +1734,8 @@</span><br><span>   log_set_context(LOG_CTX_GB_NSVC, *nsvc);</span><br><span> </span><br><span>         /* Increment number of Incoming bytes */</span><br><span style="color: hsl(0, 100%, 40%);">-        rate_ctr_inc(&(*nsvc)->ctrg->ctr[NS_CTR_PKTS_IN]);</span><br><span style="color: hsl(0, 100%, 40%);">-    rate_ctr_add(&(*nsvc)->ctrg->ctr[NS_CTR_BYTES_IN], msgb_l2len(msg));</span><br><span style="color: hsl(120, 100%, 40%);">+        rate_ctr_inc(rate_ctr_group_get_ctr((*nsvc)->ctrg, NS_CTR_PKTS_IN));</span><br><span style="color: hsl(120, 100%, 40%);">+       rate_ctr_add(rate_ctr_group_get_ctr((*nsvc)->ctrg, NS_CTR_BYTES_IN), msgb_l2len(msg));</span><br><span> </span><br><span>        if (nsvc_is_not_used(*nsvc) && !ns_is_sns(nsh->pdu_type) && nsh->pdu_type != NS_PDUT_STATUS) {</span><br><span>                 LOGP(DNS, LOGL_NOTICE, "NSEI=%u Rx %s on unused/pre-configured endpoint, discarding\n",</span><br><span>@@ -1762,7 +1762,7 @@</span><br><span>    case NS_PDUT_ALIVE_ACK:</span><br><span>              ns_mark_alive(*nsvc);</span><br><span>                if ((*nsvc)->timer_mode == NSVC_TIMER_TNS_ALIVE)</span><br><span style="color: hsl(0, 100%, 40%);">-                     osmo_stat_item_set((*nsvc)->statg->items[NS_STAT_ALIVE_DELAY],</span><br><span style="color: hsl(120, 100%, 40%);">+                  osmo_stat_item_set(osmo_stat_item_group_get_item((*nsvc)->statg, NS_STAT_ALIVE_DELAY),</span><br><span>                            nsvc_timer_elapsed_ms(*nsvc));</span><br><span>               /* stop Tns-alive and start Tns-test */</span><br><span>              nsvc_start_timer(*nsvc, NSVC_TIMER_TNS_TEST);</span><br><span>diff --git a/src/gb/gprs_ns2.c b/src/gb/gprs_ns2.c</span><br><span>index 1148d6f..d72f34e 100644</span><br><span>--- a/src/gb/gprs_ns2.c</span><br><span>+++ b/src/gb/gprs_ns2.c</span><br><span>@@ -1255,8 +1255,8 @@</span><br><span>       log_set_context(LOG_CTX_GB_NSE, nsvc->nse);</span><br><span>       log_set_context(LOG_CTX_GB_NSVC, nsvc);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-     rate_ctr_inc(&nsvc->ctrg->ctr[NS_CTR_PKTS_IN]);</span><br><span style="color: hsl(0, 100%, 40%);">-       rate_ctr_add(&nsvc->ctrg->ctr[NS_CTR_BYTES_IN], msg->len);</span><br><span style="color: hsl(120, 100%, 40%);">+       rate_ctr_inc(rate_ctr_group_get_ctr(nsvc->ctrg, NS_CTR_PKTS_IN));</span><br><span style="color: hsl(120, 100%, 40%);">+  rate_ctr_add(rate_ctr_group_get_ctr(nsvc->ctrg, NS_CTR_BYTES_IN), msg->len);</span><br><span> </span><br><span>       if (msg->len < sizeof(struct gprs_ns_hdr)) {</span><br><span>           rc = -EINVAL;</span><br><span>diff --git a/src/gb/gprs_ns2_fr.c b/src/gb/gprs_ns2_fr.c</span><br><span>index 84f3784..7791094 100644</span><br><span>--- a/src/gb/gprs_ns2_fr.c</span><br><span>+++ b/src/gb/gprs_ns2_fr.c</span><br><span>@@ -347,7 +347,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(0, 100%, 40%);">-       osmo_stat_item_inc(bind->statg->items[NS2_BIND_STAT_BACKLOG_LEN], 1);</span><br><span style="color: hsl(120, 100%, 40%);">+   osmo_stat_item_inc(osmo_stat_item_group_get_item(bind->statg, 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>@@ -355,7 +355,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(0, 100%, 40%);">-  osmo_stat_item_inc(bind->statg->items[NS2_BIND_STAT_BACKLOG_LEN], 1);</span><br><span style="color: hsl(120, 100%, 40%);">+   osmo_stat_item_inc(osmo_stat_item_group_get_item(bind->statg, 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>@@ -439,7 +439,7 @@</span><br><span>                       llist_add(&msg->list, &priv->backlog.list);</span><br><span>                    break;</span><br><span>               }</span><br><span style="color: hsl(0, 100%, 40%);">-               osmo_stat_item_dec(bind->statg->items[NS2_BIND_STAT_BACKLOG_LEN], 1);</span><br><span style="color: hsl(120, 100%, 40%);">+           osmo_stat_item_dec(osmo_stat_item_group_get_item(bind->statg, NS2_BIND_STAT_BACKLOG_LEN), 1);</span><br><span>     }</span><br><span> </span><br><span> restart_timer:</span><br><span>diff --git a/src/gb/gprs_ns2_message.c b/src/gb/gprs_ns2_message.c</span><br><span>index 93341bb..ad115ef 100644</span><br><span>--- a/src/gb/gprs_ns2_message.c</span><br><span>+++ b/src/gb/gprs_ns2_message.c</span><br><span>@@ -174,11 +174,11 @@</span><br><span> </span><br><span>         rc = nsvc->bind->send_vc(nsvc, msg);</span><br><span>   if (rc < 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-                rate_ctr_inc(&nsvc->ctrg->ctr[NS_CTR_PKTS_OUT_DROP]);</span><br><span style="color: hsl(0, 100%, 40%);">-         rate_ctr_add(&nsvc->ctrg->ctr[NS_CTR_BYTES_OUT_DROP], bytes);</span><br><span style="color: hsl(120, 100%, 40%);">+               rate_ctr_inc(rate_ctr_group_get_ctr(nsvc->ctrg, NS_CTR_PKTS_OUT_DROP));</span><br><span style="color: hsl(120, 100%, 40%);">+            rate_ctr_add(rate_ctr_group_get_ctr(nsvc->ctrg, NS_CTR_BYTES_OUT_DROP), bytes);</span><br><span>   } else {</span><br><span style="color: hsl(0, 100%, 40%);">-                rate_ctr_inc(&nsvc->ctrg->ctr[NS_CTR_PKTS_OUT]);</span><br><span style="color: hsl(0, 100%, 40%);">-              rate_ctr_add(&nsvc->ctrg->ctr[NS_CTR_BYTES_OUT], bytes);</span><br><span style="color: hsl(120, 100%, 40%);">+            rate_ctr_inc(rate_ctr_group_get_ctr(nsvc->ctrg, NS_CTR_PKTS_OUT));</span><br><span style="color: hsl(120, 100%, 40%);">+         rate_ctr_add(rate_ctr_group_get_ctr(nsvc->ctrg, NS_CTR_BYTES_OUT), bytes);</span><br><span>        }</span><br><span> </span><br><span>        return rc;</span><br><span>@@ -223,7 +223,7 @@</span><br><span>     if (!msg)</span><br><span>            return -ENOMEM;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-     rate_ctr_inc(&nsvc->ctrg->ctr[NS_CTR_BLOCKED]);</span><br><span style="color: hsl(120, 100%, 40%);">+     rate_ctr_inc(rate_ctr_group_get_ctr(nsvc->ctrg, NS_CTR_BLOCKED));</span><br><span> </span><br><span>     msg->l2h = msgb_put(msg, sizeof(*nsh));</span><br><span>   nsh = (struct gprs_ns_hdr *) msg->l2h;</span><br><span>diff --git a/src/gb/gprs_ns2_vc_fsm.c b/src/gb/gprs_ns2_vc_fsm.c</span><br><span>index 7ed8299..341a5a1 100644</span><br><span>--- a/src/gb/gprs_ns2_vc_fsm.c</span><br><span>+++ b/src/gb/gprs_ns2_vc_fsm.c</span><br><span>@@ -209,7 +209,7 @@</span><br><span> </span><br><span>     priv->alive.mode = NS_TOUT_TNS_TEST;</span><br><span>      osmo_timer_schedule(&priv->alive.timer, nsi->timeout[NS_TOUT_TNS_TEST], 0);</span><br><span style="color: hsl(0, 100%, 40%);">-   osmo_stat_item_set(nsvc->statg->items[NS_STAT_ALIVE_DELAY],</span><br><span style="color: hsl(120, 100%, 40%);">+     osmo_stat_item_set(osmo_stat_item_group_get_item(nsvc->statg, NS_STAT_ALIVE_DELAY),</span><br><span>               alive_timer_elapsed_ms(priv));</span><br><span> }</span><br><span> </span><br><span>@@ -229,7 +229,7 @@</span><br><span>                osmo_timer_schedule(&priv->alive.timer, nsi->timeout[NS_TOUT_TNS_ALIVE], 0);</span><br><span>               break;</span><br><span>       case NS_TOUT_TNS_ALIVE:</span><br><span style="color: hsl(0, 100%, 40%);">-         rate_ctr_inc(&priv->nsvc->ctrg->ctr[NS_CTR_LOST_ALIVE]);</span><br><span style="color: hsl(120, 100%, 40%);">+         rate_ctr_inc(rate_ctr_group_get_ctr(priv->nsvc->ctrg, NS_CTR_LOST_ALIVE));</span><br><span>             priv->alive.N++;</span><br><span> </span><br><span>              if (priv->alive.N <= nsi->timeout[NS_TOUT_TNS_ALIVE_RETRIES]) {</span><br><span>@@ -335,7 +335,7 @@</span><br><span> </span><br><span>   if (old_state != GPRS_NS2_ST_BLOCKED) {</span><br><span>              priv->N = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-         rate_ctr_inc(&priv->nsvc->ctrg->ctr[NS_CTR_BLOCKED]);</span><br><span style="color: hsl(120, 100%, 40%);">+            rate_ctr_inc(rate_ctr_group_get_ctr(priv->nsvc->ctrg, NS_CTR_BLOCKED));</span><br><span>        }</span><br><span> </span><br><span>        if (priv->om_blocked) {</span><br><span>@@ -410,7 +410,7 @@</span><br><span>     struct gprs_ns2_nse *nse = nsvc->nse;</span><br><span> </span><br><span>         if (old_state != GPRS_NS2_ST_UNBLOCKED)</span><br><span style="color: hsl(0, 100%, 40%);">-         rate_ctr_inc(&nsvc->ctrg->ctr[NS_CTR_UNBLOCKED]);</span><br><span style="color: hsl(120, 100%, 40%);">+           rate_ctr_inc(rate_ctr_group_get_ctr(nsvc->ctrg, NS_CTR_UNBLOCKED));</span><br><span> </span><br><span>   priv->accept_unitdata = true;</span><br><span>     ns2_nse_notify_unblocked(nsvc, true);</span><br><span>@@ -525,7 +525,7 @@</span><br><span>  switch (fi->state) {</span><br><span>      case GPRS_NS2_ST_RESET:</span><br><span>              if (priv->initiate_reset) {</span><br><span style="color: hsl(0, 100%, 40%);">-                  rate_ctr_inc(&priv->nsvc->ctrg->ctr[NS_CTR_LOST_RESET]);</span><br><span style="color: hsl(120, 100%, 40%);">+                 rate_ctr_inc(rate_ctr_group_get_ctr(priv->nsvc->ctrg, NS_CTR_LOST_RESET));</span><br><span>                     priv->N++;</span><br><span>                        if (priv->N <= nsi->timeout[NS_TOUT_TNS_RESET_RETRIES]) {</span><br><span>                           osmo_fsm_inst_state_chg(fi, GPRS_NS2_ST_RESET, nsi->timeout[NS_TOUT_TNS_RESET], 0);</span><br><span>diff --git a/tests/gb/gprs_ns_test.c b/tests/gb/gprs_ns_test.c</span><br><span>index 454a29e..6ced6a3 100644</span><br><span>--- a/tests/gb/gprs_ns_test.c</span><br><span>+++ b/tests/gb/gprs_ns_test.c</span><br><span>@@ -262,7 +262,7 @@</span><br><span>        unsigned int i;</span><br><span> </span><br><span>  for (i = 0; i < ctrg->desc->num_ctr; i++) {</span><br><span style="color: hsl(0, 100%, 40%);">-            struct rate_ctr *ctr = &ctrg->ctr[i];</span><br><span style="color: hsl(120, 100%, 40%);">+          struct rate_ctr *ctr = rate_ctr_group_get_ctr(ctrg, i);</span><br><span>              if (ctr->current && !strchr(ctrg->desc->ctr_desc[i].name, ':'))</span><br><span>                     fprintf(stream, " %s%s: %llu%s",</span><br><span>                           prefix, ctrg->desc->ctr_desc[i].description,</span><br><span>diff --git a/tests/stats/stats_test.c b/tests/stats/stats_test.c</span><br><span>index a4aedd3..15f50d2 100644</span><br><span>--- a/tests/stats/stats_test.c</span><br><span>+++ b/tests/stats/stats_test.c</span><br><span>@@ -110,130 +110,130 @@</span><br><span> </span><br><span>        sitem1 = osmo_stat_item_get_by_name(statg, "item.a");</span><br><span>      OSMO_ASSERT(sitem1 != NULL);</span><br><span style="color: hsl(0, 100%, 40%);">-    OSMO_ASSERT(sitem1 == statg->items[TEST_A_ITEM]);</span><br><span style="color: hsl(120, 100%, 40%);">+  OSMO_ASSERT(sitem1 == osmo_stat_item_group_get_item(statg, TEST_A_ITEM));</span><br><span> </span><br><span>        sitem2 = osmo_stat_item_get_by_name(statg, "item.b");</span><br><span>      OSMO_ASSERT(sitem2 != NULL);</span><br><span>         OSMO_ASSERT(sitem2 != sitem1);</span><br><span style="color: hsl(0, 100%, 40%);">-  OSMO_ASSERT(sitem2 == statg->items[TEST_B_ITEM]);</span><br><span style="color: hsl(120, 100%, 40%);">+  OSMO_ASSERT(sitem2 == osmo_stat_item_group_get_item(statg, TEST_B_ITEM));</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   value = osmo_stat_item_get_last(statg->items[TEST_A_ITEM]);</span><br><span style="color: hsl(120, 100%, 40%);">+        value = osmo_stat_item_get_last(osmo_stat_item_group_get_item(statg, TEST_A_ITEM));</span><br><span>  OSMO_ASSERT(value == -1);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   rc = osmo_stat_item_get_next(statg->items[TEST_A_ITEM], &next_id_a, &value);</span><br><span style="color: hsl(120, 100%, 40%);">+       rc = osmo_stat_item_get_next(osmo_stat_item_group_get_item(statg, TEST_A_ITEM), &next_id_a, &value);</span><br><span>         OSMO_ASSERT(rc == 0);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-       osmo_stat_item_set(statg->items[TEST_A_ITEM], 1);</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_stat_item_set(osmo_stat_item_group_get_item(statg, TEST_A_ITEM), 1);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   value = osmo_stat_item_get_last(statg->items[TEST_A_ITEM]);</span><br><span style="color: hsl(120, 100%, 40%);">+        value = osmo_stat_item_get_last(osmo_stat_item_group_get_item(statg, TEST_A_ITEM));</span><br><span>  OSMO_ASSERT(value == 1);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    rc = osmo_stat_item_get_next(statg->items[TEST_A_ITEM], &next_id_a, &value);</span><br><span style="color: hsl(120, 100%, 40%);">+       rc = osmo_stat_item_get_next(osmo_stat_item_group_get_item(statg, TEST_A_ITEM), &next_id_a, &value);</span><br><span>         OSMO_ASSERT(rc == 1);</span><br><span>        OSMO_ASSERT(value == 1);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    rc = osmo_stat_item_get_next(statg->items[TEST_A_ITEM], &next_id_a, &value);</span><br><span style="color: hsl(120, 100%, 40%);">+       rc = osmo_stat_item_get_next(osmo_stat_item_group_get_item(statg, TEST_A_ITEM), &next_id_a, &value);</span><br><span>         OSMO_ASSERT(rc == 0);</span><br><span> </span><br><span>    for (i = 2; i <= 32; i++) {</span><br><span style="color: hsl(0, 100%, 40%);">-          osmo_stat_item_set(statg->items[TEST_A_ITEM], i);</span><br><span style="color: hsl(0, 100%, 40%);">-            osmo_stat_item_set(statg->items[TEST_B_ITEM], 1000 + i);</span><br><span style="color: hsl(120, 100%, 40%);">+           osmo_stat_item_set(osmo_stat_item_group_get_item(statg, TEST_A_ITEM), i);</span><br><span style="color: hsl(120, 100%, 40%);">+             osmo_stat_item_set(osmo_stat_item_group_get_item(statg, TEST_B_ITEM), 1000 + i);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-            rc = osmo_stat_item_get_next(statg->items[TEST_A_ITEM], &next_id_a, &value);</span><br><span style="color: hsl(120, 100%, 40%);">+               rc = osmo_stat_item_get_next(osmo_stat_item_group_get_item(statg, TEST_A_ITEM), &next_id_a, &value);</span><br><span>                 OSMO_ASSERT(rc == 1);</span><br><span>                OSMO_ASSERT(value == i);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-            rc = osmo_stat_item_get_next(statg->items[TEST_B_ITEM], &next_id_b, &value);</span><br><span style="color: hsl(120, 100%, 40%);">+               rc = osmo_stat_item_get_next(osmo_stat_item_group_get_item(statg, TEST_B_ITEM), &next_id_b, &value);</span><br><span>                 OSMO_ASSERT(rc == 1);</span><br><span>                OSMO_ASSERT(value == 1000 + i);</span><br><span>      }</span><br><span> </span><br><span>        /* check if dec & inc is working */</span><br><span style="color: hsl(0, 100%, 40%);">- osmo_stat_item_set(statg->items[TEST_A_ITEM], 42);</span><br><span style="color: hsl(0, 100%, 40%);">-   rc = osmo_stat_item_get_next(statg->items[TEST_A_ITEM], &next_id_a, &value);</span><br><span style="color: hsl(120, 100%, 40%);">+       osmo_stat_item_set(osmo_stat_item_group_get_item(statg, TEST_A_ITEM), 42);</span><br><span style="color: hsl(120, 100%, 40%);">+    rc = osmo_stat_item_get_next(osmo_stat_item_group_get_item(statg, TEST_A_ITEM), &next_id_a, &value);</span><br><span>         OSMO_ASSERT(rc == 1);</span><br><span>        OSMO_ASSERT(value == 42);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   osmo_stat_item_dec(statg->items[TEST_A_ITEM], 21);</span><br><span style="color: hsl(0, 100%, 40%);">-   rc = osmo_stat_item_get_next(statg->items[TEST_A_ITEM], &next_id_a, &value);</span><br><span style="color: hsl(120, 100%, 40%);">+       osmo_stat_item_dec(osmo_stat_item_group_get_item(statg, TEST_A_ITEM), 21);</span><br><span style="color: hsl(120, 100%, 40%);">+    rc = osmo_stat_item_get_next(osmo_stat_item_group_get_item(statg, TEST_A_ITEM), &next_id_a, &value);</span><br><span>         OSMO_ASSERT(rc == 1);</span><br><span>        OSMO_ASSERT(value == 21);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   osmo_stat_item_inc(statg->items[TEST_A_ITEM], 21);</span><br><span style="color: hsl(0, 100%, 40%);">-   rc = osmo_stat_item_get_next(statg->items[TEST_A_ITEM], &next_id_a, &value);</span><br><span style="color: hsl(120, 100%, 40%);">+       osmo_stat_item_inc(osmo_stat_item_group_get_item(statg, TEST_A_ITEM), 21);</span><br><span style="color: hsl(120, 100%, 40%);">+    rc = osmo_stat_item_get_next(osmo_stat_item_group_get_item(statg, TEST_A_ITEM), &next_id_a, &value);</span><br><span>         OSMO_ASSERT(rc == 1);</span><br><span>        OSMO_ASSERT(value == 42);</span><br><span> </span><br><span>        /* Keep 2 in FIFO */</span><br><span style="color: hsl(0, 100%, 40%);">-    osmo_stat_item_set(statg->items[TEST_A_ITEM], 33);</span><br><span style="color: hsl(0, 100%, 40%);">-   osmo_stat_item_set(statg->items[TEST_B_ITEM], 1000 + 33);</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_stat_item_set(osmo_stat_item_group_get_item(statg, TEST_A_ITEM), 33);</span><br><span style="color: hsl(120, 100%, 40%);">+    osmo_stat_item_set(osmo_stat_item_group_get_item(statg, TEST_B_ITEM), 1000 + 33);</span><br><span> </span><br><span>        for (i = 34; i <= 64; i++) {</span><br><span style="color: hsl(0, 100%, 40%);">-         osmo_stat_item_set(statg->items[TEST_A_ITEM], i);</span><br><span style="color: hsl(0, 100%, 40%);">-            osmo_stat_item_set(statg->items[TEST_B_ITEM], 1000 + i);</span><br><span style="color: hsl(120, 100%, 40%);">+           osmo_stat_item_set(osmo_stat_item_group_get_item(statg, TEST_A_ITEM), i);</span><br><span style="color: hsl(120, 100%, 40%);">+             osmo_stat_item_set(osmo_stat_item_group_get_item(statg, TEST_B_ITEM), 1000 + i);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-            rc = osmo_stat_item_get_next(statg->items[TEST_A_ITEM], &next_id_a, &value);</span><br><span style="color: hsl(120, 100%, 40%);">+               rc = osmo_stat_item_get_next(osmo_stat_item_group_get_item(statg, TEST_A_ITEM), &next_id_a, &value);</span><br><span>                 OSMO_ASSERT(rc == 1);</span><br><span>                OSMO_ASSERT(value == i-1);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-          rc = osmo_stat_item_get_next(statg->items[TEST_B_ITEM], &next_id_b, &value);</span><br><span style="color: hsl(120, 100%, 40%);">+               rc = osmo_stat_item_get_next(osmo_stat_item_group_get_item(statg, TEST_B_ITEM), &next_id_b, &value);</span><br><span>                 OSMO_ASSERT(rc == 1);</span><br><span>                OSMO_ASSERT(value == 1000 + i-1);</span><br><span>    }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   rc = osmo_stat_item_get_next(statg->items[TEST_A_ITEM], &next_id_a, &value);</span><br><span style="color: hsl(120, 100%, 40%);">+       rc = osmo_stat_item_get_next(osmo_stat_item_group_get_item(statg, TEST_A_ITEM), &next_id_a, &value);</span><br><span>         OSMO_ASSERT(rc == 1);</span><br><span>        OSMO_ASSERT(value == 64);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   rc = osmo_stat_item_get_next(statg->items[TEST_B_ITEM], &next_id_b, &value);</span><br><span style="color: hsl(120, 100%, 40%);">+       rc = osmo_stat_item_get_next(osmo_stat_item_group_get_item(statg, TEST_B_ITEM), &next_id_b, &value);</span><br><span>         OSMO_ASSERT(rc == 1);</span><br><span>        OSMO_ASSERT(value == 1000 + 64);</span><br><span> </span><br><span>         /* Overrun FIFOs */</span><br><span>  for (i = 65; i <= 96; i++) {</span><br><span style="color: hsl(0, 100%, 40%);">-         osmo_stat_item_set(statg->items[TEST_A_ITEM], i);</span><br><span style="color: hsl(0, 100%, 40%);">-            osmo_stat_item_set(statg->items[TEST_B_ITEM], 1000 + i);</span><br><span style="color: hsl(120, 100%, 40%);">+           osmo_stat_item_set(osmo_stat_item_group_get_item(statg, TEST_A_ITEM), i);</span><br><span style="color: hsl(120, 100%, 40%);">+             osmo_stat_item_set(osmo_stat_item_group_get_item(statg, TEST_B_ITEM), 1000 + i);</span><br><span>     }</span><br><span> </span><br><span>        fprintf(stderr, "Skipping %d values\n", 93 - 65);</span><br><span style="color: hsl(0, 100%, 40%);">-     rc = osmo_stat_item_get_next(statg->items[TEST_A_ITEM], &next_id_a, &value);</span><br><span style="color: hsl(120, 100%, 40%);">+       rc = osmo_stat_item_get_next(osmo_stat_item_group_get_item(statg, TEST_A_ITEM), &next_id_a, &value);</span><br><span>         OSMO_ASSERT(rc == 93 - 65 + 1);</span><br><span>      OSMO_ASSERT(value == 93);</span><br><span> </span><br><span>        for (i = 94; i <= 96; i++) {</span><br><span style="color: hsl(0, 100%, 40%);">-         rc = osmo_stat_item_get_next(statg->items[TEST_A_ITEM], &next_id_a, &value);</span><br><span style="color: hsl(120, 100%, 40%);">+               rc = osmo_stat_item_get_next(osmo_stat_item_group_get_item(statg, TEST_A_ITEM), &next_id_a, &value);</span><br><span>                 OSMO_ASSERT(rc == 1);</span><br><span>                OSMO_ASSERT(value == i);</span><br><span>     }</span><br><span> </span><br><span>        fprintf(stderr, "Skipping %d values\n", 90 - 65);</span><br><span style="color: hsl(0, 100%, 40%);">-     rc = osmo_stat_item_get_next(statg->items[TEST_B_ITEM], &next_id_b, &value);</span><br><span style="color: hsl(120, 100%, 40%);">+       rc = osmo_stat_item_get_next(osmo_stat_item_group_get_item(statg, TEST_B_ITEM), &next_id_b, &value);</span><br><span>         OSMO_ASSERT(rc == 90 - 65 + 1);</span><br><span>      OSMO_ASSERT(value == 1000 + 90);</span><br><span> </span><br><span>         for (i = 91; i <= 96; i++) {</span><br><span style="color: hsl(0, 100%, 40%);">-         rc = osmo_stat_item_get_next(statg->items[TEST_B_ITEM], &next_id_b, &value);</span><br><span style="color: hsl(120, 100%, 40%);">+               rc = osmo_stat_item_get_next(osmo_stat_item_group_get_item(statg, TEST_B_ITEM), &next_id_b, &value);</span><br><span>                 OSMO_ASSERT(rc == 1);</span><br><span>                OSMO_ASSERT(value == 1000 + i);</span><br><span>      }</span><br><span> </span><br><span>        /* Test Discard (single item) */</span><br><span style="color: hsl(0, 100%, 40%);">-        osmo_stat_item_set(statg->items[TEST_A_ITEM], 97);</span><br><span style="color: hsl(0, 100%, 40%);">-   rc = osmo_stat_item_discard(statg->items[TEST_A_ITEM], &next_id_a);</span><br><span style="color: hsl(120, 100%, 40%);">+    osmo_stat_item_set(osmo_stat_item_group_get_item(statg, TEST_A_ITEM), 97);</span><br><span style="color: hsl(120, 100%, 40%);">+    rc = osmo_stat_item_discard(osmo_stat_item_group_get_item(statg, TEST_A_ITEM), &next_id_a);</span><br><span>      OSMO_ASSERT(rc == 1);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-       rc = osmo_stat_item_discard(statg->items[TEST_A_ITEM], &next_id_a);</span><br><span style="color: hsl(120, 100%, 40%);">+    rc = osmo_stat_item_discard(osmo_stat_item_group_get_item(statg, TEST_A_ITEM), &next_id_a);</span><br><span>      OSMO_ASSERT(rc == 0);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-       rc = osmo_stat_item_get_next(statg->items[TEST_A_ITEM], &next_id_a, &value);</span><br><span style="color: hsl(120, 100%, 40%);">+       rc = osmo_stat_item_get_next(osmo_stat_item_group_get_item(statg, TEST_A_ITEM), &next_id_a, &value);</span><br><span>         OSMO_ASSERT(rc == 0);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-       osmo_stat_item_set(statg->items[TEST_A_ITEM], 98);</span><br><span style="color: hsl(0, 100%, 40%);">-   rc = osmo_stat_item_get_next(statg->items[TEST_A_ITEM], &next_id_a, &value);</span><br><span style="color: hsl(120, 100%, 40%);">+       osmo_stat_item_set(osmo_stat_item_group_get_item(statg, TEST_A_ITEM), 98);</span><br><span style="color: hsl(120, 100%, 40%);">+    rc = osmo_stat_item_get_next(osmo_stat_item_group_get_item(statg, TEST_A_ITEM), &next_id_a, &value);</span><br><span>         OSMO_ASSERT(rc == 1);</span><br><span>        OSMO_ASSERT(value == 98);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   rc = osmo_stat_item_get_next(statg->items[TEST_A_ITEM], &next_id_a, &value);</span><br><span style="color: hsl(120, 100%, 40%);">+       rc = osmo_stat_item_get_next(osmo_stat_item_group_get_item(statg, TEST_A_ITEM), &next_id_a, &value);</span><br><span>         OSMO_ASSERT(rc == 0);</span><br><span> </span><br><span>    osmo_stat_item_group_free(statg);</span><br><span>@@ -417,27 +417,27 @@</span><br><span>    OSMO_ASSERT(send_count == 0);</span><br><span> </span><br><span>    fprintf(stderr, "report (group 1, counter 1 update):\n");</span><br><span style="color: hsl(0, 100%, 40%);">-     rate_ctr_inc(&ctrg1->ctr[TEST_A_CTR]);</span><br><span style="color: hsl(120, 100%, 40%);">+ rate_ctr_inc(rate_ctr_group_get_ctr(ctrg1, TEST_A_CTR));</span><br><span>     send_count = 0;</span><br><span>      osmo_stats_report();</span><br><span>         OSMO_ASSERT(send_count == 2);</span><br><span> </span><br><span>    fprintf(stderr, "report (group 1, item 1 update):\n");</span><br><span style="color: hsl(0, 100%, 40%);">-        osmo_stat_item_set(statg1->items[TEST_A_ITEM], 10);</span><br><span style="color: hsl(120, 100%, 40%);">+        osmo_stat_item_set(osmo_stat_item_group_get_item(statg1, TEST_A_ITEM), 10);</span><br><span>  send_count = 0;</span><br><span>      osmo_stats_report();</span><br><span>         OSMO_ASSERT(send_count == 2);</span><br><span> </span><br><span>    fprintf(stderr, "report (group 1, item 1 update twice):\n");</span><br><span style="color: hsl(0, 100%, 40%);">-  osmo_stat_item_set(statg1->items[TEST_A_ITEM], 10);</span><br><span style="color: hsl(0, 100%, 40%);">-  osmo_stat_item_set(statg1->items[TEST_A_ITEM], 10);</span><br><span style="color: hsl(120, 100%, 40%);">+        osmo_stat_item_set(osmo_stat_item_group_get_item(statg1, TEST_A_ITEM), 10);</span><br><span style="color: hsl(120, 100%, 40%);">+   osmo_stat_item_set(osmo_stat_item_group_get_item(statg1, TEST_A_ITEM), 10);</span><br><span>  send_count = 0;</span><br><span>      osmo_stats_report();</span><br><span>         OSMO_ASSERT(send_count == 2);</span><br><span> </span><br><span>    fprintf(stderr, "report (group 1, item 1 update twice, check max):\n");</span><br><span style="color: hsl(0, 100%, 40%);">-       osmo_stat_item_set(statg1->items[TEST_A_ITEM], 20);</span><br><span style="color: hsl(0, 100%, 40%);">-  osmo_stat_item_set(statg1->items[TEST_A_ITEM], 10);</span><br><span style="color: hsl(120, 100%, 40%);">+        osmo_stat_item_set(osmo_stat_item_group_get_item(statg1, TEST_A_ITEM), 20);</span><br><span style="color: hsl(120, 100%, 40%);">+   osmo_stat_item_set(osmo_stat_item_group_get_item(statg1, TEST_A_ITEM), 10);</span><br><span>  send_count = 0;</span><br><span>      osmo_stats_report();</span><br><span>         OSMO_ASSERT(send_count == 2);</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/libosmocore/+/24561">change 24561</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/+/24561"/><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: I41297a8df68e28dfc6016330ac82b0ed5dd0ebc1 </div>
<div style="display:none"> Gerrit-Change-Number: 24561 </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>