libmsc/bsc: split rate counters into bsc and msc group

Tweaked-By: Neels Hofmeyr <nhofmeyr@sysmocom.de>
Change-Id: I7361033cd1eb919ec3c2ea2652f40ab8c75b2f99
diff --git a/openbsc/src/libbsc/abis_rsl.c b/openbsc/src/libbsc/abis_rsl.c
index 9af986a..4c8448e 100644
--- a/openbsc/src/libbsc/abis_rsl.c
+++ b/openbsc/src/libbsc/abis_rsl.c
@@ -1229,7 +1229,7 @@
 				TLVP_LEN(&tp, RSL_IE_CAUSE));
 
 	LOGPC(DRSL, LOGL_NOTICE, "\n");
-	rate_ctr_inc(&msg->lchan->ts->trx->bts->network->ratectrs->ctr[MSC_CTR_CHAN_RF_FAIL]);
+	rate_ctr_inc(&msg->lchan->ts->trx->bts->network->bsc_ctrs->ctr[BSC_CTR_CHAN_RF_FAIL]);
 	return rsl_rf_chan_release_err(msg->lchan);
 }
 
@@ -1663,7 +1663,7 @@
 	lctype = get_ctype_by_chreq(bts->network, rqd_ref->ra);
 	chreq_reason = get_reason_by_chreq(rqd_ref->ra, bts->network->neci);
 
-	rate_ctr_inc(&bts->network->ratectrs->ctr[MSC_CTR_CHREQ_TOTAL]);
+	rate_ctr_inc(&bts->network->bsc_ctrs->ctr[BSC_CTR_CHREQ_TOTAL]);
 
 	/*
 	 * We want LOCATION UPDATES to succeed and will assign a TCH
@@ -1676,7 +1676,7 @@
 	if (!lchan) {
 		LOGP(DRSL, LOGL_NOTICE, "BTS %d CHAN RQD: no resources for %s 0x%x\n",
 		     msg->lchan->ts->trx->bts->nr, gsm_lchant_name(lctype), rqd_ref->ra);
-		rate_ctr_inc(&bts->network->ratectrs->ctr[MSC_CTR_CHREQ_NO_CHANNEL]);
+		rate_ctr_inc(&bts->network->bsc_ctrs->ctr[BSC_CTR_CHREQ_NO_CHANNEL]);
 		/* FIXME gather multiple CHAN RQD and reject up to 4 at the same time */
 		if (bts->network->T3122)
 			rsl_send_imm_ass_rej(bts, 1, rqd_ref, bts->network->T3122 & 0xff);
@@ -1859,7 +1859,7 @@
 	rll_indication(msg->lchan, rllh->link_id, BSC_RLLR_IND_ERR_IND);
 
 	if (rlm_cause == RLL_CAUSE_T200_EXPIRED) {
-		rate_ctr_inc(&msg->lchan->ts->trx->bts->network->ratectrs->ctr[MSC_CTR_CHAN_RLL_ERR]);
+		rate_ctr_inc(&msg->lchan->ts->trx->bts->network->bsc_ctrs->ctr[BSC_CTR_CHAN_RLL_ERR]);
 		return rsl_rf_chan_release_err(msg->lchan);
 	}
 
diff --git a/openbsc/src/libbsc/bsc_init.c b/openbsc/src/libbsc/bsc_init.c
index 5ea85d0..989fca8 100644
--- a/openbsc/src/libbsc/bsc_init.c
+++ b/openbsc/src/libbsc/bsc_init.c
@@ -340,9 +340,9 @@
 		LOGP(DLMI, LOGL_ERROR, "Lost some E1 TEI link: %d %p\n", isd->link_type, trx);
 
 		if (isd->link_type == E1INP_SIGN_OML)
-			rate_ctr_inc(&trx->bts->network->ratectrs->ctr[MSC_CTR_BTS_OML_FAIL]);
+			rate_ctr_inc(&trx->bts->network->bsc_ctrs->ctr[BSC_CTR_BTS_OML_FAIL]);
 		else if (isd->link_type == E1INP_SIGN_RSL)
