From 27ff75c548764fc277a96490cb2fa014f3775c3d Mon Sep 17 00:00:00 2001 From: Pascal Quantin Date: Sun, 8 Mar 2015 21:27:27 +0100 Subject: ULP/ILP: add dissection of MSISDN, MDN and IMSI numbers Bug: 11038 Change-Id: If4602a8ad434c46ea7986eec566751f4bb667002 Reviewed-on: https://code.wireshark.org/review/7603 Petri-Dish: Pascal Quantin Reviewed-by: Anders Broman Tested-by: Petri Dish Buildbot Reviewed-by: Pascal Quantin --- asn1/ilp/ilp.cnf | 29 +++++++ asn1/ilp/packet-ilp-template.c | 9 +++ asn1/ulp/packet-ulp-template.c | 11 +++ asn1/ulp/ulp.cnf | 51 +++++++++++- epan/dissectors/packet-ilp.c | 97 ++++++++++++++++++----- epan/dissectors/packet-ulp.c | 171 +++++++++++++++++++++++++++++++++++------ 6 files changed, 326 insertions(+), 42 deletions(-) diff --git a/asn1/ilp/ilp.cnf b/asn1/ilp/ilp.cnf index cfd6c4abf6..fdc0118917 100644 --- a/asn1/ilp/ilp.cnf +++ b/asn1/ilp/ilp.cnf @@ -66,6 +66,35 @@ guint32 IlpMessage; call_dissector(lpp_handle, lpp_tvb, %(ACTX)s->pinfo, tree); } +#.FN_BODY SETId/msisdn VAL_PTR=&msisdn_tvb + tvbuff_t *msisdn_tvb; +%(DEFAULT_BODY)s + if (msisdn_tvb) { + proto_tree *subtree; + + subtree = proto_item_add_subtree(actx->created_item, ett_ilp_setid); + dissect_e164_msisdn(msisdn_tvb, subtree, 0, 8, E164_ENC_BCD); + } + +#.FN_BODY SETId/mdn VAL_PTR=&mdn_tvb + tvbuff_t *mdn_tvb; +%(DEFAULT_BODY)s + if (mdn_tvb) { + proto_tree *subtree; + + subtree = proto_item_add_subtree(actx->created_item, ett_ilp_setid); + proto_tree_add_string(subtree, hf_ilp_mobile_directory_number, mdn_tvb, 0, 8, tvb_bcd_dig_to_wmem_packet_str(mdn_tvb, 0, 8, NULL, FALSE)); + } + +#.FN_BODY SETId/imsi VAL_PTR=&imsi_tvb + tvbuff_t *imsi_tvb; +%(DEFAULT_BODY)s + if (imsi_tvb) { + proto_tree *subtree; + + subtree = proto_item_add_subtree(actx->created_item, ett_ilp_setid); + dissect_e212_imsi(imsi_tvb, actx->pinfo, subtree, 0, 8, FALSE); + } #.TYPE_ATTR IPAddress/ipv4Address TYPE = FT_IPv4 DISPLAY = BASE_NONE STRINGS = NULL diff --git a/asn1/ilp/packet-ilp-template.c b/asn1/ilp/packet-ilp-template.c index 6251662ce7..cf3fdfd040 100644 --- a/asn1/ilp/packet-ilp-template.c +++ b/asn1/ilp/packet-ilp-template.c @@ -33,6 +33,8 @@ #include "packet-per.h" #include "packet-tcp.h" #include "packet-gsm_map.h" +#include "packet-e164.h" +#include "packet-e212.h" #define PNAME "OMA Internal Location Protocol" #define PSNAME "ILP" @@ -57,9 +59,11 @@ static int proto_ilp = -1; static gboolean ilp_desegment = TRUE; #include "packet-ilp-hf.c" +static int hf_ilp_mobile_directory_number = -1; /* Initialize the subtree pointers */ static gint ett_ilp = -1; +static gint ett_ilp_setid = -1; #include "packet-ilp-ett.c" /* Include constants */ @@ -93,11 +97,16 @@ void proto_register_ilp(void) { static hf_register_info hf[] = { #include "packet-ilp-hfarr.c" + { &hf_ilp_mobile_directory_number, + { "Mobile Directory Number", "ilp.mobile_directory_number", + FT_STRING, BASE_NONE, NULL, 0, + NULL, HFILL }}, }; /* List of subtrees */ static gint *ett[] = { &ett_ilp, + &ett_ilp_setid, #include "packet-ilp-ettarr.c" }; diff --git a/asn1/ulp/packet-ulp-template.c b/asn1/ulp/packet-ulp-template.c index ab3db01eaf..63fa5695db 100644 --- a/asn1/ulp/packet-ulp-template.c +++ b/asn1/ulp/packet-ulp-template.c @@ -33,6 +33,8 @@ #include "packet-per.h" #include "packet-tcp.h" #include "packet-gsm_map.h" +#include "packet-e164.h" +#include "packet-e212.h" #define PNAME "OMA UserPlane Location Protocol" #define PSNAME "ULP" @@ -59,9 +61,12 @@ static int proto_ulp = -1; static gboolean ulp_desegment = TRUE; #include "packet-ulp-hf.c" +static int hf_ulp_mobile_directory_number = -1; /* Initialize the subtree pointers */ static gint ett_ulp = -1; +static gint ett_ulp_setid = -1; +static gint ett_ulp_thirdPartyId = -1; #include "packet-ulp-ett.c" /* Include constants */ @@ -95,11 +100,17 @@ void proto_register_ulp(void) { static hf_register_info hf[] = { #include "packet-ulp-hfarr.c" + { &hf_ulp_mobile_directory_number, + { "Mobile Directory Number", "ulp.mobile_directory_number", + FT_STRING, BASE_NONE, NULL, 0, + NULL, HFILL }} }; /* List of subtrees */ static gint *ett[] = { &ett_ulp, + &ett_ulp_setid, + &ett_ulp_thirdPartyId, #include "packet-ulp-ettarr.c" }; diff --git a/asn1/ulp/ulp.cnf b/asn1/ulp/ulp.cnf index 0bc6c0e2b8..8798e6facf 100644 --- a/asn1/ulp/ulp.cnf +++ b/asn1/ulp/ulp.cnf @@ -67,6 +67,46 @@ guint32 UlpMessage; call_dissector(lpp_handle, lpp_tvb, %(ACTX)s->pinfo, tree); } +#.FN_BODY SETId/msisdn VAL_PTR=&msisdn_tvb + tvbuff_t *msisdn_tvb; +%(DEFAULT_BODY)s + if (msisdn_tvb) { + proto_tree *subtree; + + subtree = proto_item_add_subtree(actx->created_item, ett_ulp_setid); + dissect_e164_msisdn(msisdn_tvb, subtree, 0, 8, E164_ENC_BCD); + } + +#.FN_BODY SETId/mdn VAL_PTR=&mdn_tvb + tvbuff_t *mdn_tvb; +%(DEFAULT_BODY)s + if (mdn_tvb) { + proto_tree *subtree; + + subtree = proto_item_add_subtree(actx->created_item, ett_ulp_setid); + proto_tree_add_string(subtree, hf_ulp_mobile_directory_number, mdn_tvb, 0, 8, tvb_bcd_dig_to_wmem_packet_str(mdn_tvb, 0, 8, NULL, FALSE)); + } + +#.FN_BODY SETId/imsi VAL_PTR=&imsi_tvb + tvbuff_t *imsi_tvb; +%(DEFAULT_BODY)s + if (imsi_tvb) { + proto_tree *subtree; + + subtree = proto_item_add_subtree(actx->created_item, ett_ulp_setid); + dissect_e212_imsi(imsi_tvb, actx->pinfo, subtree, 0, 8, FALSE); + } + +#.FN_BODY ThirdPartyID/msisdn VAL_PTR=&msisdn_tvb + tvbuff_t *msisdn_tvb; +%(DEFAULT_BODY)s + if (msisdn_tvb) { + proto_tree *subtree; + + subtree = proto_item_add_subtree(actx->created_item, ett_ulp_thirdPartyId); + dissect_e164_msisdn(msisdn_tvb, subtree, 0, 8, E164_ENC_BCD); + } + #.FN_BODY ThirdPartyID/sip-uri # asn2wrs does not handle '%' in the restricted string ( Has to be there twice) offset = dissect_per_restricted_character_string(tvb, offset, actx, tree, hf_index, @@ -77,13 +117,22 @@ guint32 UlpMessage; offset = dissect_per_restricted_character_string(tvb, offset, actx, tree, hf_index, 1, 255, FALSE, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789:./-_~%%#@?", 72, NULL); +#.FN_BODY ThirdPartyID/mdn VAL_PTR=&mdn_tvb + tvbuff_t *mdn_tvb; +%(DEFAULT_BODY)s + if (mdn_tvb) { + proto_tree *subtree; + + subtree = proto_item_add_subtree(actx->created_item, ett_ulp_thirdPartyId); + proto_tree_add_string(subtree, hf_ulp_mobile_directory_number, mdn_tvb, 0, 8, tvb_bcd_dig_to_wmem_packet_str(mdn_tvb, 0, 8, NULL, FALSE)); + } + #.FN_BODY ThirdPartyID/uri # asn2wrs does not handle '%' in the restricted string ( Has to be there twice) offset = dissect_per_restricted_character_string(tvb, offset, actx, tree, hf_index, 1, 255, FALSE, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789./-_~%%#", 69, NULL); - #.TYPE_ATTR IPAddress/ipv4Address TYPE = FT_IPv4 DISPLAY = BASE_NONE STRINGS = NULL IPAddress/ipv6Address TYPE = FT_IPv6 DISPLAY = BASE_NONE STRINGS = NULL diff --git a/epan/dissectors/packet-ilp.c b/epan/dissectors/packet-ilp.c index b1c5e8b250..8e33b48473 100644 --- a/epan/dissectors/packet-ilp.c +++ b/epan/dissectors/packet-ilp.c @@ -41,6 +41,8 @@ #include "packet-per.h" #include "packet-tcp.h" #include "packet-gsm_map.h" +#include "packet-e164.h" +#include "packet-e212.h" #define PNAME "OMA Internal Location Protocol" #define PSNAME "ILP" @@ -191,10 +193,10 @@ static int hf_ilp_setSessionID = -1; /* SetSessionID */ static int hf_ilp_spcSessionID = -1; /* SpcSessionID */ static int hf_ilp_sessionId = -1; /* INTEGER_0_65535 */ static int hf_ilp_setId = -1; /* SETId */ -static int hf_ilp_msisdn = -1; /* OCTET_STRING_SIZE_8 */ -static int hf_ilp_mdn = -1; /* OCTET_STRING_SIZE_8 */ +static int hf_ilp_msisdn = -1; /* T_msisdn */ +static int hf_ilp_mdn = -1; /* T_mdn */ static int hf_ilp_minsi = -1; /* BIT_STRING_SIZE_34 */ -static int hf_ilp_imsi = -1; /* OCTET_STRING_SIZE_8 */ +static int hf_ilp_imsi = -1; /* T_imsi */ static int hf_ilp_nai = -1; /* IA5String_SIZE_1_1000 */ static int hf_ilp_iPAddress = -1; /* IPAddress */ static int hf_ilp_sessionID = -1; /* OCTET_STRING_SIZE_4 */ @@ -450,10 +452,12 @@ static int hf_ilp_GANSSSignals_signal7 = -1; static int hf_ilp_GANSSSignals_signal8 = -1; /*--- End of included file: packet-ilp-hf.c ---*/ -#line 60 "../../asn1/ilp/packet-ilp-template.c" +#line 62 "../../asn1/ilp/packet-ilp-template.c" +static int hf_ilp_mobile_directory_number = -1; /* Initialize the subtree pointers */ static gint ett_ilp = -1; +static gint ett_ilp_setid = -1; /*--- Included file: packet-ilp-ett.c ---*/ #line 1 "../../asn1/ilp/packet-ilp-ett.c" @@ -594,7 +598,7 @@ static gint ett_ilp_T_lPPPayload = -1; static gint ett_ilp_T_tia801Payload = -1; /*--- End of included file: packet-ilp-ett.c ---*/ -#line 64 "../../asn1/ilp/packet-ilp-template.c" +#line 68 "../../asn1/ilp/packet-ilp-template.c" /* Include constants */ @@ -611,7 +615,7 @@ static gint ett_ilp_T_tia801Payload = -1; #define maxPosSize 1024 /*--- End of included file: packet-ilp-val.h ---*/ -#line 67 "../../asn1/ilp/packet-ilp-template.c" +#line 71 "../../asn1/ilp/packet-ilp-template.c" @@ -746,9 +750,41 @@ dissect_ilp_SlcSessionID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_ static int -dissect_ilp_OCTET_STRING_SIZE_8(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +dissect_ilp_T_msisdn(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 70 "../../asn1/ilp/ilp.cnf" + tvbuff_t *msisdn_tvb; offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, - 8, 8, FALSE, NULL); + 8, 8, FALSE, &msisdn_tvb); + + if (msisdn_tvb) { + proto_tree *subtree; + + subtree = proto_item_add_subtree(actx->created_item, ett_ilp_setid); + dissect_e164_msisdn(msisdn_tvb, subtree, 0, 8, E164_ENC_BCD); + } + + + + return offset; +} + + + +static int +dissect_ilp_T_mdn(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 80 "../../asn1/ilp/ilp.cnf" + tvbuff_t *mdn_tvb; + offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, + 8, 8, FALSE, &mdn_tvb); + + if (mdn_tvb) { + proto_tree *subtree; + + subtree = proto_item_add_subtree(actx->created_item, ett_ilp_setid); + proto_tree_add_string(subtree, hf_ilp_mobile_directory_number, mdn_tvb, 0, 8, tvb_bcd_dig_to_wmem_packet_str(mdn_tvb, 0, 8, NULL, FALSE)); + } + + return offset; } @@ -765,6 +801,27 @@ dissect_ilp_BIT_STRING_SIZE_34(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *ac +static int +dissect_ilp_T_imsi(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 90 "../../asn1/ilp/ilp.cnf" + tvbuff_t *imsi_tvb; + offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, + 8, 8, FALSE, &imsi_tvb); + + if (imsi_tvb) { + proto_tree *subtree; + + subtree = proto_item_add_subtree(actx->created_item, ett_ilp_setid); + dissect_e212_imsi(imsi_tvb, actx->pinfo, subtree, 0, 8, FALSE); + } + + + + return offset; +} + + + static int dissect_ilp_IA5String_SIZE_1_1000(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_IA5String(tvb, offset, actx, tree, hf_index, @@ -785,10 +842,10 @@ static const value_string ilp_SETId_vals[] = { }; static const per_choice_t SETId_choice[] = { - { 0, &hf_ilp_msisdn , ASN1_EXTENSION_ROOT , dissect_ilp_OCTET_STRING_SIZE_8 }, - { 1, &hf_ilp_mdn , ASN1_EXTENSION_ROOT , dissect_ilp_OCTET_STRING_SIZE_8 }, + { 0, &hf_ilp_msisdn , ASN1_EXTENSION_ROOT , dissect_ilp_T_msisdn }, + { 1, &hf_ilp_mdn , ASN1_EXTENSION_ROOT , dissect_ilp_T_mdn }, { 2, &hf_ilp_minsi , ASN1_EXTENSION_ROOT , dissect_ilp_BIT_STRING_SIZE_34 }, - { 3, &hf_ilp_imsi , ASN1_EXTENSION_ROOT , dissect_ilp_OCTET_STRING_SIZE_8 }, + { 3, &hf_ilp_imsi , ASN1_EXTENSION_ROOT , dissect_ilp_T_imsi }, { 4, &hf_ilp_nai , ASN1_EXTENSION_ROOT , dissect_ilp_IA5String_SIZE_1_1000 }, { 5, &hf_ilp_iPAddress , ASN1_EXTENSION_ROOT , dissect_ilp_IPAddress }, { 0, NULL, 0, NULL } @@ -3372,7 +3429,6 @@ dissect_ilp_T_lPPPayload_item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *act - return offset; } @@ -4089,7 +4145,7 @@ static int dissect_ILP_PDU_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_ /*--- End of included file: packet-ilp-fn.c ---*/ -#line 70 "../../asn1/ilp/packet-ilp-template.c" +#line 74 "../../asn1/ilp/packet-ilp-template.c" static guint @@ -4617,11 +4673,11 @@ void proto_register_ilp(void) { { &hf_ilp_msisdn, { "msisdn", "ilp.msisdn", FT_BYTES, BASE_NONE, NULL, 0, - "OCTET_STRING_SIZE_8", HFILL }}, + NULL, HFILL }}, { &hf_ilp_mdn, { "mdn", "ilp.mdn", FT_BYTES, BASE_NONE, NULL, 0, - "OCTET_STRING_SIZE_8", HFILL }}, + NULL, HFILL }}, { &hf_ilp_minsi, { "min", "ilp.min", FT_BYTES, BASE_NONE, NULL, 0, @@ -4629,7 +4685,7 @@ void proto_register_ilp(void) { { &hf_ilp_imsi, { "imsi", "ilp.imsi", FT_BYTES, BASE_NONE, NULL, 0, - "OCTET_STRING_SIZE_8", HFILL }}, + NULL, HFILL }}, { &hf_ilp_nai, { "nai", "ilp.nai", FT_STRING, BASE_NONE, NULL, 0, @@ -5640,12 +5696,17 @@ void proto_register_ilp(void) { NULL, HFILL }}, /*--- End of included file: packet-ilp-hfarr.c ---*/ -#line 96 "../../asn1/ilp/packet-ilp-template.c" +#line 100 "../../asn1/ilp/packet-ilp-template.c" + { &hf_ilp_mobile_directory_number, + { "Mobile Directory Number", "ilp.mobile_directory_number", + FT_STRING, BASE_NONE, NULL, 0, + NULL, HFILL }}, }; /* List of subtrees */ static gint *ett[] = { &ett_ilp, + &ett_ilp_setid, /*--- Included file: packet-ilp-ettarr.c ---*/ #line 1 "../../asn1/ilp/packet-ilp-ettarr.c" @@ -5786,7 +5847,7 @@ void proto_register_ilp(void) { &ett_ilp_T_tia801Payload, /*--- End of included file: packet-ilp-ettarr.c ---*/ -#line 102 "../../asn1/ilp/packet-ilp-template.c" +#line 111 "../../asn1/ilp/packet-ilp-template.c" }; module_t *ilp_module; diff --git a/epan/dissectors/packet-ulp.c b/epan/dissectors/packet-ulp.c index 64d1ed08a4..b18061d547 100644 --- a/epan/dissectors/packet-ulp.c +++ b/epan/dissectors/packet-ulp.c @@ -41,6 +41,8 @@ #include "packet-per.h" #include "packet-tcp.h" #include "packet-gsm_map.h" +#include "packet-e164.h" +#include "packet-e212.h" #define PNAME "OMA UserPlane Location Protocol" #define PSNAME "ULP" @@ -375,10 +377,10 @@ static int hf_ulp_setSessionID = -1; /* SetSessionID */ static int hf_ulp_slpSessionID = -1; /* SlpSessionID */ static int hf_ulp_sessionId = -1; /* INTEGER_0_65535 */ static int hf_ulp_setId = -1; /* SETId */ -static int hf_ulp_msisdn = -1; /* OCTET_STRING_SIZE_8 */ -static int hf_ulp_mdn = -1; /* OCTET_STRING_SIZE_8 */ +static int hf_ulp_msisdn = -1; /* T_msisdn */ +static int hf_ulp_mdn = -1; /* T_mdn */ static int hf_ulp_minsi = -1; /* BIT_STRING_SIZE_34 */ -static int hf_ulp_imsi = -1; /* OCTET_STRING_SIZE_8 */ +static int hf_ulp_imsi = -1; /* T_imsi */ static int hf_ulp_nai = -1; /* IA5String_SIZE_1_1000 */ static int hf_ulp_iPAddress = -1; /* IPAddress */ static int hf_ulp_sessionSlpID = -1; /* OCTET_STRING_SIZE_4 */ @@ -645,10 +647,12 @@ static int hf_ulp_rand = -1; /* BIT_STRING_SIZE_128 */ static int hf_ulp_slpFQDN = -1; /* FQDN */ static int hf_ulp_ThirdParty_item = -1; /* ThirdPartyID */ static int hf_ulp_logicalName = -1; /* IA5String_SIZE_1_1000 */ +static int hf_ulp_msisdn_01 = -1; /* T_msisdn_01 */ static int hf_ulp_emailaddr = -1; /* IA5String_SIZE_1_1000 */ static int hf_ulp_sip_uri = -1; /* T_sip_uri */ static int hf_ulp_ims_public_identity = -1; /* T_ims_public_identity */ static int hf_ulp_min_01 = -1; /* BIT_STRING_SIZE_34 */ +static int hf_ulp_mdn_01 = -1; /* T_mdn_01 */ static int hf_ulp_uri = -1; /* T_uri */ static int hf_ulp_appProvider = -1; /* IA5String_SIZE_1_24 */ static int hf_ulp_appName = -1; /* IA5String_SIZE_1_32 */ @@ -690,10 +694,13 @@ static int hf_ulp_GANSSSignals_signal7 = -1; static int hf_ulp_GANSSSignals_signal8 = -1; /*--- End of included file: packet-ulp-hf.c ---*/ -#line 62 "../../asn1/ulp/packet-ulp-template.c" +#line 64 "../../asn1/ulp/packet-ulp-template.c" +static int hf_ulp_mobile_directory_number = -1; /* Initialize the subtree pointers */ static gint ett_ulp = -1; +static gint ett_ulp_setid = -1; +static gint ett_ulp_thirdPartyId = -1; /*--- Included file: packet-ulp-ett.c ---*/ #line 1 "../../asn1/ulp/packet-ulp-ett.c" @@ -911,7 +918,7 @@ static gint ett_ulp_PolygonArea = -1; static gint ett_ulp_PolygonDescription = -1; /*--- End of included file: packet-ulp-ett.c ---*/ -#line 66 "../../asn1/ulp/packet-ulp-template.c" +#line 71 "../../asn1/ulp/packet-ulp-template.c" /* Include constants */ @@ -934,7 +941,7 @@ static gint ett_ulp_PolygonDescription = -1; #define maxWimaxBSMeas 32 /*--- End of included file: packet-ulp-val.h ---*/ -#line 69 "../../asn1/ulp/packet-ulp-template.c" +#line 74 "../../asn1/ulp/packet-ulp-template.c" @@ -979,9 +986,41 @@ dissect_ulp_Version(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, pro static int -dissect_ulp_OCTET_STRING_SIZE_8(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +dissect_ulp_T_msisdn(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 71 "../../asn1/ulp/ulp.cnf" + tvbuff_t *msisdn_tvb; offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, - 8, 8, FALSE, NULL); + 8, 8, FALSE, &msisdn_tvb); + + if (msisdn_tvb) { + proto_tree *subtree; + + subtree = proto_item_add_subtree(actx->created_item, ett_ulp_setid); + dissect_e164_msisdn(msisdn_tvb, subtree, 0, 8, E164_ENC_BCD); + } + + + + return offset; +} + + + +static int +dissect_ulp_T_mdn(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 81 "../../asn1/ulp/ulp.cnf" + tvbuff_t *mdn_tvb; + offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, + 8, 8, FALSE, &mdn_tvb); + + if (mdn_tvb) { + proto_tree *subtree; + + subtree = proto_item_add_subtree(actx->created_item, ett_ulp_setid); + proto_tree_add_string(subtree, hf_ulp_mobile_directory_number, mdn_tvb, 0, 8, tvb_bcd_dig_to_wmem_packet_str(mdn_tvb, 0, 8, NULL, FALSE)); + } + + return offset; } @@ -998,6 +1037,27 @@ dissect_ulp_BIT_STRING_SIZE_34(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *ac +static int +dissect_ulp_T_imsi(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 91 "../../asn1/ulp/ulp.cnf" + tvbuff_t *imsi_tvb; + offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, + 8, 8, FALSE, &imsi_tvb); + + if (imsi_tvb) { + proto_tree *subtree; + + subtree = proto_item_add_subtree(actx->created_item, ett_ulp_setid); + dissect_e212_imsi(imsi_tvb, actx->pinfo, subtree, 0, 8, FALSE); + } + + + + return offset; +} + + + static int dissect_ulp_IA5String_SIZE_1_1000(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_IA5String(tvb, offset, actx, tree, hf_index, @@ -1060,10 +1120,10 @@ static const value_string ulp_SETId_vals[] = { }; static const per_choice_t SETId_choice[] = { - { 0, &hf_ulp_msisdn , ASN1_EXTENSION_ROOT , dissect_ulp_OCTET_STRING_SIZE_8 }, - { 1, &hf_ulp_mdn , ASN1_EXTENSION_ROOT , dissect_ulp_OCTET_STRING_SIZE_8 }, + { 0, &hf_ulp_msisdn , ASN1_EXTENSION_ROOT , dissect_ulp_T_msisdn }, + { 1, &hf_ulp_mdn , ASN1_EXTENSION_ROOT , dissect_ulp_T_mdn }, { 2, &hf_ulp_minsi , ASN1_EXTENSION_ROOT , dissect_ulp_BIT_STRING_SIZE_34 }, - { 3, &hf_ulp_imsi , ASN1_EXTENSION_ROOT , dissect_ulp_OCTET_STRING_SIZE_8 }, + { 3, &hf_ulp_imsi , ASN1_EXTENSION_ROOT , dissect_ulp_T_imsi }, { 4, &hf_ulp_nai , ASN1_EXTENSION_ROOT , dissect_ulp_IA5String_SIZE_1_1000 }, { 5, &hf_ulp_iPAddress , ASN1_EXTENSION_ROOT , dissect_ulp_IPAddress }, { 0, NULL, 0, NULL } @@ -1738,6 +1798,16 @@ dissect_ulp_ProtLevel(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, p +static int +dissect_ulp_OCTET_STRING_SIZE_8(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, + 8, 8, FALSE, NULL); + + return offset; +} + + + static int dissect_ulp_BIT_STRING_SIZE_32(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, @@ -3684,9 +3754,30 @@ dissect_ulp_MultipleLocationIds(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *a +static int +dissect_ulp_T_msisdn_01(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 101 "../../asn1/ulp/ulp.cnf" + tvbuff_t *msisdn_tvb; + offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, + 8, 8, FALSE, &msisdn_tvb); + + if (msisdn_tvb) { + proto_tree *subtree; + + subtree = proto_item_add_subtree(actx->created_item, ett_ulp_thirdPartyId); + dissect_e164_msisdn(msisdn_tvb, subtree, 0, 8, E164_ENC_BCD); + } + + + + return offset; +} + + + static int dissect_ulp_T_sip_uri(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 72 "../../asn1/ulp/ulp.cnf" +#line 112 "../../asn1/ulp/ulp.cnf" offset = dissect_per_restricted_character_string(tvb, offset, actx, tree, hf_index, 1, 255, FALSE, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789:./-_~%#@?", 72, NULL); @@ -3699,7 +3790,7 @@ dissect_ulp_T_sip_uri(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, p static int dissect_ulp_T_ims_public_identity(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 77 "../../asn1/ulp/ulp.cnf" +#line 117 "../../asn1/ulp/ulp.cnf" offset = dissect_per_restricted_character_string(tvb, offset, actx, tree, hf_index, 1, 255, FALSE, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789:./-_~%#@?", 72, NULL); @@ -3710,16 +3801,36 @@ dissect_ulp_T_ims_public_identity(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t +static int +dissect_ulp_T_mdn_01(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 121 "../../asn1/ulp/ulp.cnf" + tvbuff_t *mdn_tvb; + offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, + 8, 8, FALSE, &mdn_tvb); + + if (mdn_tvb) { + proto_tree *subtree; + + subtree = proto_item_add_subtree(actx->created_item, ett_ulp_thirdPartyId); + proto_tree_add_string(subtree, hf_ulp_mobile_directory_number, mdn_tvb, 0, 8, tvb_bcd_dig_to_wmem_packet_str(mdn_tvb, 0, 8, NULL, FALSE)); + } + + + + return offset; +} + + + static int dissect_ulp_T_uri(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 82 "../../asn1/ulp/ulp.cnf" +#line 132 "../../asn1/ulp/ulp.cnf" offset = dissect_per_restricted_character_string(tvb, offset, actx, tree, hf_index, 1, 255, FALSE, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789./-_~%#", 69, NULL); - return offset; } @@ -3738,12 +3849,12 @@ static const value_string ulp_ThirdPartyID_vals[] = { static const per_choice_t ThirdPartyID_choice[] = { { 0, &hf_ulp_logicalName , ASN1_EXTENSION_ROOT , dissect_ulp_IA5String_SIZE_1_1000 }, - { 1, &hf_ulp_msisdn , ASN1_EXTENSION_ROOT , dissect_ulp_OCTET_STRING_SIZE_8 }, + { 1, &hf_ulp_msisdn_01 , ASN1_EXTENSION_ROOT , dissect_ulp_T_msisdn_01 }, { 2, &hf_ulp_emailaddr , ASN1_EXTENSION_ROOT , dissect_ulp_IA5String_SIZE_1_1000 }, { 3, &hf_ulp_sip_uri , ASN1_EXTENSION_ROOT , dissect_ulp_T_sip_uri }, { 4, &hf_ulp_ims_public_identity, ASN1_EXTENSION_ROOT , dissect_ulp_T_ims_public_identity }, { 5, &hf_ulp_min_01 , ASN1_EXTENSION_ROOT , dissect_ulp_BIT_STRING_SIZE_34 }, - { 6, &hf_ulp_mdn , ASN1_EXTENSION_ROOT , dissect_ulp_OCTET_STRING_SIZE_8 }, + { 6, &hf_ulp_mdn_01 , ASN1_EXTENSION_ROOT , dissect_ulp_T_mdn_01 }, { 7, &hf_ulp_uri , ASN1_EXTENSION_ROOT , dissect_ulp_T_uri }, { 0, NULL, 0, NULL } }; @@ -6480,7 +6591,7 @@ static int dissect_ULP_PDU_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_ /*--- End of included file: packet-ulp-fn.c ---*/ -#line 72 "../../asn1/ulp/packet-ulp-template.c" +#line 77 "../../asn1/ulp/packet-ulp-template.c" static guint @@ -7736,11 +7847,11 @@ void proto_register_ulp(void) { { &hf_ulp_msisdn, { "msisdn", "ulp.msisdn", FT_BYTES, BASE_NONE, NULL, 0, - "OCTET_STRING_SIZE_8", HFILL }}, + NULL, HFILL }}, { &hf_ulp_mdn, { "mdn", "ulp.mdn", FT_BYTES, BASE_NONE, NULL, 0, - "OCTET_STRING_SIZE_8", HFILL }}, + NULL, HFILL }}, { &hf_ulp_minsi, { "min", "ulp.min", FT_BYTES, BASE_NONE, NULL, 0, @@ -7748,7 +7859,7 @@ void proto_register_ulp(void) { { &hf_ulp_imsi, { "imsi", "ulp.imsi", FT_BYTES, BASE_NONE, NULL, 0, - "OCTET_STRING_SIZE_8", HFILL }}, + NULL, HFILL }}, { &hf_ulp_nai, { "nai", "ulp.nai", FT_STRING, BASE_NONE, NULL, 0, @@ -8813,6 +8924,10 @@ void proto_register_ulp(void) { { "logicalName", "ulp.logicalName", FT_STRING, BASE_NONE, NULL, 0, "IA5String_SIZE_1_1000", HFILL }}, + { &hf_ulp_msisdn_01, + { "msisdn", "ulp.msisdn", + FT_BYTES, BASE_NONE, NULL, 0, + "T_msisdn_01", HFILL }}, { &hf_ulp_emailaddr, { "emailaddr", "ulp.emailaddr", FT_STRING, BASE_NONE, NULL, 0, @@ -8829,6 +8944,10 @@ void proto_register_ulp(void) { { "min", "ulp.min", FT_BYTES, BASE_NONE, NULL, 0, "BIT_STRING_SIZE_34", HFILL }}, + { &hf_ulp_mdn_01, + { "mdn", "ulp.mdn", + FT_BYTES, BASE_NONE, NULL, 0, + "T_mdn_01", HFILL }}, { &hf_ulp_uri, { "uri", "ulp.uri", FT_STRING, BASE_NONE, NULL, 0, @@ -8983,12 +9102,18 @@ void proto_register_ulp(void) { NULL, HFILL }}, /*--- End of included file: packet-ulp-hfarr.c ---*/ -#line 98 "../../asn1/ulp/packet-ulp-template.c" +#line 103 "../../asn1/ulp/packet-ulp-template.c" + { &hf_ulp_mobile_directory_number, + { "Mobile Directory Number", "ulp.mobile_directory_number", + FT_STRING, BASE_NONE, NULL, 0, + NULL, HFILL }} }; /* List of subtrees */ static gint *ett[] = { &ett_ulp, + &ett_ulp_setid, + &ett_ulp_thirdPartyId, /*--- Included file: packet-ulp-ettarr.c ---*/ #line 1 "../../asn1/ulp/packet-ulp-ettarr.c" @@ -9206,7 +9331,7 @@ void proto_register_ulp(void) { &ett_ulp_PolygonDescription, /*--- End of included file: packet-ulp-ettarr.c ---*/ -#line 104 "../../asn1/ulp/packet-ulp-template.c" +#line 115 "../../asn1/ulp/packet-ulp-template.c" }; module_t *ulp_module; -- cgit v1.2.1