Change in osmo-bsc[master]: implement bts.N.cm_serv_rej:<cause> rate counters

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

neels gerrit-no-reply at lists.osmocom.org
Wed Nov 10 17:53:45 UTC 2021


neels has submitted this change. ( https://gerrit.osmocom.org/c/osmo-bsc/+/26142 )

Change subject: implement bts.N.cm_serv_rej:<cause> rate counters
......................................................................

implement bts.N.cm_serv_rej:<cause> rate counters

Related: I0214b27da18af87eca9715ebf7eeeff945e3e12a (osmo-ttcn3-hacks)
Related: SYS#4878
Change-Id: I79b1261e5a281d9797eaaf9c27d90edd8e27c78b
---
M include/osmocom/bsc/bts.h
M src/osmo-bsc/abis_rsl.c
M src/osmo-bsc/bts.c
3 files changed, 202 insertions(+), 0 deletions(-)

Approvals:
  dexter: Looks good to me, but someone else must approve
  pespin: Looks good to me, approved
  Jenkins Builder: Verified



diff --git a/include/osmocom/bsc/bts.h b/include/osmocom/bsc/bts.h
index 9cf3fa4..89512f3 100644
--- a/include/osmocom/bsc/bts.h
+++ b/include/osmocom/bsc/bts.h
@@ -162,6 +162,31 @@
 	BTS_CTR_ALL_ALLOCATED_STATIC_SDCCH,
 	BTS_CTR_ALL_ALLOCATED_TCH,
 	BTS_CTR_ALL_ALLOCATED_STATIC_TCH,
+	BTS_CTR_CM_SERV_REJ,
+	BTS_CTR_CM_SERV_REJ_IMSI_UNKNOWN_IN_HLR,
+	BTS_CTR_CM_SERV_REJ_ILLEGAL_MS,
+	BTS_CTR_CM_SERV_REJ_IMSI_UNKNOWN_IN_VLR,
+	BTS_CTR_CM_SERV_REJ_IMEI_NOT_ACCEPTED,
+	BTS_CTR_CM_SERV_REJ_ILLEGAL_ME,
+	BTS_CTR_CM_SERV_REJ_PLMN_NOT_ALLOWED,
+	BTS_CTR_CM_SERV_REJ_LOC_NOT_ALLOWED,
+	BTS_CTR_CM_SERV_REJ_ROAMING_NOT_ALLOWED,
+	BTS_CTR_CM_SERV_REJ_NETWORK_FAILURE,
+	BTS_CTR_CM_SERV_REJ_SYNCH_FAILURE,
+	BTS_CTR_CM_SERV_REJ_CONGESTION,
+	BTS_CTR_CM_SERV_REJ_SRV_OPT_NOT_SUPPORTED,
+	BTS_CTR_CM_SERV_REJ_RQD_SRV_OPT_NOT_SUPPORTED,
+	BTS_CTR_CM_SERV_REJ_SRV_OPT_TMP_OUT_OF_ORDER,
+	BTS_CTR_CM_SERV_REJ_CALL_CAN_NOT_BE_IDENTIFIED,
+	BTS_CTR_CM_SERV_REJ_INCORRECT_MESSAGE,
+	BTS_CTR_CM_SERV_REJ_INVALID_MANDANTORY_INF,
+	BTS_CTR_CM_SERV_REJ_MSG_TYPE_NOT_IMPLEMENTED,
+	BTS_CTR_CM_SERV_REJ_MSG_TYPE_NOT_COMPATIBLE,
+	BTS_CTR_CM_SERV_REJ_INF_ELEME_NOT_IMPLEMENTED,
+	BTS_CTR_CM_SERV_REJ_CONDTIONAL_IE_ERROR,
+	BTS_CTR_CM_SERV_REJ_MSG_NOT_COMPATIBLE,
+	BTS_CTR_CM_SERV_REJ_PROTOCOL_ERROR,
+	BTS_CTR_CM_SERV_REJ_RETRY_IN_NEW_CELL,
 };
 
 extern const struct rate_ctr_desc bts_ctr_description[];
