stats: Add granularity to chan:rf_fail stat.

Add additional counters to track TCH and SDCCH RF failures in separate subcategories.

Change-Id: I91fe6659fe9df33763f4070b4f505561b2005d38
diff --git a/include/osmocom/bsc/bts.h b/include/osmocom/bsc/bts.h
index 8f3e05b..b81f45f 100644
--- a/include/osmocom/bsc/bts.h
+++ b/include/osmocom/bsc/bts.h
@@ -28,6 +28,8 @@
 	BTS_CTR_CHREQ_SUCCESSFUL,
 	BTS_CTR_CHREQ_NO_CHANNEL,
 	BTS_CTR_CHAN_RF_FAIL,
+	BTS_CTR_CHAN_RF_FAIL_TCH,
+	BTS_CTR_CHAN_RF_FAIL_SDCCH,
 	BTS_CTR_CHAN_RLL_ERR,
 	BTS_CTR_BTS_OML_FAIL,
 	BTS_CTR_BTS_RSL_FAIL,
diff --git a/src/osmo-bsc/abis_rsl.c b/src/osmo-bsc/abis_rsl.c
index 388e2fc..9e00fe7 100644
--- a/src/osmo-bsc/abis_rsl.c
+++ b/src/osmo-bsc/abis_rsl.c
@@ -982,6 +982,17 @@
 	LOG_LCHAN(lchan, LOGL_ERROR, "CONNECTION FAIL%s\n", rsl_cause_name(&tp));
 
 	rate_ctr_inc(&lchan->ts->trx->bts->bts_ctrs->ctr[BTS_CTR_CHAN_RF_FAIL]);
+	switch (lchan->type) {
+	case GSM_LCHAN_SDCCH:
+		rate_ctr_inc(&lchan->ts->trx->bts->bts_ctrs->ctr[BTS_CTR_CHAN_RF_FAIL_SDCCH]);
+		break;
+	case GSM_LCHAN_TCH_H:
+	case GSM_LCHAN_TCH_F:
+		rate_ctr_inc(&lchan->ts->trx->bts->bts_ctrs->ctr[BTS_CTR_CHAN_RF_FAIL_TCH]);
+		break;
+	default:
+		break;
+	}
 
 	/* If the lchan is associated with a conn, we shall notify the MSC of the RSL Conn Failure, and
 	 * the connection will presumably be torn down and lead to an lchan release. During initial
diff --git a/src/osmo-bsc/bts.c b/src/osmo-bsc/bts.c
index 3fa4f24..ac0e2af 100644
--- a/src/osmo-bsc/bts.c
+++ b/src/osmo-bsc/bts.c
@@ -791,6 +791,12 @@
 	[BTS_CTR_CHAN_RF_FAIL] = \
 		{ "chan:rf_fail",
 		  "Received a RF failure indication from BTS" },
+	[BTS_CTR_CHAN_RF_FAIL_TCH] = \
+		{ "chan:rf_fail_tch",
+		  "Received a RF failure indication from BTS on a TCH channel" },
+	[BTS_CTR_CHAN_RF_FAIL_SDCCH] = \
+		{ "chan:rf_fail_sdcch",
+		  "Received a RF failure indication from BTS on an SDCCH channel" },
 	[BTS_CTR_CHAN_RLL_ERR] = \
 		{ "chan:rll_err",
 		  "Received a RLL failure with T200 cause from BTS" },