wireshark/epan/dissectors/packet-rua.c

1710 lines
66 KiB
C

/* Do not modify this file. Changes will be overwritten. */
/* Generated automatically by the ASN.1 to Wireshark dissector compiler */
/* packet-rua.c */
/* asn2wrs.py -L -p rua -c ./rua.cnf -s ./packet-rua-template -D . -O ../.. RUA-CommonDataTypes.asn RUA-Constants.asn RUA-Containers.asn RUA-IEs.asn RUA-PDU-Contents.asn RUA-PDU-Descriptions.asn */
/* packet-rua-template.c
* Routines for UMTS Home Node B RANAP User Adaptation (RUA) packet dissection
* Copyright 2010 Neil Piercy, ip.access Limited <Neil.Piercy@ipaccess.com>
*
* Wireshark - Network traffic analyzer
* By Gerald Combs <gerald@wireshark.org>
* Copyright 1998 Gerald Combs
*
* SPDX-License-Identifier: GPL-2.0-or-later
*
* Ref: 3GPP TS 25.468 version 8.1.0 Release 8
*/
#include "config.h"
#include <epan/packet.h>
#include <epan/sctpppids.h>
#include <epan/asn1.h>
#include <epan/prefs.h>
#include "packet-per.h"
#ifdef _MSC_VER
/* disable: "warning C4146: unary minus operator applied to unsigned type, result still unsigned" */
#pragma warning(disable:4146)
#endif
#define PNAME "UTRAN Iuh interface RUA signalling"
#define PSNAME "RUA"
#define PFNAME "rua"
/* Dissector to use SCTP PPID 19 or a configured SCTP port. IANA assigned port = 29169*/
#define SCTP_PORT_RUA 29169
void proto_register_rua(void);
#define maxPrivateIEs 65535
#define maxProtocolExtensions 65535
#define maxProtocolIEs 65535
#define maxNrOfErrors 256
typedef enum _ProcedureCode_enum {
id_Connect = 1,
id_DirectTransfer = 2,
id_Disconnect = 3,
id_ConnectionlessTransfer = 4,
id_ErrorIndication = 5,
id_privateMessage = 6
} ProcedureCode_enum;
typedef enum _ProtocolIE_ID_enum {
id_Cause = 1,
id_CriticalityDiagnostics = 2,
id_Context_ID = 3,
id_RANAP_Message = 4,
id_IntraDomainNasNodeSelector = 5,
id_Establishment_Cause = 6,
id_CN_DomainIndicator = 7,
id_CSGMembershipStatus = 9
} ProtocolIE_ID_enum;
/* Initialize the protocol and registered fields */
static int proto_rua = -1;
static int hf_rua_CN_DomainIndicator_PDU = -1; /* CN_DomainIndicator */
static int hf_rua_CSGMembershipStatus_PDU = -1; /* CSGMembershipStatus */
static int hf_rua_Establishment_Cause_PDU = -1; /* Establishment_Cause */
static int hf_rua_Context_ID_PDU = -1; /* Context_ID */
static int hf_rua_IntraDomainNasNodeSelector_PDU = -1; /* IntraDomainNasNodeSelector */
static int hf_rua_RANAP_Message_PDU = -1; /* RANAP_Message */
static int hf_rua_Cause_PDU = -1; /* Cause */
static int hf_rua_CriticalityDiagnostics_PDU = -1; /* CriticalityDiagnostics */
static int hf_rua_Connect_PDU = -1; /* Connect */
static int hf_rua_DirectTransfer_PDU = -1; /* DirectTransfer */
static int hf_rua_Disconnect_PDU = -1; /* Disconnect */
static int hf_rua_ConnectionlessTransfer_PDU = -1; /* ConnectionlessTransfer */
static int hf_rua_ErrorIndication_PDU = -1; /* ErrorIndication */
static int hf_rua_PrivateMessage_PDU = -1; /* PrivateMessage */
static int hf_rua_RUA_PDU_PDU = -1; /* RUA_PDU */
static int hf_rua_local = -1; /* INTEGER_0_65535 */
static int hf_rua_global = -1; /* OBJECT_IDENTIFIER */
static int hf_rua_ProtocolIE_Container_item = -1; /* ProtocolIE_Field */
static int hf_rua_protocol_ie_field_id = -1; /* ProtocolIE_ID */
static int hf_rua_criticality = -1; /* Criticality */
static int hf_rua_ie_field_value = -1; /* ProtocolIE_Field_value */
static int hf_rua_ProtocolExtensionContainer_item = -1; /* ProtocolExtensionField */
static int hf_rua_id = -1; /* ProtocolIE_ID */
static int hf_rua_extensionValue = -1; /* T_extensionValue */
static int hf_rua_PrivateIE_Container_item = -1; /* PrivateIE_Field */
static int hf_rua_private_ie_field_id = -1; /* PrivateIE_ID */
static int hf_rua_private_value = -1; /* PrivateIE_Field_value */
static int hf_rua_version = -1; /* T_version */
static int hf_rua_release99 = -1; /* T_release99 */
static int hf_rua_cn_Type = -1; /* T_cn_Type */
static int hf_rua_gsm_Map_IDNNS = -1; /* Gsm_map_IDNNS */
static int hf_rua_ansi_41_IDNNS = -1; /* Ansi_41_IDNNS */
static int hf_rua_later = -1; /* T_later */
static int hf_rua_futurecoding = -1; /* BIT_STRING_SIZE_15 */
static int hf_rua_routingbasis = -1; /* T_routingbasis */
static int hf_rua_localPTMSI = -1; /* T_localPTMSI */
static int hf_rua_routingparameter = -1; /* RoutingParameter */
static int hf_rua_tMSIofsamePLMN = -1; /* T_tMSIofsamePLMN */
static int hf_rua_tMSIofdifferentPLMN = -1; /* T_tMSIofdifferentPLMN */
static int hf_rua_iMSIresponsetopaging = -1; /* T_iMSIresponsetopaging */
static int hf_rua_iMSIcauseUEinitiatedEvent = -1; /* T_iMSIcauseUEinitiatedEvent */
static int hf_rua_iMEI = -1; /* T_iMEI */
static int hf_rua_spare2 = -1; /* T_spare2 */
static int hf_rua_spare1 = -1; /* T_spare1 */
static int hf_rua_dummy = -1; /* BOOLEAN */
static int hf_rua_radioNetwork = -1; /* CauseRadioNetwork */
static int hf_rua_transport = -1; /* CauseTransport */
static int hf_rua_protocol = -1; /* CauseProtocol */
static int hf_rua_misc = -1; /* CauseMisc */
static int hf_rua_procedureCode = -1; /* ProcedureCode */
static int hf_rua_triggeringMessage = -1; /* TriggeringMessage */
static int hf_rua_procedureCriticality = -1; /* Criticality */
static int hf_rua_iEsCriticalityDiagnostics = -1; /* CriticalityDiagnostics_IE_List */
static int hf_rua_iE_Extensions = -1; /* ProtocolExtensionContainer */
static int hf_rua_CriticalityDiagnostics_IE_List_item = -1; /* CriticalityDiagnostics_IE_List_item */
static int hf_rua_iECriticality = -1; /* Criticality */
static int hf_rua_iE_ID = -1; /* ProtocolIE_ID */
static int hf_rua_typeOfError = -1; /* TypeOfError */
static int hf_rua_protocolIEs = -1; /* ProtocolIE_Container */
static int hf_rua_protocolExtensions = -1; /* ProtocolExtensionContainer */
static int hf_rua_privateIEs = -1; /* PrivateIE_Container */
static int hf_rua_initiatingMessage = -1; /* InitiatingMessage */
static int hf_rua_successfulOutcome = -1; /* SuccessfulOutcome */
static int hf_rua_unsuccessfulOutcome = -1; /* UnsuccessfulOutcome */
static int hf_rua_initiatingMessagevalue = -1; /* InitiatingMessage_value */
static int hf_rua_successfulOutcome_value = -1; /* SuccessfulOutcome_value */
static int hf_rua_unsuccessfulOutcome_value = -1; /* UnsuccessfulOutcome_value */
/* Initialize the subtree pointers */
static int ett_rua = -1;
/* initialise sub-dissector handles */
static dissector_handle_t ranap_handle = NULL;
static gint ett_rua_PrivateIE_ID = -1;
static gint ett_rua_ProtocolIE_Container = -1;
static gint ett_rua_ProtocolIE_Field = -1;
static gint ett_rua_ProtocolExtensionContainer = -1;
static gint ett_rua_ProtocolExtensionField = -1;
static gint ett_rua_PrivateIE_Container = -1;
static gint ett_rua_PrivateIE_Field = -1;
static gint ett_rua_IntraDomainNasNodeSelector = -1;
static gint ett_rua_T_version = -1;
static gint ett_rua_T_release99 = -1;
static gint ett_rua_T_cn_Type = -1;
static gint ett_rua_T_later = -1;
static gint ett_rua_Gsm_map_IDNNS = -1;
static gint ett_rua_T_routingbasis = -1;
static gint ett_rua_T_localPTMSI = -1;
static gint ett_rua_T_tMSIofsamePLMN = -1;
static gint ett_rua_T_tMSIofdifferentPLMN = -1;
static gint ett_rua_T_iMSIresponsetopaging = -1;
static gint ett_rua_T_iMSIcauseUEinitiatedEvent = -1;
static gint ett_rua_T_iMEI = -1;
static gint ett_rua_T_spare2 = -1;
static gint ett_rua_T_spare1 = -1;
static gint ett_rua_Cause = -1;
static gint ett_rua_CriticalityDiagnostics = -1;
static gint ett_rua_CriticalityDiagnostics_IE_List = -1;
static gint ett_rua_CriticalityDiagnostics_IE_List_item = -1;
static gint ett_rua_Connect = -1;
static gint ett_rua_DirectTransfer = -1;
static gint ett_rua_Disconnect = -1;
static gint ett_rua_ConnectionlessTransfer = -1;
static gint ett_rua_ErrorIndication = -1;
static gint ett_rua_PrivateMessage = -1;
static gint ett_rua_RUA_PDU = -1;
static gint ett_rua_InitiatingMessage = -1;
static gint ett_rua_SuccessfulOutcome = -1;
static gint ett_rua_UnsuccessfulOutcome = -1;
/* Global variables */
static guint32 ProcedureCode;
static guint32 ProtocolIE_ID;
/* Dissector tables */
static dissector_table_t rua_ies_dissector_table;
static dissector_table_t rua_extension_dissector_table;
static dissector_table_t rua_proc_imsg_dissector_table;
static dissector_table_t rua_proc_sout_dissector_table;
static dissector_table_t rua_proc_uout_dissector_table;
static dissector_handle_t rua_handle;
static int dissect_ProtocolIEFieldValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *);
static int dissect_ProtocolExtensionFieldExtensionValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *);
static int dissect_InitiatingMessageValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *);
static int dissect_SuccessfulOutcomeValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *);
static int dissect_UnsuccessfulOutcomeValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *);
void proto_reg_handoff_rua(void);
static const value_string rua_Criticality_vals[] = {
{ 0, "reject" },
{ 1, "ignore" },
{ 2, "notify" },
{ 0, NULL }
};
static int
dissect_rua_Criticality(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
3, NULL, FALSE, 0, NULL);
return offset;
}
static const value_string rua_ProcedureCode_vals[] = {
{ id_Connect, "id-Connect" },
{ id_DirectTransfer, "id-DirectTransfer" },
{ id_Disconnect, "id-Disconnect" },
{ id_ConnectionlessTransfer, "id-ConnectionlessTransfer" },
{ id_ErrorIndication, "id-ErrorIndication" },
{ id_privateMessage, "id-privateMessage" },
{ 0, NULL }
};
static int
dissect_rua_ProcedureCode(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
0U, 255U, &ProcedureCode, FALSE);
if (strcmp(val_to_str(ProcedureCode, rua_ProcedureCode_vals, "Unknown"), "Unknown") == 0) {
col_set_str(actx->pinfo->cinfo, COL_INFO,
"Unknown Message ");
} /* Known Procedures should be included below and broken out as ELEMENTARY names to avoid confusion */
return offset;
}
static int
dissect_rua_INTEGER_0_65535(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
0U, 65535U, NULL, FALSE);
return offset;
}
static int
dissect_rua_OBJECT_IDENTIFIER(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_per_object_identifier(tvb, offset, actx, tree, hf_index, NULL);
return offset;
}
static const value_string rua_PrivateIE_ID_vals[] = {
{ 0, "local" },
{ 1, "global" },
{ 0, NULL }
};
static const per_choice_t PrivateIE_ID_choice[] = {
{ 0, &hf_rua_local , ASN1_NO_EXTENSIONS , dissect_rua_INTEGER_0_65535 },
{ 1, &hf_rua_global , ASN1_NO_EXTENSIONS , dissect_rua_OBJECT_IDENTIFIER },
{ 0, NULL, 0, NULL }
};
static int
dissect_rua_PrivateIE_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
ett_rua_PrivateIE_ID, PrivateIE_ID_choice,
NULL);
return offset;
}
static const value_string rua_ProtocolIE_ID_vals[] = {
{ id_Cause, "id-Cause" },
{ id_CriticalityDiagnostics, "id-CriticalityDiagnostics" },
{ id_Context_ID, "id-Context-ID" },
{ id_RANAP_Message, "id-RANAP-Message" },
{ id_IntraDomainNasNodeSelector, "id-IntraDomainNasNodeSelector" },
{ id_Establishment_Cause, "id-Establishment-Cause" },
{ id_CN_DomainIndicator, "id-CN-DomainIndicator" },
{ id_CSGMembershipStatus, "id-CSGMembershipStatus" },
{ 0, NULL }
};
static int
dissect_rua_ProtocolIE_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
0U, maxProtocolIEs, &ProtocolIE_ID, FALSE);
if (tree) {
proto_item_append_text(proto_item_get_parent_nth(actx->created_item, 2), ": %s", val_to_str(ProtocolIE_ID, VALS(rua_ProtocolIE_ID_vals), "unknown (%d)"));
}
return offset;
}
static const value_string rua_TriggeringMessage_vals[] = {
{ 0, "initiating-message" },
{ 1, "successful-outcome" },
{ 2, "unsuccessful-outcome" },
{ 0, NULL }
};
static int
dissect_rua_TriggeringMessage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
3, NULL, FALSE, 0, NULL);
return offset;
}
static int
dissect_rua_ProtocolIE_Field_value(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_per_open_type_pdu_new(tvb, offset, actx, tree, hf_index, dissect_ProtocolIEFieldValue);
return offset;
}
static const per_sequence_t ProtocolIE_Field_sequence[] = {
{ &hf_rua_protocol_ie_field_id, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_ProtocolIE_ID },
{ &hf_rua_criticality , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_Criticality },
{ &hf_rua_ie_field_value , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_ProtocolIE_Field_value },
{ NULL, 0, 0, NULL }
};
static int
dissect_rua_ProtocolIE_Field(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
ett_rua_ProtocolIE_Field, ProtocolIE_Field_sequence);
return offset;
}
static const per_sequence_t ProtocolIE_Container_sequence_of[1] = {
{ &hf_rua_ProtocolIE_Container_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_ProtocolIE_Field },
};
static int
dissect_rua_ProtocolIE_Container(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
ett_rua_ProtocolIE_Container, ProtocolIE_Container_sequence_of,
0, maxProtocolIEs, FALSE);
return offset;
}
static int
dissect_rua_T_extensionValue(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_per_open_type_pdu_new(tvb, offset, actx, tree, hf_index, dissect_ProtocolExtensionFieldExtensionValue);
return offset;
}
static const per_sequence_t ProtocolExtensionField_sequence[] = {
{ &hf_rua_id , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_ProtocolIE_ID },
{ &hf_rua_criticality , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_Criticality },
{ &hf_rua_extensionValue , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_T_extensionValue },
{ NULL, 0, 0, NULL }
};
static int
dissect_rua_ProtocolExtensionField(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
ett_rua_ProtocolExtensionField, ProtocolExtensionField_sequence);
return offset;
}
static const per_sequence_t ProtocolExtensionContainer_sequence_of[1] = {
{ &hf_rua_ProtocolExtensionContainer_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_ProtocolExtensionField },
};
static int
dissect_rua_ProtocolExtensionContainer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
ett_rua_ProtocolExtensionContainer, ProtocolExtensionContainer_sequence_of,
1, maxProtocolExtensions, FALSE);
return offset;
}
static int
dissect_rua_PrivateIE_Field_value(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_per_open_type(tvb, offset, actx, tree, hf_index, NULL);
return offset;
}
static const per_sequence_t PrivateIE_Field_sequence[] = {
{ &hf_rua_private_ie_field_id, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_PrivateIE_ID },
{ &hf_rua_criticality , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_Criticality },
{ &hf_rua_private_value , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_PrivateIE_Field_value },
{ NULL, 0, 0, NULL }
};
static int
dissect_rua_PrivateIE_Field(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
ett_rua_PrivateIE_Field, PrivateIE_Field_sequence);
return offset;
}
static const per_sequence_t PrivateIE_Container_sequence_of[1] = {
{ &hf_rua_PrivateIE_Container_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_PrivateIE_Field },
};
static int
dissect_rua_PrivateIE_Container(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
ett_rua_PrivateIE_Container, PrivateIE_Container_sequence_of,
1, maxPrivateIEs, FALSE);
return offset;
}
static const value_string rua_CN_DomainIndicator_vals[] = {
{ 0, "cs-domain" },
{ 1, "ps-domain" },
{ 0, NULL }
};
static int
dissect_rua_CN_DomainIndicator(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2, NULL, FALSE, 0, NULL);
return offset;
}
static const value_string rua_CSGMembershipStatus_vals[] = {
{ 0, "member" },
{ 1, "non-member" },
{ 0, NULL }
};
static int
dissect_rua_CSGMembershipStatus(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2, NULL, TRUE, 0, NULL);
return offset;
}
static const value_string rua_Establishment_Cause_vals[] = {
{ 0, "emergency-call" },
{ 1, "normal-call" },
{ 0, NULL }
};
static int
dissect_rua_Establishment_Cause(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2, NULL, TRUE, 0, NULL);
return offset;
}
static int
dissect_rua_Context_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
24, 24, FALSE, NULL, 0, NULL, NULL);
return offset;
}
static int
dissect_rua_RoutingParameter(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
10, 10, FALSE, NULL, 0, NULL, NULL);
return offset;
}
static const per_sequence_t T_localPTMSI_sequence[] = {
{ &hf_rua_routingparameter, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_RoutingParameter },
{ NULL, 0, 0, NULL }
};
static int
dissect_rua_T_localPTMSI(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
ett_rua_T_localPTMSI, T_localPTMSI_sequence);
return offset;
}
static const per_sequence_t T_tMSIofsamePLMN_sequence[] = {
{ &hf_rua_routingparameter, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_RoutingParameter },
{ NULL, 0, 0, NULL }
};
static int
dissect_rua_T_tMSIofsamePLMN(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
ett_rua_T_tMSIofsamePLMN, T_tMSIofsamePLMN_sequence);
return offset;
}
static const per_sequence_t T_tMSIofdifferentPLMN_sequence[] = {
{ &hf_rua_routingparameter, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_RoutingParameter },
{ NULL, 0, 0, NULL }
};
static int
dissect_rua_T_tMSIofdifferentPLMN(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
ett_rua_T_tMSIofdifferentPLMN, T_tMSIofdifferentPLMN_sequence);
return offset;
}
static const per_sequence_t T_iMSIresponsetopaging_sequence[] = {
{ &hf_rua_routingparameter, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_RoutingParameter },
{ NULL, 0, 0, NULL }
};
static int
dissect_rua_T_iMSIresponsetopaging(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
ett_rua_T_iMSIresponsetopaging, T_iMSIresponsetopaging_sequence);
return offset;
}
static const per_sequence_t T_iMSIcauseUEinitiatedEvent_sequence[] = {
{ &hf_rua_routingparameter, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_RoutingParameter },
{ NULL, 0, 0, NULL }
};
static int
dissect_rua_T_iMSIcauseUEinitiatedEvent(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
ett_rua_T_iMSIcauseUEinitiatedEvent, T_iMSIcauseUEinitiatedEvent_sequence);
return offset;
}
static const per_sequence_t T_iMEI_sequence[] = {
{ &hf_rua_routingparameter, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_RoutingParameter },
{ NULL, 0, 0, NULL }
};
static int
dissect_rua_T_iMEI(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
ett_rua_T_iMEI, T_iMEI_sequence);
return offset;
}
static const per_sequence_t T_spare2_sequence[] = {
{ &hf_rua_routingparameter, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_RoutingParameter },
{ NULL, 0, 0, NULL }
};
static int
dissect_rua_T_spare2(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
ett_rua_T_spare2, T_spare2_sequence);
return offset;
}
static const per_sequence_t T_spare1_sequence[] = {
{ &hf_rua_routingparameter, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_RoutingParameter },
{ NULL, 0, 0, NULL }
};
static int
dissect_rua_T_spare1(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
ett_rua_T_spare1, T_spare1_sequence);
return offset;
}
static const value_string rua_T_routingbasis_vals[] = {
{ 0, "localPTMSI" },
{ 1, "tMSIofsamePLMN" },
{ 2, "tMSIofdifferentPLMN" },
{ 3, "iMSIresponsetopaging" },
{ 4, "iMSIcauseUEinitiatedEvent" },
{ 5, "iMEI" },
{ 6, "spare2" },
{ 7, "spare1" },
{ 0, NULL }
};
static const per_choice_t T_routingbasis_choice[] = {
{ 0, &hf_rua_localPTMSI , ASN1_NO_EXTENSIONS , dissect_rua_T_localPTMSI },
{ 1, &hf_rua_tMSIofsamePLMN , ASN1_NO_EXTENSIONS , dissect_rua_T_tMSIofsamePLMN },
{ 2, &hf_rua_tMSIofdifferentPLMN, ASN1_NO_EXTENSIONS , dissect_rua_T_tMSIofdifferentPLMN },
{ 3, &hf_rua_iMSIresponsetopaging, ASN1_NO_EXTENSIONS , dissect_rua_T_iMSIresponsetopaging },
{ 4, &hf_rua_iMSIcauseUEinitiatedEvent, ASN1_NO_EXTENSIONS , dissect_rua_T_iMSIcauseUEinitiatedEvent },
{ 5, &hf_rua_iMEI , ASN1_NO_EXTENSIONS , dissect_rua_T_iMEI },
{ 6, &hf_rua_spare2 , ASN1_NO_EXTENSIONS , dissect_rua_T_spare2 },
{ 7, &hf_rua_spare1 , ASN1_NO_EXTENSIONS , dissect_rua_T_spare1 },
{ 0, NULL, 0, NULL }
};
static int
dissect_rua_T_routingbasis(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
ett_rua_T_routingbasis, T_routingbasis_choice,
NULL);
return offset;
}
static int
dissect_rua_BOOLEAN(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_per_boolean(tvb, offset, actx, tree, hf_index, NULL);
return offset;
}
static const per_sequence_t Gsm_map_IDNNS_sequence[] = {
{ &hf_rua_routingbasis , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_T_routingbasis },
{ &hf_rua_dummy , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_BOOLEAN },
{ NULL, 0, 0, NULL }
};
static int
dissect_rua_Gsm_map_IDNNS(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
ett_rua_Gsm_map_IDNNS, Gsm_map_IDNNS_sequence);
return offset;
}
static int
dissect_rua_Ansi_41_IDNNS(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
14, 14, FALSE, NULL, 0, NULL, NULL);
return offset;
}
static const value_string rua_T_cn_Type_vals[] = {
{ 0, "gsm-Map-IDNNS" },
{ 1, "ansi-41-IDNNS" },
{ 0, NULL }
};
static const per_choice_t T_cn_Type_choice[] = {
{ 0, &hf_rua_gsm_Map_IDNNS , ASN1_NO_EXTENSIONS , dissect_rua_Gsm_map_IDNNS },
{ 1, &hf_rua_ansi_41_IDNNS , ASN1_NO_EXTENSIONS , dissect_rua_Ansi_41_IDNNS },
{ 0, NULL, 0, NULL }
};
static int
dissect_rua_T_cn_Type(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
ett_rua_T_cn_Type, T_cn_Type_choice,
NULL);
return offset;
}
static const per_sequence_t T_release99_sequence[] = {
{ &hf_rua_cn_Type , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_T_cn_Type },
{ NULL, 0, 0, NULL }
};
static int
dissect_rua_T_release99(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
ett_rua_T_release99, T_release99_sequence);
return offset;
}
static int
dissect_rua_BIT_STRING_SIZE_15(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
15, 15, FALSE, NULL, 0, NULL, NULL);
return offset;
}
static const per_sequence_t T_later_sequence[] = {
{ &hf_rua_futurecoding , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_BIT_STRING_SIZE_15 },
{ NULL, 0, 0, NULL }
};
static int
dissect_rua_T_later(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
ett_rua_T_later, T_later_sequence);
return offset;
}
static const value_string rua_T_version_vals[] = {
{ 0, "release99" },
{ 1, "later" },
{ 0, NULL }
};
static const per_choice_t T_version_choice[] = {
{ 0, &hf_rua_release99 , ASN1_NO_EXTENSIONS , dissect_rua_T_release99 },
{ 1, &hf_rua_later , ASN1_NO_EXTENSIONS , dissect_rua_T_later },
{ 0, NULL, 0, NULL }
};
static int
dissect_rua_T_version(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
ett_rua_T_version, T_version_choice,
NULL);
return offset;
}
static const per_sequence_t IntraDomainNasNodeSelector_sequence[] = {
{ &hf_rua_version , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_T_version },
{ NULL, 0, 0, NULL }
};
static int
dissect_rua_IntraDomainNasNodeSelector(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
ett_rua_IntraDomainNasNodeSelector, IntraDomainNasNodeSelector_sequence);
return offset;
}
static int
dissect_rua_RANAP_Message(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
tvbuff_t *ranap_message_tvb=NULL;
offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
NO_BOUND, NO_BOUND, FALSE, &ranap_message_tvb);
if ((tvb_reported_length(ranap_message_tvb)>0)&&(ranap_handle)) { /* RUA has a RANAP-PDU */
col_set_str(actx->pinfo->cinfo, COL_INFO,
"(RUA) "); /* Set info to (RUA) to make room for RANAP */
col_set_fence(actx->pinfo->cinfo, COL_INFO);
call_dissector(ranap_handle,ranap_message_tvb,actx->pinfo, proto_tree_get_root(tree));
}
return offset;
}
static const value_string rua_CauseRadioNetwork_vals[] = {
{ 0, "normal" },
{ 1, "connect-failed" },
{ 2, "network-release" },
{ 3, "unspecified" },
{ 0, NULL }
};
static int
dissect_rua_CauseRadioNetwork(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
4, NULL, TRUE, 0, NULL);
return offset;
}
static const value_string rua_CauseTransport_vals[] = {
{ 0, "transport-resource-unavailable" },
{ 1, "unspecified" },
{ 0, NULL }
};
static int
dissect_rua_CauseTransport(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2, NULL, TRUE, 0, NULL);
return offset;
}
static const value_string rua_CauseProtocol_vals[] = {
{ 0, "transfer-syntax-error" },
{ 1, "abstract-syntax-error-reject" },
{ 2, "abstract-syntax-error-ignore-and-notify" },
{ 3, "message-not-compatible-with-receiver-state" },
{ 4, "semantic-error" },
{ 5, "unspecified" },
{ 6, "abstract-syntax-error-falsely-constructed-message" },
{ 0, NULL }
};
static int
dissect_rua_CauseProtocol(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
7, NULL, TRUE, 0, NULL);
return offset;
}
static const value_string rua_CauseMisc_vals[] = {
{ 0, "processing-overload" },
{ 1, "hardware-failure" },
{ 2, "o-and-m-intervention" },
{ 3, "unspecified" },
{ 0, NULL }
};
static int
dissect_rua_CauseMisc(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
4, NULL, TRUE, 0, NULL);
return offset;
}
static const value_string rua_Cause_vals[] = {
{ 0, "radioNetwork" },
{ 1, "transport" },
{ 2, "protocol" },
{ 3, "misc" },
{ 0, NULL }
};
static const per_choice_t Cause_choice[] = {
{ 0, &hf_rua_radioNetwork , ASN1_EXTENSION_ROOT , dissect_rua_CauseRadioNetwork },
{ 1, &hf_rua_transport , ASN1_EXTENSION_ROOT , dissect_rua_CauseTransport },
{ 2, &hf_rua_protocol , ASN1_EXTENSION_ROOT , dissect_rua_CauseProtocol },
{ 3, &hf_rua_misc , ASN1_EXTENSION_ROOT , dissect_rua_CauseMisc },
{ 0, NULL, 0, NULL }
};
static int
dissect_rua_Cause(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
ett_rua_Cause, Cause_choice,
NULL);
return offset;
}
static const value_string rua_TypeOfError_vals[] = {
{ 0, "not-understood" },
{ 1, "missing" },
{ 0, NULL }
};
static int
dissect_rua_TypeOfError(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2, NULL, TRUE, 0, NULL);
return offset;
}
static const per_sequence_t CriticalityDiagnostics_IE_List_item_sequence[] = {
{ &hf_rua_iECriticality , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_rua_Criticality },
{ &hf_rua_iE_ID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_rua_ProtocolIE_ID },
{ &hf_rua_typeOfError , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_rua_TypeOfError },
{ &hf_rua_iE_Extensions , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_rua_ProtocolExtensionContainer },
{ NULL, 0, 0, NULL }
};
static int
dissect_rua_CriticalityDiagnostics_IE_List_item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
ett_rua_CriticalityDiagnostics_IE_List_item, CriticalityDiagnostics_IE_List_item_sequence);
return offset;
}
static const per_sequence_t CriticalityDiagnostics_IE_List_sequence_of[1] = {
{ &hf_rua_CriticalityDiagnostics_IE_List_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_CriticalityDiagnostics_IE_List_item },
};
static int
dissect_rua_CriticalityDiagnostics_IE_List(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
ett_rua_CriticalityDiagnostics_IE_List, CriticalityDiagnostics_IE_List_sequence_of,
1, maxNrOfErrors, FALSE);
return offset;
}
static const per_sequence_t CriticalityDiagnostics_sequence[] = {
{ &hf_rua_procedureCode , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_rua_ProcedureCode },
{ &hf_rua_triggeringMessage, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_rua_TriggeringMessage },
{ &hf_rua_procedureCriticality, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_rua_Criticality },
{ &hf_rua_iEsCriticalityDiagnostics, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_rua_CriticalityDiagnostics_IE_List },
{ &hf_rua_iE_Extensions , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_rua_ProtocolExtensionContainer },
{ NULL, 0, 0, NULL }
};
static int
dissect_rua_CriticalityDiagnostics(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
ett_rua_CriticalityDiagnostics, CriticalityDiagnostics_sequence);
return offset;
}
static const per_sequence_t Connect_sequence[] = {
{ &hf_rua_protocolIEs , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_rua_ProtocolIE_Container },
{ &hf_rua_protocolExtensions, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_rua_ProtocolExtensionContainer },
{ NULL, 0, 0, NULL }
};
static int
dissect_rua_Connect(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
col_set_str(actx->pinfo->cinfo, COL_INFO,
"CONNECT ");
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
ett_rua_Connect, Connect_sequence);
return offset;
}
static const per_sequence_t DirectTransfer_sequence[] = {
{ &hf_rua_protocolIEs , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_rua_ProtocolIE_Container },
{ &hf_rua_protocolExtensions, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_rua_ProtocolExtensionContainer },
{ NULL, 0, 0, NULL }
};
static int
dissect_rua_DirectTransfer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
col_set_str(actx->pinfo->cinfo, COL_INFO,
"DIRECT_TRANSFER ");
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
ett_rua_DirectTransfer, DirectTransfer_sequence);
return offset;
}
static const per_sequence_t Disconnect_sequence[] = {
{ &hf_rua_protocolIEs , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_rua_ProtocolIE_Container },
{ &hf_rua_protocolExtensions, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_rua_ProtocolExtensionContainer },
{ NULL, 0, 0, NULL }
};
static int
dissect_rua_Disconnect(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
col_set_str(actx->pinfo->cinfo, COL_INFO,
"DISCONNECT ");
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
ett_rua_Disconnect, Disconnect_sequence);
return offset;
}
static const per_sequence_t ConnectionlessTransfer_sequence[] = {
{ &hf_rua_protocolIEs , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_rua_ProtocolIE_Container },
{ &hf_rua_protocolExtensions, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_rua_ProtocolExtensionContainer },
{ NULL, 0, 0, NULL }
};
static int
dissect_rua_ConnectionlessTransfer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
col_set_str(actx->pinfo->cinfo, COL_INFO,
"CONNECTIONLESS_TRANSFER ");
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
ett_rua_ConnectionlessTransfer, ConnectionlessTransfer_sequence);
return offset;
}
static const per_sequence_t ErrorIndication_sequence[] = {
{ &hf_rua_protocolIEs , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_rua_ProtocolIE_Container },
{ &hf_rua_protocolExtensions, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_rua_ProtocolExtensionContainer },
{ NULL, 0, 0, NULL }
};
static int
dissect_rua_ErrorIndication(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
col_set_str(actx->pinfo->cinfo, COL_INFO,
"ERROR_INDICATION ");
col_set_fence(actx->pinfo->cinfo, COL_INFO); /* Protect info from CriticalityDiagnostics decodes */
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
ett_rua_ErrorIndication, ErrorIndication_sequence);
return offset;
}
static const per_sequence_t PrivateMessage_sequence[] = {
{ &hf_rua_privateIEs , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_rua_PrivateIE_Container },
{ NULL, 0, 0, NULL }
};
static int
dissect_rua_PrivateMessage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
col_set_str(actx->pinfo->cinfo, COL_INFO,
"PRIVATE_MESSAGE ");
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
ett_rua_PrivateMessage, PrivateMessage_sequence);
return offset;
}
static int
dissect_rua_InitiatingMessage_value(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_per_open_type_pdu_new(tvb, offset, actx, tree, hf_index, dissect_InitiatingMessageValue);
return offset;
}
static const per_sequence_t InitiatingMessage_sequence[] = {
{ &hf_rua_procedureCode , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_ProcedureCode },
{ &hf_rua_criticality , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_Criticality },
{ &hf_rua_initiatingMessagevalue, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_InitiatingMessage_value },
{ NULL, 0, 0, NULL }
};
static int
dissect_rua_InitiatingMessage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
ett_rua_InitiatingMessage, InitiatingMessage_sequence);
return offset;
}
static int
dissect_rua_SuccessfulOutcome_value(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_per_open_type_pdu_new(tvb, offset, actx, tree, hf_index, dissect_SuccessfulOutcomeValue);
return offset;
}
static const per_sequence_t SuccessfulOutcome_sequence[] = {
{ &hf_rua_procedureCode , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_ProcedureCode },
{ &hf_rua_criticality , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_Criticality },
{ &hf_rua_successfulOutcome_value, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_SuccessfulOutcome_value },
{ NULL, 0, 0, NULL }
};
static int
dissect_rua_SuccessfulOutcome(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
ett_rua_SuccessfulOutcome, SuccessfulOutcome_sequence);
return offset;
}
static int
dissect_rua_UnsuccessfulOutcome_value(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_per_open_type_pdu_new(tvb, offset, actx, tree, hf_index, dissect_UnsuccessfulOutcomeValue);
return offset;
}
static const per_sequence_t UnsuccessfulOutcome_sequence[] = {
{ &hf_rua_procedureCode , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_ProcedureCode },
{ &hf_rua_criticality , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_Criticality },
{ &hf_rua_unsuccessfulOutcome_value, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_rua_UnsuccessfulOutcome_value },
{ NULL, 0, 0, NULL }
};
static int
dissect_rua_UnsuccessfulOutcome(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
ett_rua_UnsuccessfulOutcome, UnsuccessfulOutcome_sequence);
return offset;
}
static const value_string rua_RUA_PDU_vals[] = {
{ 0, "initiatingMessage" },
{ 1, "successfulOutcome" },
{ 2, "unsuccessfulOutcome" },
{ 0, NULL }
};
static const per_choice_t RUA_PDU_choice[] = {
{ 0, &hf_rua_initiatingMessage, ASN1_EXTENSION_ROOT , dissect_rua_InitiatingMessage },
{ 1, &hf_rua_successfulOutcome, ASN1_EXTENSION_ROOT , dissect_rua_SuccessfulOutcome },
{ 2, &hf_rua_unsuccessfulOutcome, ASN1_EXTENSION_ROOT , dissect_rua_UnsuccessfulOutcome },
{ 0, NULL, 0, NULL }
};
static int
dissect_rua_RUA_PDU(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
ett_rua_RUA_PDU, RUA_PDU_choice,
NULL);
return offset;
}
/*--- PDUs ---*/
static int dissect_CN_DomainIndicator_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
int offset = 0;
asn1_ctx_t asn1_ctx;
asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
offset = dissect_rua_CN_DomainIndicator(tvb, offset, &asn1_ctx, tree, hf_rua_CN_DomainIndicator_PDU);
offset += 7; offset >>= 3;
return offset;
}
static int dissect_CSGMembershipStatus_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
int offset = 0;
asn1_ctx_t asn1_ctx;
asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
offset = dissect_rua_CSGMembershipStatus(tvb, offset, &asn1_ctx, tree, hf_rua_CSGMembershipStatus_PDU);
offset += 7; offset >>= 3;
return offset;
}
static int dissect_Establishment_Cause_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
int offset = 0;
asn1_ctx_t asn1_ctx;
asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
offset = dissect_rua_Establishment_Cause(tvb, offset, &asn1_ctx, tree, hf_rua_Establishment_Cause_PDU);
offset += 7; offset >>= 3;
return offset;
}
static int dissect_Context_ID_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
int offset = 0;
asn1_ctx_t asn1_ctx;
asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
offset = dissect_rua_Context_ID(tvb, offset, &asn1_ctx, tree, hf_rua_Context_ID_PDU);
offset += 7; offset >>= 3;
return offset;
}
static int dissect_IntraDomainNasNodeSelector_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
int offset = 0;
asn1_ctx_t asn1_ctx;
asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
offset = dissect_rua_IntraDomainNasNodeSelector(tvb, offset, &asn1_ctx, tree, hf_rua_IntraDomainNasNodeSelector_PDU);
offset += 7; offset >>= 3;
return offset;
}
static int dissect_RANAP_Message_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
int offset = 0;
asn1_ctx_t asn1_ctx;
asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
offset = dissect_rua_RANAP_Message(tvb, offset, &asn1_ctx, tree, hf_rua_RANAP_Message_PDU);
offset += 7; offset >>= 3;
return offset;
}
static int dissect_Cause_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
int offset = 0;
asn1_ctx_t asn1_ctx;
asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
offset = dissect_rua_Cause(tvb, offset, &asn1_ctx, tree, hf_rua_Cause_PDU);
offset += 7; offset >>= 3;
return offset;
}
static int dissect_CriticalityDiagnostics_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
int offset = 0;
asn1_ctx_t asn1_ctx;
asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
offset = dissect_rua_CriticalityDiagnostics(tvb, offset, &asn1_ctx, tree, hf_rua_CriticalityDiagnostics_PDU);
offset += 7; offset >>= 3;
return offset;
}
static int dissect_Connect_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
int offset = 0;
asn1_ctx_t asn1_ctx;
asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
offset = dissect_rua_Connect(tvb, offset, &asn1_ctx, tree, hf_rua_Connect_PDU);
offset += 7; offset >>= 3;
return offset;
}
static int dissect_DirectTransfer_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
int offset = 0;
asn1_ctx_t asn1_ctx;
asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
offset = dissect_rua_DirectTransfer(tvb, offset, &asn1_ctx, tree, hf_rua_DirectTransfer_PDU);
offset += 7; offset >>= 3;
return offset;
}
static int dissect_Disconnect_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
int offset = 0;
asn1_ctx_t asn1_ctx;
asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
offset = dissect_rua_Disconnect(tvb, offset, &asn1_ctx, tree, hf_rua_Disconnect_PDU);
offset += 7; offset >>= 3;
return offset;
}
static int dissect_ConnectionlessTransfer_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
int offset = 0;
asn1_ctx_t asn1_ctx;
asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
offset = dissect_rua_ConnectionlessTransfer(tvb, offset, &asn1_ctx, tree, hf_rua_ConnectionlessTransfer_PDU);
offset += 7; offset >>= 3;
return offset;
}
static int dissect_ErrorIndication_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
int offset = 0;
asn1_ctx_t asn1_ctx;
asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
offset = dissect_rua_ErrorIndication(tvb, offset, &asn1_ctx, tree, hf_rua_ErrorIndication_PDU);
offset += 7; offset >>= 3;
return offset;
}
static int dissect_PrivateMessage_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
int offset = 0;
asn1_ctx_t asn1_ctx;
asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
offset = dissect_rua_PrivateMessage(tvb, offset, &asn1_ctx, tree, hf_rua_PrivateMessage_PDU);
offset += 7; offset >>= 3;
return offset;
}
static int dissect_RUA_PDU_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
int offset = 0;
asn1_ctx_t asn1_ctx;
asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
offset = dissect_rua_RUA_PDU(tvb, offset, &asn1_ctx, tree, hf_rua_RUA_PDU_PDU);
offset += 7; offset >>= 3;
return offset;
}
static int dissect_ProtocolIEFieldValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
{
return (dissector_try_uint_new(rua_ies_dissector_table, ProtocolIE_ID, tvb, pinfo, tree, FALSE, NULL)) ? tvb_captured_length(tvb) : 0;
}
static int dissect_ProtocolExtensionFieldExtensionValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
{
return (dissector_try_uint_new(rua_extension_dissector_table, ProtocolIE_ID, tvb, pinfo, tree, FALSE, NULL)) ? tvb_captured_length(tvb) : 0;
}
static int dissect_InitiatingMessageValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
{
return (dissector_try_uint_new(rua_proc_imsg_dissector_table, ProcedureCode, tvb, pinfo, tree, FALSE, NULL)) ? tvb_captured_length(tvb) : 0;
}
static int dissect_SuccessfulOutcomeValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
{
return (dissector_try_uint_new(rua_proc_sout_dissector_table, ProcedureCode, tvb, pinfo, tree, FALSE, NULL)) ? tvb_captured_length(tvb) : 0;
}
static int dissect_UnsuccessfulOutcomeValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
{
return (dissector_try_uint_new(rua_proc_uout_dissector_table, ProcedureCode, tvb, pinfo, tree, FALSE, NULL)) ? tvb_captured_length(tvb) : 0;
}
static int
dissect_rua(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
{
proto_item *rua_item = NULL;
proto_tree *rua_tree = NULL;
/* make entry in the Protocol column on summary display */
col_set_str(pinfo->cinfo, COL_PROTOCOL, "RUA");
/* create the rua protocol tree */
rua_item = proto_tree_add_item(tree, proto_rua, tvb, 0, -1, ENC_NA);
rua_tree = proto_item_add_subtree(rua_item, ett_rua);
return dissect_RUA_PDU_PDU(tvb, pinfo, rua_tree, data);
}
/*--- proto_register_rua -------------------------------------------*/
void proto_register_rua(void) {
/* List of fields */
static hf_register_info hf[] = {
{ &hf_rua_CN_DomainIndicator_PDU,
{ "CN-DomainIndicator", "rua.CN_DomainIndicator",
FT_UINT32, BASE_DEC, VALS(rua_CN_DomainIndicator_vals), 0,
NULL, HFILL }},
{ &hf_rua_CSGMembershipStatus_PDU,
{ "CSGMembershipStatus", "rua.CSGMembershipStatus",
FT_UINT32, BASE_DEC, VALS(rua_CSGMembershipStatus_vals), 0,
NULL, HFILL }},
{ &hf_rua_Establishment_Cause_PDU,
{ "Establishment-Cause", "rua.Establishment_Cause",
FT_UINT32, BASE_DEC, VALS(rua_Establishment_Cause_vals), 0,
NULL, HFILL }},
{ &hf_rua_Context_ID_PDU,
{ "Context-ID", "rua.Context_ID",
FT_BYTES, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_rua_IntraDomainNasNodeSelector_PDU,
{ "IntraDomainNasNodeSelector", "rua.IntraDomainNasNodeSelector_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_rua_RANAP_Message_PDU,
{ "RANAP-Message", "rua.RANAP_Message",
FT_BYTES, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_rua_Cause_PDU,
{ "Cause", "rua.Cause",
FT_UINT32, BASE_DEC, VALS(rua_Cause_vals), 0,
NULL, HFILL }},
{ &hf_rua_CriticalityDiagnostics_PDU,
{ "CriticalityDiagnostics", "rua.CriticalityDiagnostics_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_rua_Connect_PDU,
{ "Connect", "rua.Connect_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_rua_DirectTransfer_PDU,
{ "DirectTransfer", "rua.DirectTransfer_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_rua_Disconnect_PDU,
{ "Disconnect", "rua.Disconnect_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_rua_ConnectionlessTransfer_PDU,
{ "ConnectionlessTransfer", "rua.ConnectionlessTransfer_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_rua_ErrorIndication_PDU,
{ "ErrorIndication", "rua.ErrorIndication_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_rua_PrivateMessage_PDU,
{ "PrivateMessage", "rua.PrivateMessage_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_rua_RUA_PDU_PDU,
{ "RUA-PDU", "rua.RUA_PDU",
FT_UINT32, BASE_DEC, VALS(rua_RUA_PDU_vals), 0,
NULL, HFILL }},
{ &hf_rua_local,
{ "local", "rua.local",
FT_UINT32, BASE_DEC, NULL, 0,
"INTEGER_0_65535", HFILL }},
{ &hf_rua_global,
{ "global", "rua.global",
FT_OID, BASE_NONE, NULL, 0,
"OBJECT_IDENTIFIER", HFILL }},
{ &hf_rua_ProtocolIE_Container_item,
{ "ProtocolIE-Field", "rua.ProtocolIE_Field_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_rua_protocol_ie_field_id,
{ "id", "rua.id",
FT_UINT32, BASE_DEC, VALS(rua_ProtocolIE_ID_vals), 0,
"ProtocolIE_ID", HFILL }},
{ &hf_rua_criticality,
{ "criticality", "rua.criticality",
FT_UINT32, BASE_DEC, VALS(rua_Criticality_vals), 0,
NULL, HFILL }},
{ &hf_rua_ie_field_value,
{ "value", "rua.value_element",
FT_NONE, BASE_NONE, NULL, 0,
"ProtocolIE_Field_value", HFILL }},
{ &hf_rua_ProtocolExtensionContainer_item,
{ "ProtocolExtensionField", "rua.ProtocolExtensionField_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_rua_id,
{ "id", "rua.id",
FT_UINT32, BASE_DEC, VALS(rua_ProtocolIE_ID_vals), 0,
"ProtocolIE_ID", HFILL }},
{ &hf_rua_extensionValue,
{ "extensionValue", "rua.extensionValue_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_rua_PrivateIE_Container_item,
{ "PrivateIE-Field", "rua.PrivateIE_Field_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_rua_private_ie_field_id,
{ "id", "rua.id",
FT_UINT32, BASE_DEC, VALS(rua_PrivateIE_ID_vals), 0,
"PrivateIE_ID", HFILL }},
{ &hf_rua_private_value,
{ "value", "rua.value_element",
FT_NONE, BASE_NONE, NULL, 0,
"PrivateIE_Field_value", HFILL }},
{ &hf_rua_version,
{ "version", "rua.version",
FT_UINT32, BASE_DEC, VALS(rua_T_version_vals), 0,
NULL, HFILL }},
{ &hf_rua_release99,
{ "release99", "rua.release99_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_rua_cn_Type,
{ "cn-Type", "rua.cn_Type",
FT_UINT32, BASE_DEC, VALS(rua_T_cn_Type_vals), 0,
NULL, HFILL }},
{ &hf_rua_gsm_Map_IDNNS,
{ "gsm-Map-IDNNS", "rua.gsm_Map_IDNNS_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_rua_ansi_41_IDNNS,
{ "ansi-41-IDNNS", "rua.ansi_41_IDNNS",
FT_BYTES, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_rua_later,
{ "later", "rua.later_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_rua_futurecoding,
{ "futurecoding", "rua.futurecoding",
FT_BYTES, BASE_NONE, NULL, 0,
"BIT_STRING_SIZE_15", HFILL }},
{ &hf_rua_routingbasis,
{ "routingbasis", "rua.routingbasis",
FT_UINT32, BASE_DEC, VALS(rua_T_routingbasis_vals), 0,
NULL, HFILL }},
{ &hf_rua_localPTMSI,
{ "localPTMSI", "rua.localPTMSI_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_rua_routingparameter,
{ "routingparameter", "rua.routingparameter",
FT_BYTES, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_rua_tMSIofsamePLMN,
{ "tMSIofsamePLMN", "rua.tMSIofsamePLMN_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_rua_tMSIofdifferentPLMN,
{ "tMSIofdifferentPLMN", "rua.tMSIofdifferentPLMN_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_rua_iMSIresponsetopaging,
{ "iMSIresponsetopaging", "rua.iMSIresponsetopaging_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_rua_iMSIcauseUEinitiatedEvent,
{ "iMSIcauseUEinitiatedEvent", "rua.iMSIcauseUEinitiatedEvent_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_rua_iMEI,
{ "iMEI", "rua.iMEI_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_rua_spare2,
{ "spare2", "rua.spare2_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_rua_spare1,
{ "spare1", "rua.spare1_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_rua_dummy,
{ "dummy", "rua.dummy",
FT_BOOLEAN, BASE_NONE, NULL, 0,
"BOOLEAN", HFILL }},
{ &hf_rua_radioNetwork,
{ "radioNetwork", "rua.radioNetwork",
FT_UINT32, BASE_DEC, VALS(rua_CauseRadioNetwork_vals), 0,
"CauseRadioNetwork", HFILL }},
{ &hf_rua_transport,
{ "transport", "rua.transport",
FT_UINT32, BASE_DEC, VALS(rua_CauseTransport_vals), 0,
"CauseTransport", HFILL }},
{ &hf_rua_protocol,
{ "protocol", "rua.protocol",
FT_UINT32, BASE_DEC, VALS(rua_CauseProtocol_vals), 0,
"CauseProtocol", HFILL }},
{ &hf_rua_misc,
{ "misc", "rua.misc",
FT_UINT32, BASE_DEC, VALS(rua_CauseMisc_vals), 0,
"CauseMisc", HFILL }},
{ &hf_rua_procedureCode,
{ "procedureCode", "rua.procedureCode",
FT_UINT32, BASE_DEC, VALS(rua_ProcedureCode_vals), 0,
NULL, HFILL }},
{ &hf_rua_triggeringMessage,
{ "triggeringMessage", "rua.triggeringMessage",
FT_UINT32, BASE_DEC, VALS(rua_TriggeringMessage_vals), 0,
NULL, HFILL }},
{ &hf_rua_procedureCriticality,
{ "procedureCriticality", "rua.procedureCriticality",
FT_UINT32, BASE_DEC, VALS(rua_Criticality_vals), 0,
"Criticality", HFILL }},
{ &hf_rua_iEsCriticalityDiagnostics,
{ "iEsCriticalityDiagnostics", "rua.iEsCriticalityDiagnostics",
FT_UINT32, BASE_DEC, NULL, 0,
"CriticalityDiagnostics_IE_List", HFILL }},
{ &hf_rua_iE_Extensions,
{ "iE-Extensions", "rua.iE_Extensions",
FT_UINT32, BASE_DEC, NULL, 0,
"ProtocolExtensionContainer", HFILL }},
{ &hf_rua_CriticalityDiagnostics_IE_List_item,
{ "CriticalityDiagnostics-IE-List item", "rua.CriticalityDiagnostics_IE_List_item_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_rua_iECriticality,
{ "iECriticality", "rua.iECriticality",
FT_UINT32, BASE_DEC, VALS(rua_Criticality_vals), 0,
"Criticality", HFILL }},
{ &hf_rua_iE_ID,
{ "iE-ID", "rua.iE_ID",
FT_UINT32, BASE_DEC, VALS(rua_ProtocolIE_ID_vals), 0,
"ProtocolIE_ID", HFILL }},
{ &hf_rua_typeOfError,
{ "typeOfError", "rua.typeOfError",
FT_UINT32, BASE_DEC, VALS(rua_TypeOfError_vals), 0,
NULL, HFILL }},
{ &hf_rua_protocolIEs,
{ "protocolIEs", "rua.protocolIEs",
FT_UINT32, BASE_DEC, NULL, 0,
"ProtocolIE_Container", HFILL }},
{ &hf_rua_protocolExtensions,
{ "protocolExtensions", "rua.protocolExtensions",
FT_UINT32, BASE_DEC, NULL, 0,
"ProtocolExtensionContainer", HFILL }},
{ &hf_rua_privateIEs,
{ "privateIEs", "rua.privateIEs",
FT_UINT32, BASE_DEC, NULL, 0,
"PrivateIE_Container", HFILL }},
{ &hf_rua_initiatingMessage,
{ "initiatingMessage", "rua.initiatingMessage_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_rua_successfulOutcome,
{ "successfulOutcome", "rua.successfulOutcome_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_rua_unsuccessfulOutcome,
{ "unsuccessfulOutcome", "rua.unsuccessfulOutcome_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_rua_initiatingMessagevalue,
{ "value", "rua.value_element",
FT_NONE, BASE_NONE, NULL, 0,
"InitiatingMessage_value", HFILL }},
{ &hf_rua_successfulOutcome_value,
{ "value", "rua.value_element",
FT_NONE, BASE_NONE, NULL, 0,
"SuccessfulOutcome_value", HFILL }},
{ &hf_rua_unsuccessfulOutcome_value,
{ "value", "rua.value_element",
FT_NONE, BASE_NONE, NULL, 0,
"UnsuccessfulOutcome_value", HFILL }},
};
/* List of subtrees */
static gint *ett[] = {
&ett_rua,
&ett_rua_PrivateIE_ID,
&ett_rua_ProtocolIE_Container,
&ett_rua_ProtocolIE_Field,
&ett_rua_ProtocolExtensionContainer,
&ett_rua_ProtocolExtensionField,
&ett_rua_PrivateIE_Container,
&ett_rua_PrivateIE_Field,
&ett_rua_IntraDomainNasNodeSelector,
&ett_rua_T_version,
&ett_rua_T_release99,
&ett_rua_T_cn_Type,
&ett_rua_T_later,
&ett_rua_Gsm_map_IDNNS,
&ett_rua_T_routingbasis,
&ett_rua_T_localPTMSI,
&ett_rua_T_tMSIofsamePLMN,
&ett_rua_T_tMSIofdifferentPLMN,
&ett_rua_T_iMSIresponsetopaging,
&ett_rua_T_iMSIcauseUEinitiatedEvent,
&ett_rua_T_iMEI,
&ett_rua_T_spare2,
&ett_rua_T_spare1,
&ett_rua_Cause,
&ett_rua_CriticalityDiagnostics,
&ett_rua_CriticalityDiagnostics_IE_List,
&ett_rua_CriticalityDiagnostics_IE_List_item,
&ett_rua_Connect,
&ett_rua_DirectTransfer,
&ett_rua_Disconnect,
&ett_rua_ConnectionlessTransfer,
&ett_rua_ErrorIndication,
&ett_rua_PrivateMessage,
&ett_rua_RUA_PDU,
&ett_rua_InitiatingMessage,
&ett_rua_SuccessfulOutcome,
&ett_rua_UnsuccessfulOutcome,
};
/* Register protocol */
proto_rua = proto_register_protocol(PNAME, PSNAME, PFNAME);
/* Register fields and subtrees */
proto_register_field_array(proto_rua, hf, array_length(hf));
proto_register_subtree_array(ett, array_length(ett));
/* Register dissector */
rua_handle = register_dissector("rua", dissect_rua, proto_rua);
/* Register dissector tables */
rua_ies_dissector_table = register_dissector_table("rua.ies", "RUA-PROTOCOL-IES", proto_rua, FT_UINT32, BASE_DEC);
rua_extension_dissector_table = register_dissector_table("rua.extension", "RUA-PROTOCOL-EXTENSION", proto_rua, FT_UINT32, BASE_DEC);
rua_proc_imsg_dissector_table = register_dissector_table("rua.proc.imsg", "RUA-ELEMENTARY-PROCEDURE InitiatingMessage", proto_rua, FT_UINT32, BASE_DEC);
rua_proc_sout_dissector_table = register_dissector_table("rua.proc.sout", "RUA-ELEMENTARY-PROCEDURE SuccessfulOutcome", proto_rua, FT_UINT32, BASE_DEC);
rua_proc_uout_dissector_table = register_dissector_table("rua.proc.uout", "RUA-ELEMENTARY-PROCEDURE UnsuccessfulOutcome", proto_rua, FT_UINT32, BASE_DEC);
/* rua_module = prefs_register_protocol(proto_rua, NULL); */
}
/*--- proto_reg_handoff_rua ---------------------------------------*/
void
proto_reg_handoff_rua(void)
{
ranap_handle = find_dissector_add_dependency("ranap", proto_rua);
dissector_add_uint("sctp.ppi", RUA_PAYLOAD_PROTOCOL_ID, rua_handle);
dissector_add_uint_with_preference("sctp.port", SCTP_PORT_RUA, rua_handle);
dissector_add_uint("rua.ies", id_Cause, create_dissector_handle(dissect_Cause_PDU, proto_rua));
dissector_add_uint("rua.ies", id_CriticalityDiagnostics, create_dissector_handle(dissect_CriticalityDiagnostics_PDU, proto_rua));
dissector_add_uint("rua.ies", id_Context_ID, create_dissector_handle(dissect_Context_ID_PDU, proto_rua));
dissector_add_uint("rua.ies", id_RANAP_Message, create_dissector_handle(dissect_RANAP_Message_PDU, proto_rua));
dissector_add_uint("rua.ies", id_IntraDomainNasNodeSelector, create_dissector_handle(dissect_IntraDomainNasNodeSelector_PDU, proto_rua));
dissector_add_uint("rua.ies", id_Establishment_Cause, create_dissector_handle(dissect_Establishment_Cause_PDU, proto_rua));
dissector_add_uint("rua.ies", id_CN_DomainIndicator, create_dissector_handle(dissect_CN_DomainIndicator_PDU, proto_rua));
dissector_add_uint("rua.extension", id_CSGMembershipStatus, create_dissector_handle(dissect_CSGMembershipStatus_PDU, proto_rua));
dissector_add_uint("rua.proc.imsg", id_Connect, create_dissector_handle(dissect_Connect_PDU, proto_rua));
dissector_add_uint("rua.proc.imsg", id_DirectTransfer, create_dissector_handle(dissect_DirectTransfer_PDU, proto_rua));
dissector_add_uint("rua.proc.imsg", id_Disconnect, create_dissector_handle(dissect_Disconnect_PDU, proto_rua));
dissector_add_uint("rua.proc.imsg", id_ConnectionlessTransfer, create_dissector_handle(dissect_ConnectionlessTransfer_PDU, proto_rua));
dissector_add_uint("rua.proc.imsg", id_ErrorIndication, create_dissector_handle(dissect_ErrorIndication_PDU, proto_rua));
dissector_add_uint("rua.proc.imsg", id_privateMessage, create_dissector_handle(dissect_PrivateMessage_PDU, proto_rua));
}