diff --git a/src/osmo-bsc/abis_rsl.c b/src/osmo-bsc/abis_rsl.c
index c0d621c..0186024 100644
--- a/src/osmo-bsc/abis_rsl.c
+++ b/src/osmo-bsc/abis_rsl.c
@@ -1007,6 +1007,106 @@
 }
 
 
+/* For 3GPP TS 52.402 unsuccReqsForService, we need to decode the DTAP and count CM Service Reject messages. */
+static void count_unsucc_reqs_for_service(const struct msgb *msg)
+{
+	struct gsm_bts *bts = msg->lchan->ts->trx->bts;
+	const struct gsm48_hdr *gh;
+	uint8_t pdisc, mtype;
+	uint8_t cause;
+
+	if (msgb_l3len(msg) < sizeof(*gh))
+		return;
+
+	gh = msgb_l3(msg);
+	pdisc = gsm48_hdr_pdisc(gh);
+	mtype = gsm48_hdr_msg_type(gh);
+
+	if (pdisc != GSM48_PDISC_MM || mtype != GSM48_MT_MM_CM_SERV_REJ)
+		return;
+
+	rate_ctr_inc(rate_ctr_group_get_ctr(bts->bts_ctrs, BTS_CTR_CM_SERV_REJ));
+
+	cause = gh->data[0];
+	switch (cause) {
+	case GSM48_REJECT_IMSI_UNKNOWN_IN_HLR:
+		rate_ctr_inc(rate_ctr_group_get_ctr(bts->bts_ctrs, BTS_CTR_CM_SERV_REJ_IMSI_UNKNOWN_IN_HLR));
+		break;
+	case GSM48_REJECT_ILLEGAL_MS:
+		rate_ctr_inc(rate_ctr_group_get_ctr(bts->bts_ctrs, BTS_CTR_CM_SERV_REJ_ILLEGAL_MS));
+		break;
+	case GSM48_REJECT_IMSI_UNKNOWN_IN_VLR:
+		rate_ctr_inc(rate_ctr_group_get_ctr(bts->bts_ctrs, BTS_CTR_CM_SERV_REJ_IMSI_UNKNOWN_IN_VLR));
+		break;
+	case GSM48_REJECT_IMEI_NOT_ACCEPTED:
+		rate_ctr_inc(rate_ctr_group_get_ctr(bts->bts_ctrs, BTS_CTR_CM_SERV_REJ_IMEI_NOT_ACCEPTED));
+		break;
+	case GSM48_REJECT_ILLEGAL_ME:
+		rate_ctr_inc(rate_ctr_group_get_ctr(bts->bts_ctrs, BTS_CTR_CM_SERV_REJ_ILLEGAL_ME));
+		break;
+	case GSM48_REJECT_PLMN_NOT_ALLOWED:
+		rate_ctr_inc(rate_ctr_group_get_ctr(bts->bts_ctrs, BTS_CTR_CM_SERV_REJ_PLMN_NOT_ALLOWED));
+		break;
+	case GSM48_REJECT_LOC_NOT_ALLOWED:
+		rate_ctr_inc(rate_ctr_group_get_ctr(bts->bts_ctrs, BTS_CTR_CM_SERV_REJ_LOC_NOT_ALLOWED));
+		break;
+	case GSM48_REJECT_ROAMING_NOT_ALLOWED:
+		rate_ctr_inc(rate_ctr_group_get_ctr(bts->bts_ctrs, BTS_CTR_CM_SERV_REJ_ROAMING_NOT_ALLOWED));
+		break;
+	case GSM48_REJECT_NETWORK_FAILURE:
+		rate_ctr_inc(rate_ctr_group_get_ctr(bts->bts_ctrs, BTS_CTR_CM_SERV_REJ_NETWORK_FAILURE));
+		break;
+	case GSM48_REJECT_SYNCH_FAILURE:
+		rate_ctr_inc(rate_ctr_group_get_ctr(bts->bts_ctrs, BTS_CTR_CM_SERV_REJ_SYNCH_FAILURE));
+		break;
+	case GSM48_REJECT_CONGESTION:
+		rate_ctr_inc(rate_ctr_group_get_ctr(bts->bts_ctrs, BTS_CTR_CM_SERV_REJ_CONGESTION));
+		break;
+	case GSM48_REJECT_SRV_OPT_NOT_SUPPORTED:
+		rate_ctr_inc(rate_ctr_group_get_ctr(bts->bts_ctrs, BTS_CTR_CM_SERV_REJ_SRV_OPT_NOT_SUPPORTED));
+		break;
+	case GSM48_REJECT_RQD_SRV_OPT_NOT_SUPPORTED:
+		rate_ctr_inc(rate_ctr_group_get_ctr(bts->bts_ctrs, BTS_CTR_CM_SERV_REJ_RQD_SRV_OPT_NOT_SUPPORTED));
+		break;
+	case GSM48_REJECT_SRV_OPT_TMP_OUT_OF_ORDER:
+		rate_ctr_inc(rate_ctr_group_get_ctr(bts->bts_ctrs, BTS_CTR_CM_SERV_REJ_SRV_OPT_TMP_OUT_OF_ORDER));
+		break;
+	case GSM48_REJECT_CALL_CAN_NOT_BE_IDENTIFIED:
+		rate_ctr_inc(rate_ctr_group_get_ctr(bts->bts_ctrs, BTS_CTR_CM_SERV_REJ_CALL_CAN_NOT_BE_IDENTIFIED));
+		break;
+	case GSM48_REJECT_INCORRECT_MESSAGE:
+		rate_ctr_inc(rate_ctr_group_get_ctr(bts->bts_ctrs, BTS_CTR_CM_SERV_REJ_INCORRECT_MESSAGE));
+		break;
+	case GSM48_REJECT_INVALID_MANDANTORY_INF:
+		rate_ctr_inc(rate_ctr_group_get_ctr(bts->bts_ctrs, BTS_CTR_CM_SERV_REJ_INVALID_MANDANTORY_INF));
+		break;
+	case GSM48_REJECT_MSG_TYPE_NOT_IMPLEMENTED:
+		rate_ctr_inc(rate_ctr_group_get_ctr(bts->bts_ctrs, BTS_CTR_CM_SERV_REJ_MSG_TYPE_NOT_IMPLEMENTED));
+		break;
+	case GSM48_REJECT_MSG_TYPE_NOT_COMPATIBLE:
+		rate_ctr_inc(rate_ctr_group_get_ctr(bts->bts_ctrs, BTS_CTR_CM_SERV_REJ_MSG_TYPE_NOT_COMPATIBLE));
+		break;
+	case GSM48_REJECT_INF_ELEME_NOT_IMPLEMENTED:
+		rate_ctr_inc(rate_ctr_group_get_ctr(bts->bts_ctrs, BTS_CTR_CM_SERV_REJ_INF_ELEME_NOT_IMPLEMENTED));
+		break;
+	case GSM48_REJECT_CONDTIONAL_IE_ERROR:
+		rate_ctr_inc(rate_ctr_group_get_ctr(bts->bts_ctrs, BTS_CTR_CM_SERV_REJ_CONDTIONAL_IE_ERROR));
+		break;
+	case GSM48_REJECT_MSG_NOT_COMPATIBLE:
+		rate_ctr_inc(rate_ctr_group_get_ctr(bts->bts_ctrs, BTS_CTR_CM_SERV_REJ_MSG_NOT_COMPATIBLE));
+		break;
+	default:
+		if (cause >= 48 && cause <= 63) {
+			rate_ctr_inc(rate_ctr_group_get_ctr(bts->bts_ctrs, BTS_CTR_CM_SERV_REJ_RETRY_IN_NEW_CELL));
+			break;
+		}
+		/* else fall thru */
+	case GSM48_REJECT_PROTOCOL_ERROR:
+		rate_ctr_inc(rate_ctr_group_get_ctr(bts->bts_ctrs, BTS_CTR_CM_SERV_REJ_PROTOCOL_ERROR));
+		break;
+	}
+}
+
 /* Send "DATA REQUEST" message with given L3 Info payload */
 /* Chapter 8.3.1 */
 int rsl_data_request(struct msgb *msg, uint8_t link_id)
