<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>