add verbose reporting of RR STATUS cause

This commit is contained in:
Harald Welte 2009-05-01 18:28:42 +00:00
parent 3cf7c3ff89
commit cf5b3597ed
2 changed files with 47 additions and 2 deletions

View File

@ -461,7 +461,7 @@ enum gsm48_rr_cause {
GSM48_RR_CAUSE_HNDOVER_IMP = 0x06,
GSM48_RR_CAUSE_CHAN_MODE_UNACCT = 0x07,
GSM48_RR_CAUSE_FREQ_NOT_IMPL = 0x08,
GSM48_RR_CAUSE_CALL_ClEARED = 0x41,
GSM48_RR_CAUSE_CALL_CLEARED = 0x41,
GSM48_RR_CAUSE_SEMANT_INCORR = 0x5f,
GSM48_RR_CAUSE_INVALID_MAND_INF = 0x60,
GSM48_RR_CAUSE_MSG_TYPE_N = 0x61,

View File

@ -84,7 +84,39 @@ static const struct tlv_definition rsl_att_tlvdef = {
/* FIXME: more elements */
},
};
static const char *rr_cause_names[] = {
[GSM48_RR_CAUSE_NORMAL] = "Normal event",
[GSM48_RR_CAUSE_ABNORMAL_UNSPEC] = "Abnormal release, unspecified",
[GSM48_RR_CAUSE_ABNORMAL_UNACCT] = "Abnormal release, channel unacceptable",
[GSM48_RR_CAUSE_ABNORMAL_TIMER] = "Abnormal release, timer expired",
[GSM48_RR_CAUSE_ABNORMAL_NOACT] = "Abnormal release, no activity on radio path",
[GSM48_RR_CAUSE_PREMPTIVE_REL] = "Preemptive release",
[GSM48_RR_CAUSE_HNDOVER_IMP] = "Handover impossible, timing advance out of range",
[GSM48_RR_CAUSE_CHAN_MODE_UNACCT] = "Channel mode unacceptable",
[GSM48_RR_CAUSE_FREQ_NOT_IMPL] = "Frequency not implemented",
[GSM48_RR_CAUSE_CALL_CLEARED] = "Call already cleared",
[GSM48_RR_CAUSE_SEMANT_INCORR] = "Semantically incorrect message",
[GSM48_RR_CAUSE_INVALID_MAND_INF] = "Invalid mandatory information",
[GSM48_RR_CAUSE_MSG_TYPE_N] = "Message type non-existant or not implemented",
[GSM48_RR_CAUSE_MSG_TYPE_N_COMPAT] = "Message type not compatible with protocol state",
[GSM48_RR_CAUSE_COND_IE_ERROR] = "Conditional IE error",
[GSM48_RR_CAUSE_NO_CELL_ALLOC_A] = "No cell allocation available",
[GSM48_RR_CAUSE_PROT_ERROR_UNSPC] = "Protocol error unspecified",
};
static char strbuf[64];
static const char *rr_cause_name(u_int8_t cause)
{
if (cause < ARRAY_SIZE(rr_cause_names) &&
rr_cause_names[cause])
return rr_cause_names[cause];
snprintf(strbuf, sizeof(strbuf), "0x%02x", cause);
return strbuf;
}
static int gsm48_tx_simple(struct gsm_lchan *lchan,
u_int8_t pdisc, u_int8_t msg_type);
static void schedule_reject(struct gsm_lchan *lchan);
@ -915,6 +947,16 @@ static int gsm48_rr_rx_pag_resp(struct msgb *msg)
return rc;
}
static int gsm48_rx_rr_status(struct msgb *msg)
{
struct gsm48_hdr *gh = msgb_l3(msg);
DEBUGP(DRR, "STATUS rr_cause = %s\n",
rr_cause_name(gh->data[0]));
return 0;
}
/* Receive a GSM 04.08 Radio Resource (RR) message */
static int gsm0408_rcv_rr(struct msgb *msg)
{
@ -936,6 +978,9 @@ static int gsm0408_rcv_rr(struct msgb *msg)
DEBUGP(DRR, "CHANNEL MODE MODIFY ACK\n");
rc = rsl_chan_mode_modify_req(msg->lchan);
break;
case GSM48_MT_RR_STATUS:
rc = gsm48_rx_rr_status(msg);
break;
default:
fprintf(stderr, "Unimplemented GSM 04.08 RR msg type 0x%02x\n",
gh->msg_type);