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
Sun Nov 7 13:16:29 UTC 2021


neels has uploaded this change for review. ( 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(-)



  git pull ssh://gerrit.osmocom.org:29418/osmo-bsc refs/changes/42/26142/1

diff --git a/include/osmocom/bsc/bts.h b/include/osmocom/bsc/bts.h
index 7e73acd..8e168ec 100644
--- a/include/osmocom/bsc/bts.h
+++ b/include/osmocom/bsc/bts.h
@@ -158,6 +158,31 @@
 	BTS_CTR_SRVCC_TIMEOUT,
 	BTS_CTR_SRVCC_FAILED,
 	BTS_CTR_SRVCC_ERROR,
+	BTS_CTR_CM_SERVICE_REJECT,
+	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 cdd57c2..b6f11a9 100644
--- a/src/osmo-bsc/abis_rsl.c
+++ b/src/osmo-bsc/abis_rsl.c
@@ -1021,6 +1021,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(struct msgb *msg)
+{
+	struct gsm_bts *bts = msg->lchan->ts->trx->bts;
+	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_SERVICE_REJECT));
+
+	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)
@@ -1033,6 +1133,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 83adcc4..d13f3b7 100644
--- a/src/osmo-bsc/bts.c
+++ b/src/osmo-bsc/bts.c
@@ -1249,6 +1249,81 @@
 	[BTS_CTR_SRVCC_ERROR] = \
 		{ "srvcc:error",
 		  "Re-assignment failed for other reason" },
+
+	[BTS_CTR_CM_SERVICE_REJECT] =
+		{ "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: 1
Gerrit-Owner: neels <nhofmeyr at sysmocom.de>
Gerrit-MessageType: newchange
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20211107/f7cc2d1d/attachment.htm>


More information about the gerrit-log mailing list