use more value_string in gsm48 and rsl

This commit is contained in:
Harald Welte 2010-03-25 11:44:57 +08:00
parent b59f9350f8
commit e9e190a8d8
2 changed files with 54 additions and 61 deletions

View File

@ -75,24 +75,25 @@ const struct tlv_definition gsm48_att_tlvdef = {
}, },
}; };
static const char *rr_cause_names[] = { static const struct value_string rr_cause_names[] = {
[GSM48_RR_CAUSE_NORMAL] = "Normal event", { GSM48_RR_CAUSE_NORMAL, "Normal event" },
[GSM48_RR_CAUSE_ABNORMAL_UNSPEC] = "Abnormal release, unspecified", { GSM48_RR_CAUSE_ABNORMAL_UNSPEC, "Abnormal release, unspecified" },
[GSM48_RR_CAUSE_ABNORMAL_UNACCT] = "Abnormal release, channel unacceptable", { GSM48_RR_CAUSE_ABNORMAL_UNACCT, "Abnormal release, channel unacceptable" },
[GSM48_RR_CAUSE_ABNORMAL_TIMER] = "Abnormal release, timer expired", { GSM48_RR_CAUSE_ABNORMAL_TIMER, "Abnormal release, timer expired" },
[GSM48_RR_CAUSE_ABNORMAL_NOACT] = "Abnormal release, no activity on radio path", { GSM48_RR_CAUSE_ABNORMAL_NOACT, "Abnormal release, no activity on radio path" },
[GSM48_RR_CAUSE_PREMPTIVE_REL] = "Preemptive release", { GSM48_RR_CAUSE_PREMPTIVE_REL, "Preemptive release" },
[GSM48_RR_CAUSE_HNDOVER_IMP] = "Handover impossible, timing advance out of range", { GSM48_RR_CAUSE_HNDOVER_IMP, "Handover impossible, timing advance out of range" },
[GSM48_RR_CAUSE_CHAN_MODE_UNACCT] = "Channel mode unacceptable", { GSM48_RR_CAUSE_CHAN_MODE_UNACCT, "Channel mode unacceptable" },
[GSM48_RR_CAUSE_FREQ_NOT_IMPL] = "Frequency not implemented", { GSM48_RR_CAUSE_FREQ_NOT_IMPL, "Frequency not implemented" },
[GSM48_RR_CAUSE_CALL_CLEARED] = "Call already cleared", { GSM48_RR_CAUSE_CALL_CLEARED, "Call already cleared" },
[GSM48_RR_CAUSE_SEMANT_INCORR] = "Semantically incorrect message", { GSM48_RR_CAUSE_SEMANT_INCORR, "Semantically incorrect message" },
[GSM48_RR_CAUSE_INVALID_MAND_INF] = "Invalid mandatory information", { 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, "Message type non-existant or not implemented" },
[GSM48_RR_CAUSE_MSG_TYPE_N_COMPAT] = "Message type not compatible with protocol state", { 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_COND_IE_ERROR, "Conditional IE error" },
[GSM48_RR_CAUSE_NO_CELL_ALLOC_A] = "No cell allocation available", { GSM48_RR_CAUSE_NO_CELL_ALLOC_A, "No cell allocation available" },
[GSM48_RR_CAUSE_PROT_ERROR_UNSPC] = "Protocol error unspecified", { GSM48_RR_CAUSE_PROT_ERROR_UNSPC, "Protocol error unspecified" },
{ 0, NULL },
}; };
const char *cc_state_names[32] = { const char *cc_state_names[32] = {
@ -201,12 +202,7 @@ static char strbuf[64];
const char *rr_cause_name(uint8_t cause) const char *rr_cause_name(uint8_t cause)
{ {
if (cause < ARRAY_SIZE(rr_cause_names) && return get_value_string(rr_cause_names, cause);
rr_cause_names[cause])
return rr_cause_names[cause];
snprintf(strbuf, sizeof(strbuf), "0x%02x", cause);
return strbuf;
} }
static void to_bcd(uint8_t *bcd, uint16_t val) static void to_bcd(uint8_t *bcd, uint16_t val)

View File

@ -176,39 +176,39 @@ int rsl_dec_chan_nr(uint8_t chan_nr, uint8_t *type, uint8_t *subch, uint8_t *tim
return 0; return 0;
} }
/* FIXME: convert to value_string */ static const struct value_string rsl_err_vals[] = {
static const char *rsl_err_vals[0xff] = { { RSL_ERR_RADIO_IF_FAIL, "Radio Interface Failure" },
[RSL_ERR_RADIO_IF_FAIL] = "Radio Interface Failure", { RSL_ERR_RADIO_LINK_FAIL, "Radio Link Failure" },
[RSL_ERR_RADIO_LINK_FAIL] = "Radio Link Failure", { RSL_ERR_HANDOVER_ACC_FAIL, "Handover Access Failure" },
[RSL_ERR_HANDOVER_ACC_FAIL] = "Handover Access Failure", { RSL_ERR_TALKER_ACC_FAIL, "Talker Access Failure" },
[RSL_ERR_TALKER_ACC_FAIL] = "Talker Access Failure", { RSL_ERR_OM_INTERVENTION, "O&M Intervention" },
[RSL_ERR_OM_INTERVENTION] = "O&M Intervention", { RSL_ERR_NORMAL_UNSPEC, "Normal event, unspecified" },
[RSL_ERR_NORMAL_UNSPEC] = "Normal event, unspecified", { RSL_ERR_T_MSRFPCI_EXP, "Siemens: T_MSRFPCI Expired" },
[RSL_ERR_T_MSRFPCI_EXP] = "Siemens: T_MSRFPCI Expired", { RSL_ERR_EQUIPMENT_FAIL, "Equipment Failure" },
[RSL_ERR_EQUIPMENT_FAIL] = "Equipment Failure", { RSL_ERR_RR_UNAVAIL, "Radio Resource not available" },
[RSL_ERR_RR_UNAVAIL] = "Radio Resource not available", { RSL_ERR_TERR_CH_FAIL, "Terrestrial Channel Failure" },
[RSL_ERR_TERR_CH_FAIL] = "Terrestrial Channel Failure", { RSL_ERR_CCCH_OVERLOAD, "CCCH Overload" },
[RSL_ERR_CCCH_OVERLOAD] = "CCCH Overload", { RSL_ERR_ACCH_OVERLOAD, "ACCH Overload" },
[RSL_ERR_ACCH_OVERLOAD] = "ACCH Overload", { RSL_ERR_PROCESSOR_OVERLOAD, "Processor Overload" },
[RSL_ERR_PROCESSOR_OVERLOAD] = "Processor Overload", { RSL_ERR_RES_UNAVAIL, "Resource not available, unspecified" },
[RSL_ERR_RES_UNAVAIL] = "Resource not available, unspecified", { RSL_ERR_TRANSC_UNAVAIL, "Transcoding not available" },
[RSL_ERR_TRANSC_UNAVAIL] = "Transcoding not available", { RSL_ERR_SERV_OPT_UNAVAIL, "Service or Option not available" },
[RSL_ERR_SERV_OPT_UNAVAIL] = "Service or Option not available", { RSL_ERR_ENCR_UNIMPL, "Encryption algorithm not implemented" },
[RSL_ERR_ENCR_UNIMPL] = "Encryption algorithm not implemented", { RSL_ERR_SERV_OPT_UNIMPL, "Service or Option not implemented" },
[RSL_ERR_SERV_OPT_UNIMPL] = "Service or Option not implemented", { RSL_ERR_RCH_ALR_ACTV_ALLOC, "Radio channel already activated" },
[RSL_ERR_RCH_ALR_ACTV_ALLOC] = "Radio channel already activated", { RSL_ERR_INVALID_MESSAGE, "Invalid Message, unspecified" },
[RSL_ERR_INVALID_MESSAGE] = "Invalid Message, unspecified", { RSL_ERR_MSG_DISCR, "Message Discriminator Error" },
[RSL_ERR_MSG_DISCR] = "Message Discriminator Error", { RSL_ERR_MSG_TYPE, "Message Type Error" },
[RSL_ERR_MSG_TYPE] = "Message Type Error", { RSL_ERR_MSG_SEQ, "Message Sequence Error" },
[RSL_ERR_MSG_SEQ] = "Message Sequence Error", { RSL_ERR_IE_ERROR, "General IE error" },
[RSL_ERR_IE_ERROR] = "General IE error", { RSL_ERR_MAND_IE_ERROR, "Mandatory IE error" },
[RSL_ERR_MAND_IE_ERROR] = "Mandatory IE error", { RSL_ERR_OPT_IE_ERROR, "Optional IE error" },
[RSL_ERR_OPT_IE_ERROR] = "Optional IE error", { RSL_ERR_IE_NONEXIST, "IE non-existent" },
[RSL_ERR_IE_NONEXIST] = "IE non-existent", { RSL_ERR_IE_LENGTH, "IE length error" },
[RSL_ERR_IE_LENGTH] = "IE length error", { RSL_ERR_IE_CONTENT, "IE content error" },
[RSL_ERR_IE_CONTENT] = "IE content error", { RSL_ERR_PROTO, "Protocol error, unspecified" },
[RSL_ERR_PROTO] = "Protocol error, unspecified", { RSL_ERR_INTERWORKING, "Interworking error, unspecified" },
[RSL_ERR_INTERWORKING] = "Interworking error, unspecified", { 0, NULL }
}; };
const struct value_string rsl_rlm_cause_strs[] = { const struct value_string rsl_rlm_cause_strs[] = {
@ -231,10 +231,7 @@ const struct value_string rsl_rlm_cause_strs[] = {
const char *rsl_err_name(uint8_t err) const char *rsl_err_name(uint8_t err)
{ {
if (rsl_err_vals[err]) return get_value_string(rsl_err_vals, err);
return rsl_err_vals[err];
else
return "unknown";
} }
/* Section 3.3.2.3 TS 05.02. I think this looks like a table */ /* Section 3.3.2.3 TS 05.02. I think this looks like a table */