diff options
author | Anders Broman <anders.broman@ericsson.com> | 2011-10-13 19:41:34 +0000 |
---|---|---|
committer | Anders Broman <anders.broman@ericsson.com> | 2011-10-13 19:41:34 +0000 |
commit | c20e6b8a25253650267fe347fd6fb7accd784214 (patch) | |
tree | 0182ffc4925ee1c1a73917edf667b1f7cdc969fb | |
parent | 022929724b747a70f8978df4dddbbd1da8efb705 (diff) |
Dissect NSAP encoded transport layer address.
svn path=/trunk/; revision=39408
-rw-r--r-- | asn1/ranap/packet-ranap-template.c | 8 | ||||
-rw-r--r-- | asn1/ranap/ranap.cnf | 19 | ||||
-rw-r--r-- | epan/dissectors/packet-ranap.c | 52 | ||||
-rw-r--r-- | epan/dissectors/packet-ranap.h | 2 |
4 files changed, 57 insertions, 24 deletions
diff --git a/asn1/ranap/packet-ranap-template.c b/asn1/ranap/packet-ranap-template.c index 3a59de16dc..04793b87aa 100644 --- a/asn1/ranap/packet-ranap-template.c +++ b/asn1/ranap/packet-ranap-template.c @@ -44,6 +44,7 @@ #include "packet-e212.h" #include "packet-sccp.h" #include "packet-gsm_a_common.h" +#include "packet-isup.h" #ifdef _MSC_VER /* disable: "warning C4146: unary minus operator applied to unsigned type, result still unsigned" */ @@ -72,12 +73,14 @@ static dissector_handle_t rrc_ho_to_utran_cmd = NULL; static int hf_ranap_imsi_digits = -1; static int hf_ranap_transportLayerAddress_ipv4 = -1; static int hf_ranap_transportLayerAddress_ipv6 = -1; +static int hf_ranap_transportLayerAddress_nsap = -1; #include "packet-ranap-hf.c" /* Initialize the subtree pointers */ static int ett_ranap = -1; static int ett_ranap_TransportLayerAddress = -1; +static int ett_ranap_TransportLayerAddress_nsap = -1; #include "packet-ranap-ett.c" @@ -308,6 +311,10 @@ void proto_register_ranap(void) { { "transportLayerAddress IPv6", "ranap.transportLayerAddress_ipv6", FT_IPv6, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_ranap_transportLayerAddress_nsap, + { "transportLayerAddress NSAP", "ranap.transportLayerAddress_NSAP", + FT_BYTES, BASE_NONE, NULL, 0, + NULL, HFILL }}, #include "packet-ranap-hfarr.c" @@ -317,6 +324,7 @@ void proto_register_ranap(void) { static gint *ett[] = { &ett_ranap, &ett_ranap_TransportLayerAddress, + &ett_ranap_TransportLayerAddress_nsap, #include "packet-ranap-ettarr.c" }; diff --git a/asn1/ranap/ranap.cnf b/asn1/ranap/ranap.cnf index 942b1c0c79..5f802c4ad8 100644 --- a/asn1/ranap/ranap.cnf +++ b/asn1/ranap/ranap.cnf @@ -293,9 +293,14 @@ MAX_VAL = asn1_param_get_integer(%(ACTX)s,"upperBound") # if (parameter_tvb) # dissect_gtp_mbms_ses_dur(parameter_tvb, actx->pinfo, tree); +# 9.2.2.1 Transport Layer Address +# For details on the Transport Layer Address, see ref +# 3GPP TS 25.414: "UTRAN Iu interface data transport and transport signalling". +# #.FN_BODY TransportLayerAddress VAL_PTR = ¶meter_tvb tvbuff_t *parameter_tvb=NULL; - proto_tree *subtree; + proto_tree *item; + proto_tree *subtree, *nsap_tree; gint tvb_len; %(DEFAULT_BODY)s @@ -308,11 +313,16 @@ MAX_VAL = asn1_param_get_integer(%(ACTX)s,"upperBound") subtree = proto_item_add_subtree(actx->created_item, ett_ranap_TransportLayerAddress); if (tvb_len==4){ /* IPv4 */ - proto_tree_add_item(subtree, hf_ranap_transportLayerAddress_ipv4, parameter_tvb, 0, tvb_len, FALSE); + proto_tree_add_item(subtree, hf_ranap_transportLayerAddress_ipv4, parameter_tvb, 0, tvb_len, ENC_NA); } if (tvb_len==16){ /* IPv6 */ - proto_tree_add_item(subtree, hf_ranap_transportLayerAddress_ipv6, parameter_tvb, 0, tvb_len, FALSE); + proto_tree_add_item(subtree, hf_ranap_transportLayerAddress_ipv6, parameter_tvb, 0, tvb_len, ENC_NA); + } + if (tvb_len==20){ + item = proto_tree_add_item(subtree, hf_ranap_transportLayerAddress_nsap, parameter_tvb, 0, tvb_len, ENC_NA); + nsap_tree = proto_item_add_subtree(item, ett_ranap_TransportLayerAddress_nsap); + dissect_nsap(parameter_tvb, 0, 20, nsap_tree); } #.FN_BODY GTP-TEI VAL_PTR = ¶meter_tvb @@ -662,7 +672,8 @@ id-IRAT-Measurement-Configuration ProtocolIE-ID id-MDT-Configuration ProtocolIE-ID id-Priority-Class-Indicator ProtocolIE-ID id-RNSAPRelocationParameters ProtocolIE-ID -id-RABParametersList ProtocolIE-ID +id-RNSAPRelocationParameters ProtocolIE-ID +id-Not-Used-246 ProtocolIE-ID id-Management-Based-MDT-Allowed ProtocolIE-ID #.END diff --git a/epan/dissectors/packet-ranap.c b/epan/dissectors/packet-ranap.c index 808baceb69..61d775284b 100644 --- a/epan/dissectors/packet-ranap.c +++ b/epan/dissectors/packet-ranap.c @@ -1,7 +1,7 @@ /* Do not modify this file. */ /* It is created automatically by the ASN.1 to Wireshark dissector compiler */ /* packet-ranap.c */ -/* ../../tools/asn2wrs.py -p ranap -c ./ranap.cnf -s ./packet-ranap-template -D . RANAP-CommonDataTypes.asn RANAP-Constants.asn RANAP-Containers.asn RANAP-IEs.asn RANAP-PDU-Contents.asn RANAP-PDU-Descriptions.asn */ +/* ../../tools/asn2wrs.py -p ranap -c ./ranap.cnf -s ./packet-ranap-template -D . -O ../../epan/dissectors RANAP-CommonDataTypes.asn RANAP-Constants.asn RANAP-Containers.asn RANAP-IEs.asn RANAP-PDU-Contents.asn RANAP-PDU-Descriptions.asn */ /* Input file: packet-ranap-template.c */ @@ -52,6 +52,7 @@ #include "packet-e212.h" #include "packet-sccp.h" #include "packet-gsm_a_common.h" +#include "packet-isup.h" #ifdef _MSC_VER /* disable: "warning C4146: unary minus operator applied to unsigned type, result still unsigned" */ @@ -104,7 +105,7 @@ #define maxNrOfCellIds 32 #define maxNrOfRACs 8 #define maxNrOfLAIs 8 -#define id_Not_Used_246 246 +#define id_RABParametersList 248 typedef enum _ProcedureCode_enum { id_RAB_Assignment = 0, @@ -403,13 +404,13 @@ typedef enum _ProtocolIE_ID_enum { id_IRAT_Measurement_Configuration = 243, id_MDT_Configuration = 244, id_Priority_Class_Indicator = 245, + id_Not_Used_246 = 246, id_RNSAPRelocationParameters = 247, - id_RABParametersList = 248, id_Management_Based_MDT_Allowed = 249 } ProtocolIE_ID_enum; /*--- End of included file: packet-ranap-val.h ---*/ -#line 63 "../../asn1/ranap/packet-ranap-template.c" +#line 64 "../../asn1/ranap/packet-ranap-template.c" /* Initialize the protocol and registered fields */ static int proto_ranap = -1; @@ -422,6 +423,7 @@ static dissector_handle_t rrc_ho_to_utran_cmd = NULL; static int hf_ranap_imsi_digits = -1; static int hf_ranap_transportLayerAddress_ipv4 = -1; static int hf_ranap_transportLayerAddress_ipv6 = -1; +static int hf_ranap_transportLayerAddress_nsap = -1; /*--- Included file: packet-ranap-hf.c ---*/ @@ -1144,11 +1146,12 @@ static int hf_ranap_unsuccessfulOutcome_value = -1; /* UnsuccessfulOutcome_valu static int hf_ranap_value = -1; /* T_value */ /*--- End of included file: packet-ranap-hf.c ---*/ -#line 77 "../../asn1/ranap/packet-ranap-template.c" +#line 79 "../../asn1/ranap/packet-ranap-template.c" /* Initialize the subtree pointers */ static int ett_ranap = -1; static int ett_ranap_TransportLayerAddress = -1; +static int ett_ranap_TransportLayerAddress_nsap = -1; /*--- Included file: packet-ranap-ett.c ---*/ @@ -1480,7 +1483,7 @@ static gint ett_ranap_UnsuccessfulOutcome = -1; static gint ett_ranap_Outcome = -1; /*--- End of included file: packet-ranap-ett.c ---*/ -#line 83 "../../asn1/ranap/packet-ranap-template.c" +#line 86 "../../asn1/ranap/packet-ranap-template.c" /* Global variables */ static guint32 ProcedureCode; @@ -1927,8 +1930,8 @@ static const value_string ranap_ProtocolIE_ID_vals[] = { { id_IRAT_Measurement_Configuration, "id-IRAT-Measurement-Configuration" }, { id_MDT_Configuration, "id-MDT-Configuration" }, { id_Priority_Class_Indicator, "id-Priority-Class-Indicator" }, + { id_Not_Used_246, "id-Not-Used-246" }, { id_RNSAPRelocationParameters, "id-RNSAPRelocationParameters" }, - { id_RABParametersList, "id-RABParametersList" }, { id_Management_Based_MDT_Allowed, "id-Management-Based-MDT-Allowed" }, { 0, NULL } }; @@ -4557,7 +4560,7 @@ dissect_ranap_GlobalRNC_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _ static int dissect_ranap_GTP_TEI(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 319 "../../asn1/ranap/ranap.cnf" +#line 329 "../../asn1/ranap/ranap.cnf" tvbuff_t *parameter_tvb=NULL; int saved_hf; @@ -7405,7 +7408,7 @@ dissect_ranap_Service_Handover(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *ac static int dissect_ranap_Source_ToTarget_TransparentContainer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 345 "../../asn1/ranap/ranap.cnf" +#line 355 "../../asn1/ranap/ranap.cnf" dissect_ranap_SourceRNC_ToTargetRNC_TransparentContainer(tvb , offset, actx ,tree , hf_ranap_ranap_SourceRNC_ToTargetRNC_TransparentContainer_PDU ); @@ -7482,7 +7485,7 @@ static const per_sequence_t SourceRNC_ToTargetRNC_TransparentContainer_sequence[ static int dissect_ranap_SourceRNC_ToTargetRNC_TransparentContainer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 331 "../../asn1/ranap/ranap.cnf" +#line 341 "../../asn1/ranap/ranap.cnf" /* If SourceRNC-ToTargetRNC-TransparentContainer is called trough dissect_ranap_SourceRNC_ToTargetRNC_TransparentContainer_PDU ProtocolIE_ID may be unset @@ -7721,7 +7724,7 @@ dissect_ranap_SRVCC_Operation_Possible(tvbuff_t *tvb _U_, int offset _U_, asn1_c static int dissect_ranap_Target_ToSource_TransparentContainer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 355 "../../asn1/ranap/ranap.cnf" +#line 365 "../../asn1/ranap/ranap.cnf" dissect_ranap_TargetRNC_ToSourceRNC_TransparentContainer(tvb , offset, actx ,tree , hf_ranap_TargetRNC_ToSourceRNC_TransparentContainer_PDU ); @@ -7852,9 +7855,10 @@ dissect_ranap_TraceType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, static int dissect_ranap_TransportLayerAddress(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 297 "../../asn1/ranap/ranap.cnf" +#line 301 "../../asn1/ranap/ranap.cnf" tvbuff_t *parameter_tvb=NULL; - proto_tree *subtree; + proto_tree *item; + proto_tree *subtree, *nsap_tree; gint tvb_len; offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index, @@ -7867,11 +7871,16 @@ dissect_ranap_TransportLayerAddress(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_ subtree = proto_item_add_subtree(actx->created_item, ett_ranap_TransportLayerAddress); if (tvb_len==4){ /* IPv4 */ - proto_tree_add_item(subtree, hf_ranap_transportLayerAddress_ipv4, parameter_tvb, 0, tvb_len, FALSE); + proto_tree_add_item(subtree, hf_ranap_transportLayerAddress_ipv4, parameter_tvb, 0, tvb_len, ENC_NA); } if (tvb_len==16){ /* IPv6 */ - proto_tree_add_item(subtree, hf_ranap_transportLayerAddress_ipv6, parameter_tvb, 0, tvb_len, FALSE); + proto_tree_add_item(subtree, hf_ranap_transportLayerAddress_ipv6, parameter_tvb, 0, tvb_len, ENC_NA); + } + if (tvb_len==20){ + item = proto_tree_add_item(subtree, hf_ranap_transportLayerAddress_nsap, parameter_tvb, 0, tvb_len, ENC_NA); + nsap_tree = proto_item_add_subtree(item, ett_ranap_TransportLayerAddress_nsap); + dissect_nsap(parameter_tvb, 0, 20, nsap_tree); } @@ -13016,7 +13025,7 @@ static int dissect_RANAP_PDU_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, prot /*--- End of included file: packet-ranap-fn.c ---*/ -#line 143 "../../asn1/ranap/packet-ranap-template.c" +#line 146 "../../asn1/ranap/packet-ranap-template.c" static int dissect_ProtocolIEFieldValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) @@ -13185,6 +13194,10 @@ void proto_register_ranap(void) { { "transportLayerAddress IPv6", "ranap.transportLayerAddress_ipv6", FT_IPv6, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_ranap_transportLayerAddress_nsap, + { "transportLayerAddress NSAP", "ranap.transportLayerAddress_NSAP", + FT_BYTES, BASE_NONE, NULL, 0, + NULL, HFILL }}, @@ -16056,13 +16069,14 @@ void proto_register_ranap(void) { NULL, HFILL }}, /*--- End of included file: packet-ranap-hfarr.c ---*/ -#line 314 "../../asn1/ranap/packet-ranap-template.c" +#line 321 "../../asn1/ranap/packet-ranap-template.c" }; /* List of subtrees */ static gint *ett[] = { &ett_ranap, &ett_ranap_TransportLayerAddress, + &ett_ranap_TransportLayerAddress_nsap, /*--- Included file: packet-ranap-ettarr.c ---*/ #line 1 "../../asn1/ranap/packet-ranap-ettarr.c" @@ -16393,7 +16407,7 @@ void proto_register_ranap(void) { &ett_ranap_Outcome, /*--- End of included file: packet-ranap-ettarr.c ---*/ -#line 321 "../../asn1/ranap/packet-ranap-template.c" +#line 329 "../../asn1/ranap/packet-ranap-template.c" }; @@ -16769,7 +16783,7 @@ proto_reg_handoff_ranap(void) /*--- End of included file: packet-ranap-dis-tab.c ---*/ -#line 367 "../../asn1/ranap/packet-ranap-template.c" +#line 375 "../../asn1/ranap/packet-ranap-template.c" } else { dissector_delete_uint("sccp.ssn", local_ranap_sccp_ssn, ranap_handle); } diff --git a/epan/dissectors/packet-ranap.h b/epan/dissectors/packet-ranap.h index 7f845a7118..8402585ead 100644 --- a/epan/dissectors/packet-ranap.h +++ b/epan/dissectors/packet-ranap.h @@ -1,7 +1,7 @@ /* Do not modify this file. */ /* It is created automatically by the ASN.1 to Wireshark dissector compiler */ /* packet-ranap.h */ -/* ../../tools/asn2wrs.py -p ranap -c ./ranap.cnf -s ./packet-ranap-template -D . RANAP-CommonDataTypes.asn RANAP-Constants.asn RANAP-Containers.asn RANAP-IEs.asn RANAP-PDU-Contents.asn RANAP-PDU-Descriptions.asn */ +/* ../../tools/asn2wrs.py -p ranap -c ./ranap.cnf -s ./packet-ranap-template -D . -O ../../epan/dissectors RANAP-CommonDataTypes.asn RANAP-Constants.asn RANAP-Containers.asn RANAP-IEs.asn RANAP-PDU-Contents.asn RANAP-PDU-Descriptions.asn */ /* Input file: packet-ranap-template.h */ |