-			rate_ctr_inc(&trx->bts->network->ratectrs->ctr[MSC_CTR_BTS_RSL_FAIL]);
+			rate_ctr_inc(&trx->bts->network->bsc_ctrs->ctr[BSC_CTR_BTS_RSL_FAIL]);
 
 		/*
 		 * free all allocated channels. change the nm_state so the
diff --git a/openbsc/src/libbsc/bsc_vty.c b/openbsc/src/libbsc/bsc_vty.c
index fbaf06b..8116af1 100644
--- a/openbsc/src/libbsc/bsc_vty.c
+++ b/openbsc/src/libbsc/bsc_vty.c
@@ -3784,21 +3784,21 @@
 void openbsc_vty_print_statistics(struct vty *vty, struct gsm_network *net)
 {
 	vty_out(vty, "Channel Requests        : %lu total, %lu no channel%s",
-		net->ratectrs->ctr[MSC_CTR_CHREQ_TOTAL].current,
-		net->ratectrs->ctr[MSC_CTR_CHREQ_NO_CHANNEL].current,
+		net->bsc_ctrs->ctr[BSC_CTR_CHREQ_TOTAL].current,
+		net->bsc_ctrs->ctr[BSC_CTR_CHREQ_NO_CHANNEL].current,
 		VTY_NEWLINE);
 	vty_out(vty, "Channel Failures        : %lu rf_failures, %lu rll failures%s",
-		net->ratectrs->ctr[MSC_CTR_CHAN_RF_FAIL].current,
-		net->ratectrs->ctr[MSC_CTR_CHAN_RLL_ERR].current,
+		net->bsc_ctrs->ctr[BSC_CTR_CHAN_RF_FAIL].current,
+		net->bsc_ctrs->ctr[BSC_CTR_CHAN_RLL_ERR].current,
 		VTY_NEWLINE);
 	vty_out(vty, "Paging                  : %lu attempted, %lu complete, %lu expired%s",
-		net->ratectrs->ctr[MSC_CTR_PAGING_ATTEMPTED].current,
-		net->ratectrs->ctr[MSC_CTR_PAGING_COMPLETED].current,
-		net->ratectrs->ctr[MSC_CTR_PAGING_EXPIRED].current,
+		net->bsc_ctrs->ctr[BSC_CTR_PAGING_ATTEMPTED].current,
+		net->bsc_ctrs->ctr[BSC_CTR_PAGING_COMPLETED].current,
+		net->bsc_ctrs->ctr[BSC_CTR_PAGING_EXPIRED].current,
 		VTY_NEWLINE);
 	vty_out(vty, "BTS failures            : %lu OML, %lu RSL%s",
-		net->ratectrs->ctr[MSC_CTR_BTS_OML_FAIL].current,
-		net->ratectrs->ctr[MSC_CTR_BTS_RSL_FAIL].current,
+		net->bsc_ctrs->ctr[BSC_CTR_BTS_OML_FAIL].current,
+		net->bsc_ctrs->ctr[BSC_CTR_BTS_RSL_FAIL].current,
 		VTY_NEWLINE);
 }
 
diff --git a/openbsc/src/libbsc/gsm_04_08_utils.c b/openbsc/src/libbsc/gsm_04_08_utils.c
index d4eca4a..46df108 100644
--- a/openbsc/src/libbsc/gsm_04_08_utils.c
+++ b/openbsc/src/libbsc/gsm_04_08_utils.c
@@ -304,7 +304,7 @@
 		subscr = conn->subscr;
 	}
 
-	rate_ctr_inc(&bts->network->ratectrs->ctr[MSC_CTR_PAGING_COMPLETED]);
+	rate_ctr_inc(&bts->network->bsc_ctrs->ctr[BSC_CTR_PAGING_COMPLETED]);
 
 	/* Stop paging on the bts we received the paging response */
 	paging_request_stop(conn->bts, subscr, conn, msg);
diff --git a/openbsc/src/libbsc/handover_logic.c b/openbsc/src/libbsc/handover_logic.c
index 5424e27..ffcca66 100644
--- a/openbsc/src/libbsc/handover_logic.c
+++ b/openbsc/src/libbsc/handover_logic.c
@@ -103,7 +103,7 @@
 	DEBUGP(DHO, "(old_lchan on BTS %u, new BTS %u)\n",
 		old_lchan->ts->trx->bts->nr, bts->nr);
 