@@ -1019,6 +1119,8 @@
 		return -EINVAL;
 	}
 
+	count_unsucc_reqs_for_service(msg);
+
 	chan_nr = gsm_lchan2chan_nr(msg->lchan, true);
 	if (chan_nr < 0) {
 		msgb_free(msg);
diff --git a/src/osmo-bsc/bts.c b/src/osmo-bsc/bts.c
index 4dd05a9..71cf4da 100644
--- a/src/osmo-bsc/bts.c
+++ b/src/osmo-bsc/bts.c
@@ -1293,6 +1293,81 @@
 	[BTS_CTR_ALL_ALLOCATED_STATIC_TCH] = \
 		{ "all_allocated:static_tch",
 		  "Cumulative counter of seconds where all non-dynamic TCH channels were allocated" },
+
+	[BTS_CTR_CM_SERV_REJ] = \
+		{ "cm_serv_rej", "MSC sent CM Service Reject" },
+	[BTS_CTR_CM_SERV_REJ_IMSI_UNKNOWN_IN_HLR] = \
+		{ "cm_serv_rej:imsi_unknown_in_hlr",
+		  "MSC sent CM Service Reject with cause IMSI_UNKNOWN_IN_HLR" },
+	[BTS_CTR_CM_SERV_REJ_ILLEGAL_MS] = \
+		{ "cm_serv_rej:illegal_ms",
+		  "MSC sent CM Service Reject with cause ILLEGAL_MS" },
+	[BTS_CTR_CM_SERV_REJ_IMSI_UNKNOWN_IN_VLR] = \
+		{ "cm_serv_rej:imsi_unknown_in_vlr",
+		  "MSC sent CM Service Reject with cause IMSI_UNKNOWN_IN_VLR" },
+	[BTS_CTR_CM_SERV_REJ_IMEI_NOT_ACCEPTED] = \
+		{ "cm_serv_rej:imei_not_accepted",
+		  "MSC sent CM Service Reject with cause IMEI_NOT_ACCEPTED" },
+	[BTS_CTR_CM_SERV_REJ_ILLEGAL_ME] = \
+		{ "cm_serv_rej:illegal_me",
+		  "MSC sent CM Service Reject with cause ILLEGAL_ME" },
+	[BTS_CTR_CM_SERV_REJ_PLMN_NOT_ALLOWED] = \
+		{ "cm_serv_rej:plmn_not_allowed",
+		  "MSC sent CM Service Reject with cause PLMN_NOT_ALLOWED" },
+	[BTS_CTR_CM_SERV_REJ_LOC_NOT_ALLOWED] = \
+		{ "cm_serv_rej:loc_not_allowed",
+		  "MSC sent CM Service Reject with cause LOC_NOT_ALLOWED" },
+	[BTS_CTR_CM_SERV_REJ_ROAMING_NOT_ALLOWED] = \
+		{ "cm_serv_rej:roaming_not_allowed",
+		  "MSC sent CM Service Reject with cause ROAMING_NOT_ALLOWED" },
+	[BTS_CTR_CM_SERV_REJ_NETWORK_FAILURE] = \
+		{ "cm_serv_rej:network_failure",
+		  "MSC sent CM Service Reject with cause NETWORK_FAILURE" },
+	[BTS_CTR_CM_SERV_REJ_SYNCH_FAILURE] = \
+		{ "cm_serv_rej:synch_failure",
+		  "MSC sent CM Service Reject with cause SYNCH_FAILURE" },
+	[BTS_CTR_CM_SERV_REJ_CONGESTION] = \
+		{ "cm_serv_rej:congestion",
+		  "MSC sent CM Service Reject with cause CONGESTION" },
+	[BTS_CTR_CM_SERV_REJ_SRV_OPT_NOT_SUPPORTED] = \
+		{ "cm_serv_rej:srv_opt_not_supported",
+		  "MSC sent CM Service Reject with cause SRV_OPT_NOT_SUPPORTED" },
+	[BTS_CTR_CM_SERV_REJ_RQD_SRV_OPT_NOT_SUPPORTED] = \
+		{ "cm_serv_rej:rqd_srv_opt_not_supported",
+		  "MSC sent CM Service Reject with cause RQD_SRV_OPT_NOT_SUPPORTED" },
+	[BTS_CTR_CM_SERV_REJ_SRV_OPT_TMP_OUT_OF_ORDER] = \
+		{ "cm_serv_rej:srv_opt_tmp_out_of_order",
+		  "MSC sent CM Service Reject with cause SRV_OPT_TMP_OUT_OF_ORDER" },
+	[BTS_CTR_CM_SERV_REJ_CALL_CAN_NOT_BE_IDENTIFIED] = \
+		{ "cm_serv_rej:call_can_not_be_identified",
+		  "MSC sent CM Service Reject with cause CALL_CAN_NOT_BE_IDENTIFIED" },
+	[BTS_CTR_CM_SERV_REJ_INCORRECT_MESSAGE] = \
+		{ "cm_serv_rej:incorrect_message",
+		  "MSC sent CM Service Reject with cause INCORRECT_MESSAGE" },
+	[BTS_CTR_CM_SERV_REJ_INVALID_MANDANTORY_INF] = \
+		{ "cm_serv_rej:invalid_mandantory_inf",
+		  "MSC sent CM Service Reject with cause INVALID_MANDANTORY_INF" },
+	[BTS_CTR_CM_SERV_REJ_MSG_TYPE_NOT_IMPLEMENTED] = \
+		{ "cm_serv_rej:msg_type_not_implemented",
+		  "MSC sent CM Service Reject with cause MSG_TYPE_NOT_IMPLEMENTED" },
+	[BTS_CTR_CM_SERV_REJ_MSG_TYPE_NOT_COMPATIBLE] = \
+		{ "cm_serv_rej:msg_type_not_compatible",
+		  "MSC sent CM Service Reject with cause MSG_TYPE_NOT_COMPATIBLE" },
+	[BTS_CTR_CM_SERV_REJ_INF_ELEME_NOT_IMPLEMENTED] = \
+		{ "cm_serv_rej:inf_eleme_not_implemented",
+		  "MSC sent CM Service Reject with cause INF_ELEME_NOT_IMPLEMENTED" },
+	[BTS_CTR_CM_SERV_REJ_CONDTIONAL_IE_ERROR] = \
+		{ "cm_serv_rej:condtional_ie_error",
+		  "MSC sent CM Service Reject with cause CONDTIONAL_IE_ERROR" },
+	[BTS_CTR_CM_SERV_REJ_MSG_NOT_COMPATIBLE] = \
+		{ "cm_serv_rej:msg_not_compatible",
+		  "MSC sent CM Service Reject with cause MSG_NOT_COMPATIBLE" },
+	[BTS_CTR_CM_SERV_REJ_PROTOCOL_ERROR] = \
+		{ "cm_serv_rej:protocol_error",
+		  "MSC sent CM Service Reject with cause PROTOCOL_ERROR" },
+	[BTS_CTR_CM_SERV_REJ_RETRY_IN_NEW_CELL] = \
+		{ "cm_serv_rej:retry_in_new_cell",
+		  "MSC sent CM Service Reject with cause 00110000..00111111, Retry upon entry in a new cell" },
 };
 
 const struct rate_ctr_group_desc bts_ctrg_desc = {

-- 
To view, visit https://gerrit.osmocom.org/c/osmo-bsc/+/26142
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-bsc
Gerrit-Branch: master
Gerrit-Change-Id: I79b1261e5a281d9797eaaf9c27d90edd8e27c78b
Gerrit-Change-Number: 26142
Gerrit-PatchSet: 4
Gerrit-Owner: neels <nhofmeyr at sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: dexter <pmaier at sysmocom.de>
Gerrit-Reviewer: neels <nhofmeyr at sysmocom.de>
Gerrit-Reviewer: pespin <pespin at sysmocom.de>
Gerrit-CC: fixeria <vyanitskiy at sysmocom.de>
Gerrit-MessageType: merged
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20211110/eca3908d/attachment.htm>


More information about the gerrit-log mailing list