implement bts.N.cm_serv_rej:<cause> rate counters
Related: I0214b27da18af87eca9715ebf7eeeff945e3e12a (osmo-ttcn3-hacks) Related: SYS#4878 Change-Id: I79b1261e5a281d9797eaaf9c27d90edd8e27c78b
This commit is contained in:
parent
c5b16956a7
commit
a249babf20
|
@ -162,6 +162,31 @@ enum bts_counter_id {
|
|||
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[];
|
||||
|
|
|
@ -1007,6 +1007,106 @@ int rsl_siemens_mrpci(struct gsm_lchan *lchan, struct rsl_mrpci *mrpci)
|
|||
}
|
||||
|
||||
|
||||
/* 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 @@ int rsl_data_request(struct msgb *msg, uint8_t link_id)
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
count_unsucc_reqs_for_service(msg);
|
||||
|
||||
chan_nr = gsm_lchan2chan_nr(msg->lchan, true);
|
||||
if (chan_nr < 0) {
|
||||
msgb_free(msg);
|
||||
|
|
|
@ -1293,6 +1293,81 @@ const struct rate_ctr_desc bts_ctr_description[] = {
|
|||
[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 = {
|
||||
|
|
Loading…
Reference in New Issue