-	rate_ctr_inc(&bts->network->ratectrs->ctr[MSC_CTR_HANDOVER_ATTEMPTED]);
+	rate_ctr_inc(&bts->network->bsc_ctrs->ctr[BSC_CTR_HANDOVER_ATTEMPTED]);
 
 	if (!old_lchan->conn) {
 		LOGP(DHO, LOGL_ERROR, "Old lchan lacks connection data.\n");
@@ -113,7 +113,7 @@
 	new_lchan = lchan_alloc(bts, old_lchan->type, 0);
 	if (!new_lchan) {
 		LOGP(DHO, LOGL_NOTICE, "No free channel\n");
-		rate_ctr_inc(&bts->network->ratectrs->ctr[MSC_CTR_HANDOVER_NO_CHANNEL]);
+		rate_ctr_inc(&bts->network->bsc_ctrs->ctr[BSC_CTR_HANDOVER_NO_CHANNEL]);
 		return -ENOSPC;
 	}
 
@@ -188,7 +188,7 @@
 	struct gsm_network *net = ho->new_lchan->ts->trx->bts->network;
 
 	DEBUGP(DHO, "HO T3103 expired\n");
-	rate_ctr_inc(&net->ratectrs->ctr[MSC_CTR_HANDOVER_TIMEOUT]);
+	rate_ctr_inc(&net->bsc_ctrs->ctr[BSC_CTR_HANDOVER_TIMEOUT]);
 
 	ho->new_lchan->conn->ho_lchan = NULL;
 	ho->new_lchan->conn = NULL;
@@ -265,7 +265,7 @@
 	     ho->old_lchan->ts->trx->bts->nr, new_lchan->ts->trx->bts->nr,
 	     ho->old_lchan->ts->trx->arfcn, new_lchan->ts->trx->arfcn);
 
-	rate_ctr_inc(&net->ratectrs->ctr[MSC_CTR_HANDOVER_COMPLETED]);
+	rate_ctr_inc(&net->bsc_ctrs->ctr[BSC_CTR_HANDOVER_COMPLETED]);
 
 	osmo_timer_del(&ho->T3103);
 
@@ -303,7 +303,7 @@
 		return -ENODEV;
 	}
 
-	rate_ctr_inc(&net->ratectrs->ctr[MSC_CTR_HANDOVER_FAILED]);
+	rate_ctr_inc(&net->bsc_ctrs->ctr[BSC_CTR_HANDOVER_FAILED]);
 
 	new_lchan = ho->new_lchan;
 
diff --git a/openbsc/src/libbsc/net_init.c b/openbsc/src/libbsc/net_init.c
index b99f3d2..37ba3c0 100644
--- a/openbsc/src/libbsc/net_init.c
+++ b/openbsc/src/libbsc/net_init.c
@@ -81,7 +81,8 @@
 	INIT_LLIST_HEAD(&net->bts_list);
 
 	/* init statistics */
-	net->ratectrs = rate_ctr_group_alloc(net, &msc_ctrg_desc, 0);
+	net->bsc_ctrs = rate_ctr_group_alloc(net, &bsc_ctrg_desc, 0);
+	net->bsc_ctrs = rate_ctr_group_alloc(net, &msc_ctrg_desc, 0);
 
 	net->mncc_recv = mncc_recv;
 	net->ext_min = GSM_MIN_EXTEN;
diff --git a/openbsc/src/libbsc/paging.c b/openbsc/src/libbsc/paging.c
index 03c91fd..fcb4deb 100644
--- a/openbsc/src/libbsc/paging.c
+++ b/openbsc/src/libbsc/paging.c
@@ -260,7 +260,7 @@
 		req, req->subscr->imsi);
 
 	/* must be destroyed before calling cbfn, to prevent double free */
-	rate_ctr_inc(&req->bts->network->ratectrs->ctr[MSC_CTR_PAGING_EXPIRED]);
+	rate_ctr_inc(&req->bts->network->bsc_ctrs->ctr[BSC_CTR_PAGING_EXPIRED]);
 	cbfn_param = req->cbfn_param;
 	cbfn = req->cbfn;
 
@@ -330,7 +330,7 @@
 	struct gsm_bts *bts = NULL;
 	int num_pages = 0;
 
-	rate_ctr_inc(&network->ratectrs->ctr[MSC_CTR_PAGING_ATTEMPTED]);
+	rate_ctr_inc(&network->bsc_ctrs->ctr[BSC_CTR_PAGING_ATTEMPTED]);
 
 	/* start paging subscriber on all BTS within Location Area */
 	do {
@@ -349,7 +349,7 @@
 	} while (1);
 
 	if (num_pages == 0)
-		rate_ctr_inc(&network->ratectrs->ctr[MSC_CTR_PAGING_DETACHED]);
+		rate_ctr_inc(&network->bsc_ctrs->ctr[BSC_CTR_PAGING_DETACHED]);
 
 	return num_pages;
 }