aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2015-12-25 09:40:07 +0100
committerHarald Welte <laforge@gnumonks.org>2015-12-25 09:40:07 +0100
commit3d39f842337099f8aa219cf47302d647be0caf2f (patch)
treee33d3de9b47273c58a534e697e0c9cb96247ce55
parentef8934612c91302f7d345a074cfcda124712084e (diff)
ranap_common: Add ranap_cause_str() to stringify RANAP Cause
-rw-r--r--src/ranap_common.c201
-rw-r--r--src/ranap_common.h2
2 files changed, 203 insertions, 0 deletions
diff --git a/src/ranap_common.c b/src/ranap_common.c
index 8879880..45ab225 100644
--- a/src/ranap_common.c
+++ b/src/ranap_common.c
@@ -27,6 +27,207 @@
extern int asn1_xer_print;
+static const struct value_string ranap_cause_radio_vals[] = {
+ { RANAP_CauseRadioNetwork_rab_pre_empted, "RAB pre-empted" },
+ { RANAP_CauseRadioNetwork_trelocoverall_expiry, "Treloc_overall expiry" },
+ { RANAP_CauseRadioNetwork_trelocprep_expiry, "Treloc_prep expiry" },
+ { RANAP_CauseRadioNetwork_treloccomplete_expiry,"Treloc_complete expiry" },
+ { RANAP_CauseRadioNetwork_tqueing_expiry, "Tqueueing expiry" },
+ { RANAP_CauseRadioNetwork_relocation_triggered, "Relocation triggered" },
+ { RANAP_CauseRadioNetwork_trellocalloc_expiry, "Treloc_alloc expiry" },
+ { RANAP_CauseRadioNetwork_unable_to_establish_during_relocation,
+ "unable to establish during relocation" },
+ { RANAP_CauseRadioNetwork_unknown_target_rnc,
+ "unknown target RNC" },
+ { RANAP_CauseRadioNetwork_relocation_cancelled, "Relocation cancelled" },
+ { RANAP_CauseRadioNetwork_successful_relocation, "Successful relocation" },
+ { RANAP_CauseRadioNetwork_requested_ciphering_and_or_integrity_protection_algorithms_not_supported,
+ "requested ciph. and/or int. prot. algorithms not supported" },
+ { RANAP_CauseRadioNetwork_conflict_with_already_existing_integrity_protection_and_or_ciphering_information,
+ "conflict with existing int. prot. and/or ciph. information" },
+ { RANAP_CauseRadioNetwork_failure_in_the_radio_interface_procedure,
+ "failure in the radio interface procedure" },
+ { RANAP_CauseRadioNetwork_release_due_to_utran_generated_reason,
+ "release due to UTRAN generated reason" },
+ { RANAP_CauseRadioNetwork_user_inactivity, "user inactivity" },
+ { RANAP_CauseRadioNetwork_time_critical_relocation,
+ "time critical relocation" },
+ { RANAP_CauseRadioNetwork_requested_traffic_class_not_available,
+ "requested traffic class not available" },
+ { RANAP_CauseRadioNetwork_invalid_rab_parameters_value,
+ "invalid RAB parameters value" },
+ { RANAP_CauseRadioNetwork_requested_maximum_bit_rate_not_available,
+ "requested max. bit-rate not available" },
+ { RANAP_CauseRadioNetwork_requested_guaranteed_bit_rate_not_available,
+ "requested guaranteed bit-rate not available" },
+ { RANAP_CauseRadioNetwork_requested_transfer_delay_not_achievable,
+ "requested transfer delay not achievable" },
+ { RANAP_CauseRadioNetwork_invalid_rab_parameters_combination,
+ "invalid RAB parameters combination" },
+ { RANAP_CauseRadioNetwork_condition_violation_for_sdu_parameters,
+ "condition violation for SDU parameters" },
+ { RANAP_CauseRadioNetwork_condition_violation_for_traffic_handling_priority,
+ "condition violation for traffic handling priority" },
+ { RANAP_CauseRadioNetwork_condition_violation_for_guaranteed_bit_rate,
+ "condition violation for guaranteed bit-rate" },
+ { RANAP_CauseRadioNetwork_user_plane_versions_not_supported,
+ "user-plane versions not supported" },
+ { RANAP_CauseRadioNetwork_iu_up_failure, "Iu-UP failure" },
+ { RANAP_CauseRadioNetwork_relocation_failure_in_target_CN_RNC_or_target_system,
+ "relocation failure in target CN/RNC or target system" },
+ { RANAP_CauseRadioNetwork_invalid_RAB_ID, "Invalid RAB ID" },
+ { RANAP_CauseRadioNetwork_no_remaining_rab, "No remaining RAB" },
+ { RANAP_CauseRadioNetwork_interaction_with_other_procedure,
+ "interaction with other procedure" },
+ { RANAP_CauseRadioNetwork_requested_maximum_bit_rate_for_dl_not_available,
+ "requested maximum bit-rate for DL not available" },
+ { RANAP_CauseRadioNetwork_requested_maximum_bit_rate_for_ul_not_available,
+ "requested maximum bit-rate for UL not available" },
+ { RANAP_CauseRadioNetwork_requested_guaranteed_bit_rate_for_dl_not_available,
+ "requested guaranteed bit-rate for DL not available" },
+ { RANAP_CauseRadioNetwork_requested_guaranteed_bit_rate_for_ul_not_available,
+ "requested guaranteed bit-rate for UL not available" },
+ { RANAP_CauseRadioNetwork_repeated_integrity_checking_failure,
+ "repeated integrity checking failure" },
+ { RANAP_CauseRadioNetwork_requested_request_type_not_supported,
+ "requested request type not supported" },
+ { RANAP_CauseRadioNetwork_request_superseded, "request superseded" },
+ { RANAP_CauseRadioNetwork_release_due_to_UE_generated_signalling_connection_release,
+ "release due to UE-generated signalling connection release" },
+ { RANAP_CauseRadioNetwork_resource_optimisation_relocation,
+ "resource optimisation relocation" },
+ { RANAP_CauseRadioNetwork_requested_information_not_available,
+ "requested information not available" },
+ { RANAP_CauseRadioNetwork_relocation_desirable_for_radio_reasons,
+ "relocation desirable for radio reasons" },
+ { RANAP_CauseRadioNetwork_relocation_not_supported_in_target_RNC_or_target_system,
+ "relocation not supported in target RNC or target system" },
+ { RANAP_CauseRadioNetwork_directed_retry, "directed retry" },
+ { RANAP_CauseRadioNetwork_radio_connection_with_UE_Lost,
+ "radio connection with UE lost" },
+ { RANAP_CauseRadioNetwork_rNC_unable_to_establish_all_RFCs,
+ "RNC unable to establish al RFCs" },
+ { RANAP_CauseRadioNetwork_deciphering_keys_not_available,
+ "de-ciphering keys not available" },
+ { RANAP_CauseRadioNetwork_dedicated_assistance_data_not_available,
+ "dedicated assistance data not available" },
+ { RANAP_CauseRadioNetwork_relocation_target_not_allowed,
+ "relocation target not allowed" },
+ { RANAP_CauseRadioNetwork_location_reporting_congestion,
+ "relocation reporting congestion" },
+ { RANAP_CauseRadioNetwork_reduce_load_in_serving_cell,
+ "reduce load in serving cell" },
+ { RANAP_CauseRadioNetwork_no_radio_resources_available_in_target_cell,
+ "no radio resources available in target cell" },
+ { RANAP_CauseRadioNetwork_gERAN_Iumode_failure,
+ "GERAN Iu-Mode failure" },
+ { RANAP_CauseRadioNetwork_access_restricted_due_to_shared_networks,
+ "access restricted due to shared networks" },
+ { RANAP_CauseRadioNetwork_incoming_relocation_not_supported_due_to_PUESBINE_feature,
+ "incoming relocation not supported due to PUESBINE feature" },
+ { RANAP_CauseRadioNetwork_traffic_load_in_the_target_cell_higher_than_in_the_source_cell,
+ "traffic load in the target cell higher than in the source cell" },
+ { RANAP_CauseRadioNetwork_mBMS_no_multicast_service_for_this_UE,
+ "MBMS: no multicast service for this UE" },
+ { RANAP_CauseRadioNetwork_mBMS_unknown_UE_ID, "MBMS: unknown UE ID" },
+ { RANAP_CauseRadioNetwork_successful_MBMS_session_start_no_data_bearer_necessary,
+ "successful MBMS session start; no data bearer necessarry" },
+ { RANAP_CauseRadioNetwork_mBMS_superseded_due_to_NNSF,
+ "MBMS superseded due to NNSF" },
+ { RANAP_CauseRadioNetwork_mBMS_UE_linking_already_done,
+ "MBMS: UE linking already done" },
+ { RANAP_CauseRadioNetwork_mBMS_UE_de_linking_failure_no_existing_UE_linking,
+ "MBMS: UE de-linking failure; no existing UE linking" },
+ { RANAP_CauseRadioNetwork_tMGI_unknown, "TMGI unknown" },
+ { 0, NULL }
+};
+
+static const struct value_string ranap_cause_transm_vals[] = {
+ { RANAP_CauseTransmissionNetwork_signalling_transport_resource_failure,
+ "signalling transport resource failure" },
+ { RANAP_CauseTransmissionNetwork_iu_transport_connection_failed_to_establish,
+ "Iu transport connection failed to establish" },
+ { 0, NULL }
+};
+
+static const struct value_string ranap_cause_nas_vals[] = {
+ { RANAP_CauseNAS_user_restriction_start_indication,
+ "user restriction; start indication" },
+ { RANAP_CauseNAS_user_restriction_end_indication,
+ "user restriction; stop indication" },
+ { RANAP_CauseNAS_normal_release,
+ "normal release" },
+ { RANAP_CauseNAS_csg_subscription_expiry,
+ "CSG subscription expiry" },
+ { 0, NULL }
+};
+
+static const struct value_string ranap_cause_prot_vals[] = {
+ { RANAP_CauseProtocol_transfer_syntax_error,
+ "transfer sytax error" },
+ { RANAP_CauseProtocol_semantic_error,
+ "semantic error" },
+ { RANAP_CauseProtocol_message_not_compatible_with_receiver_state,
+ "message not compatible with receiver state" },
+ { RANAP_CauseProtocol_abstract_syntax_error_reject,
+ "syntax error: reject" },
+ { RANAP_CauseProtocol_abstract_syntax_error_ignore_and_notify,
+ "syntax error: ignore and notify" },
+ { RANAP_CauseProtocol_abstract_syntax_error_falsely_constructed_message,
+ "syntax error: falsely constructed message" },
+ { 0, NULL }
+};
+
+static const struct value_string ranap_cause_misc_vals[] = {
+ { RANAP_CauseMisc_om_intervention, "OAM intervention" },
+ { RANAP_CauseMisc_no_resource_available, "no resource available" },
+ { RANAP_CauseMisc_unspecified_failure, "unspecified failure" },
+ { RANAP_CauseMisc_network_optimisation, "network optimisation" },
+ { 0, NULL }
+};
+
+char *ranap_cause_str(const RANAP_Cause_t *cause)
+{
+ static char buf[128];
+
+ switch (cause->present) {
+ case RANAP_Cause_PR_radioNetwork:
+ snprintf(buf, sizeof(buf), "radio(%s)",
+ get_value_string(ranap_cause_radio_vals,
+ cause->choice.radioNetwork));
+ break;
+ case RANAP_Cause_PR_transmissionNetwork:
+ snprintf(buf, sizeof(buf), "transmission(%s)",
+ get_value_string(ranap_cause_transm_vals,
+ cause->choice.transmissionNetwork));
+ break;
+ case RANAP_Cause_PR_nAS:
+ snprintf(buf, sizeof(buf), "nas(%s)",
+ get_value_string(ranap_cause_nas_vals,
+ cause->choice.nAS));
+ break;
+ case RANAP_Cause_PR_protocol:
+ snprintf(buf, sizeof(buf), "protocol(%s)",
+ get_value_string(ranap_cause_prot_vals,
+ cause->choice.protocol));
+ break;
+ case RANAP_Cause_PR_misc:
+ snprintf(buf, sizeof(buf), "misc(%s)",
+ get_value_string(ranap_cause_misc_vals,
+ cause->choice.misc));
+ break;
+ case RANAP_Cause_PR_non_Standard:
+ snprintf(buf, sizeof(buf), "non-standard(%u)",
+ cause->choice.non_Standard);
+ break;
+ default:
+ strcpy(buf, "unknown");
+ break;
+ }
+ return buf;
+}
+
+
static struct msgb *ranap_msgb_alloc(void)
{
return msgb_alloc(1024, "RANAP Tx");
diff --git a/src/ranap_common.h b/src/ranap_common.h
index 9c1945f..78d729e 100644
--- a/src/ranap_common.h
+++ b/src/ranap_common.h
@@ -593,6 +593,8 @@
extern int asn1_xer_print;
+char *ranap_cause_str(const RANAP_Cause_t *cause);
+
struct msgb *ranap_generate_initiating_message(e_RANAP_ProcedureCode procedureCode,
RANAP_Criticality_t criticality,
asn_TYPE_descriptor_t *td, void *sptr);