From f0b6a60d558e856bdb25dea672c2ba65c62f30dc Mon Sep 17 00:00:00 2001 From: Anders Broman Date: Sat, 5 Feb 2005 14:24:26 +0000 Subject: Re-commit the asn2eth based gsm-map dissector, hopfully it'll work better now. svn path=/trunk/; revision=13305 --- epan/dissectors/packet-gsm_map.c | 12028 +++++++++++++++++++++++++++++-------- epan/dissectors/packet-gsm_map.h | 29 +- 2 files changed, 9565 insertions(+), 2492 deletions(-) diff --git a/epan/dissectors/packet-gsm_map.c b/epan/dissectors/packet-gsm_map.c index 269ff8ca91..8be2bd0c04 100644 --- a/epan/dissectors/packet-gsm_map.c +++ b/epan/dissectors/packet-gsm_map.c @@ -1,11 +1,16 @@ -/* packet-gsm_map.c - * Routines for GSM Mobile Application Part dissection - * - * Copyright 2000, Felix Fei - * - * Michael Lum , - * Changed to run on new version of TCAP, many changes for - * EOC matching, and parameter separation. (2003) +/* Do not modify this file. */ +/* It is created automatically by the ASN.1 to Ethereal dissector compiler */ +/* .\packet-gsm_map.c */ +/* ../../tools/asn2eth.py -X -b -e -p gsm_map -c gsmmap.cnf -s packet-gsm_map-template GSMMAP.asn */ + +/* Input file: packet-gsm_map-template.c */ + +/* packet-gsm_map-template.c + * Routines for GSM MobileApplication packet dissection + * Copyright 2004, Anders Broman + * Based on the dissector by: + * Felix Fei + * and Michael Lum * * $Id$ * @@ -13,12 +18,6 @@ * By Gerald Combs * Copyright 1998 Gerald Combs * - * Copied from packet-tcap.c (where "WHATEVER_FILE_YOU_USED" - * is a dissector file; if you just copied this from README.developer, - * don't bother with the "Copied from" - you don't even need to put - * in a "Copied from" if you copied an existing dissector, especially - * if the bulk of the code in the new dissector is your code) - * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 @@ -31,3002 +30,8233 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * References: ETSI TS 129 002 */ #ifdef HAVE_CONFIG_H # include "config.h" #endif +#include +#include +#include +#include +#include + #include -#include #include -#include "epan/packet.h" -#include -#include -#include "asn1.h" -#include "packet-tcap.h" -#include "packet-gsm_ss.h" -#include "packet-gsm_map.h" #include "packet-ber.h" +#include "packet-q931.h" +#include "packet-gsm_map.h" +#define PNAME "GSM_MobileAPplication" +#define PSNAME "GSM_MAP" +#define PFNAME "gsm_map" + +/* Initialize the protocol and registered fields */ +int proto_gsm_map = -1; +static int hf_gsm_map_invokeCmd = -1; /* Opcode */ +static int hf_gsm_map_invokeid = -1; /* INTEGER */ +static int hf_gsm_map_absent = -1; /* NULL */ +static int hf_gsm_map_invokeId = -1; /* InvokeId */ +static int hf_gsm_map_invoke = -1; /* InvokePDU */ +static int hf_gsm_map_returnResult = -1; /* InvokePDU */ +static int hf_gsm_map_returnResult_result = -1; +static int hf_gsm_map_SendAuthenticationInfoArg = -1; +static int hf_gsm_map_getPassword = -1; +static int hf_gsm_map_currentPassword = -1; +static int hf_gsm_map_extension = -1; +static int hf_gsm_map_nature_of_number = -1; +static int hf_gsm_map_number_plan = -1; +static int hf_gsm_map_misdn_digits = -1; +static int hf_gsm_map_servicecentreaddress_digits = -1; +static int hf_gsm_map_imsi_digits = -1; +static int hf_gsm_map_map_gmsc_address_digits = -1; +static int hf_gsm_map_map_RoamingNumber_digits = -1; +static int hf_gsm_map_Ss_Status_unused = -1; +static int hf_gsm_map_Ss_Status_q_bit = -1; +static int hf_gsm_map_Ss_Status_p_bit = -1; +static int hf_gsm_map_Ss_Status_r_bit = -1; +static int hf_gsm_map_Ss_Status_a_bit = -1; + +/*--- Included file: packet-gsm_map-hf.c ---*/ + +static int hf_gsm_map_protocolId = -1; /* ProtocolId */ +static int hf_gsm_map_signalInfo = -1; /* SignalInfo */ +static int hf_gsm_map_extensionContainer = -1; /* ExtensionContainer */ +static int hf_gsm_map_supportedCamelPhases = -1; /* SupportedCamelPhases */ +static int hf_gsm_map_solsaSupportIndicator = -1; /* NULL */ +static int hf_gsm_map_imsi = -1; /* Imsi */ +static int hf_gsm_map_msc_Number = -1; /* Msc_Number */ +static int hf_gsm_map_vlr_Number = -1; /* Vlr_Number */ +static int hf_gsm_map_lmsi = -1; /* Lmsi */ +static int hf_gsm_map_vlr_Capability = -1; /* Vlr_Capability */ +static int hf_gsm_map_hlr_Number = -1; /* Hlr_Number */ +static int hf_gsm_map_PrivateExtensionList_item = -1; /* PrivateExtension */ +static int hf_gsm_map_identity = -1; /* T_identity */ +static int hf_gsm_map_imsi_WithLMSI = -1; /* T_imsi_WithLMSI */ +static int hf_gsm_map_cancellationType = -1; /* CancellationType */ +static int hf_gsm_map_sgsn_Number = -1; /* Sgsn_Number */ +static int hf_gsm_map_freezeTMSI = -1; /* NULL */ +static int hf_gsm_map_freezeP_TMSI = -1; /* NULL */ +static int hf_gsm_map_authenticationSetList = -1; /* T_authenticationSetList */ +static int hf_gsm_map_authenticationSetList_item = -1; /* T_authenticationSetList_item */ +static int hf_gsm_map_rand = -1; /* OCTET_STRING_SIZE_16 */ +static int hf_gsm_map_sres = -1; /* OCTET_STRING_SIZE_4 */ +static int hf_gsm_map_kc = -1; /* OCTET_STRING_SIZE_8 */ +static int hf_gsm_map_targetCellId = -1; /* OCTET_STRING_SIZE_5_7 */ +static int hf_gsm_map_ho_NumberNotRequired = -1; /* NULL */ +static int hf_gsm_map_bss_APDU = -1; /* Bss_APDU */ +static int hf_gsm_map_handoverNumber = -1; /* T_handoverNumber */ +static int hf_gsm_map_targetMSC_Number = -1; /* T_targetMSC_Number */ +static int hf_gsm_map_numberOfRequestedVectors = -1; /* INTEGER_1_5 */ +static int hf_gsm_map_segmentationProhibited = -1; /* NULL */ +static int hf_gsm_map_immediateResponsePreferred = -1; /* NULL */ +static int hf_gsm_map_re_synchronisationInfo = -1; /* T_re_synchronisationInfo */ +static int hf_gsm_map_auts = -1; /* OCTET_STRING_SIZE_14 */ +static int hf_gsm_map_requestingNodeType = -1; /* T_requestingNodeType */ +static int hf_gsm_map_requestingPLMN_Id = -1; /* OCTET_STRING_SIZE_3 */ +static int hf_gsm_map_SendAuthenticationInfoRes_item = -1; /* SendAuthenticationInfoRes_item */ +static int hf_gsm_map_bearerService = -1; /* OCTET_STRING */ +static int hf_gsm_map_teleservice = -1; /* Teleservice */ +static int hf_gsm_map_BasicServiceGroupList_item = -1; /* BasicService */ +static int hf_gsm_map_bcsmTriggerDetectionPoint = -1; /* BcsmTriggerDetectionPoint */ +static int hf_gsm_map_serviceKey = -1; /* ServiceKey */ +static int hf_gsm_map_gsmSCFAddress = -1; /* GsmSCF_Address */ +static int hf_gsm_map_defaultCallHandling = -1; /* DefaultCallHandling */ +static int hf_gsm_map_BcsmCamelTDPDataList_item = -1; /* BcsmCamelTDPData */ +static int hf_gsm_map_o_BcsmCamelTDPDataList = -1; /* BcsmCamelTDPDataList */ +static int hf_gsm_map_camelCapabilityHandling = -1; /* INTEGER_1_16 */ +static int hf_gsm_map_msisdn = -1; /* Msisdn */ +static int hf_gsm_map_category = -1; /* OCTET_STRING_SIZE_1 */ +static int hf_gsm_map_subscriberStatus = -1; /* SubscriberStatus */ +static int hf_gsm_map_bearerServiceList = -1; /* T_bearerServiceList */ +static int hf_gsm_map_bearerServiceList_item = -1; /* OCTET_STRING_SIZE_1_5 */ +static int hf_gsm_map_teleserviceList = -1; /* SEQUENCE_SIZE_1_20_OF_Teleservice */ +static int hf_gsm_map_teleserviceList_item = -1; /* Teleservice */ +static int hf_gsm_map_provisionedSS = -1; /* T_provisionedSS */ +static int hf_gsm_map_provisionedSS_item = -1; /* T_provisionedSS_item */ +static int hf_gsm_map_forwardingInfo = -1; /* ForwardingInfo */ +static int hf_gsm_map_callBarringInfo = -1; /* CallBarringInfo */ +static int hf_gsm_map_cug_Info = -1; /* T_cug_Info */ +static int hf_gsm_map_cug_SubscriptionList = -1; /* T_cug_SubscriptionList */ +static int hf_gsm_map_cug_SubscriptionList_item = -1; /* T_cug_SubscriptionList_item */ +static int hf_gsm_map_cug_Index = -1; /* INTEGER_0_32767 */ +static int hf_gsm_map_cug_Interlock = -1; /* OCTET_STRING_SIZE_4 */ +static int hf_gsm_map_intraCUG_Options = -1; /* IntraCUG_Options */ +static int hf_gsm_map_basicServiceGroupList = -1; /* BasicServiceGroupList */ +static int hf_gsm_map_cug_FeatureList = -1; /* T_cug_FeatureList */ +static int hf_gsm_map_cug_FeatureList_item = -1; /* T_cug_FeatureList_item */ +static int hf_gsm_map_basicService = -1; /* BasicService */ +static int hf_gsm_map_preferentialCUG_Indicator = -1; /* INTEGER_0_32767 */ +static int hf_gsm_map_interCUG_Restrictions = -1; /* OCTET_STRING_SIZE_1 */ +static int hf_gsm_map_ss_Data2 = -1; /* T_ss_Data2 */ +static int hf_gsm_map_ss_Code = -1; /* Ss_Code */ +static int hf_gsm_map_ss_Status = -1; /* Ss_Status */ +static int hf_gsm_map_ss_SubscriptionOption = -1; /* Ss_SubscriptionOption */ +static int hf_gsm_map_emlpp_Info = -1; /* T_emlpp_Info */ +static int hf_gsm_map_maximumentitledPriority = -1; /* INTEGER_0_15 */ +static int hf_gsm_map_defaultPriority = -1; /* INTEGER_0_15 */ +static int hf_gsm_map_odb_Data = -1; /* T_odb_Data */ +static int hf_gsm_map_odb_GeneralData = -1; /* Odb_GeneralData */ +static int hf_gsm_map_odb_HPLMN_Data = -1; /* Odb_HPLMN_Data */ +static int hf_gsm_map_roamingRestrictionDueToUnsupportedFeature = -1; /* NULL */ +static int hf_gsm_map_regionalSubscriptionData = -1; /* T_regionalSubscriptionData */ +static int hf_gsm_map_regionalSubscriptionData_item = -1; /* OCTET_STRING_SIZE_2 */ +static int hf_gsm_map_vbsSubscriptionData = -1; /* T_vbsSubscriptionData */ +static int hf_gsm_map_vbsSubscriptionData_item = -1; /* T_vbsSubscriptionData_item */ +static int hf_gsm_map_groupid = -1; /* OCTET_STRING_SIZE_3 */ +static int hf_gsm_map_broadcastInitEntitlement = -1; /* NULL */ +static int hf_gsm_map_vgcsSubscriptionData = -1; /* T_vgcsSubscriptionData */ +static int hf_gsm_map_vgcsSubscriptionData_item = -1; /* T_vgcsSubscriptionData_item */ +static int hf_gsm_map_groupId = -1; /* OCTET_STRING_SIZE_3 */ +static int hf_gsm_map_vlrCamelSubscriptionInfo = -1; /* T_vlrCamelSubscriptionInfo */ +static int hf_gsm_map_o_CSI = -1; /* O_CSI */ +static int hf_gsm_map_ss_CSI = -1; /* T_ss_CSI */ +static int hf_gsm_map_ss_CamelData = -1; /* T_ss_CamelData */ +static int hf_gsm_map_ss_EventList = -1; /* T_ss_EventList */ +static int hf_gsm_map_ss_EventList_item = -1; /* OCTET_STRING_SIZE_1 */ +static int hf_gsm_map_gsmSCF_Address = -1; /* GsmSCF_Address */ +static int hf_gsm_map_o_BcsmCamelTDP_CriteriaList = -1; /* O_BcsmCamelTDP_CriteriaList */ +static int hf_gsm_map_tif_CSI = -1; /* NULL */ +static int hf_gsm_map_naea_PreferredCI = -1; /* Naea_PreferredCI */ +static int hf_gsm_map_gprsSubscriptionData = -1; /* T_gprsSubscriptionData */ +static int hf_gsm_map_completeDataListIncluded = -1; /* NULL */ +static int hf_gsm_map_gprsDataList = -1; /* T_gprsDataList */ +static int hf_gsm_map_gprsDataList_item = -1; /* T_gprsDataList_item */ +static int hf_gsm_map_pdp_ContextId = -1; /* INTEGER_1_50 */ +static int hf_gsm_map_pdp_Type = -1; /* OCTET_STRING_SIZE_2 */ +static int hf_gsm_map_pdp_Address = -1; /* OCTET_STRING_SIZE_1_16 */ +static int hf_gsm_map_qos_Subscribed = -1; /* OCTET_STRING_SIZE_3 */ +static int hf_gsm_map_vplmnAddressAllowed = -1; /* NULL */ +static int hf_gsm_map_apn = -1; /* OCTET_STRING_SIZE_2_63 */ +static int hf_gsm_map_roamingRestrictedInSgsnDueToUnsupportedFeature = -1; /* NULL */ +static int hf_gsm_map_networkAccessMode = -1; /* T_networkAccessMode */ +static int hf_gsm_map_lsaInformation = -1; /* T_lsaInformation */ +static int hf_gsm_map_lsaOnlyAccessIndicator = -1; /* T_lsaOnlyAccessIndicator */ +static int hf_gsm_map_lsaDataList = -1; /* T_lsaDataList */ +static int hf_gsm_map_lsaDataList_item = -1; /* T_lsaDataList_item */ +static int hf_gsm_map_lsaIdentity = -1; /* OCTET_STRING_SIZE_3 */ +static int hf_gsm_map_lsaAttributes = -1; /* OCTET_STRING_SIZE_1 */ +static int hf_gsm_map_lsaActiveModeIndicator = -1; /* NULL */ +static int hf_gsm_map_lmu_Indicator = -1; /* NULL */ +static int hf_gsm_map_lcsInformation = -1; /* T_lcsInformation */ +static int hf_gsm_map_gmlc_List = -1; /* T_gmlc_List */ +static int hf_gsm_map_gmlc_List_item = -1; /* T_gmlc_List_item */ +static int hf_gsm_map_lcs_PrivacyExceptionList = -1; /* T_lcs_PrivacyExceptionList */ +static int hf_gsm_map_lcs_PrivacyExceptionList_item = -1; /* T_lcs_PrivacyExceptionList_item */ +static int hf_gsm_map_notificationToMSUser = -1; /* NotificationToMSUser */ +static int hf_gsm_map_externalClientList = -1; /* T_externalClientList */ +static int hf_gsm_map_externalClientList_item = -1; /* T_externalClientList_item */ +static int hf_gsm_map_clientIdentity = -1; /* T_clientIdentity */ +static int hf_gsm_map_externalAddress = -1; /* OCTET_STRING_SIZE_1_20 */ +static int hf_gsm_map_gmlc_Restriction = -1; /* T_gmlc_Restriction */ +static int hf_gsm_map_plmnClientList = -1; /* T_plmnClientList */ +static int hf_gsm_map_plmnClientList_item = -1; /* T_plmnClientList_item */ +static int hf_gsm_map_molr_List = -1; /* T_molr_List */ +static int hf_gsm_map_molr_List_item = -1; /* T_molr_List_item */ +static int hf_gsm_map_bearerServiceList1 = -1; /* T_bearerServiceList1 */ +static int hf_gsm_map_ss_List = -1; /* T_ss_List */ +static int hf_gsm_map_ss_List_item = -1; /* OCTET_STRING_SIZE_1 */ +static int hf_gsm_map_regionalSubscriptionResponse = -1; /* RegionalSubscriptionResponse */ +static int hf_gsm_map_callBarringFeatureList = -1; /* T_callBarringFeatureList */ +static int hf_gsm_map_callBarringFeatureList_item = -1; /* T_callBarringFeatureList_item */ +static int hf_gsm_map_forwardedToNumber = -1; /* ForwardedToNumber */ +static int hf_gsm_map_forwardedToSubaddress = -1; /* ForwardedToSubaddress */ +static int hf_gsm_map_forwardingOptions = -1; /* ForwardingOptions */ +static int hf_gsm_map_noReplyConditionTime = -1; /* INTEGER */ +static int hf_gsm_map_matchType = -1; /* MatchType */ +static int hf_gsm_map_destinationNumberList = -1; /* T_destinationNumberList */ +static int hf_gsm_map_destinationNumberList_item = -1; /* T_destinationNumberList_item */ +static int hf_gsm_map_destinationNumberLengthList = -1; /* T_destinationNumberLengthList */ +static int hf_gsm_map_destinationNumberLengthList_item = -1; /* INTEGER_1_15 */ +static int hf_gsm_map_forwardingFeatureList = -1; /* SEQUENCE_SIZE_1_32_OF_ForwardingFeatureList */ +static int hf_gsm_map_forwardingFeatureList_item = -1; /* ForwardingFeatureList */ +static int hf_gsm_map_naea_PreferredCIC = -1; /* OCTET_STRING_SIZE_3 */ +static int hf_gsm_map_O_BcsmCamelTDP_CriteriaList_item = -1; /* O_BcsmCamelTDP_CriteriaList_item */ +static int hf_gsm_map_o_BcsmTriggerDetectionPoint = -1; /* BcsmTriggerDetectionPoint */ +static int hf_gsm_map_destinationNumberCriteria = -1; /* DestinationNumberCriteria */ +static int hf_gsm_map_basicServiceCriteria = -1; /* BasicServiceGroupList */ +static int hf_gsm_map_callTypeCriteria = -1; /* CallTypeCriteria */ +static int hf_gsm_map_cliRestrictionOption = -1; /* CliRestrictionOption */ +static int hf_gsm_map_overrideCategory = -1; /* OverrideCategory */ +static int hf_gsm_map_basicServiceList = -1; /* BasicServiceGroupList */ +static int hf_gsm_map_ss_List1 = -1; /* T_ss_List1 */ +static int hf_gsm_map_regionalSubscriptionIdentifier = -1; /* OCTET_STRING_SIZE_2 */ +static int hf_gsm_map_vbsGroupIndication = -1; /* NULL */ +static int hf_gsm_map_vgcsGroupIndication = -1; /* NULL */ +static int hf_gsm_map_camelSubscriptionInfoWithdraw = -1; /* NULL */ +static int hf_gsm_map_gprsSubscriptionDataWithdraw = -1; /* T_gprsSubscriptionDataWithdraw */ +static int hf_gsm_map_allGPRSData = -1; /* NULL */ +static int hf_gsm_map_contextIdList = -1; /* T_contextIdList */ +static int hf_gsm_map_contextIdList_item = -1; /* INTEGER_1_50 */ +static int hf_gsm_map_roamingRestrictedInSgsnDueToUnsuppportedFeature = -1; /* NULL */ +static int hf_gsm_map_lsaInformationWithdraw = -1; /* T_lsaInformationWithdraw */ +static int hf_gsm_map_allLSAData = -1; /* NULL */ +static int hf_gsm_map_lsaIdentityList = -1; /* T_lsaIdentityList */ +static int hf_gsm_map_lsaIdentityList_item = -1; /* OCTET_STRING_SIZE_3 */ +static int hf_gsm_map_gmlc_ListWithdraw = -1; /* NULL */ +static int hf_gsm_map_hlr_List = -1; /* T_hlr_List */ +static int hf_gsm_map_hlr_List_item = -1; /* OCTET_STRING_SIZE_3_8 */ +static int hf_gsm_map_msNotReachable = -1; /* NULL */ +static int hf_gsm_map_traceReference = -1; /* OCTET_STRING_SIZE_1_2 */ +static int hf_gsm_map_traceType = -1; /* INTEGER_0_255 */ +static int hf_gsm_map_omc_Id = -1; /* OCTET_STRING_SIZE_1_20 */ +static int hf_gsm_map_cug_CheckInfo = -1; /* Cug_CheckInfo */ +static int hf_gsm_map_numberOfForwarding = -1; /* INTEGER_1_5 */ +static int hf_gsm_map_interrogationType = -1; /* T_interrogationType */ +static int hf_gsm_map_or_Interrogation = -1; /* NULL */ +static int hf_gsm_map_or_Capability = -1; /* INTEGER_1_127 */ +static int hf_gsm_map_gmsc_Address = -1; /* Gmsc_Address */ +static int hf_gsm_map_callReferenceNumber = -1; /* OCTET_STRING_SIZE_1_8 */ +static int hf_gsm_map_forwardingReason = -1; /* T_forwardingReason */ +static int hf_gsm_map_basicServiceGroup = -1; /* BasicService */ +static int hf_gsm_map_networkSignalInfo = -1; /* Bss_APDU */ +static int hf_gsm_map_camelInfo = -1; /* T_camelInfo */ +static int hf_gsm_map_suppress_T_CSI = -1; /* NULL */ +static int hf_gsm_map_suppressionOfAnnouncement = -1; /* NULL */ +static int hf_gsm_map_alertingPattern = -1; /* OCTET_STRING_SIZE_1 */ +static int hf_gsm_map_ccbs_Call = -1; /* NULL */ +static int hf_gsm_map_supportedCCBS_Phase = -1; /* INTEGER_1_127 */ +static int hf_gsm_map_additionalSignalInfo = -1; /* AdditionalSignalInfo */ +static int hf_gsm_map_extendedRoutingInfo = -1; /* T_extendedRoutingInfo */ +static int hf_gsm_map_routingInfo = -1; /* T_routingInfo */ +static int hf_gsm_map_roamingNumber = -1; /* RoamingNumber */ +static int hf_gsm_map_forwardingData = -1; /* ForwardingData */ +static int hf_gsm_map_camelRoutingInfo = -1; /* T_camelRoutingInfo */ +static int hf_gsm_map_gmscCamelSubscriptionInfo = -1; /* T_gmscCamelSubscriptionInfo */ +static int hf_gsm_map_t_CSI = -1; /* T_t_CSI */ +static int hf_gsm_map_t_BcsmCamelTDPDataList = -1; /* BcsmCamelTDPDataList */ +static int hf_gsm_map_cugSubscriptionFlag = -1; /* NULL */ +static int hf_gsm_map_subscriberInfo = -1; /* SubscriberInfo */ +static int hf_gsm_map_ss_List2 = -1; /* T_ss_List2 */ +static int hf_gsm_map_forwardingInterrogationRequired = -1; /* NULL */ +static int hf_gsm_map_vmsc_Address = -1; /* T_vmsc_Address */ +static int hf_gsm_map_ccbs_Indicators = -1; /* T_ccbs_Indicators */ +static int hf_gsm_map_ccbs_Possible = -1; /* NULL */ +static int hf_gsm_map_keepCCBS_CallIndicator = -1; /* NULL */ +static int hf_gsm_map_numberPortabilityStatus = -1; /* T_numberPortabilityStatus */ +static int hf_gsm_map_assumedIdle = -1; /* NULL */ +static int hf_gsm_map_camelBusy = -1; /* NULL */ +static int hf_gsm_map_notProvidedFromVLR = -1; /* NULL */ +static int hf_gsm_map_ageOfLocationInformation = -1; /* INTEGER_0_32767 */ +static int hf_gsm_map_geographicalInformation = -1; /* OCTET_STRING_SIZE_8 */ +static int hf_gsm_map_vlr_number = -1; /* Vlr_Number */ +static int hf_gsm_map_locationNumber = -1; /* OCTET_STRING_SIZE_2_10 */ +static int hf_gsm_map_cellIdOrLAI = -1; /* T_cellIdOrLAI */ +static int hf_gsm_map_cellIdFixedLength = -1; /* OCTET_STRING_SIZE_7 */ +static int hf_gsm_map_laiFixedLength = -1; /* OCTET_STRING_SIZE_5 */ +static int hf_gsm_map_locationInformation = -1; /* LocationInformation */ +static int hf_gsm_map_subscriberState = -1; /* SubscriberState */ +static int hf_gsm_map_ext_ProtocolId = -1; /* T_ext_ProtocolId */ +static int hf_gsm_map_signalInfo1 = -1; /* ExtSignalInfo */ +static int hf_gsm_map_cug_OutgoingAccess = -1; /* NULL */ +static int hf_gsm_map_gsm_BearerCapability = -1; /* Bss_APDU */ +static int hf_gsm_map_supportedCamelPhasesInGMSC = -1; /* SupportedCamelPhases */ +static int hf_gsm_map_orNotSupportedInGMSC = -1; /* NULL */ +static int hf_gsm_map_uu_Data = -1; /* T_uu_Data */ +static int hf_gsm_map_uuIndicator = -1; /* OCTET_STRING_SIZE_1 */ +static int hf_gsm_map_uui = -1; /* OCTET_STRING_SIZE_1_131 */ +static int hf_gsm_map_uusCFInteraction = -1; /* NULL */ +static int hf_gsm_map_allInformationSent = -1; /* NULL */ +static int hf_gsm_map_isdn_BearerCapability = -1; /* Bss_APDU */ +static int hf_gsm_map_call_Direction = -1; /* OCTET_STRING_SIZE_1 */ +static int hf_gsm_map_b_Subscriber_Address = -1; /* T_b_Subscriber_Address */ +static int hf_gsm_map_chosenChannel = -1; /* Bss_APDU */ +static int hf_gsm_map_lowerLayerCompatibility = -1; /* Bss_APDU */ +static int hf_gsm_map_highLayerCompatibility = -1; /* Bss_APDU */ +static int hf_gsm_map_sIWFSNumber = -1; /* T_sIWFSNumber */ +static int hf_gsm_map_channelType = -1; /* Bss_APDU */ +static int hf_gsm_map_ccbs_Monitoring = -1; /* Ccbs_Monitoring */ +static int hf_gsm_map_ccbs_SubscriberStatus = -1; /* Ccbs_SubscriberStatus */ +static int hf_gsm_map_eventReportData = -1; /* T_eventReportData */ +static int hf_gsm_map_callReportdata = -1; /* T_callReportdata */ +static int hf_gsm_map_monitoringMode = -1; /* MonitoringMode */ +static int hf_gsm_map_callOutcome = -1; /* CallOutcome */ +static int hf_gsm_map_callInfo = -1; /* Bss_APDU */ +static int hf_gsm_map_ccbs_Feature = -1; /* Ccbs_Feature */ +static int hf_gsm_map_translatedB_Number = -1; /* TranslatedB_Number */ +static int hf_gsm_map_replaceB_Number = -1; /* NULL */ +static int hf_gsm_map_ruf_Outcome = -1; /* Ruf_Outcome */ +static int hf_gsm_map_ss_Data = -1; /* Ss_Data */ +static int hf_gsm_map_ccbs_Index = -1; /* INTEGER_1_5 */ +static int hf_gsm_map_b_subscriberNumber = -1; /* B_subscriberNumber */ +static int hf_gsm_map_b_subscriberSubaddress = -1; /* OCTET_STRING_SIZE_1_21 */ +static int hf_gsm_map_forwardingFeatureList1 = -1; /* SEQUENCE_SIZE_1_13_OF_ForwardingFeatureList */ +static int hf_gsm_map_genericServiceInfo = -1; /* T_genericServiceInfo */ +static int hf_gsm_map_maximumEntitledPriority = -1; /* INTEGER_0_15 */ +static int hf_gsm_map_ccbs_FeatureList = -1; /* T_ccbs_FeatureList */ +static int hf_gsm_map_ccbs_FeatureList_item = -1; /* T_ccbs_FeatureList_item */ +static int hf_gsm_map_ussd_DataCodingScheme = -1; /* OCTET_STRING_SIZE_1 */ +static int hf_gsm_map_ussd_String = -1; /* OCTET_STRING_SIZE_1_160 */ +static int hf_gsm_map_ccbs_Data = -1; /* T_ccbs_Data */ +static int hf_gsm_map_serviceIndicator = -1; /* ServiceIndicator */ +static int hf_gsm_map_sm_RP_PRI = -1; /* BOOLEAN */ +static int hf_gsm_map_serviceCentreAddress = -1; /* ServiceCentreAddress */ +static int hf_gsm_map_gprsSupportIndicator = -1; /* NULL */ +static int hf_gsm_map_sm_RP_MTI = -1; /* INTEGER_0_10 */ +static int hf_gsm_map_sm_RP_SMEA = -1; /* OCTET_STRING_SIZE_1_12 */ +static int hf_gsm_map_locationInfoWithLMSI = -1; /* T_locationInfoWithLMSI */ +static int hf_gsm_map_networkNode_Number = -1; /* T_networkNode_Number */ +static int hf_gsm_map_gprsNodeIndicator = -1; /* NULL */ +static int hf_gsm_map_additional_Number = -1; /* T_additional_Number */ +static int hf_gsm_map_sm_RP_DA = -1; /* Sm_RP_DA */ +static int hf_gsm_map_sm_RP_OA = -1; /* Sm_RP_OA */ +static int hf_gsm_map_sm_RP_UI = -1; /* Sm_RP_UI */ +static int hf_gsm_map_serviceCentreAddressOA = -1; /* ServiceCentreAddress */ +static int hf_gsm_map_noSM_RP_OA = -1; /* NULL */ +static int hf_gsm_map_serviceCentreAddressDA = -1; /* ServiceCentreAddress */ +static int hf_gsm_map_noSM_RP_DA = -1; /* NULL */ +static int hf_gsm_map_moreMessagesToSend = -1; /* NULL */ +static int hf_gsm_map_sm_DeliveryOutcome = -1; /* Sm_DeliveryOutcome */ +static int hf_gsm_map_absentSubscriberDiagnosticSM = -1; /* INTEGER_0_255 */ +static int hf_gsm_map_deliveryOutcomeIndicator = -1; /* NULL */ +static int hf_gsm_map_additionalSM_DeliveryOutcome = -1; /* Sm_DeliveryOutcome */ +static int hf_gsm_map_additionalAbsentSubscriberDiagnosticSM = -1; /* INTEGER_0_255 */ +static int hf_gsm_map_storedMSISDN = -1; /* StoredMSISDN */ +static int hf_gsm_map_mw_Status = -1; /* T_mw_Status */ +static int hf_gsm_map_alertReason = -1; /* T_alertReason */ +static int hf_gsm_map_alertReasonIndicator = -1; /* NULL */ +static int hf_gsm_map_requestedInfo = -1; /* RequestedInfo */ +static int hf_gsm_map_locationInformationFlag = -1; /* NULL */ +static int hf_gsm_map_subscriberStateFlag = -1; /* NULL */ +static int hf_gsm_map_subscriberIdentity = -1; /* T_subscriberIdentity */ +static int hf_gsm_map_ss_Event = -1; /* OCTET_STRING_SIZE_1 */ +static int hf_gsm_map_ss_EventSpecification = -1; /* T_ss_EventSpecification */ +static int hf_gsm_map_ss_EventSpecification_item = -1; /* OCTET_STRING_SIZE_1_20 */ +static int hf_gsm_map_asciCallReference = -1; /* OCTET_STRING_SIZE_1_8 */ +static int hf_gsm_map_codec_Info = -1; /* OCTET_STRING_SIZE_5_10 */ +static int hf_gsm_map_cipheringAlgorithm = -1; /* OCTET_STRING_SIZE_1 */ +static int hf_gsm_map_groupKeyNumber = -1; /* INTEGER_0_15 */ +static int hf_gsm_map_groupKey = -1; /* OCTET_STRING_SIZE_8 */ +static int hf_gsm_map_priority = -1; /* INTEGER_0_15 */ +static int hf_gsm_map_uplinkFree = -1; /* NULL */ +static int hf_gsm_map_groupCallNumber = -1; /* T_groupCallNumber */ +static int hf_gsm_map_uplinkRequest = -1; /* NULL */ +static int hf_gsm_map_uplinkReleaseIndication = -1; /* NULL */ +static int hf_gsm_map_releaseGroupCall = -1; /* NULL */ +static int hf_gsm_map_uplinkRequestAck = -1; /* NULL */ +static int hf_gsm_map_uplinkRejectCommand = -1; /* NULL */ +static int hf_gsm_map_uplinkSeizedCommand = -1; /* NULL */ +static int hf_gsm_map_uplinkReleaseCommand = -1; /* NULL */ +static int hf_gsm_map_sgsn_Address = -1; /* OCTET_STRING_SIZE_5_17 */ +static int hf_gsm_map_sgsn_Capability = -1; /* T_sgsn_Capability */ +static int hf_gsm_map_ggsn_Address = -1; /* Ggsn_Address */ +static int hf_gsm_map_ggsn_Number = -1; /* Ggsn_Number */ +static int hf_gsm_map_mobileNotReachableReason = -1; /* INTEGER_0_255 */ +static int hf_gsm_map_dataCodingScheme = -1; /* OCTET_STRING */ +static int hf_gsm_map_nameString = -1; /* OCTET_STRING */ +static int hf_gsm_map_lcsClientType = -1; /* LcsClientType */ +static int hf_gsm_map_lcsClientExternalID = -1; /* LcsClientExternalID */ +static int hf_gsm_map_lcsClientDialedByMS = -1; /* OCTET_STRING */ +static int hf_gsm_map_lcsClientInternalID = -1; /* LcsClientInternalID */ +static int hf_gsm_map_lcsClientName = -1; /* LcsClientName */ +static int hf_gsm_map_locationType = -1; /* T_locationType */ +static int hf_gsm_map_locationEstimateType = -1; /* T_locationEstimateType */ +static int hf_gsm_map_mlc_Number = -1; /* T_mlc_Number */ +static int hf_gsm_map_lcs_ClientID = -1; /* Lcs_ClientID */ +static int hf_gsm_map_privacyOverride = -1; /* NULL */ +static int hf_gsm_map_imei = -1; /* Imei */ +static int hf_gsm_map_lcs_Priority = -1; /* OCTET_STRING_SIZE_1 */ +static int hf_gsm_map_lcs_QoS = -1; /* T_lcs_QoS */ +static int hf_gsm_map_horizontal_accuracy = -1; /* OCTET_STRING_SIZE_1 */ +static int hf_gsm_map_verticalCoordinateRequest = -1; /* NULL */ +static int hf_gsm_map_vertical_accuracy = -1; /* OCTET_STRING_SIZE_1 */ +static int hf_gsm_map_responseTime = -1; /* T_responseTime */ +static int hf_gsm_map_responseTimeCategory = -1; /* T_responseTimeCategory */ +static int hf_gsm_map_locationEstimate = -1; /* OCTET_STRING_SIZE_1_20 */ +static int hf_gsm_map_ageOfLocationEstimate = -1; /* INTEGER_0_32767 */ +static int hf_gsm_map_mlcNumber = -1; /* T_mlcNumber */ +static int hf_gsm_map_targetMS = -1; /* TargetMS */ +static int hf_gsm_map_lcsLocationInfo = -1; /* LcsLocationInfo */ +static int hf_gsm_map_lcs_Event = -1; /* Lcs_Event */ +static int hf_gsm_map_na_ESRD = -1; /* T_na_ESRD */ +static int hf_gsm_map_na_ESRK = -1; /* T_na_ESRK */ +static int hf_gsm_map_networkResource = -1; /* NetworkResource */ +static int hf_gsm_map_extensibleSystemFailureParam = -1; /* T_extensibleSystemFailureParam */ +static int hf_gsm_map_unknownSubscriberDiagnostic = -1; /* T_unknownSubscriberDiagnostic */ +static int hf_gsm_map_roamingNotAllowedCause = -1; /* T_roamingNotAllowedCause */ +static int hf_gsm_map_absentSubscriberReason = -1; /* T_absentSubscriberReason */ +static int hf_gsm_map_ccbs_Busy = -1; /* NULL */ +static int hf_gsm_map_callBarringCause = -1; /* CallBarringCause */ +static int hf_gsm_map_extensibleCallBarredParam = -1; /* T_extensibleCallBarredParam */ +static int hf_gsm_map_unauthorisedMessageOriginator = -1; /* NULL */ +static int hf_gsm_map_cug_RejectCause = -1; /* T_cug_RejectCause */ +static int hf_gsm_map_gprsConnectionSuspended = -1; /* NULL */ +static int hf_gsm_map_sm_EnumeratedDeliveryFailureCause = -1; /* T_sm_EnumeratedDeliveryFailureCause */ +static int hf_gsm_map_diagnosticInfo = -1; /* OCTET_STRING_SIZE_1_200 */ +static int hf_gsm_map_unauthorizedLCSClient_Diagnostic = -1; /* T_unauthorizedLCSClient_Diagnostic */ +static int hf_gsm_map_positionMethodFailure_Diagnostic = -1; /* T_positionMethodFailure_Diagnostic */ +static int hf_gsm_map_privateExtensionList = -1; /* PrivateExtensionList */ +static int hf_gsm_map_pcsExtensions = -1; /* PcsExtensions */ +/* named bits */ +static int hf_gsm_map_SupportedCamelPhases_phase1 = -1; +static int hf_gsm_map_SupportedCamelPhases_phase2 = -1; +static int hf_gsm_map_Odb_GeneralData_allOGCallsBarred = -1; +static int hf_gsm_map_Odb_GeneralData_internationalOGCallsBarred = -1; +static int hf_gsm_map_Odb_GeneralData_internationalOGCallsNotToHPLMNCountryBarred = -1; +static int hf_gsm_map_Odb_GeneralData_premiumRateInformationOGCallsBarred = -1; +static int hf_gsm_map_Odb_GeneralData_premiumRateEntertainementOGCallsBarred = -1; +static int hf_gsm_map_Odb_GeneralData_ssAccessBarred = -1; +static int hf_gsm_map_Odb_GeneralData_interzonalOGCallsBarred = -1; +static int hf_gsm_map_Odb_GeneralData_interzonalOGCallsNotToHPLMNCountryBarred = -1; +static int hf_gsm_map_Odb_GeneralData_interzonalOGCallsAndIntOGCallsNotToHPLMNCountryBarred = -1; +static int hf_gsm_map_Odb_GeneralData_allECTBarred = -1; +static int hf_gsm_map_Odb_GeneralData_chargeableECTBarred = -1; +static int hf_gsm_map_Odb_GeneralData_internationalECTBarred = -1; +static int hf_gsm_map_Odb_GeneralData_interzonalECTBarred = -1; +static int hf_gsm_map_Odb_GeneralData_doublyChargeableECTBarred = -1; +static int hf_gsm_map_Odb_GeneralData_multipleECTBarred = -1; +static int hf_gsm_map_Odb_HPLMN_Data_plmnSpecificBarringType1 = -1; +static int hf_gsm_map_Odb_HPLMN_Data_plmnSpecificBarringType2 = -1; +static int hf_gsm_map_Odb_HPLMN_Data_plmnSpecificBarringType3 = -1; +static int hf_gsm_map_Odb_HPLMN_Data_plmnSpecificBarringType4 = -1; +static int hf_gsm_map_ServiceIndicator_clirInvoked = -1; +static int hf_gsm_map_ServiceIndicator_camelInvoked = -1; +static int hf_gsm_map_T_mw_Status_scAddressNotIncluded = -1; +static int hf_gsm_map_T_mw_Status_mnrfSet = -1; +static int hf_gsm_map_T_mw_Status_mcefSet = -1; +static int hf_gsm_map_T_mw_Status_mnrgSet = -1; + +/*--- End of included file: packet-gsm_map-hf.c ---*/ -/* OPERATION CODE DEFINITION */ - -/* LOCATION MANAGEMENT */ -#define MAP_UPD_LOC 2 /* Update Location */ -#define MAP_CANCEL_LOC 3 /* Cancel Location */ -#define MAP_PURGE 67 /* Purge MS */ -#define MAP_SEND_ID 5 /* Send Identification */ -#define MAP_GPRS_UPD_LOC 23 /* GPRS Update Location */ -#define MAP_DET_IMSI 5 /* Detach IMSI */ -#define MAP_NOTE_MM_EVT 89 /* Note MM Event */ - -/* HANDOVER MANAGEMENT */ -#define MAP_PREP_HO 68 /* Prepare Handover */ -#define MAP_PREP_SUBS_HO 69 /* Prepare Subsequent Handover */ -#define MAP_PERF_HO 28 /* Perform Handover */ -#define MAP_PERF_SUBS_HO 30 /* Perform Subsequent Handover */ -#define MAP_SEND_END_SIG 29 /* Send End Signal */ -#define MAP_PROC_ACC_SIG 33 /* Process Access Signalling */ -#define MAP_FWD_ACC_SIG 34 /* Forward Access Signalling */ - -/* AUTHENTICATION MANAGEMENT */ -#define MAP_AUTH_INFO 56 /* Send Authintication Info */ -#define MAP_AUTH_FAIL_RPT 15 /* Authentication Failure Report */ - -/* IDENTIFICATION MANAGEMENT */ -#define MAP_CHK_IMEI 43 /* Check IMEI */ - -/* FAULT & RECOVERY MANAGEMENT */ -#define MAP_RESET 37 /* Reset */ -#define MAP_RESTORE_DATA 57 /* Restore Data */ -#define MAP_FWD_CHK_SS_IND 38 /* Forward Check SS Indication */ - -/* OAM MANAGEMENT */ -#define MAP_ACT_TRACE 50 /* Activate Trace */ -#define MAP_DEACT_TRACE 51 /* Deactivate Trace Mode */ -#define MAP_SEND_IMSI 58 /* Send IMSI */ -#define MAP_TRACE_SUBS_ACTV 52 /* Trace Subscriber Activity */ -#define MAP_NOTE_INTER_HO 35 /* Not Internal Handover */ - -/* CALL MANAGEMENT */ -#define MAP_ROUTE_INFO 22 /* Send Routing Info */ -#define MAP_PROV_ROAM_NUM 4 /* Provide Roaming Number */ -#define MAP_PROV_SIWFS_NUM 31 /* Provide SIWFS Number */ -#define MAP_SIWFS_SIG_MOD 32 /* SIWFS Signalling Modify */ -#define MAP_RES_CALL_HAND 6 /* Resume Call Handling */ -#define MAP_SET_RPT_STATE 73 /* Set Reporting State */ -#define MAP_STAT_RPT 74 /* Status Report */ -#define MAP_REM_USR_FREE 75 /* Remote user free */ -#define MAP_PREP_GRP_CALL 39 /* Prepare Group Call */ -#define MAP_SND_GRP_CALL_END_SIG 40 /* Send Group Call End Signalling */ -#define MAP_PRO_GRP_CALL_SIG 41 /* Process Group Call Signalling */ -#define MAP_FWD_GRP_CALL_SIG 42 /* Forward Group Call Signalling */ -#define MAP_IST_ALERT 87 /* IST Alert */ -#define MAP_IST_COMMAND 88 /* IST Command */ - -/* SS MANAGEMENT */ -#define MAP_REG_SS 10 /* Register SS */ -#define MAP_ERASE_SS 11 /* Erase SS */ -#define MAP_ACT_SS 12 /* Activate SS */ -#define MAP_DEACT_SS 13 /* Deactivate SS */ -#define MAP_INTER_SS 14 /* Interrogate SS */ -#define MAP_PROC_U_SS_REQ 59 /* Process Unstructured SS Req */ -#define MAP_U_SS_REQ 60 /* Unstructured SS Request */ -#define MAP_U_SS_NOTIFY 61 /* Unstructured SS Notify */ -#define MAP_REG_PASSWD 17 /* Register Password */ -#define MAP_GET_PASSWD 18 /* Get Password */ -#define MAP_REG_CC_ENT 76 /* Register CC Entry */ -#define MAP_ERASE_CC_ENT 77 /* Erase CC Entry */ -#define MAP_BEGIN_SUBS_ACTV 54 /* Begin Subscriber Activity */ -#define MAP_PROC_U_SS_DATA 19 /* Process Unstructured SS Data */ -#define MAP_SS_INV_NOTIFY 72 /* SS Invocation Notify */ - -/* SMS MANAGEMENT */ -#define MAP_MO_FWD_SM 46 /* Mobile Originated Forward Short Message */ -#define MAP_MT_FWD_SM 44 /* Mobile Terminated Forward Short Message */ -#define MAP_ROUTE_INFO_SM 45 /* Routing Info for SM */ -#define MAP_SM_DEL_STAT 47 /* Report SM Delivery Status */ -#define MAP_INFORM_SC 63 /* Inform Service Center */ -#define MAP_ALERT_SC 64 /* Alert Service Center */ -#define MAP_SM_READY 66 /* Ready for Short Message */ -#define MAP_NOTE_SUB_PRES 48 /* Note Subscriber Present */ -#define MAP_ALERT_SC_W_RES 49 /* Alert SC Without Result */ - -/* SUBSCRIBER MANAGEMENT */ -#define MAP_INS_SUB_DATA 7 /* Insert Subscriber Data */ -#define MAP_DEL_SUB_DATA 8 /* Delete Subscriber Data */ -#define MAP_PROV_SUB_INFO 70 /* Provide Subscriber Info */ -#define MAP_ANY_TIME_INTER 71 /* Any Time Interrogation */ -#define MAP_SEND_PARAM 9 /* Send Parameters */ -#define MAP_ANY_TIME_SUB_DATA_INTER 62 /* Any Time Subscriber Info Interrogation */ -#define MAP_ANY_TIME_MOD 65 /* Any Time Modification */ -#define MAP_NOTE_SUB_DATA_MOD 5 /* Note Subscriber Data Modified */ - -/* PDP ACTIVE MANAGEMENT */ -#define MAP_GPRS_ROUTE_INFO 24 /* Rout Info for GPRS */ -#define MAP_FAIL_REP 25 /* Failure Report */ -#define MAP_GPRS_NOTE_MS_PRES 26 /* GPRS NoteMs Present */ - -/* LOCATION SERVICE */ -#define MAP_PROV_SUB_LOC 83 /* Provide Subscriber Location */ -#define MAP_SEND_ROUTE_INFO_FOR_LCS 85 /* Send Routing Info For LCS */ -#define MAP_SUB_LOC_REP 86 /* Subscriber Location Report */ - - -#define MAP_OPR_CODE_TAG 0x02 -#define MAP_GE_PROBLEM_TAG 0x80 -#define MAP_IN_PROBLEM_TAG 0x81 -#define MAP_RR_PROBLEM_TAG 0x82 -#define MAP_RE_PROBLEM_TAG 0x83 -#define MAP_INVALID_TAG 0x00 - -#define MAP_OK 0x0 -#define MAP_FAIL 0x1 -const value_string gsm_map_opr_code_strings[] = { +/* Initialize the subtree pointers */ +static gint ett_gsm_map = -1; +static gint ett_gsm_map_InvokeId = -1; +static gint ett_gsm_map_InvokePDU = -1; +static gint ett_gsm_map_ReturnResultPDU = -1; +static gint ett_gsm_map_ReturnResult_result = -1; +static gint ett_gsm_map_GSMMAPPDU = -1; +static int gsm_map_tap = -1; + +/*--- Included file: packet-gsm_map-ett.c ---*/ + +static gint ett_gsm_map_Bss_APDU = -1; +static gint ett_gsm_map_SupportedCamelPhases = -1; +static gint ett_gsm_map_Vlr_Capability = -1; +static gint ett_gsm_map_UpdateLocationArg = -1; +static gint ett_gsm_map_UpdateLocationRes = -1; +static gint ett_gsm_map_PrivateExtensionList = -1; +static gint ett_gsm_map_PrivateExtension = -1; +static gint ett_gsm_map_PcsExtensions = -1; +static gint ett_gsm_map_CancelLocationArg = -1; +static gint ett_gsm_map_T_identity = -1; +static gint ett_gsm_map_T_imsi_WithLMSI = -1; +static gint ett_gsm_map_CancelLocationRes = -1; +static gint ett_gsm_map_PurgeMS_Arg = -1; +static gint ett_gsm_map_PurgeMS_Res = -1; +static gint ett_gsm_map_SendIdentificationRes = -1; +static gint ett_gsm_map_T_authenticationSetList = -1; +static gint ett_gsm_map_T_authenticationSetList_item = -1; +static gint ett_gsm_map_PrepareHO_Arg = -1; +static gint ett_gsm_map_PrepareHO_Res = -1; +static gint ett_gsm_map_PrepareSubsequentHO_Arg = -1; +static gint ett_gsm_map_SendAuthenticationInfoArgV3 = -1; +static gint ett_gsm_map_T_re_synchronisationInfo = -1; +static gint ett_gsm_map_SendAuthenticationInfoRes = -1; +static gint ett_gsm_map_SendAuthenticationInfoRes_item = -1; +static gint ett_gsm_map_BasicService = -1; +static gint ett_gsm_map_BasicServiceGroupList = -1; +static gint ett_gsm_map_Odb_GeneralData = -1; +static gint ett_gsm_map_Odb_HPLMN_Data = -1; +static gint ett_gsm_map_BcsmCamelTDPData = -1; +static gint ett_gsm_map_BcsmCamelTDPDataList = -1; +static gint ett_gsm_map_O_CSI = -1; +static gint ett_gsm_map_InsertSubscriberDataArg = -1; +static gint ett_gsm_map_T_bearerServiceList = -1; +static gint ett_gsm_map_SEQUENCE_SIZE_1_20_OF_Teleservice = -1; +static gint ett_gsm_map_T_provisionedSS = -1; +static gint ett_gsm_map_T_provisionedSS_item = -1; +static gint ett_gsm_map_T_cug_Info = -1; +static gint ett_gsm_map_T_cug_SubscriptionList = -1; +static gint ett_gsm_map_T_cug_SubscriptionList_item = -1; +static gint ett_gsm_map_T_cug_FeatureList = -1; +static gint ett_gsm_map_T_cug_FeatureList_item = -1; +static gint ett_gsm_map_T_ss_Data2 = -1; +static gint ett_gsm_map_T_emlpp_Info = -1; +static gint ett_gsm_map_T_odb_Data = -1; +static gint ett_gsm_map_T_regionalSubscriptionData = -1; +static gint ett_gsm_map_T_vbsSubscriptionData = -1; +static gint ett_gsm_map_T_vbsSubscriptionData_item = -1; +static gint ett_gsm_map_T_vgcsSubscriptionData = -1; +static gint ett_gsm_map_T_vgcsSubscriptionData_item = -1; +static gint ett_gsm_map_T_vlrCamelSubscriptionInfo = -1; +static gint ett_gsm_map_T_ss_CSI = -1; +static gint ett_gsm_map_T_ss_CamelData = -1; +static gint ett_gsm_map_T_ss_EventList = -1; +static gint ett_gsm_map_T_gprsSubscriptionData = -1; +static gint ett_gsm_map_T_gprsDataList = -1; +static gint ett_gsm_map_T_gprsDataList_item = -1; +static gint ett_gsm_map_T_lsaInformation = -1; +static gint ett_gsm_map_T_lsaDataList = -1; +static gint ett_gsm_map_T_lsaDataList_item = -1; +static gint ett_gsm_map_T_lcsInformation = -1; +static gint ett_gsm_map_T_gmlc_List = -1; +static gint ett_gsm_map_T_lcs_PrivacyExceptionList = -1; +static gint ett_gsm_map_T_lcs_PrivacyExceptionList_item = -1; +static gint ett_gsm_map_T_externalClientList = -1; +static gint ett_gsm_map_T_externalClientList_item = -1; +static gint ett_gsm_map_T_clientIdentity = -1; +static gint ett_gsm_map_T_plmnClientList = -1; +static gint ett_gsm_map_T_molr_List = -1; +static gint ett_gsm_map_T_molr_List_item = -1; +static gint ett_gsm_map_InsertSubscriberDataRes = -1; +static gint ett_gsm_map_T_bearerServiceList1 = -1; +static gint ett_gsm_map_T_ss_List = -1; +static gint ett_gsm_map_CallBarringInfo = -1; +static gint ett_gsm_map_T_callBarringFeatureList = -1; +static gint ett_gsm_map_T_callBarringFeatureList_item = -1; +static gint ett_gsm_map_ForwardingFeatureList = -1; +static gint ett_gsm_map_DestinationNumberCriteria = -1; +static gint ett_gsm_map_T_destinationNumberList = -1; +static gint ett_gsm_map_T_destinationNumberLengthList = -1; +static gint ett_gsm_map_ForwardingInfo = -1; +static gint ett_gsm_map_SEQUENCE_SIZE_1_32_OF_ForwardingFeatureList = -1; +static gint ett_gsm_map_Naea_PreferredCI = -1; +static gint ett_gsm_map_O_BcsmCamelTDP_CriteriaList = -1; +static gint ett_gsm_map_O_BcsmCamelTDP_CriteriaList_item = -1; +static gint ett_gsm_map_Ss_SubscriptionOption = -1; +static gint ett_gsm_map_DeleteSubscriberDataArg = -1; +static gint ett_gsm_map_T_ss_List1 = -1; +static gint ett_gsm_map_T_gprsSubscriptionDataWithdraw = -1; +static gint ett_gsm_map_T_contextIdList = -1; +static gint ett_gsm_map_T_lsaInformationWithdraw = -1; +static gint ett_gsm_map_T_lsaIdentityList = -1; +static gint ett_gsm_map_DeleteSubscriberDataRes = -1; +static gint ett_gsm_map_ResetArg = -1; +static gint ett_gsm_map_T_hlr_List = -1; +static gint ett_gsm_map_RestoreDataArg = -1; +static gint ett_gsm_map_RestoreDataRes = -1; +static gint ett_gsm_map_ActivateTraceModeArg = -1; +static gint ett_gsm_map_ActivateTraceModeRes = -1; +static gint ett_gsm_map_DeactivateTraceModeArg = -1; +static gint ett_gsm_map_DeactivateTraceModeRes = -1; +static gint ett_gsm_map_SendRoutingInfoArg = -1; +static gint ett_gsm_map_T_camelInfo = -1; +static gint ett_gsm_map_SendRoutingInfoRes = -1; +static gint ett_gsm_map_T_extendedRoutingInfo = -1; +static gint ett_gsm_map_T_routingInfo = -1; +static gint ett_gsm_map_T_camelRoutingInfo = -1; +static gint ett_gsm_map_T_gmscCamelSubscriptionInfo = -1; +static gint ett_gsm_map_T_t_CSI = -1; +static gint ett_gsm_map_T_ss_List2 = -1; +static gint ett_gsm_map_T_ccbs_Indicators = -1; +static gint ett_gsm_map_SubscriberState = -1; +static gint ett_gsm_map_LocationInformation = -1; +static gint ett_gsm_map_T_cellIdOrLAI = -1; +static gint ett_gsm_map_SubscriberInfo = -1; +static gint ett_gsm_map_AdditionalSignalInfo = -1; +static gint ett_gsm_map_Cug_CheckInfo = -1; +static gint ett_gsm_map_ForwardingData = -1; +static gint ett_gsm_map_ProvideRoamingNumberArg = -1; +static gint ett_gsm_map_ProvideRoamingNumberRes = -1; +static gint ett_gsm_map_ResumeCallHandlingArg = -1; +static gint ett_gsm_map_T_uu_Data = -1; +static gint ett_gsm_map_ResumeCallHandlingRes = -1; +static gint ett_gsm_map_ProvideSIWFSNumberArg = -1; +static gint ett_gsm_map_ProvideSIWFSNumberRes = -1; +static gint ett_gsm_map_SIWFSSignallingModifyArg = -1; +static gint ett_gsm_map_SIWFSSignallingModifyRes = -1; +static gint ett_gsm_map_SetReportingStateArg = -1; +static gint ett_gsm_map_SetReportingStateRes = -1; +static gint ett_gsm_map_StatusReportArg = -1; +static gint ett_gsm_map_T_eventReportData = -1; +static gint ett_gsm_map_T_callReportdata = -1; +static gint ett_gsm_map_StatusReportRes = -1; +static gint ett_gsm_map_RemoteUserFreeArg = -1; +static gint ett_gsm_map_RemoteUserFreeRes = -1; +static gint ett_gsm_map_Ss_Data = -1; +static gint ett_gsm_map_RegisterSS_Arg = -1; +static gint ett_gsm_map_Ss_Info = -1; +static gint ett_gsm_map_Ccbs_Feature = -1; +static gint ett_gsm_map_Ss_ForBS = -1; +static gint ett_gsm_map_InterrogateSS_Res = -1; +static gint ett_gsm_map_SEQUENCE_SIZE_1_13_OF_ForwardingFeatureList = -1; +static gint ett_gsm_map_T_genericServiceInfo = -1; +static gint ett_gsm_map_T_ccbs_FeatureList = -1; +static gint ett_gsm_map_T_ccbs_FeatureList_item = -1; +static gint ett_gsm_map_Ussd_Arg = -1; +static gint ett_gsm_map_Ussd_Res = -1; +static gint ett_gsm_map_ServiceIndicator = -1; +static gint ett_gsm_map_RegisterCC_EntryArg = -1; +static gint ett_gsm_map_T_ccbs_Data = -1; +static gint ett_gsm_map_RegisterCC_EntryRes = -1; +static gint ett_gsm_map_EraseCC_EntryArg = -1; +static gint ett_gsm_map_EraseCC_EntryRes = -1; +static gint ett_gsm_map_RoutingInfoForSMArg = -1; +static gint ett_gsm_map_RoutingInfoForSMRes = -1; +static gint ett_gsm_map_T_locationInfoWithLMSI = -1; +static gint ett_gsm_map_T_additional_Number = -1; +static gint ett_gsm_map_Mo_forwardSM_Arg = -1; +static gint ett_gsm_map_Mo_forwardSM_Res = -1; +static gint ett_gsm_map_Sm_RP_OA = -1; +static gint ett_gsm_map_Sm_RP_DA = -1; +static gint ett_gsm_map_Mt_forwardSM_Arg = -1; +static gint ett_gsm_map_Mt_forwardSM_Res = -1; +static gint ett_gsm_map_ReportSM_DeliveryStatusArg = -1; +static gint ett_gsm_map_ReportSM_DeliveryStatusRes = -1; +static gint ett_gsm_map_InformServiceCentreArg = -1; +static gint ett_gsm_map_T_mw_Status = -1; +static gint ett_gsm_map_AlertServiceCentreArg = -1; +static gint ett_gsm_map_ReadyForSM_Arg = -1; +static gint ett_gsm_map_ReadyForSM_Res = -1; +static gint ett_gsm_map_ProvideSubscriberInfoArg = -1; +static gint ett_gsm_map_ProvideSubscriberInfoRes = -1; +static gint ett_gsm_map_RequestedInfo = -1; +static gint ett_gsm_map_AnyTimeInterrogationArg = -1; +static gint ett_gsm_map_T_subscriberIdentity = -1; +static gint ett_gsm_map_AnyTimeInterrogationRes = -1; +static gint ett_gsm_map_Ss_InvocationNotificationArg = -1; +static gint ett_gsm_map_T_ss_EventSpecification = -1; +static gint ett_gsm_map_Ss_InvocationNotificationRes = -1; +static gint ett_gsm_map_PrepareGroupCallArg = -1; +static gint ett_gsm_map_PrepareGroupCallRes = -1; +static gint ett_gsm_map_SendGroupCallEndSignalArg = -1; +static gint ett_gsm_map_SendGroupCallEndSignalRes = -1; +static gint ett_gsm_map_ProcessGroupCallSignallingArg = -1; +static gint ett_gsm_map_ForwardGroupCallSignallingArg = -1; +static gint ett_gsm_map_UpdateGprsLocationArg = -1; +static gint ett_gsm_map_T_sgsn_Capability = -1; +static gint ett_gsm_map_UpdateGprsLocationRes = -1; +static gint ett_gsm_map_SendRoutingInfoForGprsArg = -1; +static gint ett_gsm_map_SendRoutingInfoForGprsRes = -1; +static gint ett_gsm_map_FailureReportArg = -1; +static gint ett_gsm_map_FailureReportRes = -1; +static gint ett_gsm_map_NoteMsPresentForGprsArg = -1; +static gint ett_gsm_map_NoteMsPresentForGprsRes = -1; +static gint ett_gsm_map_LcsClientExternalID = -1; +static gint ett_gsm_map_LcsClientName = -1; +static gint ett_gsm_map_Lcs_ClientID = -1; +static gint ett_gsm_map_LcsLocationInfo = -1; +static gint ett_gsm_map_ProvideSubscriberLocation_Arg = -1; +static gint ett_gsm_map_T_locationType = -1; +static gint ett_gsm_map_T_lcs_QoS = -1; +static gint ett_gsm_map_T_responseTime = -1; +static gint ett_gsm_map_ProvideSubscriberLocation_Res = -1; +static gint ett_gsm_map_TargetMS = -1; +static gint ett_gsm_map_RoutingInfoForLCS_Arg = -1; +static gint ett_gsm_map_RoutingInfoForLCS_Res = -1; +static gint ett_gsm_map_SubscriberLocationReport_Arg = -1; +static gint ett_gsm_map_SubscriberLocationReport_Res = -1; +static gint ett_gsm_map_SystemFailureParam = -1; +static gint ett_gsm_map_T_extensibleSystemFailureParam = -1; +static gint ett_gsm_map_DataMissingParam = -1; +static gint ett_gsm_map_UnexpectedDataParam = -1; +static gint ett_gsm_map_FacilityNotSupParam = -1; +static gint ett_gsm_map_IncompatibleTerminalParam = -1; +static gint ett_gsm_map_ResourceLimitationParam = -1; +static gint ett_gsm_map_UnknownSubscriberParam = -1; +static gint ett_gsm_map_NumberChangedParam = -1; +static gint ett_gsm_map_UnidentifiedSubParam = -1; +static gint ett_gsm_map_RoamingNotAllowedParam = -1; +static gint ett_gsm_map_IllegalSubscriberParam = -1; +static gint ett_gsm_map_IllegalEquipmentParam = -1; +static gint ett_gsm_map_BearerServNotProvParam = -1; +static gint ett_gsm_map_TeleservNotProvParam = -1; +static gint ett_gsm_map_TracingBufferFullParam = -1; +static gint ett_gsm_map_NoRoamingNbParam = -1; +static gint ett_gsm_map_AbsentSubscriberParam = -1; +static gint ett_gsm_map_BusySubscriberParam = -1; +static gint ett_gsm_map_NoSubscriberReplyParam = -1; +static gint ett_gsm_map_CallBarredParam = -1; +static gint ett_gsm_map_T_extensibleCallBarredParam = -1; +static gint ett_gsm_map_ForwardingFailedParam = -1; +static gint ett_gsm_map_Or_NotAllowedParam = -1; +static gint ett_gsm_map_ForwardingViolationParam = -1; +static gint ett_gsm_map_Cug_RejectParam = -1; +static gint ett_gsm_map_Ati_NotAllowedParam = -1; +static gint ett_gsm_map_NoGroupCallNbParam = -1; +static gint ett_gsm_map_Ss_IncompatibilityCause = -1; +static gint ett_gsm_map_ShortTermDenialParam = -1; +static gint ett_gsm_map_LongTermDenialParam = -1; +static gint ett_gsm_map_SubBusyForMT_SMS_Param = -1; +static gint ett_gsm_map_Sm_DeliveryFailureCause = -1; +static gint ett_gsm_map_MessageWaitListFullParam = -1; +static gint ett_gsm_map_AbsentSubscriberSM_Param = -1; +static gint ett_gsm_map_UnauthorizedRequestingNetwork_Param = -1; +static gint ett_gsm_map_UnauthorizedLCSClient_Param = -1; +static gint ett_gsm_map_PositionMethodFailure_Param = -1; +static gint ett_gsm_map_UnknownOrUnreachableLCSClient_Param = -1; +static gint ett_gsm_map_ExtensionContainer = -1; + +/*--- End of included file: packet-gsm_map-ett.c ---*/ -/* LOCATION MANAGEMENT */ - { MAP_UPD_LOC, "Update Location"}, - { MAP_CANCEL_LOC, "Cancel Location"}, - { MAP_PURGE, "Purge MS"}, - { MAP_SEND_ID, "Send Identification"}, - { MAP_GPRS_UPD_LOC, "Update GPRS Location"}, - { MAP_DET_IMSI, "Detach IMSI"}, - { MAP_NOTE_MM_EVT, "Note MM Event"}, - -/* HANDOVER MANAGEMENT */ - { MAP_PREP_HO, "Prepare Handover"}, - { MAP_PREP_SUBS_HO, "Prepare Subsequent Handover"}, - { MAP_PERF_HO, "Perform Handover"}, - { MAP_PERF_SUBS_HO, "Perform Subsequent Handover"}, - { MAP_SEND_END_SIG, "Send End Signal"}, - { MAP_PROC_ACC_SIG, "Process Access Signalling"}, - { MAP_FWD_ACC_SIG, "Forward Access Signalling"}, - -/* AUTHENTICATION MANAGEMENT */ - { MAP_AUTH_INFO, "Send Authentication Info"}, - { MAP_AUTH_FAIL_RPT, "Authentication Failure Report"}, - -/* IDENTIFICATION MANAGEMENT */ - { MAP_CHK_IMEI, "Check IMEI"}, - -/* FAULT & RECOVERY MANAGEMENT */ - { MAP_RESET, "Reset"}, - { MAP_RESTORE_DATA, "Restore Data"}, - { MAP_FWD_CHK_SS_IND, "Forward Check SS Indication"}, - -/* OAM MANAGEMENT */ - { MAP_ACT_TRACE, "Activate Trace Mode"}, - { MAP_DEACT_TRACE, "Deactivate Trace Mode"}, - { MAP_SEND_IMSI, "Send IMSI"}, - { MAP_TRACE_SUBS_ACTV, "Trace Subscriber Activity"}, - { MAP_NOTE_INTER_HO, "Note Internal Handover"}, - -/* CALL MANAGEMENT */ - { MAP_ROUTE_INFO, "Send Routing Info"}, - { MAP_PROV_ROAM_NUM, "Provide Roaming Number"}, - { MAP_PROV_SIWFS_NUM, "Provide SIWFS Number"}, - { MAP_SIWFS_SIG_MOD, "SIWFS Signalling Modify"}, - { MAP_RES_CALL_HAND, "Resume Call Handling"}, - { MAP_SET_RPT_STATE, "Set Reporting State"}, - { MAP_STAT_RPT, "Status Report"}, - { MAP_REM_USR_FREE, "Remote User Free"}, - { MAP_PREP_GRP_CALL, "Prepare Group Call"}, - { MAP_SND_GRP_CALL_END_SIG, "Send Group Call End Signalling"}, - { MAP_PRO_GRP_CALL_SIG, "Process Group Call Signalling"}, - { MAP_FWD_GRP_CALL_SIG, "Forward Group Call Signalling"}, - { MAP_IST_ALERT, "IST Alert"}, - { MAP_IST_COMMAND, "IST Command"}, - -/* SS MANAGEMENT */ - { MAP_REG_SS, "Register SS"}, - { MAP_ERASE_SS, "Erase SS"}, - { MAP_ACT_SS, "Activate SS"}, - { MAP_DEACT_SS, "Deactivate SS"}, - { MAP_INTER_SS, "Interrogate SS"}, - { MAP_PROC_U_SS_REQ, "Process Unstructured SS Request"}, - { MAP_U_SS_REQ, "Unstructured SS Request"}, - { MAP_U_SS_NOTIFY, "Unstructured SS Notify"}, - { MAP_REG_PASSWD, "Register Password"}, - { MAP_GET_PASSWD, "Get Password"}, - { MAP_REG_CC_ENT, "Register CC Entry"}, - { MAP_ERASE_CC_ENT, "Erase CC Entry"}, - { MAP_BEGIN_SUBS_ACTV, "Begin Subscriber Activity"}, - { MAP_PROC_U_SS_DATA, "Process Unstructured SS Data"}, - { MAP_SS_INV_NOTIFY, "SS Invocation Notification"}, - -/* SMS MANAGEMENT */ - { MAP_MO_FWD_SM, "MO Forward SM"}, - { MAP_MT_FWD_SM, "MT Forward SM"}, - { MAP_ROUTE_INFO_SM, "Send Routing Info For SM"}, - { MAP_SM_DEL_STAT, "Report SM Delivery Status"}, - { MAP_INFORM_SC, "Inform Service Center"}, - { MAP_ALERT_SC, "Alert Service Center"}, - { MAP_SM_READY, "Ready For SM"}, - { MAP_NOTE_SUB_PRES, "Note Subscriber Present"}, - { MAP_ALERT_SC_W_RES, "Alert SC Without Result"}, - -/* SUBSCRIBER MANAGEMENT */ - { MAP_INS_SUB_DATA, "Insert Subscriber Data"}, - { MAP_DEL_SUB_DATA, "Delete Subscriber Data"}, - { MAP_PROV_SUB_INFO, "Provide Subscriber Info"}, - { MAP_ANY_TIME_INTER, "Any Time Interrogation"}, - { MAP_SEND_PARAM, "Send Parameters"}, - { MAP_ANY_TIME_SUB_DATA_INTER, "Any Time Subscription Interrogation"}, - { MAP_ANY_TIME_MOD, "Any Time Modification"}, - { MAP_NOTE_SUB_DATA_MOD, "Note Subscriber Data Modified"}, - -/* PDP ACTIVE MANAGEMENT */ - { MAP_GPRS_ROUTE_INFO, "Send Routing Info For GPRS"}, - { MAP_FAIL_REP, "Failure Report"}, - { MAP_GPRS_NOTE_MS_PRES, "Note MS Present For GPRS"}, - -/* LOCATION SERVICE */ - { MAP_PROV_SUB_LOC, "Provide Subscriber Location"}, - { MAP_SEND_ROUTE_INFO_FOR_LCS, "Send Routing Info For LCS"}, - { MAP_SUB_LOC_REP, "Subscriber Location Report"}, - - { 0, NULL} -}; - -/* - * Initialize the protocol and registered fields - */ -static int proto_map = -1; -static int gsm_map_tap = -1; +static dissector_table_t sms_dissector_table; /* SMS TPDU */ +/* Preferenc settings default */ +static guint tcap_itu_ssn1 = 6; +static guint tcap_itu_ssn2 = 7; +static guint tcap_itu_ssn3 = 8; +static guint tcap_itu_ssn4 = 9; + +static guint global_tcap_itu_ssn1 = 6; +static guint global_tcap_itu_ssn2 = 7; +static guint global_tcap_itu_ssn3 = 8; +static guint global_tcap_itu_ssn4 = 9; + +/* Global variables */ +static proto_tree *top_tree; +int application_context_version; +gint protocolId; + +static char* +unpack_digits(tvbuff_t *tvb, int offset){ + + int length; + guint8 octet; + int i=0; + char *digit_str; + + length = tvb_length(tvb); + length = length - offset; + digit_str = g_malloc(length+1); + + while ( offset < length ){ + + octet = tvb_get_guint8(tvb,offset); + digit_str[i] = ((octet & 0x0f) + 0x30); + i++; + + /* + * unpack second value in byte + */ + octet = octet >> 4; + + if (octet == 0x0f) /* odd number bytes - hit filler */ + break; + + digit_str[i] = ((octet & 0x0f) + 0x30); + i++; + offset++; + + } + digit_str[i]= '\0'; + return digit_str; +} + + + +/*--- Included file: packet-gsm_map-fn.c ---*/ + +/*--- Fields for imported types ---*/ + + + +static const value_string gsm_map_ProtocolId_vals[] = { + { 1, "gsm-0408" }, + { 2, "gsm-0806" }, + { 3, "gsm-BSSMAP" }, + { 4, "ets-300102-1" }, + { 0, NULL } +}; + + +static int +dissect_gsm_map_ProtocolId(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, &protocolId); + + + return offset; +} +static int dissect_protocolId(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_ProtocolId(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_protocolId); +} + + +static int +dissect_gsm_map_SignalInfo(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + + tvbuff_t *parameter_tvb; + guint8 octet; + guint8 length; + + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + ¶meter_tvb); + if (!parameter_tvb) + return offset; + switch (protocolId){ + /* gsm-0408 */ + case 1: + break; + /* gsm-0806 */ + case 2: + break; + /* gsm-BSSMAP */ + case 3: + break; + /* ets-300102-1 (~Q.931 ) */ + case 4: + octet = tvb_get_guint8(parameter_tvb,0); + length = tvb_get_guint8(parameter_tvb,1); + if ( octet == 4 ) + dissect_q931_bearer_capability_ie(parameter_tvb, 2, length, tree); + break; + default: + break; +} + + + return offset; +} +static int dissect_signalInfo(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_SignalInfo(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_signalInfo); +} + +static const ber_sequence_t PrivateExtension_sequence[] = { + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_PrivateExtension(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + PrivateExtension_sequence, hf_index, ett_gsm_map_PrivateExtension); + + return offset; +} +static int dissect_PrivateExtensionList_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_PrivateExtension(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_PrivateExtensionList_item); +} + +static const ber_sequence_t PrivateExtensionList_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_PrivateExtensionList_item }, +}; + +static int +dissect_gsm_map_PrivateExtensionList(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + PrivateExtensionList_sequence_of, hf_index, ett_gsm_map_PrivateExtensionList); + + return offset; +} +static int dissect_privateExtensionList_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_PrivateExtensionList(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_privateExtensionList); +} + +static const ber_sequence_t PcsExtensions_sequence[] = { + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_PcsExtensions(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + PcsExtensions_sequence, hf_index, ett_gsm_map_PcsExtensions); + + return offset; +} +static int dissect_pcsExtensions_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_PcsExtensions(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_pcsExtensions); +} + +static const ber_sequence_t ExtensionContainer_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_privateExtensionList_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pcsExtensions_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_ExtensionContainer(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + ExtensionContainer_sequence, hf_index, ett_gsm_map_ExtensionContainer); + + return offset; +} +static int dissect_extensionContainer(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_ExtensionContainer(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_extensionContainer); +} +static int dissect_extensionContainer_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_ExtensionContainer(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_extensionContainer); +} + +static const ber_sequence_t Bss_APDU_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_protocolId }, + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_signalInfo }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_Bss_APDU(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + Bss_APDU_sequence, hf_index, ett_gsm_map_Bss_APDU); + + return offset; +} +static int dissect_bss_APDU(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_Bss_APDU(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_bss_APDU); +} +static int dissect_networkSignalInfo_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_Bss_APDU(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_networkSignalInfo); +} +static int dissect_gsm_BearerCapability_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_Bss_APDU(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_gsm_BearerCapability); +} +static int dissect_isdn_BearerCapability_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_Bss_APDU(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_isdn_BearerCapability); +} +static int dissect_chosenChannel_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_Bss_APDU(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_chosenChannel); +} +static int dissect_lowerLayerCompatibility_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_Bss_APDU(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_lowerLayerCompatibility); +} +static int dissect_highLayerCompatibility_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_Bss_APDU(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_highLayerCompatibility); +} +static int dissect_channelType_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_Bss_APDU(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_channelType); +} +static int dissect_callInfo_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_Bss_APDU(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_callInfo); +} + +static const asn_namedbit SupportedCamelPhases_bits[] = { + { 0, &hf_gsm_map_SupportedCamelPhases_phase1, -1, -1, NULL, NULL }, + { 1, &hf_gsm_map_SupportedCamelPhases_phase2, -1, -1, NULL, NULL }, + { 0, NULL, 0, 0, NULL, NULL } +}; + +static int +dissect_gsm_map_SupportedCamelPhases(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_bitstring(implicit_tag, pinfo, tree, tvb, offset, + SupportedCamelPhases_bits, hf_index, ett_gsm_map_SupportedCamelPhases, + NULL); + + return offset; +} +static int dissect_supportedCamelPhases(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_SupportedCamelPhases(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_supportedCamelPhases); +} +static int dissect_supportedCamelPhases_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_SupportedCamelPhases(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_supportedCamelPhases); +} +static int dissect_supportedCamelPhasesInGMSC_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_SupportedCamelPhases(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_supportedCamelPhasesInGMSC); +} + + +static int +dissect_gsm_map_NULL(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + { proto_item *ti_tmp; + ti_tmp = proto_tree_add_item(tree, hf_index, tvb, offset>>8, 0, FALSE); + proto_item_append_text(ti_tmp, ": NULL"); + } + + return offset; +} +static int dissect_solsaSupportIndicator(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_NULL(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_solsaSupportIndicator); +} +static int dissect_solsaSupportIndicator_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_solsaSupportIndicator); +} +static int dissect_freezeTMSI_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_freezeTMSI); +} +static int dissect_freezeP_TMSI_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_freezeP_TMSI); +} +static int dissect_ho_NumberNotRequired(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_NULL(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_ho_NumberNotRequired); +} +static int dissect_segmentationProhibited(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_NULL(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_segmentationProhibited); +} +static int dissect_immediateResponsePreferred_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_immediateResponsePreferred); +} +static int dissect_roamingRestrictionDueToUnsupportedFeature_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_roamingRestrictionDueToUnsupportedFeature); +} +static int dissect_broadcastInitEntitlement(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_NULL(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_broadcastInitEntitlement); +} +static int dissect_tif_CSI_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_tif_CSI); +} +static int dissect_completeDataListIncluded(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_NULL(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_completeDataListIncluded); +} +static int dissect_vplmnAddressAllowed_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_vplmnAddressAllowed); +} +static int dissect_roamingRestrictedInSgsnDueToUnsupportedFeature_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_roamingRestrictedInSgsnDueToUnsupportedFeature); +} +static int dissect_lsaActiveModeIndicator_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_lsaActiveModeIndicator); +} +static int dissect_lmu_Indicator_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_lmu_Indicator); +} +static int dissect_vbsGroupIndication_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_vbsGroupIndication); +} +static int dissect_vgcsGroupIndication_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_vgcsGroupIndication); +} +static int dissect_camelSubscriptionInfoWithdraw_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_camelSubscriptionInfoWithdraw); +} +static int dissect_allGPRSData(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_NULL(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_allGPRSData); +} +static int dissect_roamingRestrictedInSgsnDueToUnsuppportedFeature_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_roamingRestrictedInSgsnDueToUnsuppportedFeature); +} +static int dissect_allLSAData(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_NULL(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_allLSAData); +} +static int dissect_gmlc_ListWithdraw_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_gmlc_ListWithdraw); +} +static int dissect_msNotReachable(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_NULL(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_msNotReachable); +} +static int dissect_or_Interrogation_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_or_Interrogation); +} +static int dissect_suppress_T_CSI(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_NULL(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_suppress_T_CSI); +} +static int dissect_suppressionOfAnnouncement_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_suppressionOfAnnouncement); +} +static int dissect_ccbs_Call_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_ccbs_Call); +} +static int dissect_cugSubscriptionFlag_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_cugSubscriptionFlag); +} +static int dissect_forwardingInterrogationRequired_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_forwardingInterrogationRequired); +} +static int dissect_ccbs_Possible_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_ccbs_Possible); +} +static int dissect_keepCCBS_CallIndicator_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_keepCCBS_CallIndicator); +} +static int dissect_assumedIdle_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_assumedIdle); +} +static int dissect_camelBusy_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_camelBusy); +} +static int dissect_notProvidedFromVLR_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_notProvidedFromVLR); +} +static int dissect_cug_OutgoingAccess(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_NULL(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_cug_OutgoingAccess); +} +static int dissect_orNotSupportedInGMSC_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_orNotSupportedInGMSC); +} +static int dissect_uusCFInteraction_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_uusCFInteraction); +} +static int dissect_allInformationSent_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_allInformationSent); +} +static int dissect_replaceB_Number_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_replaceB_Number); +} +static int dissect_gprsSupportIndicator_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_gprsSupportIndicator); +} +static int dissect_gprsNodeIndicator_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_gprsNodeIndicator); +} +static int dissect_noSM_RP_OA_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_noSM_RP_OA); +} +static int dissect_noSM_RP_DA_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_noSM_RP_DA); +} +static int dissect_moreMessagesToSend(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_NULL(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_moreMessagesToSend); +} +static int dissect_deliveryOutcomeIndicator_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_deliveryOutcomeIndicator); +} +static int dissect_alertReasonIndicator(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_NULL(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_alertReasonIndicator); +} +static int dissect_locationInformationFlag_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_locationInformationFlag); +} +static int dissect_subscriberStateFlag_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_subscriberStateFlag); +} +static int dissect_uplinkFree_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_uplinkFree); +} +static int dissect_uplinkRequest_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_uplinkRequest); +} +static int dissect_uplinkReleaseIndication_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_uplinkReleaseIndication); +} +static int dissect_releaseGroupCall_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_releaseGroupCall); +} +static int dissect_uplinkRequestAck_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_uplinkRequestAck); +} +static int dissect_uplinkRejectCommand_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_uplinkRejectCommand); +} +static int dissect_uplinkSeizedCommand_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_uplinkSeizedCommand); +} +static int dissect_uplinkReleaseCommand_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_uplinkReleaseCommand); +} +static int dissect_privacyOverride_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_privacyOverride); +} +static int dissect_verticalCoordinateRequest_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_verticalCoordinateRequest); +} +static int dissect_ccbs_Busy_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_ccbs_Busy); +} +static int dissect_unauthorisedMessageOriginator_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_unauthorisedMessageOriginator); +} +static int dissect_gprsConnectionSuspended(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_NULL(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_gprsConnectionSuspended); +} + +static const ber_sequence_t Vlr_Capability_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_supportedCamelPhases_impl }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_solsaSupportIndicator_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_Vlr_Capability(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + Vlr_Capability_sequence, hf_index, ett_gsm_map_Vlr_Capability); + + return offset; +} +static int dissect_vlr_Capability_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_Vlr_Capability(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_vlr_Capability); +} + + +static int +dissect_gsm_map_Imsi(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + + tvbuff_t *parameter_tvb; + char *digit_str; + + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + ¶meter_tvb); + if (!parameter_tvb) + return offset; + + digit_str = unpack_digits(parameter_tvb, 0); + + proto_tree_add_string(tree, hf_gsm_map_imsi_digits, parameter_tvb, 0, -1, digit_str); + + + + + return offset; +} +static int dissect_imsi(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_Imsi(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_imsi); +} +static int dissect_imsi_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_Imsi(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_imsi); +} + + +static int +dissect_gsm_map_Lmsi(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_lmsi(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_Lmsi(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_lmsi); +} +static int dissect_lmsi_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_Lmsi(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_lmsi); +} + + +static int +dissect_gsm_map_Msc_Number(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_msc_Number(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_Msc_Number(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_msc_Number); +} +static int dissect_msc_Number_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_Msc_Number(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_msc_Number); +} + + +static int +dissect_gsm_map_Vlr_Number(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_vlr_Number(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_Vlr_Number(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_vlr_Number); +} +static int dissect_vlr_Number_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_Vlr_Number(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_vlr_Number); +} +static int dissect_vlr_number_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_Vlr_Number(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_vlr_number); +} + +static const ber_sequence_t UpdateLocationArg_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_imsi }, + { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_msc_Number_impl }, + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_vlr_Number }, + { BER_CLASS_CON, 10, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_lmsi_impl }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_vlr_Capability_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_UpdateLocationArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + UpdateLocationArg_sequence, hf_index, ett_gsm_map_UpdateLocationArg); + + return offset; +} + + +static int +dissect_gsm_map_Hlr_Number(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_hlr_Number(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_Hlr_Number(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_hlr_Number); +} + +static const ber_sequence_t UpdateLocationRes_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_hlr_Number }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_UpdateLocationRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + UpdateLocationRes_sequence, hf_index, ett_gsm_map_UpdateLocationRes); + + return offset; +} + + +static int +dissect_gsm_map_Teleservice(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_teleservice(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_Teleservice(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_teleservice); +} +static int dissect_teleservice_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_Teleservice(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_teleservice); +} +static int dissect_teleserviceList_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_Teleservice(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_teleserviceList_item); +} + + +static const value_string gsm_map_CancellationType_vals[] = { + { 0, "updateProcedure" }, + { 1, "subscriptionWithdraw" }, + { 0, NULL } +}; + + +static int +dissect_gsm_map_CancellationType(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, NULL); + + return offset; +} +static int dissect_cancellationType(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_CancellationType(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_cancellationType); +} + +static const ber_sequence_t T_imsi_WithLMSI_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_imsi }, + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_lmsi }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_T_imsi_WithLMSI(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + T_imsi_WithLMSI_sequence, hf_index, ett_gsm_map_T_imsi_WithLMSI); + + return offset; +} +static int dissect_imsi_WithLMSI(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_imsi_WithLMSI(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_imsi_WithLMSI); +} + + +static const value_string gsm_map_T_identity_vals[] = { + { 0, "imsi" }, + { 1, "imsi-WithLMSI" }, + { 0, NULL } +}; + +static const ber_choice_t T_identity_choice[] = { + { 0, BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_imsi }, + { 1, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_imsi_WithLMSI }, + { 0, 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_T_identity(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + T_identity_choice, hf_index, ett_gsm_map_T_identity); + + return offset; +} +static int dissect_identity(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_identity(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_identity); +} + +static const ber_sequence_t CancelLocationArg_sequence[] = { + { BER_CLASS_UNI, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_identity }, + { BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_cancellationType }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_CancelLocationArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + CancelLocationArg_sequence, hf_index, ett_gsm_map_CancelLocationArg); + + return offset; +} + +static const ber_sequence_t CancelLocationRes_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_CancelLocationRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + CancelLocationRes_sequence, hf_index, ett_gsm_map_CancelLocationRes); + + return offset; +} + + +static int +dissect_gsm_map_Sgsn_Number(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_sgsn_Number(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_Sgsn_Number(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_sgsn_Number); +} +static int dissect_sgsn_Number_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_Sgsn_Number(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_sgsn_Number); +} + +static const ber_sequence_t PurgeMS_Arg_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_imsi }, + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_vlr_Number_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_sgsn_Number_impl }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_PurgeMS_Arg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + PurgeMS_Arg_sequence, hf_index, ett_gsm_map_PurgeMS_Arg); + + return offset; +} + +static const ber_sequence_t PurgeMS_Res_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_freezeTMSI_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_freezeP_TMSI_impl }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_PurgeMS_Res(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + PurgeMS_Res_sequence, hf_index, ett_gsm_map_PurgeMS_Res); + + return offset; +} + + +static int +dissect_gsm_map_Tmsi(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + +static int +dissect_gsm_map_OCTET_STRING_SIZE_16(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_rand(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_OCTET_STRING_SIZE_16(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_rand); +} + + +static int +dissect_gsm_map_OCTET_STRING_SIZE_4(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_sres(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_OCTET_STRING_SIZE_4(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_sres); +} +static int dissect_cug_Interlock(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_OCTET_STRING_SIZE_4(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_cug_Interlock); +} + + +static int +dissect_gsm_map_OCTET_STRING_SIZE_8(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_kc(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_OCTET_STRING_SIZE_8(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_kc); +} +static int dissect_geographicalInformation_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_OCTET_STRING_SIZE_8(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_geographicalInformation); +} +static int dissect_groupKey_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_OCTET_STRING_SIZE_8(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_groupKey); +} + +static const ber_sequence_t T_authenticationSetList_item_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_rand }, + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_sres }, + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_kc }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_T_authenticationSetList_item(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + T_authenticationSetList_item_sequence, hf_index, ett_gsm_map_T_authenticationSetList_item); + + return offset; +} +static int dissect_authenticationSetList_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_authenticationSetList_item(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_authenticationSetList_item); +} + +static const ber_sequence_t T_authenticationSetList_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_authenticationSetList_item }, +}; + +static int +dissect_gsm_map_T_authenticationSetList(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + T_authenticationSetList_sequence_of, hf_index, ett_gsm_map_T_authenticationSetList); + + return offset; +} +static int dissect_authenticationSetList(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_authenticationSetList(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_authenticationSetList); +} + +static const ber_sequence_t SendIdentificationRes_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_imsi }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_authenticationSetList }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_SendIdentificationRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + SendIdentificationRes_sequence, hf_index, ett_gsm_map_SendIdentificationRes); + + return offset; +} + + +static int +dissect_gsm_map_OCTET_STRING_SIZE_5_7(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_targetCellId(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_OCTET_STRING_SIZE_5_7(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_targetCellId); +} + +static const ber_sequence_t PrepareHO_Arg_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_targetCellId }, + { BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_ho_NumberNotRequired }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_bss_APDU }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_PrepareHO_Arg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + PrepareHO_Arg_sequence, hf_index, ett_gsm_map_PrepareHO_Arg); + + return offset; +} + + +static int +dissect_gsm_map_T_handoverNumber(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_handoverNumber(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_handoverNumber(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_handoverNumber); +} + +static const ber_sequence_t PrepareHO_Res_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_handoverNumber }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_bss_APDU }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_PrepareHO_Res(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + PrepareHO_Res_sequence, hf_index, ett_gsm_map_PrepareHO_Res); + + return offset; +} + + +static int +dissect_gsm_map_T_targetMSC_Number(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_targetMSC_Number(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_targetMSC_Number(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_targetMSC_Number); +} + +static const ber_sequence_t PrepareSubsequentHO_Arg_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_targetCellId }, + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_targetMSC_Number }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_bss_APDU }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_PrepareSubsequentHO_Arg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + PrepareSubsequentHO_Arg_sequence, hf_index, ett_gsm_map_PrepareSubsequentHO_Arg); + + return offset; +} + + +static int +dissect_gsm_map_SendAuthenticationInfoArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_gsm_map_Imsi(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} + + + +static int +dissect_gsm_map_INTEGER_1_5(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, NULL); + + return offset; +} +static int dissect_numberOfRequestedVectors(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_INTEGER_1_5(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_numberOfRequestedVectors); +} +static int dissect_numberOfForwarding_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_INTEGER_1_5(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_numberOfForwarding); +} +static int dissect_ccbs_Index_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_INTEGER_1_5(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_ccbs_Index); +} + + +static int +dissect_gsm_map_OCTET_STRING_SIZE_14(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_auts(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_OCTET_STRING_SIZE_14(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_auts); +} + +static const ber_sequence_t T_re_synchronisationInfo_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_rand }, + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_auts }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_T_re_synchronisationInfo(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + T_re_synchronisationInfo_sequence, hf_index, ett_gsm_map_T_re_synchronisationInfo); + + return offset; +} +static int dissect_re_synchronisationInfo(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_re_synchronisationInfo(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_re_synchronisationInfo); +} + + +static const value_string gsm_map_T_requestingNodeType_vals[] = { + { 0, "vlr" }, + { 1, "sgsn" }, + { 0, NULL } +}; + + +static int +dissect_gsm_map_T_requestingNodeType(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, NULL); + + return offset; +} +static int dissect_requestingNodeType_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_requestingNodeType(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_requestingNodeType); +} + + +static int +dissect_gsm_map_OCTET_STRING_SIZE_3(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_requestingPLMN_Id_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_OCTET_STRING_SIZE_3(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_requestingPLMN_Id); +} +static int dissect_groupid(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_OCTET_STRING_SIZE_3(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_groupid); +} +static int dissect_groupId(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_OCTET_STRING_SIZE_3(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_groupId); +} +static int dissect_qos_Subscribed_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_OCTET_STRING_SIZE_3(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_qos_Subscribed); +} +static int dissect_lsaIdentity_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_OCTET_STRING_SIZE_3(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_lsaIdentity); +} +static int dissect_naea_PreferredCIC_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_OCTET_STRING_SIZE_3(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_naea_PreferredCIC); +} +static int dissect_lsaIdentityList_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_OCTET_STRING_SIZE_3(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_lsaIdentityList_item); +} + +static const ber_sequence_t SendAuthenticationInfoArgV3_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_imsi_impl }, + { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_numberOfRequestedVectors }, + { BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_segmentationProhibited }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_immediateResponsePreferred_impl }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_re_synchronisationInfo }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_requestingNodeType_impl }, + { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_requestingPLMN_Id_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_SendAuthenticationInfoArgV3(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + SendAuthenticationInfoArgV3_sequence, hf_index, ett_gsm_map_SendAuthenticationInfoArgV3); + + return offset; +} + +static const ber_sequence_t SendAuthenticationInfoRes_item_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_rand }, + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_sres }, + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_kc }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_SendAuthenticationInfoRes_item(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + SendAuthenticationInfoRes_item_sequence, hf_index, ett_gsm_map_SendAuthenticationInfoRes_item); + + return offset; +} +static int dissect_SendAuthenticationInfoRes_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_SendAuthenticationInfoRes_item(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_SendAuthenticationInfoRes_item); +} + +static const ber_sequence_t SendAuthenticationInfoRes_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_SendAuthenticationInfoRes_item }, +}; + +static int +dissect_gsm_map_SendAuthenticationInfoRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + SendAuthenticationInfoRes_sequence_of, hf_index, ett_gsm_map_SendAuthenticationInfoRes); + + return offset; +} + + +static int +dissect_gsm_map_Imei(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_imei_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_Imei(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_imei); +} + + +static int +dissect_gsm_map_CheckIMEIArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_gsm_map_Imei(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} + + +static const value_string gsm_map_EquipmentStatus_vals[] = { + { 0, "whiteListed" }, + { 1, "blackListed" }, + { 2, "greyListed" }, + { 0, NULL } +}; + + +static int +dissect_gsm_map_EquipmentStatus(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, NULL); + + return offset; +} + + +static const value_string gsm_map_OverrideCategory_vals[] = { + { 0, "overrideEnabled" }, + { 1, "overrideDisabled" }, + { 0, NULL } +}; + + +static int +dissect_gsm_map_OverrideCategory(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, NULL); + + return offset; +} +static int dissect_overrideCategory_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_OverrideCategory(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_overrideCategory); +} + + +static int +dissect_gsm_map_OCTET_STRING(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_bearerService_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_OCTET_STRING(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_bearerService); +} +static int dissect_dataCodingScheme_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_OCTET_STRING(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_dataCodingScheme); +} +static int dissect_nameString_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_OCTET_STRING(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_nameString); +} +static int dissect_lcsClientDialedByMS_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_OCTET_STRING(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_lcsClientDialedByMS); +} + + +static const value_string gsm_map_BasicService_vals[] = { + { 2, "bearerService" }, + { 3, "teleservice" }, + { 0, NULL } +}; + +static const ber_choice_t BasicService_choice[] = { + { 2, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_bearerService_impl }, + { 3, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_teleservice_impl }, + { 0, 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_BasicService(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + BasicService_choice, hf_index, ett_gsm_map_BasicService); + + return offset; +} +static int dissect_BasicServiceGroupList_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_BasicService(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_BasicServiceGroupList_item); +} +static int dissect_basicService(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_BasicService(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_basicService); +} +static int dissect_basicServiceGroup(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_BasicService(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_basicServiceGroup); +} + +static const ber_sequence_t BasicServiceGroupList_sequence_of[1] = { + { BER_CLASS_CON, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_BasicServiceGroupList_item }, +}; + +static int +dissect_gsm_map_BasicServiceGroupList(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + BasicServiceGroupList_sequence_of, hf_index, ett_gsm_map_BasicServiceGroupList); + + return offset; +} +static int dissect_basicServiceGroupList(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_BasicServiceGroupList(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_basicServiceGroupList); +} +static int dissect_basicServiceGroupList_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_BasicServiceGroupList(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_basicServiceGroupList); +} +static int dissect_basicServiceCriteria_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_BasicServiceGroupList(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_basicServiceCriteria); +} +static int dissect_basicServiceList_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_BasicServiceGroupList(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_basicServiceList); +} + + +static const value_string gsm_map_IntraCUG_Options_vals[] = { + { 0, "noCUG-Restrictions" }, + { 1, "cugIC-CallBarred" }, + { 2, "cugOG-CallBarred" }, + { 0, NULL } +}; + + +static int +dissect_gsm_map_IntraCUG_Options(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, NULL); + + return offset; +} +static int dissect_intraCUG_Options(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_IntraCUG_Options(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_intraCUG_Options); +} + +static const asn_namedbit Odb_GeneralData_bits[] = { + { 0, &hf_gsm_map_Odb_GeneralData_allOGCallsBarred, -1, -1, NULL, NULL }, + { 1, &hf_gsm_map_Odb_GeneralData_internationalOGCallsBarred, -1, -1, NULL, NULL }, + { 2, &hf_gsm_map_Odb_GeneralData_internationalOGCallsNotToHPLMNCountryBarred, -1, -1, NULL, NULL }, + { 3, &hf_gsm_map_Odb_GeneralData_premiumRateInformationOGCallsBarred, -1, -1, NULL, NULL }, + { 4, &hf_gsm_map_Odb_GeneralData_premiumRateEntertainementOGCallsBarred, -1, -1, NULL, NULL }, + { 5, &hf_gsm_map_Odb_GeneralData_ssAccessBarred, -1, -1, NULL, NULL }, + { 6, &hf_gsm_map_Odb_GeneralData_interzonalOGCallsBarred, -1, -1, NULL, NULL }, + { 7, &hf_gsm_map_Odb_GeneralData_interzonalOGCallsNotToHPLMNCountryBarred, -1, -1, NULL, NULL }, + { 8, &hf_gsm_map_Odb_GeneralData_interzonalOGCallsAndIntOGCallsNotToHPLMNCountryBarred, -1, -1, NULL, NULL }, + { 9, &hf_gsm_map_Odb_GeneralData_allECTBarred, -1, -1, NULL, NULL }, + { 10, &hf_gsm_map_Odb_GeneralData_chargeableECTBarred, -1, -1, NULL, NULL }, + { 11, &hf_gsm_map_Odb_GeneralData_internationalECTBarred, -1, -1, NULL, NULL }, + { 12, &hf_gsm_map_Odb_GeneralData_interzonalECTBarred, -1, -1, NULL, NULL }, + { 13, &hf_gsm_map_Odb_GeneralData_doublyChargeableECTBarred, -1, -1, NULL, NULL }, + { 14, &hf_gsm_map_Odb_GeneralData_multipleECTBarred, -1, -1, NULL, NULL }, + { 0, NULL, 0, 0, NULL, NULL } +}; + +static int +dissect_gsm_map_Odb_GeneralData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_bitstring(implicit_tag, pinfo, tree, tvb, offset, + Odb_GeneralData_bits, hf_index, ett_gsm_map_Odb_GeneralData, + NULL); + + return offset; +} +static int dissect_odb_GeneralData(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_Odb_GeneralData(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_odb_GeneralData); +} +static int dissect_odb_GeneralData_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_Odb_GeneralData(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_odb_GeneralData); +} + +static const asn_namedbit Odb_HPLMN_Data_bits[] = { + { 0, &hf_gsm_map_Odb_HPLMN_Data_plmnSpecificBarringType1, -1, -1, NULL, NULL }, + { 1, &hf_gsm_map_Odb_HPLMN_Data_plmnSpecificBarringType2, -1, -1, NULL, NULL }, + { 2, &hf_gsm_map_Odb_HPLMN_Data_plmnSpecificBarringType3, -1, -1, NULL, NULL }, + { 3, &hf_gsm_map_Odb_HPLMN_Data_plmnSpecificBarringType4, -1, -1, NULL, NULL }, + { 0, NULL, 0, 0, NULL, NULL } +}; + +static int +dissect_gsm_map_Odb_HPLMN_Data(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_bitstring(implicit_tag, pinfo, tree, tvb, offset, + Odb_HPLMN_Data_bits, hf_index, ett_gsm_map_Odb_HPLMN_Data, + NULL); + + return offset; +} +static int dissect_odb_HPLMN_Data(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_Odb_HPLMN_Data(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_odb_HPLMN_Data); +} + + +static const value_string gsm_map_SubscriberStatus_vals[] = { + { 0, "serviceGranted" }, + { 1, "operatorDeterminedBarring" }, + { 0, NULL } +}; + + +static int +dissect_gsm_map_SubscriberStatus(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, NULL); + + return offset; +} +static int dissect_subscriberStatus_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_SubscriberStatus(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_subscriberStatus); +} + + +static const value_string gsm_map_BcsmTriggerDetectionPoint_vals[] = { + { 2, "collectedInfo" }, + { 12, "termAttemptAuthorized" }, + { 0, NULL } +}; + + +static int +dissect_gsm_map_BcsmTriggerDetectionPoint(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, NULL); + + return offset; +} +static int dissect_bcsmTriggerDetectionPoint(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_BcsmTriggerDetectionPoint(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_bcsmTriggerDetectionPoint); +} +static int dissect_o_BcsmTriggerDetectionPoint(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_BcsmTriggerDetectionPoint(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_o_BcsmTriggerDetectionPoint); +} + + + +static int +dissect_gsm_map_ServiceKey(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, NULL); + + return offset; +} +static int dissect_serviceKey(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_ServiceKey(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_serviceKey); +} + + +static int +dissect_gsm_map_GsmSCF_Address(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_gsmSCFAddress_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_GsmSCF_Address(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_gsmSCFAddress); +} +static int dissect_gsmSCF_Address(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_GsmSCF_Address(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_gsmSCF_Address); +} +static int dissect_gsmSCF_Address_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_GsmSCF_Address(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_gsmSCF_Address); +} + + +static const value_string gsm_map_DefaultCallHandling_vals[] = { + { 0, "continueCall" }, + { 1, "releaseCall" }, + { 0, NULL } +}; + + +static int +dissect_gsm_map_DefaultCallHandling(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, NULL); + + return offset; +} +static int dissect_defaultCallHandling_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_DefaultCallHandling(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_defaultCallHandling); +} + +static const ber_sequence_t BcsmCamelTDPData_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_bcsmTriggerDetectionPoint }, + { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_serviceKey }, + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_gsmSCFAddress_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_defaultCallHandling_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_BcsmCamelTDPData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + BcsmCamelTDPData_sequence, hf_index, ett_gsm_map_BcsmCamelTDPData); + + return offset; +} +static int dissect_BcsmCamelTDPDataList_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_BcsmCamelTDPData(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_BcsmCamelTDPDataList_item); +} + +static const ber_sequence_t BcsmCamelTDPDataList_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_BcsmCamelTDPDataList_item }, +}; + +static int +dissect_gsm_map_BcsmCamelTDPDataList(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + BcsmCamelTDPDataList_sequence_of, hf_index, ett_gsm_map_BcsmCamelTDPDataList); + + return offset; +} +static int dissect_o_BcsmCamelTDPDataList(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_BcsmCamelTDPDataList(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_o_BcsmCamelTDPDataList); +} +static int dissect_t_BcsmCamelTDPDataList(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_BcsmCamelTDPDataList(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_t_BcsmCamelTDPDataList); +} + + + +static int +dissect_gsm_map_INTEGER_1_16(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, NULL); + + return offset; +} +static int dissect_camelCapabilityHandling_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_INTEGER_1_16(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_camelCapabilityHandling); +} + +static const ber_sequence_t O_CSI_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_o_BcsmCamelTDPDataList }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camelCapabilityHandling_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_O_CSI(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + O_CSI_sequence, hf_index, ett_gsm_map_O_CSI); + + return offset; +} +static int dissect_o_CSI_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_O_CSI(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_o_CSI); +} + + +static int +dissect_gsm_map_Msisdn(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + + tvbuff_t *parameter_tvb; + char *digit_str; + + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + ¶meter_tvb); + + if (!parameter_tvb) + return offset; + + proto_tree_add_item(tree, hf_gsm_map_extension, parameter_tvb, 0,1,FALSE); + proto_tree_add_item(tree, hf_gsm_map_nature_of_number, parameter_tvb, 0,1,FALSE); + proto_tree_add_item(tree, hf_gsm_map_number_plan, parameter_tvb, 0,1,FALSE); + + digit_str = unpack_digits(parameter_tvb, 1); + + proto_tree_add_string(tree, hf_gsm_map_misdn_digits, parameter_tvb, 1, -1, digit_str); + g_free(digit_str); + + + + return offset; +} +static int dissect_msisdn(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_Msisdn(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_msisdn); +} +static int dissect_msisdn_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_Msisdn(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_msisdn); +} + + +static int +dissect_gsm_map_OCTET_STRING_SIZE_1(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_category_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_OCTET_STRING_SIZE_1(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_category); +} +static int dissect_interCUG_Restrictions(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_OCTET_STRING_SIZE_1(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_interCUG_Restrictions); +} +static int dissect_ss_EventList_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_OCTET_STRING_SIZE_1(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_ss_EventList_item); +} +static int dissect_lsaAttributes_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_OCTET_STRING_SIZE_1(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_lsaAttributes); +} +static int dissect_ss_List_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_OCTET_STRING_SIZE_1(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_ss_List_item); +} +static int dissect_alertingPattern(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_OCTET_STRING_SIZE_1(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_alertingPattern); +} +static int dissect_alertingPattern_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_OCTET_STRING_SIZE_1(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_alertingPattern); +} +static int dissect_uuIndicator_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_OCTET_STRING_SIZE_1(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_uuIndicator); +} +static int dissect_call_Direction_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_OCTET_STRING_SIZE_1(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_call_Direction); +} +static int dissect_ussd_DataCodingScheme(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_OCTET_STRING_SIZE_1(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_ussd_DataCodingScheme); +} +static int dissect_ss_Event_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_OCTET_STRING_SIZE_1(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_ss_Event); +} +static int dissect_cipheringAlgorithm(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_OCTET_STRING_SIZE_1(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_cipheringAlgorithm); +} +static int dissect_lcs_Priority_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_OCTET_STRING_SIZE_1(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_lcs_Priority); +} +static int dissect_horizontal_accuracy_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_OCTET_STRING_SIZE_1(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_horizontal_accuracy); +} +static int dissect_vertical_accuracy_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_OCTET_STRING_SIZE_1(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_vertical_accuracy); +} + + +static int +dissect_gsm_map_OCTET_STRING_SIZE_1_5(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_bearerServiceList_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_OCTET_STRING_SIZE_1_5(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_bearerServiceList_item); +} + +static const ber_sequence_t T_bearerServiceList_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_bearerServiceList_item }, +}; + +static int +dissect_gsm_map_T_bearerServiceList(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + T_bearerServiceList_sequence_of, hf_index, ett_gsm_map_T_bearerServiceList); + + return offset; +} +static int dissect_bearerServiceList_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_bearerServiceList(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_bearerServiceList); +} + +static const ber_sequence_t SEQUENCE_SIZE_1_20_OF_Teleservice_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_teleserviceList_item }, +}; + +static int +dissect_gsm_map_SEQUENCE_SIZE_1_20_OF_Teleservice(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + SEQUENCE_SIZE_1_20_OF_Teleservice_sequence_of, hf_index, ett_gsm_map_SEQUENCE_SIZE_1_20_OF_Teleservice); + + return offset; +} +static int dissect_teleserviceList_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_SEQUENCE_SIZE_1_20_OF_Teleservice(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_teleserviceList); +} + + +static int +dissect_gsm_map_Ss_Code(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_ss_Code(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_Ss_Code(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_ss_Code); +} +static int dissect_ss_Code_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_Ss_Code(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_ss_Code); +} + + +static int +dissect_gsm_map_Ss_Status(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + + tvbuff_t *parameter_tvb; + guint8 octet; + + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + ¶meter_tvb); + if (!parameter_tvb) + return offset; + + octet = tvb_get_guint8(parameter_tvb,0); + + proto_tree_add_uint(tree, hf_gsm_map_Ss_Status_unused, parameter_tvb, 0,1,octet); + if ((octet & 0x01)== 1) + proto_tree_add_boolean(tree, hf_gsm_map_Ss_Status_q_bit, parameter_tvb, 0,1,octet); + + proto_tree_add_boolean(tree, hf_gsm_map_Ss_Status_p_bit, parameter_tvb, 0,1,octet); + proto_tree_add_boolean(tree, hf_gsm_map_Ss_Status_r_bit, parameter_tvb, 0,1,octet); + proto_tree_add_boolean(tree, hf_gsm_map_Ss_Status_a_bit, parameter_tvb, 0,1,octet); + + + + return offset; +} +static int dissect_ss_Status(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_Ss_Status(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_ss_Status); +} +static int dissect_ss_Status_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_Ss_Status(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_ss_Status); +} + + +static int +dissect_gsm_map_ForwardedToNumber(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_forwardedToNumber_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_ForwardedToNumber(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_forwardedToNumber); +} + + +static int +dissect_gsm_map_ForwardedToSubaddress(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_forwardedToSubaddress_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_ForwardedToSubaddress(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_forwardedToSubaddress); +} + + +static int +dissect_gsm_map_ForwardingOptions(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_forwardingOptions_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_ForwardingOptions(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_forwardingOptions); +} + + + +static int +dissect_gsm_map_INTEGER(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, NULL); + + return offset; +} +static int dissect_noReplyConditionTime_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_INTEGER(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_noReplyConditionTime); +} + +static const ber_sequence_t ForwardingFeatureList_sequence[] = { + { BER_CLASS_CON, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_basicService }, + { BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_ss_Status_impl }, + { BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_forwardedToNumber_impl }, + { BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_forwardedToSubaddress_impl }, + { BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_forwardingOptions_impl }, + { BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_noReplyConditionTime_impl }, + { BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_ForwardingFeatureList(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + ForwardingFeatureList_sequence, hf_index, ett_gsm_map_ForwardingFeatureList); + + return offset; +} +static int dissect_forwardingFeatureList_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_ForwardingFeatureList(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_forwardingFeatureList_item); +} + +static const ber_sequence_t SEQUENCE_SIZE_1_32_OF_ForwardingFeatureList_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_forwardingFeatureList_item }, +}; + +static int +dissect_gsm_map_SEQUENCE_SIZE_1_32_OF_ForwardingFeatureList(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + SEQUENCE_SIZE_1_32_OF_ForwardingFeatureList_sequence_of, hf_index, ett_gsm_map_SEQUENCE_SIZE_1_32_OF_ForwardingFeatureList); + + return offset; +} +static int dissect_forwardingFeatureList(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_SEQUENCE_SIZE_1_32_OF_ForwardingFeatureList(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_forwardingFeatureList); +} + +static const ber_sequence_t ForwardingInfo_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_ss_Code }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_forwardingFeatureList }, + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_ForwardingInfo(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + ForwardingInfo_sequence, hf_index, ett_gsm_map_ForwardingInfo); + + return offset; +} +static int dissect_forwardingInfo_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_ForwardingInfo(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_forwardingInfo); +} + +static const ber_sequence_t T_callBarringFeatureList_item_sequence[] = { + { BER_CLASS_CON, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_basicService }, + { BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_ss_Status_impl }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_T_callBarringFeatureList_item(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + T_callBarringFeatureList_item_sequence, hf_index, ett_gsm_map_T_callBarringFeatureList_item); + + return offset; +} +static int dissect_callBarringFeatureList_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_callBarringFeatureList_item(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_callBarringFeatureList_item); +} + +static const ber_sequence_t T_callBarringFeatureList_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_callBarringFeatureList_item }, +}; + +static int +dissect_gsm_map_T_callBarringFeatureList(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + T_callBarringFeatureList_sequence_of, hf_index, ett_gsm_map_T_callBarringFeatureList); + + return offset; +} +static int dissect_callBarringFeatureList(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_callBarringFeatureList(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_callBarringFeatureList); +} + +static const ber_sequence_t CallBarringInfo_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_ss_Code }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_callBarringFeatureList }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_CallBarringInfo(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + CallBarringInfo_sequence, hf_index, ett_gsm_map_CallBarringInfo); + + return offset; +} +static int dissect_callBarringInfo_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_CallBarringInfo(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_callBarringInfo); +} + + + +static int +dissect_gsm_map_INTEGER_0_32767(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, NULL); + + return offset; +} +static int dissect_cug_Index(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_INTEGER_0_32767(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_cug_Index); +} +static int dissect_preferentialCUG_Indicator(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_INTEGER_0_32767(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_preferentialCUG_Indicator); +} +static int dissect_ageOfLocationInformation(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_INTEGER_0_32767(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_ageOfLocationInformation); +} +static int dissect_ageOfLocationEstimate_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_INTEGER_0_32767(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_ageOfLocationEstimate); +} + +static const ber_sequence_t T_cug_SubscriptionList_item_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_cug_Index }, + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_cug_Interlock }, + { BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_intraCUG_Options }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_basicServiceGroupList }, + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_T_cug_SubscriptionList_item(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + T_cug_SubscriptionList_item_sequence, hf_index, ett_gsm_map_T_cug_SubscriptionList_item); + + return offset; +} +static int dissect_cug_SubscriptionList_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_cug_SubscriptionList_item(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_cug_SubscriptionList_item); +} + +static const ber_sequence_t T_cug_SubscriptionList_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_cug_SubscriptionList_item }, +}; + +static int +dissect_gsm_map_T_cug_SubscriptionList(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + T_cug_SubscriptionList_sequence_of, hf_index, ett_gsm_map_T_cug_SubscriptionList); + + return offset; +} +static int dissect_cug_SubscriptionList(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_cug_SubscriptionList(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_cug_SubscriptionList); +} + +static const ber_sequence_t T_cug_FeatureList_item_sequence[] = { + { BER_CLASS_CON, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_basicService }, + { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_preferentialCUG_Indicator }, + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_interCUG_Restrictions }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_T_cug_FeatureList_item(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + T_cug_FeatureList_item_sequence, hf_index, ett_gsm_map_T_cug_FeatureList_item); + + return offset; +} +static int dissect_cug_FeatureList_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_cug_FeatureList_item(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_cug_FeatureList_item); +} + +static const ber_sequence_t T_cug_FeatureList_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_cug_FeatureList_item }, +}; + +static int +dissect_gsm_map_T_cug_FeatureList(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + T_cug_FeatureList_sequence_of, hf_index, ett_gsm_map_T_cug_FeatureList); + + return offset; +} +static int dissect_cug_FeatureList(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_cug_FeatureList(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_cug_FeatureList); +} + +static const ber_sequence_t T_cug_Info_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_cug_SubscriptionList }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_cug_FeatureList }, + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_T_cug_Info(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + T_cug_Info_sequence, hf_index, ett_gsm_map_T_cug_Info); + + return offset; +} +static int dissect_cug_Info_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_cug_Info(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_cug_Info); +} + + +static const value_string gsm_map_CliRestrictionOption_vals[] = { + { 0, "permanent" }, + { 1, "temporaryDefaultRestricted" }, + { 2, "temporaryDefaultAllowed" }, + { 0, NULL } +}; + + +static int +dissect_gsm_map_CliRestrictionOption(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, NULL); + + return offset; +} +static int dissect_cliRestrictionOption_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_CliRestrictionOption(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_cliRestrictionOption); +} + + +static const value_string gsm_map_Ss_SubscriptionOption_vals[] = { + { 2, "cliRestrictionOption" }, + { 1, "overrideCategory" }, + { 0, NULL } +}; + +static const ber_choice_t Ss_SubscriptionOption_choice[] = { + { 2, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_cliRestrictionOption_impl }, + { 1, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_overrideCategory_impl }, + { 0, 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_Ss_SubscriptionOption(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + Ss_SubscriptionOption_choice, hf_index, ett_gsm_map_Ss_SubscriptionOption); + + return offset; +} +static int dissect_ss_SubscriptionOption(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_Ss_SubscriptionOption(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_ss_SubscriptionOption); +} + +static const ber_sequence_t T_ss_Data2_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_ss_Code }, + { BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_ss_Status_impl }, + { BER_CLASS_CON, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_ss_SubscriptionOption }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_basicServiceGroupList }, + { BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_T_ss_Data2(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + T_ss_Data2_sequence, hf_index, ett_gsm_map_T_ss_Data2); + + return offset; +} +static int dissect_ss_Data2_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_ss_Data2(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_ss_Data2); +} + + + +static int +dissect_gsm_map_INTEGER_0_15(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, NULL); + + return offset; +} +static int dissect_maximumentitledPriority(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_INTEGER_0_15(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_maximumentitledPriority); +} +static int dissect_defaultPriority(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_INTEGER_0_15(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_defaultPriority); +} +static int dissect_defaultPriority_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_INTEGER_0_15(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_defaultPriority); +} +static int dissect_maximumEntitledPriority_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_INTEGER_0_15(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_maximumEntitledPriority); +} +static int dissect_groupKeyNumber_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_INTEGER_0_15(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_groupKeyNumber); +} +static int dissect_priority_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_INTEGER_0_15(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_priority); +} + +static const ber_sequence_t T_emlpp_Info_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_maximumentitledPriority }, + { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_defaultPriority }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_T_emlpp_Info(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + T_emlpp_Info_sequence, hf_index, ett_gsm_map_T_emlpp_Info); + + return offset; +} +static int dissect_emlpp_Info_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_emlpp_Info(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_emlpp_Info); +} + + +static const value_string gsm_map_T_provisionedSS_item_vals[] = { + { 0, "forwardingInfo" }, + { 1, "callBarringInfo" }, + { 2, "cug-Info" }, + { 3, "ss-Data2" }, + { 4, "emlpp-Info" }, + { 0, NULL } +}; + +static const ber_choice_t T_provisionedSS_item_choice[] = { + { 0, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_forwardingInfo_impl }, + { 1, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_callBarringInfo_impl }, + { 2, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_cug_Info_impl }, + { 3, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_ss_Data2_impl }, + { 4, BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_emlpp_Info_impl }, + { 0, 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_T_provisionedSS_item(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + T_provisionedSS_item_choice, hf_index, ett_gsm_map_T_provisionedSS_item); + + return offset; +} +static int dissect_provisionedSS_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_provisionedSS_item(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_provisionedSS_item); +} + +static const ber_sequence_t T_provisionedSS_sequence_of[1] = { + { BER_CLASS_CON, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_provisionedSS_item }, +}; + +static int +dissect_gsm_map_T_provisionedSS(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + T_provisionedSS_sequence_of, hf_index, ett_gsm_map_T_provisionedSS); + + return offset; +} +static int dissect_provisionedSS_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_provisionedSS(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_provisionedSS); +} + +static const ber_sequence_t T_odb_Data_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_odb_GeneralData }, + { BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_odb_HPLMN_Data }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_T_odb_Data(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + T_odb_Data_sequence, hf_index, ett_gsm_map_T_odb_Data); + + return offset; +} +static int dissect_odb_Data_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_odb_Data(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_odb_Data); +} + + +static int +dissect_gsm_map_OCTET_STRING_SIZE_2(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_regionalSubscriptionData_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_OCTET_STRING_SIZE_2(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_regionalSubscriptionData_item); +} +static int dissect_pdp_Type_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_OCTET_STRING_SIZE_2(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_pdp_Type); +} +static int dissect_regionalSubscriptionIdentifier_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_OCTET_STRING_SIZE_2(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_regionalSubscriptionIdentifier); +} + +static const ber_sequence_t T_regionalSubscriptionData_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_regionalSubscriptionData_item }, +}; + +static int +dissect_gsm_map_T_regionalSubscriptionData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + T_regionalSubscriptionData_sequence_of, hf_index, ett_gsm_map_T_regionalSubscriptionData); + + return offset; +} +static int dissect_regionalSubscriptionData_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_regionalSubscriptionData(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_regionalSubscriptionData); +} + +static const ber_sequence_t T_vbsSubscriptionData_item_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_groupid }, + { BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_broadcastInitEntitlement }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_T_vbsSubscriptionData_item(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + T_vbsSubscriptionData_item_sequence, hf_index, ett_gsm_map_T_vbsSubscriptionData_item); + + return offset; +} +static int dissect_vbsSubscriptionData_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_vbsSubscriptionData_item(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_vbsSubscriptionData_item); +} + +static const ber_sequence_t T_vbsSubscriptionData_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_vbsSubscriptionData_item }, +}; + +static int +dissect_gsm_map_T_vbsSubscriptionData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + T_vbsSubscriptionData_sequence_of, hf_index, ett_gsm_map_T_vbsSubscriptionData); + + return offset; +} +static int dissect_vbsSubscriptionData_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_vbsSubscriptionData(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_vbsSubscriptionData); +} + +static const ber_sequence_t T_vgcsSubscriptionData_item_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_groupId }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_T_vgcsSubscriptionData_item(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + T_vgcsSubscriptionData_item_sequence, hf_index, ett_gsm_map_T_vgcsSubscriptionData_item); + + return offset; +} +static int dissect_vgcsSubscriptionData_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_vgcsSubscriptionData_item(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_vgcsSubscriptionData_item); +} + +static const ber_sequence_t T_vgcsSubscriptionData_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_vgcsSubscriptionData_item }, +}; + +static int +dissect_gsm_map_T_vgcsSubscriptionData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + T_vgcsSubscriptionData_sequence_of, hf_index, ett_gsm_map_T_vgcsSubscriptionData); + + return offset; +} +static int dissect_vgcsSubscriptionData_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_vgcsSubscriptionData(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_vgcsSubscriptionData); +} + +static const ber_sequence_t T_ss_EventList_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_ss_EventList_item }, +}; + +static int +dissect_gsm_map_T_ss_EventList(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + T_ss_EventList_sequence_of, hf_index, ett_gsm_map_T_ss_EventList); + + return offset; +} +static int dissect_ss_EventList(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_ss_EventList(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_ss_EventList); +} + +static const ber_sequence_t T_ss_CamelData_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_ss_EventList }, + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_gsmSCF_Address }, + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_T_ss_CamelData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + T_ss_CamelData_sequence, hf_index, ett_gsm_map_T_ss_CamelData); + + return offset; +} +static int dissect_ss_CamelData(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_ss_CamelData(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_ss_CamelData); +} + +static const ber_sequence_t T_ss_CSI_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_ss_CamelData }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_T_ss_CSI(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + T_ss_CSI_sequence, hf_index, ett_gsm_map_T_ss_CSI); + + return offset; +} +static int dissect_ss_CSI_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_ss_CSI(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_ss_CSI); +} + + +static const value_string gsm_map_MatchType_vals[] = { + { 0, "inhibiting" }, + { 1, "enabling" }, + { 0, NULL } +}; + + +static int +dissect_gsm_map_MatchType(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, NULL); + + return offset; +} +static int dissect_matchType_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_MatchType(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_matchType); +} + + +static int +dissect_gsm_map_T_destinationNumberList_item(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_destinationNumberList_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_destinationNumberList_item(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_destinationNumberList_item); +} + +static const ber_sequence_t T_destinationNumberList_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_destinationNumberList_item }, +}; + +static int +dissect_gsm_map_T_destinationNumberList(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + T_destinationNumberList_sequence_of, hf_index, ett_gsm_map_T_destinationNumberList); + + return offset; +} +static int dissect_destinationNumberList_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_destinationNumberList(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_destinationNumberList); +} + + + +static int +dissect_gsm_map_INTEGER_1_15(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, NULL); + + return offset; +} +static int dissect_destinationNumberLengthList_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_INTEGER_1_15(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_destinationNumberLengthList_item); +} + +static const ber_sequence_t T_destinationNumberLengthList_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_destinationNumberLengthList_item }, +}; + +static int +dissect_gsm_map_T_destinationNumberLengthList(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + T_destinationNumberLengthList_sequence_of, hf_index, ett_gsm_map_T_destinationNumberLengthList); + + return offset; +} +static int dissect_destinationNumberLengthList_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_destinationNumberLengthList(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_destinationNumberLengthList); +} + +static const ber_sequence_t DestinationNumberCriteria_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_matchType_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_destinationNumberList_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_destinationNumberLengthList_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_DestinationNumberCriteria(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + DestinationNumberCriteria_sequence, hf_index, ett_gsm_map_DestinationNumberCriteria); + + return offset; +} +static int dissect_destinationNumberCriteria_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_DestinationNumberCriteria(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_destinationNumberCriteria); +} + + +static const value_string gsm_map_CallTypeCriteria_vals[] = { + { 0, "forwarded" }, + { 1, "notForwarded" }, + { 0, NULL } +}; + + +static int +dissect_gsm_map_CallTypeCriteria(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, NULL); + + return offset; +} +static int dissect_callTypeCriteria_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_CallTypeCriteria(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_callTypeCriteria); +} + +static const ber_sequence_t O_BcsmCamelTDP_CriteriaList_item_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_o_BcsmTriggerDetectionPoint }, + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_destinationNumberCriteria_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_basicServiceCriteria_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callTypeCriteria_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_O_BcsmCamelTDP_CriteriaList_item(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + O_BcsmCamelTDP_CriteriaList_item_sequence, hf_index, ett_gsm_map_O_BcsmCamelTDP_CriteriaList_item); + + return offset; +} +static int dissect_O_BcsmCamelTDP_CriteriaList_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_O_BcsmCamelTDP_CriteriaList_item(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_O_BcsmCamelTDP_CriteriaList_item); +} + +static const ber_sequence_t O_BcsmCamelTDP_CriteriaList_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_O_BcsmCamelTDP_CriteriaList_item }, +}; + +static int +dissect_gsm_map_O_BcsmCamelTDP_CriteriaList(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + O_BcsmCamelTDP_CriteriaList_sequence_of, hf_index, ett_gsm_map_O_BcsmCamelTDP_CriteriaList); + + return offset; +} +static int dissect_o_BcsmCamelTDP_CriteriaList_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_O_BcsmCamelTDP_CriteriaList(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_o_BcsmCamelTDP_CriteriaList); +} + +static const ber_sequence_t T_vlrCamelSubscriptionInfo_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_o_CSI_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ss_CSI_impl }, + { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_o_BcsmCamelTDP_CriteriaList_impl }, + { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tif_CSI_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_T_vlrCamelSubscriptionInfo(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + T_vlrCamelSubscriptionInfo_sequence, hf_index, ett_gsm_map_T_vlrCamelSubscriptionInfo); + + return offset; +} +static int dissect_vlrCamelSubscriptionInfo_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_vlrCamelSubscriptionInfo(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_vlrCamelSubscriptionInfo); +} + +static const ber_sequence_t Naea_PreferredCI_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_naea_PreferredCIC_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_Naea_PreferredCI(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + Naea_PreferredCI_sequence, hf_index, ett_gsm_map_Naea_PreferredCI); + + return offset; +} +static int dissect_naea_PreferredCI_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_Naea_PreferredCI(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_naea_PreferredCI); +} + + + +static int +dissect_gsm_map_INTEGER_1_50(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, NULL); + + return offset; +} +static int dissect_pdp_ContextId(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_INTEGER_1_50(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_pdp_ContextId); +} +static int dissect_contextIdList_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_INTEGER_1_50(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_contextIdList_item); +} + + +static int +dissect_gsm_map_OCTET_STRING_SIZE_1_16(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_pdp_Address_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_OCTET_STRING_SIZE_1_16(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_pdp_Address); +} + + +static int +dissect_gsm_map_OCTET_STRING_SIZE_2_63(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_apn_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_OCTET_STRING_SIZE_2_63(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_apn); +} + +static const ber_sequence_t T_gprsDataList_item_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_pdp_ContextId }, + { BER_CLASS_CON, 16, BER_FLAGS_IMPLTAG, dissect_pdp_Type_impl }, + { BER_CLASS_CON, 17, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pdp_Address_impl }, + { BER_CLASS_CON, 18, BER_FLAGS_IMPLTAG, dissect_qos_Subscribed_impl }, + { BER_CLASS_CON, 19, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_vplmnAddressAllowed_impl }, + { BER_CLASS_CON, 20, BER_FLAGS_IMPLTAG, dissect_apn_impl }, + { BER_CLASS_CON, 21, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_T_gprsDataList_item(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + T_gprsDataList_item_sequence, hf_index, ett_gsm_map_T_gprsDataList_item); + + return offset; +} +static int dissect_gprsDataList_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_gprsDataList_item(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_gprsDataList_item); +} + +static const ber_sequence_t T_gprsDataList_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_gprsDataList_item }, +}; + +static int +dissect_gsm_map_T_gprsDataList(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + T_gprsDataList_sequence_of, hf_index, ett_gsm_map_T_gprsDataList); + + return offset; +} +static int dissect_gprsDataList_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_gprsDataList(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_gprsDataList); +} + +static const ber_sequence_t T_gprsSubscriptionData_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_completeDataListIncluded }, + { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_gprsDataList_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_T_gprsSubscriptionData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + T_gprsSubscriptionData_sequence, hf_index, ett_gsm_map_T_gprsSubscriptionData); + + return offset; +} +static int dissect_gprsSubscriptionData_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_gprsSubscriptionData(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_gprsSubscriptionData); +} + + +static const value_string gsm_map_T_networkAccessMode_vals[] = { + { 0, "bothMSCAndSGSN" }, + { 1, "onlyMSC" }, + { 2, "onlySGSN" }, + { 0, NULL } +}; + + +static int +dissect_gsm_map_T_networkAccessMode(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, NULL); + + return offset; +} +static int dissect_networkAccessMode_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_networkAccessMode(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_networkAccessMode); +} + + +static const value_string gsm_map_T_lsaOnlyAccessIndicator_vals[] = { + { 0, "accessOutsideLSAsAllowed" }, + { 1, "accessOutsideLSAsRestricted" }, + { 0, NULL } +}; + + +static int +dissect_gsm_map_T_lsaOnlyAccessIndicator(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, NULL); + + return offset; +} +static int dissect_lsaOnlyAccessIndicator_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_lsaOnlyAccessIndicator(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_lsaOnlyAccessIndicator); +} + +static const ber_sequence_t T_lsaDataList_item_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_lsaIdentity_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_lsaAttributes_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_lsaActiveModeIndicator_impl }, + { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_T_lsaDataList_item(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + T_lsaDataList_item_sequence, hf_index, ett_gsm_map_T_lsaDataList_item); + + return offset; +} +static int dissect_lsaDataList_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_lsaDataList_item(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_lsaDataList_item); +} + +static const ber_sequence_t T_lsaDataList_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_lsaDataList_item }, +}; + +static int +dissect_gsm_map_T_lsaDataList(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + T_lsaDataList_sequence_of, hf_index, ett_gsm_map_T_lsaDataList); + + return offset; +} +static int dissect_lsaDataList_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_lsaDataList(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_lsaDataList); +} + +static const ber_sequence_t T_lsaInformation_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_completeDataListIncluded }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_lsaOnlyAccessIndicator_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_lsaDataList_impl }, + { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_T_lsaInformation(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + T_lsaInformation_sequence, hf_index, ett_gsm_map_T_lsaInformation); + + return offset; +} +static int dissect_lsaInformation_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_lsaInformation(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_lsaInformation); +} + + +static int +dissect_gsm_map_T_gmlc_List_item(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_gmlc_List_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_gmlc_List_item(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_gmlc_List_item); +} + +static const ber_sequence_t T_gmlc_List_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_gmlc_List_item }, +}; + +static int +dissect_gsm_map_T_gmlc_List(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + T_gmlc_List_sequence_of, hf_index, ett_gsm_map_T_gmlc_List); + + return offset; +} +static int dissect_gmlc_List_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_gmlc_List(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_gmlc_List); +} + + +static const value_string gsm_map_NotificationToMSUser_vals[] = { + { 0, "notifyLocationAllowed" }, + { 1, "notifyAndVerify-LocationAllowedIfNoResponse" }, + { 2, "notifyAndVerify-LocationNotAllowedIfNoResponse" }, + { 0, NULL } +}; + + +static int +dissect_gsm_map_NotificationToMSUser(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, NULL); + + return offset; +} +static int dissect_notificationToMSUser_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_NotificationToMSUser(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_notificationToMSUser); +} + + +static int +dissect_gsm_map_OCTET_STRING_SIZE_1_20(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_externalAddress_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_OCTET_STRING_SIZE_1_20(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_externalAddress); +} +static int dissect_omc_Id_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_OCTET_STRING_SIZE_1_20(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_omc_Id); +} +static int dissect_ss_EventSpecification_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_OCTET_STRING_SIZE_1_20(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_ss_EventSpecification_item); +} +static int dissect_locationEstimate(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_OCTET_STRING_SIZE_1_20(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_locationEstimate); +} +static int dissect_locationEstimate_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_OCTET_STRING_SIZE_1_20(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_locationEstimate); +} + +static const ber_sequence_t T_clientIdentity_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_externalAddress_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_T_clientIdentity(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + T_clientIdentity_sequence, hf_index, ett_gsm_map_T_clientIdentity); + + return offset; +} +static int dissect_clientIdentity(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_clientIdentity(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_clientIdentity); +} + + +static const value_string gsm_map_T_gmlc_Restriction_vals[] = { + { 0, "gmlc-List" }, + { 1, "home-Country" }, + { 0, NULL } +}; + + +static int +dissect_gsm_map_T_gmlc_Restriction(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, NULL); + + return offset; +} +static int dissect_gmlc_Restriction_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_gmlc_Restriction(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_gmlc_Restriction); +} + +static const ber_sequence_t T_externalClientList_item_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_clientIdentity }, + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gmlc_Restriction_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_notificationToMSUser_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_T_externalClientList_item(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + T_externalClientList_item_sequence, hf_index, ett_gsm_map_T_externalClientList_item); + + return offset; +} +static int dissect_externalClientList_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_externalClientList_item(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_externalClientList_item); +} + +static const ber_sequence_t T_externalClientList_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_externalClientList_item }, +}; + +static int +dissect_gsm_map_T_externalClientList(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + T_externalClientList_sequence_of, hf_index, ett_gsm_map_T_externalClientList); + + return offset; +} +static int dissect_externalClientList_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_externalClientList(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_externalClientList); +} + + +static const value_string gsm_map_T_plmnClientList_item_vals[] = { + { 0, "broadcastService" }, + { 1, "o-andM-HPLMN" }, + { 2, "o-andM-VPLMN" }, + { 3, "anonymousLocation" }, + { 4, "targetMSsubscribedService" }, + { 0, NULL } +}; + + +static int +dissect_gsm_map_T_plmnClientList_item(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, NULL); + + return offset; +} +static int dissect_plmnClientList_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_plmnClientList_item(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_plmnClientList_item); +} + +static const ber_sequence_t T_plmnClientList_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_plmnClientList_item }, +}; + +static int +dissect_gsm_map_T_plmnClientList(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + T_plmnClientList_sequence_of, hf_index, ett_gsm_map_T_plmnClientList); + + return offset; +} +static int dissect_plmnClientList_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_plmnClientList(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_plmnClientList); +} + +static const ber_sequence_t T_lcs_PrivacyExceptionList_item_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_ss_Code }, + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_ss_Status }, + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_notificationToMSUser_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_externalClientList_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_plmnClientList_impl }, + { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_T_lcs_PrivacyExceptionList_item(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + T_lcs_PrivacyExceptionList_item_sequence, hf_index, ett_gsm_map_T_lcs_PrivacyExceptionList_item); + + return offset; +} +static int dissect_lcs_PrivacyExceptionList_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_lcs_PrivacyExceptionList_item(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_lcs_PrivacyExceptionList_item); +} + +static const ber_sequence_t T_lcs_PrivacyExceptionList_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_lcs_PrivacyExceptionList_item }, +}; + +static int +dissect_gsm_map_T_lcs_PrivacyExceptionList(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + T_lcs_PrivacyExceptionList_sequence_of, hf_index, ett_gsm_map_T_lcs_PrivacyExceptionList); + + return offset; +} +static int dissect_lcs_PrivacyExceptionList_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_lcs_PrivacyExceptionList(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_lcs_PrivacyExceptionList); +} + +static const ber_sequence_t T_molr_List_item_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_ss_Code }, + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_ss_Status }, + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_T_molr_List_item(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + T_molr_List_item_sequence, hf_index, ett_gsm_map_T_molr_List_item); + + return offset; +} +static int dissect_molr_List_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_molr_List_item(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_molr_List_item); +} + +static const ber_sequence_t T_molr_List_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_molr_List_item }, +}; + +static int +dissect_gsm_map_T_molr_List(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + T_molr_List_sequence_of, hf_index, ett_gsm_map_T_molr_List); + + return offset; +} +static int dissect_molr_List_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_molr_List(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_molr_List); +} + +static const ber_sequence_t T_lcsInformation_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gmlc_List_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_lcs_PrivacyExceptionList_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_molr_List_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_T_lcsInformation(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + T_lcsInformation_sequence, hf_index, ett_gsm_map_T_lcsInformation); + + return offset; +} +static int dissect_lcsInformation_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_lcsInformation(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_lcsInformation); +} + +static const ber_sequence_t InsertSubscriberDataArg_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_imsi_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_msisdn_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_category_impl }, + { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_subscriberStatus_impl }, + { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_bearerServiceList_impl }, + { BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_teleserviceList_impl }, + { BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_provisionedSS_impl }, + { BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_odb_Data_impl }, + { BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_roamingRestrictionDueToUnsupportedFeature_impl }, + { BER_CLASS_CON, 10, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_regionalSubscriptionData_impl }, + { BER_CLASS_CON, 11, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_vbsSubscriptionData_impl }, + { BER_CLASS_CON, 12, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_vgcsSubscriptionData_impl }, + { BER_CLASS_CON, 13, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_vlrCamelSubscriptionInfo_impl }, + { BER_CLASS_CON, 14, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { BER_CLASS_CON, 15, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_naea_PreferredCI_impl }, + { BER_CLASS_CON, 16, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gprsSubscriptionData_impl }, + { BER_CLASS_CON, 23, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_roamingRestrictedInSgsnDueToUnsupportedFeature_impl }, + { BER_CLASS_CON, 24, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_networkAccessMode_impl }, + { BER_CLASS_CON, 25, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_lsaInformation_impl }, + { BER_CLASS_CON, 21, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_lmu_Indicator_impl }, + { BER_CLASS_CON, 22, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_lcsInformation_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_InsertSubscriberDataArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + InsertSubscriberDataArg_sequence, hf_index, ett_gsm_map_InsertSubscriberDataArg); + + return offset; +} + +static const ber_sequence_t T_bearerServiceList1_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_bearerServiceList_item }, +}; + +static int +dissect_gsm_map_T_bearerServiceList1(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + T_bearerServiceList1_sequence_of, hf_index, ett_gsm_map_T_bearerServiceList1); + + return offset; +} +static int dissect_bearerServiceList1_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_bearerServiceList1(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_bearerServiceList1); +} + +static const ber_sequence_t T_ss_List_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_ss_List_item }, +}; + +static int +dissect_gsm_map_T_ss_List(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + T_ss_List_sequence_of, hf_index, ett_gsm_map_T_ss_List); + + return offset; +} +static int dissect_ss_List_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_ss_List(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_ss_List); +} + + +static const value_string gsm_map_RegionalSubscriptionResponse_vals[] = { + { 0, "networkNodeAreaRestricted" }, + { 1, "tooManyZoneCodes" }, + { 2, "zoneCodesConflict" }, + { 3, "regionalSubscNotSupported" }, + { 0, NULL } +}; + + +static int +dissect_gsm_map_RegionalSubscriptionResponse(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, NULL); + + return offset; +} +static int dissect_regionalSubscriptionResponse_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_RegionalSubscriptionResponse(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_regionalSubscriptionResponse); +} + +static const ber_sequence_t InsertSubscriberDataRes_sequence[] = { + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_teleserviceList_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_bearerServiceList1_impl }, + { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ss_List_impl }, + { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_odb_GeneralData_impl }, + { BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_regionalSubscriptionResponse_impl }, + { BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_supportedCamelPhases_impl }, + { BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_InsertSubscriberDataRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + InsertSubscriberDataRes_sequence, hf_index, ett_gsm_map_InsertSubscriberDataRes); + + return offset; +} + +static const ber_sequence_t T_ss_List1_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_ss_List_item }, +}; + +static int +dissect_gsm_map_T_ss_List1(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + T_ss_List1_sequence_of, hf_index, ett_gsm_map_T_ss_List1); + + return offset; +} +static int dissect_ss_List1_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_ss_List1(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_ss_List1); +} + +static const ber_sequence_t T_contextIdList_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_contextIdList_item }, +}; + +static int +dissect_gsm_map_T_contextIdList(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + T_contextIdList_sequence_of, hf_index, ett_gsm_map_T_contextIdList); + + return offset; +} +static int dissect_contextIdList(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_contextIdList(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_contextIdList); +} + + +static const value_string gsm_map_T_gprsSubscriptionDataWithdraw_vals[] = { + { 0, "allGPRSData" }, + { 1, "contextIdList" }, + { 0, NULL } +}; + +static const ber_choice_t T_gprsSubscriptionDataWithdraw_choice[] = { + { 0, BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_NOOWNTAG, dissect_allGPRSData }, + { 1, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_contextIdList }, + { 0, 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_T_gprsSubscriptionDataWithdraw(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + T_gprsSubscriptionDataWithdraw_choice, hf_index, ett_gsm_map_T_gprsSubscriptionDataWithdraw); + + return offset; +} +static int dissect_gprsSubscriptionDataWithdraw(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_gprsSubscriptionDataWithdraw(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_gprsSubscriptionDataWithdraw); +} + +static const ber_sequence_t T_lsaIdentityList_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_lsaIdentityList_item }, +}; + +static int +dissect_gsm_map_T_lsaIdentityList(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + T_lsaIdentityList_sequence_of, hf_index, ett_gsm_map_T_lsaIdentityList); + + return offset; +} +static int dissect_lsaIdentityList(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_lsaIdentityList(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_lsaIdentityList); +} + + +static const value_string gsm_map_T_lsaInformationWithdraw_vals[] = { + { 0, "allLSAData" }, + { 1, "lsaIdentityList" }, + { 0, NULL } +}; + +static const ber_choice_t T_lsaInformationWithdraw_choice[] = { + { 0, BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_NOOWNTAG, dissect_allLSAData }, + { 1, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_lsaIdentityList }, + { 0, 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_T_lsaInformationWithdraw(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + T_lsaInformationWithdraw_choice, hf_index, ett_gsm_map_T_lsaInformationWithdraw); + + return offset; +} +static int dissect_lsaInformationWithdraw(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_lsaInformationWithdraw(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_lsaInformationWithdraw); +} + +static const ber_sequence_t DeleteSubscriberDataArg_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_imsi_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_basicServiceList_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ss_List1_impl }, + { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_roamingRestrictionDueToUnsupportedFeature_impl }, + { BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_regionalSubscriptionIdentifier_impl }, + { BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_vbsGroupIndication_impl }, + { BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_vgcsGroupIndication_impl }, + { BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camelSubscriptionInfoWithdraw_impl }, + { BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { BER_CLASS_CON, 10, BER_FLAGS_OPTIONAL, dissect_gprsSubscriptionDataWithdraw }, + { BER_CLASS_CON, 11, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_roamingRestrictedInSgsnDueToUnsuppportedFeature_impl }, + { BER_CLASS_CON, 12, BER_FLAGS_OPTIONAL, dissect_lsaInformationWithdraw }, + { BER_CLASS_CON, 13, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gmlc_ListWithdraw_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_DeleteSubscriberDataArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + DeleteSubscriberDataArg_sequence, hf_index, ett_gsm_map_DeleteSubscriberDataArg); + + return offset; +} + +static const ber_sequence_t DeleteSubscriberDataRes_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_regionalSubscriptionResponse_impl }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_DeleteSubscriberDataRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + DeleteSubscriberDataRes_sequence, hf_index, ett_gsm_map_DeleteSubscriberDataRes); + + return offset; +} + + +static int +dissect_gsm_map_OCTET_STRING_SIZE_3_8(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_hlr_List_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_OCTET_STRING_SIZE_3_8(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_hlr_List_item); +} + +static const ber_sequence_t T_hlr_List_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_hlr_List_item }, +}; + +static int +dissect_gsm_map_T_hlr_List(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + T_hlr_List_sequence_of, hf_index, ett_gsm_map_T_hlr_List); + + return offset; +} +static int dissect_hlr_List(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_hlr_List(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_hlr_List); +} + +static const ber_sequence_t ResetArg_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_hlr_Number }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_hlr_List }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_ResetArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + ResetArg_sequence, hf_index, ett_gsm_map_ResetArg); + + return offset; +} + +static const ber_sequence_t RestoreDataArg_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_imsi }, + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_lmsi }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_vlr_Capability_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_RestoreDataArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + RestoreDataArg_sequence, hf_index, ett_gsm_map_RestoreDataArg); + + return offset; +} + +static const ber_sequence_t RestoreDataRes_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_hlr_Number }, + { BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_msNotReachable }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_RestoreDataRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + RestoreDataRes_sequence, hf_index, ett_gsm_map_RestoreDataRes); + + return offset; +} + + +static int +dissect_gsm_map_OCTET_STRING_SIZE_1_2(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_traceReference_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_OCTET_STRING_SIZE_1_2(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_traceReference); +} + + + +static int +dissect_gsm_map_INTEGER_0_255(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, NULL); + + return offset; +} +static int dissect_traceType_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_INTEGER_0_255(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_traceType); +} +static int dissect_absentSubscriberDiagnosticSM(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_INTEGER_0_255(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_absentSubscriberDiagnosticSM); +} +static int dissect_absentSubscriberDiagnosticSM_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_INTEGER_0_255(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_absentSubscriberDiagnosticSM); +} +static int dissect_additionalAbsentSubscriberDiagnosticSM_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_INTEGER_0_255(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_additionalAbsentSubscriberDiagnosticSM); +} +static int dissect_mobileNotReachableReason_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_INTEGER_0_255(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_mobileNotReachableReason); +} + +static const ber_sequence_t ActivateTraceModeArg_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_imsi_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_traceReference_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_traceType_impl }, + { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_omc_Id_impl }, + { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_ActivateTraceModeArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + ActivateTraceModeArg_sequence, hf_index, ett_gsm_map_ActivateTraceModeArg); + + return offset; +} + +static const ber_sequence_t ActivateTraceModeRes_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_ActivateTraceModeRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + ActivateTraceModeRes_sequence, hf_index, ett_gsm_map_ActivateTraceModeRes); + + return offset; +} + +static const ber_sequence_t DeactivateTraceModeArg_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_imsi_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_traceReference_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_DeactivateTraceModeArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + DeactivateTraceModeArg_sequence, hf_index, ett_gsm_map_DeactivateTraceModeArg); + + return offset; +} + +static const ber_sequence_t DeactivateTraceModeRes_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_DeactivateTraceModeRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + DeactivateTraceModeRes_sequence, hf_index, ett_gsm_map_DeactivateTraceModeRes); + + return offset; +} + +static const ber_sequence_t Cug_CheckInfo_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_cug_Interlock }, + { BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_cug_OutgoingAccess }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_Cug_CheckInfo(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + Cug_CheckInfo_sequence, hf_index, ett_gsm_map_Cug_CheckInfo); + + return offset; +} +static int dissect_cug_CheckInfo_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_Cug_CheckInfo(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_cug_CheckInfo); +} + + +static const value_string gsm_map_T_interrogationType_vals[] = { + { 0, "basicCall" }, + { 1, "forwarding" }, + { 0, NULL } +}; + + +static int +dissect_gsm_map_T_interrogationType(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, NULL); + + return offset; +} +static int dissect_interrogationType_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_interrogationType(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_interrogationType); +} + + + +static int +dissect_gsm_map_INTEGER_1_127(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, NULL); + + return offset; +} +static int dissect_or_Capability_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_INTEGER_1_127(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_or_Capability); +} +static int dissect_supportedCCBS_Phase_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_INTEGER_1_127(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_supportedCCBS_Phase); +} + + +static int +dissect_gsm_map_Gmsc_Address(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + + tvbuff_t *parameter_tvb; + char *digit_str; + + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + ¶meter_tvb); + + if (!parameter_tvb) + return offset; + + proto_tree_add_item(tree, hf_gsm_map_extension, parameter_tvb, 0,1,FALSE); + proto_tree_add_item(tree, hf_gsm_map_nature_of_number, parameter_tvb, 0,1,FALSE); + proto_tree_add_item(tree, hf_gsm_map_number_plan, parameter_tvb, 0,1,FALSE); + + digit_str = unpack_digits(parameter_tvb, 1); + + proto_tree_add_string(tree, hf_gsm_map_map_gmsc_address_digits, parameter_tvb, 1, -1, digit_str); + g_free(digit_str); + + + + return offset; +} +static int dissect_gmsc_Address_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_Gmsc_Address(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_gmsc_Address); +} + + +static int +dissect_gsm_map_OCTET_STRING_SIZE_1_8(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_callReferenceNumber_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_OCTET_STRING_SIZE_1_8(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_callReferenceNumber); +} +static int dissect_asciCallReference(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_OCTET_STRING_SIZE_1_8(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_asciCallReference); +} + + +static const value_string gsm_map_T_forwardingReason_vals[] = { + { 0, "notReachable" }, + { 1, "busy" }, + { 2, "noReply" }, + { 0, NULL } +}; + + +static int +dissect_gsm_map_T_forwardingReason(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, NULL); + + return offset; +} +static int dissect_forwardingReason_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_forwardingReason(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_forwardingReason); +} + +static const ber_sequence_t T_camelInfo_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_supportedCamelPhases }, + { BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_suppress_T_CSI }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_T_camelInfo(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + T_camelInfo_sequence, hf_index, ett_gsm_map_T_camelInfo); + + return offset; +} +static int dissect_camelInfo_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_camelInfo(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_camelInfo); +} + + +static const value_string gsm_map_T_ext_ProtocolId_vals[] = { + { 1, "ets-300356" }, + { 0, NULL } +}; + + +static int +dissect_gsm_map_T_ext_ProtocolId(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, NULL); + + return offset; +} +static int dissect_ext_ProtocolId(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_ext_ProtocolId(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_ext_ProtocolId); +} + + +static int +dissect_gsm_map_ExtSignalInfo(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_signalInfo1(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_ExtSignalInfo(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_signalInfo1); +} + +static const ber_sequence_t AdditionalSignalInfo_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_ext_ProtocolId }, + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_signalInfo1 }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_AdditionalSignalInfo(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + AdditionalSignalInfo_sequence, hf_index, ett_gsm_map_AdditionalSignalInfo); + + return offset; +} +static int dissect_additionalSignalInfo_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_AdditionalSignalInfo(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_additionalSignalInfo); +} + +static const ber_sequence_t SendRoutingInfoArg_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_msisdn_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cug_CheckInfo_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_numberOfForwarding_impl }, + { BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_interrogationType_impl }, + { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_or_Interrogation_impl }, + { BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_or_Capability_impl }, + { BER_CLASS_CON, 6, BER_FLAGS_IMPLTAG, dissect_gmsc_Address_impl }, + { BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callReferenceNumber_impl }, + { BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_forwardingReason_impl }, + { BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL|BER_FLAGS_NOTCHKTAG, dissect_basicServiceGroup }, + { BER_CLASS_CON, 10, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_networkSignalInfo_impl }, + { BER_CLASS_CON, 11, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camelInfo_impl }, + { BER_CLASS_CON, 12, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_suppressionOfAnnouncement_impl }, + { BER_CLASS_CON, 13, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { BER_CLASS_CON, 14, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_alertingPattern_impl }, + { BER_CLASS_CON, 15, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ccbs_Call_impl }, + { BER_CLASS_CON, 16, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_supportedCCBS_Phase_impl }, + { BER_CLASS_CON, 17, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_additionalSignalInfo_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_SendRoutingInfoArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + SendRoutingInfoArg_sequence, hf_index, ett_gsm_map_SendRoutingInfoArg); + + return offset; +} + + +static int +dissect_gsm_map_RoamingNumber(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + + tvbuff_t *parameter_tvb; + char *digit_str; + + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + ¶meter_tvb); + + if (!parameter_tvb) + return offset; + + proto_tree_add_item(tree, hf_gsm_map_extension, parameter_tvb, 0,1,FALSE); + proto_tree_add_item(tree, hf_gsm_map_nature_of_number, parameter_tvb, 0,1,FALSE); + proto_tree_add_item(tree, hf_gsm_map_number_plan, parameter_tvb, 0,1,FALSE); + + digit_str = unpack_digits(parameter_tvb, 1); + + proto_tree_add_string(tree, hf_gsm_map_map_RoamingNumber_digits, parameter_tvb, 1, -1, digit_str); + g_free(digit_str); + + + + return offset; +} +static int dissect_roamingNumber(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_RoamingNumber(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_roamingNumber); +} + +static const ber_sequence_t ForwardingData_sequence[] = { + { BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_forwardedToNumber_impl }, + { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_forwardedToSubaddress_impl }, + { BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_forwardingOptions_impl }, + { BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_ForwardingData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + ForwardingData_sequence, hf_index, ett_gsm_map_ForwardingData); + + return offset; +} +static int dissect_forwardingData(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_ForwardingData(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_forwardingData); +} +static int dissect_forwardingData_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_ForwardingData(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_forwardingData); +} + + +static const value_string gsm_map_T_routingInfo_vals[] = { + { 0, "roamingNumber" }, + { 1, "forwardingData" }, + { 0, NULL } +}; + +static const ber_choice_t T_routingInfo_choice[] = { + { 0, BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_roamingNumber }, + { 1, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_forwardingData }, + { 0, 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_T_routingInfo(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + T_routingInfo_choice, hf_index, ett_gsm_map_T_routingInfo); + + return offset; +} +static int dissect_routingInfo(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_routingInfo(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_routingInfo); +} + +static const ber_sequence_t T_t_CSI_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_t_BcsmCamelTDPDataList }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camelCapabilityHandling_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_T_t_CSI(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + T_t_CSI_sequence, hf_index, ett_gsm_map_T_t_CSI); + + return offset; +} +static int dissect_t_CSI_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_t_CSI(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_t_CSI); +} + +static const ber_sequence_t T_gmscCamelSubscriptionInfo_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_t_CSI_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_o_CSI_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_o_BcsmCamelTDP_CriteriaList_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_T_gmscCamelSubscriptionInfo(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + T_gmscCamelSubscriptionInfo_sequence, hf_index, ett_gsm_map_T_gmscCamelSubscriptionInfo); + + return offset; +} +static int dissect_gmscCamelSubscriptionInfo_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_gmscCamelSubscriptionInfo(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_gmscCamelSubscriptionInfo); +} + +static const ber_sequence_t T_camelRoutingInfo_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_forwardingData }, + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_gmscCamelSubscriptionInfo_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_T_camelRoutingInfo(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + T_camelRoutingInfo_sequence, hf_index, ett_gsm_map_T_camelRoutingInfo); + + return offset; +} +static int dissect_camelRoutingInfo_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_camelRoutingInfo(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_camelRoutingInfo); +} + + +static const value_string gsm_map_T_extendedRoutingInfo_vals[] = { + { 0, "routingInfo" }, + { 1, "camelRoutingInfo" }, + { 0, NULL } +}; + +static const ber_choice_t T_extendedRoutingInfo_choice[] = { + { 0, BER_CLASS_UNI, -1/*choice*/, BER_FLAGS_NOOWNTAG, dissect_routingInfo }, + { 1, BER_CLASS_CON, 8, BER_FLAGS_IMPLTAG, dissect_camelRoutingInfo_impl }, + { 0, 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_T_extendedRoutingInfo(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + T_extendedRoutingInfo_choice, hf_index, ett_gsm_map_T_extendedRoutingInfo); + + return offset; +} +static int dissect_extendedRoutingInfo(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_extendedRoutingInfo(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_extendedRoutingInfo); +} + + +static int +dissect_gsm_map_OCTET_STRING_SIZE_2_10(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_locationNumber_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_OCTET_STRING_SIZE_2_10(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_locationNumber); +} + + +static int +dissect_gsm_map_OCTET_STRING_SIZE_7(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_cellIdFixedLength_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_OCTET_STRING_SIZE_7(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_cellIdFixedLength); +} + + +static int +dissect_gsm_map_OCTET_STRING_SIZE_5(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_laiFixedLength_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_OCTET_STRING_SIZE_5(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_laiFixedLength); +} + + +static const value_string gsm_map_T_cellIdOrLAI_vals[] = { + { 0, "cellIdFixedLength" }, + { 1, "laiFixedLength" }, + { 0, NULL } +}; + +static const ber_choice_t T_cellIdOrLAI_choice[] = { + { 0, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_cellIdFixedLength_impl }, + { 1, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_laiFixedLength_impl }, + { 0, 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_T_cellIdOrLAI(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + T_cellIdOrLAI_choice, hf_index, ett_gsm_map_T_cellIdOrLAI); + + return offset; +} +static int dissect_cellIdOrLAI(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_cellIdOrLAI(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_cellIdOrLAI); +} + +static const ber_sequence_t LocationInformation_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_ageOfLocationInformation }, + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_geographicalInformation_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_vlr_number_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_locationNumber_impl }, + { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL, dissect_cellIdOrLAI }, + { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_LocationInformation(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + LocationInformation_sequence, hf_index, ett_gsm_map_LocationInformation); + + return offset; +} +static int dissect_locationInformation_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_LocationInformation(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_locationInformation); +} + + +static const value_string gsm_map_SubscriberState_vals[] = { + { 0, "assumedIdle" }, + { 1, "camelBusy" }, + { 2, "notProvidedFromVLR" }, + { 0, NULL } +}; + +static const ber_choice_t SubscriberState_choice[] = { + { 0, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_assumedIdle_impl }, + { 1, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_camelBusy_impl }, + { 2, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_notProvidedFromVLR_impl }, + { 0, 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_SubscriberState(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + SubscriberState_choice, hf_index, ett_gsm_map_SubscriberState); + + return offset; +} +static int dissect_subscriberState(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_SubscriberState(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_subscriberState); +} + +static const ber_sequence_t SubscriberInfo_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_locationInformation_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_NOTCHKTAG, dissect_subscriberState }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_SubscriberInfo(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + SubscriberInfo_sequence, hf_index, ett_gsm_map_SubscriberInfo); + + return offset; +} +static int dissect_subscriberInfo(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_SubscriberInfo(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_subscriberInfo); +} +static int dissect_subscriberInfo_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_SubscriberInfo(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_subscriberInfo); +} + +static const ber_sequence_t T_ss_List2_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_ss_List_item }, +}; + +static int +dissect_gsm_map_T_ss_List2(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + T_ss_List2_sequence_of, hf_index, ett_gsm_map_T_ss_List2); + + return offset; +} +static int dissect_ss_List2_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_ss_List2(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_ss_List2); +} + + +static int +dissect_gsm_map_T_vmsc_Address(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_vmsc_Address_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_vmsc_Address(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_vmsc_Address); +} + +static const ber_sequence_t T_ccbs_Indicators_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ccbs_Possible_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_keepCCBS_CallIndicator_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_T_ccbs_Indicators(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + T_ccbs_Indicators_sequence, hf_index, ett_gsm_map_T_ccbs_Indicators); + + return offset; +} +static int dissect_ccbs_Indicators_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_ccbs_Indicators(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_ccbs_Indicators); +} + + +static const value_string gsm_map_T_numberPortabilityStatus_vals[] = { + { 0, "notKnownToBePorted" }, + { 1, "ownNumberPortedOut" }, + { 2, "foreignNumberPortedToForeignNetwork" }, + { 0, NULL } +}; + + +static int +dissect_gsm_map_T_numberPortabilityStatus(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, NULL); + + return offset; +} +static int dissect_numberPortabilityStatus_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_numberPortabilityStatus(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_numberPortabilityStatus); +} + +static const ber_sequence_t SendRoutingInfoRes_sequence[] = { + { BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_imsi_impl }, + { -1/*choice*/ , -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_extendedRoutingInfo }, + { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cug_CheckInfo_impl }, + { BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cugSubscriptionFlag_impl }, + { BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_subscriberInfo_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ss_List2_impl }, + { BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_NOTCHKTAG, dissect_basicService }, + { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_forwardingInterrogationRequired_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_vmsc_Address_impl }, + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { BER_CLASS_CON, 10, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_naea_PreferredCI_impl }, + { BER_CLASS_CON, 11, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ccbs_Indicators_impl }, + { BER_CLASS_CON, 12, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_msisdn_impl }, + { BER_CLASS_CON, 13, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_numberPortabilityStatus_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_SendRoutingInfoRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + SendRoutingInfoRes_sequence, hf_index, ett_gsm_map_SendRoutingInfoRes); + + return offset; +} + + +static const value_string gsm_map_NetDetNotReachable_vals[] = { + { 0, "msPurged" }, + { 1, "imsiDetached" }, + { 2, "restrictedArea" }, + { 3, "notRegistered" }, + { 0, NULL } +}; + + +static int +dissect_gsm_map_NetDetNotReachable(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, NULL); + + return offset; +} + +static const ber_sequence_t ProvideRoamingNumberArg_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_imsi_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_msc_Number_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_msisdn_impl }, + { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_lmsi_impl }, + { BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gsm_BearerCapability_impl }, + { BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_networkSignalInfo_impl }, + { BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_suppressionOfAnnouncement_impl }, + { BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gmsc_Address_impl }, + { BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callReferenceNumber_impl }, + { BER_CLASS_CON, 10, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_or_Interrogation_impl }, + { BER_CLASS_CON, 11, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { BER_CLASS_CON, 12, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_alertingPattern_impl }, + { BER_CLASS_CON, 13, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ccbs_Call_impl }, + { BER_CLASS_CON, 15, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_supportedCamelPhasesInGMSC_impl }, + { BER_CLASS_CON, 14, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_additionalSignalInfo_impl }, + { BER_CLASS_CON, 16, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_orNotSupportedInGMSC_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_ProvideRoamingNumberArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + ProvideRoamingNumberArg_sequence, hf_index, ett_gsm_map_ProvideRoamingNumberArg); + + return offset; +} + +static const ber_sequence_t ProvideRoamingNumberRes_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_roamingNumber }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_ProvideRoamingNumberRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + ProvideRoamingNumberRes_sequence, hf_index, ett_gsm_map_ProvideRoamingNumberRes); + + return offset; +} + + +static int +dissect_gsm_map_OCTET_STRING_SIZE_1_131(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_uui_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_OCTET_STRING_SIZE_1_131(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_uui); +} + +static const ber_sequence_t T_uu_Data_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_uuIndicator_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_uui_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_uusCFInteraction_impl }, + { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_T_uu_Data(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + T_uu_Data_sequence, hf_index, ett_gsm_map_T_uu_Data); + + return offset; +} +static int dissect_uu_Data_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_uu_Data(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_uu_Data); +} + +static const ber_sequence_t ResumeCallHandlingArg_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callReferenceNumber_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_NOTCHKTAG, dissect_basicServiceGroup }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_forwardingData_impl }, + { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_imsi_impl }, + { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cug_CheckInfo_impl }, + { BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_o_CSI_impl }, + { BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ccbs_Possible_impl }, + { BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_msisdn_impl }, + { BER_CLASS_CON, 10, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_uu_Data_impl }, + { BER_CLASS_CON, 11, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_allInformationSent_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_ResumeCallHandlingArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + ResumeCallHandlingArg_sequence, hf_index, ett_gsm_map_ResumeCallHandlingArg); + + return offset; +} + +static const ber_sequence_t ResumeCallHandlingRes_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_ResumeCallHandlingRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + ResumeCallHandlingRes_sequence, hf_index, ett_gsm_map_ResumeCallHandlingRes); + + return offset; +} + + +static int +dissect_gsm_map_T_b_Subscriber_Address(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_b_Subscriber_Address_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_b_Subscriber_Address(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_b_Subscriber_Address); +} + +static const ber_sequence_t ProvideSIWFSNumberArg_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_gsm_BearerCapability_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_isdn_BearerCapability_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_call_Direction_impl }, + { BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_b_Subscriber_Address_impl }, + { BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_chosenChannel_impl }, + { BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_lowerLayerCompatibility_impl }, + { BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_highLayerCompatibility_impl }, + { BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_ProvideSIWFSNumberArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + ProvideSIWFSNumberArg_sequence, hf_index, ett_gsm_map_ProvideSIWFSNumberArg); + + return offset; +} + + +static int +dissect_gsm_map_T_sIWFSNumber(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_sIWFSNumber_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_sIWFSNumber(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_sIWFSNumber); +} + +static const ber_sequence_t ProvideSIWFSNumberRes_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_sIWFSNumber_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_ProvideSIWFSNumberRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + ProvideSIWFSNumberRes_sequence, hf_index, ett_gsm_map_ProvideSIWFSNumberRes); + + return offset; +} + +static const ber_sequence_t SIWFSSignallingModifyArg_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_channelType_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_chosenChannel_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_SIWFSSignallingModifyArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + SIWFSSignallingModifyArg_sequence, hf_index, ett_gsm_map_SIWFSSignallingModifyArg); + + return offset; +} + +static const ber_sequence_t SIWFSSignallingModifyRes_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_chosenChannel_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_SIWFSSignallingModifyRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + SIWFSSignallingModifyRes_sequence, hf_index, ett_gsm_map_SIWFSSignallingModifyRes); + + return offset; +} + + +static const value_string gsm_map_Ccbs_Monitoring_vals[] = { + { 0, "stopMonitoring" }, + { 1, "startMonitoring" }, + { 0, NULL } +}; + + +static int +dissect_gsm_map_Ccbs_Monitoring(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, NULL); + + return offset; +} +static int dissect_ccbs_Monitoring_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_Ccbs_Monitoring(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_ccbs_Monitoring); +} + +static const ber_sequence_t SetReportingStateArg_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_imsi_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_lmsi_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ccbs_Monitoring_impl }, + { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_SetReportingStateArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + SetReportingStateArg_sequence, hf_index, ett_gsm_map_SetReportingStateArg); + + return offset; +} + + +static const value_string gsm_map_Ccbs_SubscriberStatus_vals[] = { + { 0, "ccbsNotIdle" }, + { 1, "ccbsIdle" }, + { 2, "ccbsNotReachable" }, + { 0, NULL } +}; + + +static int +dissect_gsm_map_Ccbs_SubscriberStatus(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, NULL); + + return offset; +} +static int dissect_ccbs_SubscriberStatus_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_Ccbs_SubscriberStatus(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_ccbs_SubscriberStatus); +} + +static const ber_sequence_t SetReportingStateRes_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ccbs_SubscriberStatus_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_SetReportingStateRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + SetReportingStateRes_sequence, hf_index, ett_gsm_map_SetReportingStateRes); + + return offset; +} + + +static const value_string gsm_map_MonitoringMode_vals[] = { + { 0, "a-side" }, + { 1, "b-side" }, + { 0, NULL } +}; + + +static int +dissect_gsm_map_MonitoringMode(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, NULL); + + return offset; +} +static int dissect_monitoringMode_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_MonitoringMode(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_monitoringMode); +} + + +static const value_string gsm_map_CallOutcome_vals[] = { + { 0, "success" }, + { 1, "failure" }, + { 2, "busy" }, + { 0, NULL } +}; + + +static int +dissect_gsm_map_CallOutcome(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, NULL); + + return offset; +} +static int dissect_callOutcome_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_CallOutcome(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_callOutcome); +} + +static const ber_sequence_t T_eventReportData_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ccbs_SubscriberStatus_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_T_eventReportData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + T_eventReportData_sequence, hf_index, ett_gsm_map_T_eventReportData); + + return offset; +} +static int dissect_eventReportData_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_eventReportData(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_eventReportData); +} + +static const ber_sequence_t T_callReportdata_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_monitoringMode_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callOutcome_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_T_callReportdata(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + T_callReportdata_sequence, hf_index, ett_gsm_map_T_callReportdata); + + return offset; +} +static int dissect_callReportdata_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_callReportdata(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_callReportdata); +} -static dissector_table_t sms_dissector_table; /* SMS TPDU */ +static const ber_sequence_t StatusReportArg_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_imsi_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_eventReportData_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callReportdata_impl }, + { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { 0, 0, 0, NULL } +}; -static int gsm_map_app_context = 1; /* XXX should be set from Dialogue */ - -static packet_info *g_pinfo; -static proto_tree *g_tree; -static guint g_opr_code; -static guint g_comp_type_tag; - -static int hf_map_length = -1; -static int hf_map_opr_code = -1; -static int hf_map_int = -1; -static int hf_map_imsi = -1; -static int hf_map_addrstring = -1; -static int hf_map_rand = -1; -static int hf_map_sres = -1; -static int hf_map_kc = -1; -static int hf_map_xres = -1; -static int hf_map_ck = -1; -static int hf_map_ik = -1; -static int hf_map_autn = -1; - -/* never initialize in field array */ -static int hf_null = -1; -#define HF_NULL &hf_null +static int +dissect_gsm_map_StatusReportArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + StatusReportArg_sequence, hf_index, ett_gsm_map_StatusReportArg); -/* Initialize the subtree pointers */ -static gint ett_map = -1; -static gint ett_component = -1; -static gint ett_components = -1; -static gint ett_sequence = -1; -static gint ett_param = -1; -static gint ett_params = -1; -static gint ett_problem = -1; -static gint ett_opr_code = -1; -static gint ett_err_code = -1; + return offset; +} -/* Preferenc settings default */ -static guint tcap_itu_ssn1 = 6; -static guint tcap_itu_ssn2 = 7; -static guint tcap_itu_ssn3 = 8; -static guint tcap_itu_ssn4 = 9; +static const ber_sequence_t StatusReportRes_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { 0, 0, 0, NULL } +}; -static guint global_tcap_itu_ssn1 = 6; -static guint global_tcap_itu_ssn2 = 7; -static guint global_tcap_itu_ssn3 = 8; -static guint global_tcap_itu_ssn4 = 9; +static int +dissect_gsm_map_StatusReportRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + StatusReportRes_sequence, hf_index, ett_gsm_map_StatusReportRes); -typedef struct dgt_set_t -{ - unsigned char out[15]; + return offset; } -dgt_set_t; -#ifdef MLUM -static dgt_set_t Dgt_tbcd = { - { - /* 0 1 2 3 4 5 6 7 8 9 a b c d e */ - '0','1','2','3','4','5','6','7','8','9','?','B','C','*','#' - } -}; -#endif -static dgt_set_t Dgt_msid = { - { - /* 0 1 2 3 4 5 6 7 8 9 a b c d e */ - '0','1','2','3','4','5','6','7','8','9','?','?','?','?','?' - } +static const value_string gsm_map_Ruf_Outcome_vals[] = { + { 0, "accepted" }, + { 1, "rejected" }, + { 2, "noResponseFromFreeMS" }, + { 3, "noResponseFromBusyMS" }, + { 4, "udubFromFreeMS" }, + { 5, "udubFromBusyMS" }, + { 0, NULL } }; -/* FORWARD DECLARATIONS */ +static int +dissect_gsm_map_Ruf_Outcome(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, NULL); -static int dissect_map_eoc(ASN1_SCK *asn1, proto_tree *tree); + return offset; +} +static int dissect_ruf_Outcome_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_Ruf_Outcome(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_ruf_Outcome); +} -/* FUNCTIONS */ -/* - * Unpack BCD input pattern into output ASCII pattern - * - * Input Pattern is supplied using the same format as the digits - * - * Returns: length of unpacked pattern - */ static int -my_dgt_tbcd_unpack( - char *out, /* ASCII pattern out */ - guchar *in, /* packed pattern in */ - int num_octs, /* Number of octets to unpack */ - dgt_set_t *dgt /* Digit definitions */ - ) -{ - int cnt = 0; - unsigned char i; +dissect_gsm_map_B_subscriberNumber(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - while (num_octs) - { - /* - * unpack first value in byte - */ - i = *in++; - *out++ = dgt->out[i & 0x0f]; - cnt++; - - /* - * unpack second value in byte - */ - i >>= 4; - - if (i == 0x0f) /* odd number bytes - hit filler */ - break; - - *out++ = dgt->out[i]; - cnt++; - num_octs--; - } + return offset; +} +static int dissect_b_subscriberNumber_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_B_subscriberNumber(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_b_subscriberNumber); +} - *out = '\0'; - return(cnt); -} +static int +dissect_gsm_map_OCTET_STRING_SIZE_1_21(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); -static gchar * -my_match_strval(guint32 val, const value_string *vs, gint *idx) -{ - gint i = 0; + return offset; +} +static int dissect_b_subscriberSubaddress_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_OCTET_STRING_SIZE_1_21(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_b_subscriberSubaddress); +} - while (vs[i].strptr) { - if (vs[i].value == val) - { - *idx = i; - return(vs[i].strptr); - } +static const ber_sequence_t Ccbs_Feature_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ccbs_Index_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_b_subscriberNumber_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_b_subscriberSubaddress_impl }, + { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_NOTCHKTAG, dissect_basicServiceGroup }, + { 0, 0, 0, NULL } +}; - i++; - } +static int +dissect_gsm_map_Ccbs_Feature(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + Ccbs_Feature_sequence, hf_index, ett_gsm_map_Ccbs_Feature); - *idx = -1; - return(NULL); + return offset; +} +static int dissect_ccbs_Feature_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_Ccbs_Feature(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_ccbs_Feature); } -#define GSM_MAP_START_SUBTREE(_Gtree, _Gsaved_offset, _Gtag, _Gstr1, _Gett, _Gdef_len_p, _Glen_p, _Gsubtree_p) \ - { \ - guint _len_offset; \ - proto_item *_item; \ - \ - _len_offset = asn1->offset; \ - asn1_length_decode(asn1, _Gdef_len_p, _Glen_p); \ - \ - _item = \ - proto_tree_add_text(_Gtree, asn1->tvb, _Gsaved_offset, -1, _Gstr1); \ - \ - _Gsubtree_p = proto_item_add_subtree(_item, _Gett); \ - \ - proto_tree_add_text(_Gsubtree_p, asn1->tvb, \ - _Gsaved_offset, _len_offset - _Gsaved_offset, "Tag: 0x%02x", _Gtag); \ - \ - if (*_Gdef_len_p) \ - { \ - proto_tree_add_uint(_Gsubtree_p, hf_map_length, asn1->tvb, \ - _len_offset, asn1->offset - _len_offset, *_Glen_p); \ - } \ - else \ - { \ - proto_tree_add_text(_Gsubtree_p, asn1->tvb, \ - _len_offset, asn1->offset - _len_offset, "Length: Indefinite"); \ - \ - *_Glen_p = tcap_find_eoc(asn1); \ - } \ - \ - proto_item_set_len(_item, (asn1->offset - _Gsaved_offset) + *_Glen_p + \ - (*_Gdef_len_p ? 0 : TCAP_EOC_LEN)); \ - } static int -dissect_map_params(ASN1_SCK *asn1, proto_tree *tree, guint exp_len) -{ - guint orig_offset, saved_offset, len_offset; - guint tag, len; - gboolean def_len = FALSE; - proto_item *item; - proto_tree *subtree; - - orig_offset = asn1->offset; +dissect_gsm_map_TranslatedB_Number(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - while ((tvb_length_remaining(asn1->tvb, asn1->offset) > 0) && - (!tcap_check_tag(asn1, 0))) - { - if ((exp_len != 0) && - ((asn1->offset - orig_offset) >= exp_len)) - { - break; - } + return offset; +} +static int dissect_translatedB_Number_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_TranslatedB_Number(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_translatedB_Number); +} - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); +static const ber_sequence_t RemoteUserFreeArg_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_imsi_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_callInfo_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_ccbs_Feature_impl }, + { BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_translatedB_Number_impl }, + { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_replaceB_Number_impl }, + { BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_alertingPattern_impl }, + { BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { 0, 0, 0, NULL } +}; - if (TCAP_CONSTRUCTOR(tag)) - { - GSM_MAP_START_SUBTREE(tree, saved_offset, tag, "Sequence", - ett_sequence, - &def_len, &len, subtree); +static int +dissect_gsm_map_RemoteUserFreeArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + RemoteUserFreeArg_sequence, hf_index, ett_gsm_map_RemoteUserFreeArg); - dissect_map_params(asn1, subtree, len); + return offset; +} - if (!def_len) - { - dissect_map_eoc(asn1, subtree); - } - continue; - } +static const ber_sequence_t RemoteUserFreeRes_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_ruf_Outcome_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { 0, 0, 0, NULL } +}; - len_offset = asn1->offset; - asn1_length_decode(asn1, &def_len, &len); +static int +dissect_gsm_map_RemoteUserFreeRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + RemoteUserFreeRes_sequence, hf_index, ett_gsm_map_RemoteUserFreeRes); - if (!def_len) - { - proto_tree_add_text(tree, asn1->tvb, - saved_offset, len_offset - saved_offset, - "Tag: 0x%02x", tag); + return offset; +} - proto_tree_add_text(tree, asn1->tvb, - len_offset, asn1->offset - len_offset, "Length: Indefinite"); +static const ber_sequence_t Ss_Data_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_ss_Code }, + { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ss_Status_impl }, + { BER_CLASS_CON, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_ss_SubscriptionOption }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_basicServiceGroupList }, + { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_defaultPriority }, + { 0, 0, 0, NULL } +}; - len = tcap_find_eoc(asn1); +static int +dissect_gsm_map_Ss_Data(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + Ss_Data_sequence, hf_index, ett_gsm_map_Ss_Data); - dissect_map_params(asn1, tree, len); + return offset; +} +static int dissect_ss_Data_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_Ss_Data(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_ss_Data); +} - dissect_map_eoc(asn1, tree); - continue; - } +static const ber_sequence_t RegisterSS_Arg_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_ss_Code }, + { BER_CLASS_CON, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_basicService }, + { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_forwardedToNumber_impl }, + { BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_forwardedToSubaddress_impl }, + { BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_noReplyConditionTime_impl }, + { BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_defaultPriority_impl }, + { 0, 0, 0, NULL } +}; - item = - proto_tree_add_text(tree, asn1->tvb, - saved_offset, (asn1->offset - saved_offset) + len, "Parameter"); +static int +dissect_gsm_map_RegisterSS_Arg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + RegisterSS_Arg_sequence, hf_index, ett_gsm_map_RegisterSS_Arg); - subtree = proto_item_add_subtree(item, ett_param); + return offset; +} - proto_tree_add_text(subtree, asn1->tvb, - saved_offset, len_offset - saved_offset, - "Tag: 0x%02x", tag); - proto_tree_add_uint(subtree, hf_map_length, asn1->tvb, - len_offset, asn1->offset - len_offset, len); +static const value_string gsm_map_Ss_Info_vals[] = { + { 0, "forwardingInfo" }, + { 1, "callBarringInfo" }, + { 3, "ss-Data" }, + { 0, NULL } +}; - if (len > 0) - { - proto_tree_add_text(subtree, asn1->tvb, - asn1->offset, len, "Parameter Data"); +static const ber_choice_t Ss_Info_choice[] = { + { 0, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_forwardingInfo_impl }, + { 1, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_callBarringInfo_impl }, + { 3, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_ss_Data_impl }, + { 0, 0, 0, 0, NULL } +}; - asn1->offset += len; - } - } +static int +dissect_gsm_map_Ss_Info(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + Ss_Info_choice, hf_index, ett_gsm_map_Ss_Info); - return(MAP_OK); + return offset; } +static const ber_sequence_t Ss_ForBS_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_ss_Code }, + { BER_CLASS_CON, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_basicService }, + { 0, 0, 0, NULL } +}; -/* PARAMETERS */ +static int +dissect_gsm_map_Ss_ForBS(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + Ss_ForBS_sequence, hf_index, ett_gsm_map_Ss_ForBS); -static void -param_bytes(ASN1_SCK *asn1, proto_tree *tree, guint len, int hf_field) -{ - guint saved_offset; + return offset; +} - saved_offset = asn1->offset; +static const ber_sequence_t SEQUENCE_SIZE_1_13_OF_ForwardingFeatureList_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_forwardingFeatureList_item }, +}; - proto_tree_add_bytes(tree, hf_field, asn1->tvb, - saved_offset, len, tvb_get_ptr(asn1->tvb, saved_offset, len)); +static int +dissect_gsm_map_SEQUENCE_SIZE_1_13_OF_ForwardingFeatureList(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + SEQUENCE_SIZE_1_13_OF_ForwardingFeatureList_sequence_of, hf_index, ett_gsm_map_SEQUENCE_SIZE_1_13_OF_ForwardingFeatureList); - asn1->offset += len; + return offset; +} +static int dissect_forwardingFeatureList1_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_SEQUENCE_SIZE_1_13_OF_ForwardingFeatureList(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_forwardingFeatureList1); } -static void -param_imsi(ASN1_SCK *asn1, proto_tree *tree, guint len, int hf_field) -{ - guint saved_offset; - guchar *poctets; - char bigbuf[1024]; - - saved_offset = asn1->offset; - asn1_string_value_decode(asn1, len, &poctets); +static const ber_sequence_t T_ccbs_FeatureList_item_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ccbs_Index_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_b_subscriberNumber_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_b_subscriberSubaddress_impl }, + { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_NOTCHKTAG, dissect_basicServiceGroup }, + { 0, 0, 0, NULL } +}; - my_dgt_tbcd_unpack(bigbuf, poctets, len, &Dgt_msid); - g_free(poctets); +static int +dissect_gsm_map_T_ccbs_FeatureList_item(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + T_ccbs_FeatureList_item_sequence, hf_index, ett_gsm_map_T_ccbs_FeatureList_item); - if (hf_field == -1) - { - proto_tree_add_text(tree, asn1->tvb, - saved_offset, len, "IMSI %s", bigbuf); - } - else - { - proto_tree_add_string_format(tree, hf_field, asn1->tvb, - saved_offset, len, bigbuf, "IMSI %s", bigbuf); - } + return offset; +} +static int dissect_ccbs_FeatureList_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_ccbs_FeatureList_item(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_ccbs_FeatureList_item); } -static void -param_lmsi(ASN1_SCK *asn1, proto_tree *tree, guint len, int hf_field) -{ - guint saved_offset; - gint32 value; - - hf_field = hf_field; +static const ber_sequence_t T_ccbs_FeatureList_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_ccbs_FeatureList_item }, +}; - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, len, &value); +static int +dissect_gsm_map_T_ccbs_FeatureList(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + T_ccbs_FeatureList_sequence_of, hf_index, ett_gsm_map_T_ccbs_FeatureList); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, len, "LMSI 0x%04x", value); + return offset; +} +static int dissect_ccbs_FeatureList_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_ccbs_FeatureList(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_ccbs_FeatureList); } -static void -param_boolean(ASN1_SCK *asn1, proto_tree *tree, guint len, int hf_field) -{ - guint saved_offset; - gint32 value; - - hf_field = hf_field; +static const ber_sequence_t T_genericServiceInfo_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_ss_Status }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cliRestrictionOption_impl }, + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_maximumEntitledPriority_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_defaultPriority_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ccbs_FeatureList_impl }, + { 0, 0, 0, NULL } +}; - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, len, &value); +static int +dissect_gsm_map_T_genericServiceInfo(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + T_genericServiceInfo_sequence, hf_index, ett_gsm_map_T_genericServiceInfo); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, len, value ? "TRUE" : "FALSE"); + return offset; +} +static int dissect_genericServiceInfo_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_genericServiceInfo(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_genericServiceInfo); } -static void -param_alertReason(ASN1_SCK *asn1, proto_tree *tree, guint len, int hf_field) -{ - guint saved_offset; - gint32 value; - gchar *str = NULL; - - hf_field = hf_field; - - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, len, &value); - switch (value) - { - case 0x00: - str = "ms-Present"; - break; +static const value_string gsm_map_InterrogateSS_Res_vals[] = { + { 0, "ss-Status" }, + { 2, "basicServiceGroupList" }, + { 3, "forwardingFeatureList" }, + { 4, "genericServiceInfo" }, + { 0, NULL } +}; - case 0x01: - str = "memoryAvailable"; - break; +static const ber_choice_t InterrogateSS_Res_choice[] = { + { 0, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_ss_Status_impl }, + { 2, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_basicServiceGroupList_impl }, + { 3, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_forwardingFeatureList1_impl }, + { 4, BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_genericServiceInfo_impl }, + { 0, 0, 0, 0, NULL } +}; - default: - str = "Unrecognized value"; - break; - } +static int +dissect_gsm_map_InterrogateSS_Res(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + InterrogateSS_Res_choice, hf_index, ett_gsm_map_InterrogateSS_Res); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, len, str); + return offset; } -typedef enum -{ - GSM_MAP_P_IMSI, /* IMSI */ - GSM_MAP_P_LMSI, /* LMSI */ - GSM_MAP_P_MSISDN, /* MSISDN */ - GSM_MAP_P_SC_ADDR_DA, /* Service Centre Address DA */ - GSM_MAP_P_SC_ADDR_OA, /* Service Centre Address OA */ - GSM_MAP_P_SC_ADDR, /* Service Centre Address */ - GSM_MAP_P_MSC_NUMBER, /* MSC Number */ - GSM_MAP_P_VLR_NUMBER, /* VLR Number */ - GSM_MAP_P_HLR_NUMBER, /* HLR Number */ - GSM_MAP_P_SIG_INFO, /* Signal Info */ - GSM_MAP_P_BOOL, /* Boolean */ - GSM_MAP_P_LIWLMSI, /* Location Information with LMSI */ - GSM_MAP_P_NETNODE_NUM, /* Network Node Number */ - GSM_MAP_P_ROAMING_NUM, /* Roaming Number */ - GSM_MAP_P_ALERT_REASON, /* Alert Reason */ - GSM_MAP_P_GMSC_ADDR, /* GMSC Address */ - GSM_MAP_P_RAND, /* Rand */ - GSM_MAP_P_SRES, /* Signed Result */ - GSM_MAP_P_KC, /* Key Cipher */ - GSM_MAP_P_XRES, /* Extended Signed Result */ - GSM_MAP_P_CK, /* Ciphering Key */ - GSM_MAP_P_IK, /* Integrity Key */ - GSM_MAP_P_AUTN, /* Authentication Token */ - GSM_MAP_P_NONE /* NONE */ -} -param_idx_t; - -#define NUM_PARAM_1 (GSM_MAP_P_NONE+1) -static gint ett_param_1[NUM_PARAM_1]; -static void (*param_1_fcn[])(ASN1_SCK *asn1, proto_tree *tree, guint len, int hf_field) = { - param_imsi, /* IMSI */ - param_lmsi, /* LMSI */ - param_AddressString, /* MSISDN */ - param_AddressString, /* Service Centre Address DA */ - param_AddressString, /* Service Centre Address OA */ - param_AddressString, /* Service Centre Address */ - param_AddressString, /* MSC Number */ - param_AddressString, /* VLR Number */ - param_AddressString, /* HLR Number */ - NULL, /* Signal Info */ - param_boolean, /* Boolean */ - NULL, /* Location Information with LMSI */ - param_AddressString, /* Network Node Number */ - param_AddressString, /* Roaming Number */ - param_alertReason, /* Alert Reason */ - param_AddressString, /* GMSC Address */ - param_bytes, /* Rand */ - param_bytes, /* Signed Result */ - param_bytes, /* GSM Key Cipher */ - param_bytes, /* Extended Signed Result */ - param_bytes, /* UMTS Ciphering Key */ - param_bytes, /* Integrity Key */ - param_bytes, /* Authentication Token */ - NULL /* NONE */ -}; - -static int *param_1_hf[] = { - &hf_map_imsi, /* IMSI */ - HF_NULL, /* LMSI */ - &hf_map_addrstring, /* MSISDN */ - &hf_map_addrstring, /* Service Centre Address DA */ - &hf_map_addrstring, /* Service Centre Address OA */ - &hf_map_addrstring, /* Service Centre Address */ - &hf_map_addrstring, /* MSC Number */ - &hf_map_addrstring, /* VLR Number */ - &hf_map_addrstring, /* HLR Number */ - HF_NULL, /* Signal Info */ - HF_NULL, /* Boolean */ - HF_NULL, /* Location Information with LMSI */ - &hf_map_addrstring, /* Network Node Number */ - &hf_map_addrstring, /* Roaming Number */ - HF_NULL, /* Alert Reason */ - &hf_map_addrstring, /* GMSC Address */ - &hf_map_rand, /* Rand */ - &hf_map_sres, /* Signed Result */ - &hf_map_kc, /* GSM Key Cipher */ - &hf_map_xres, /* Extended Signed Result */ - &hf_map_ck, /* UMTS Ciphering Key */ - &hf_map_ik, /* Integrity Key */ - &hf_map_autn, /* Authentication Token */ - NULL /* NONE */ -}; - - -#define GSM_MAP_PARAM_DISPLAY(Gtree, Goffset, Gtag, Ga1, Ga2) \ - { \ - gint _ett_param_idx; \ - guint _len; \ - void (*_param_fcn)(ASN1_SCK *asn1, proto_tree *tree, guint len, int hf_field) = NULL; \ - int *_param_hf = NULL; \ - proto_tree *_subtree; \ - gboolean _def_len; \ - \ - if (Ga1 == GSM_MAP_P_NONE) \ - { \ - _ett_param_idx = ett_param; \ - _param_fcn = NULL; \ - _param_hf = HF_NULL; \ - } \ - else \ - { \ - _ett_param_idx = ett_param_1[Ga1]; \ - _param_fcn = param_1_fcn[Ga1]; \ - _param_hf = param_1_hf[Ga1]; \ - } \ - \ - GSM_MAP_START_SUBTREE(Gtree, Goffset, Gtag, Ga2, _ett_param_idx, &_def_len, &_len, _subtree); \ - \ - if (_len > 0) \ - { \ - if (Ga1 == GSM_MAP_P_NONE || _param_fcn == NULL) \ - { \ - proto_tree_add_text(_subtree, asn1->tvb, \ - asn1->offset, _len, "Parameter Data"); \ - \ - asn1->offset += _len; \ - } \ - else \ - { \ - (*_param_fcn)(asn1, _subtree, _len, *_param_hf); \ - } \ - } \ - \ - if (!_def_len) \ - { \ - dissect_map_eoc(asn1, Gtree); \ - } \ - } +static int +dissect_gsm_map_OCTET_STRING_SIZE_1_160(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + return offset; +} +static int dissect_ussd_String(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_OCTET_STRING_SIZE_1_160(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_ussd_String); +} -static void -param_Identity(ASN1_SCK *asn1, proto_tree *tree) -{ - guint saved_offset, start_offset; - guint tag, len; - gboolean def_len = FALSE; - proto_tree *subtree; +static const ber_sequence_t Ussd_Arg_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_ussd_DataCodingScheme }, + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_ussd_String }, + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_alertingPattern }, + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_msisdn_impl }, + { 0, 0, 0, NULL } +}; - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); +static int +dissect_gsm_map_Ussd_Arg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + Ussd_Arg_sequence, hf_index, ett_gsm_map_Ussd_Arg); - switch (tag) - { - case 0x04: /* IMSI */ - GSM_MAP_PARAM_DISPLAY(tree, saved_offset, tag, GSM_MAP_P_IMSI, "Identity"); - break; + return offset; +} - case 0x30: /* IMSI-WithLMSI */ +static const ber_sequence_t Ussd_Res_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_ussd_DataCodingScheme }, + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_ussd_String }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_Ussd_Res(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + Ussd_Res_sequence, hf_index, ett_gsm_map_Ussd_Res); - GSM_MAP_START_SUBTREE(tree, saved_offset, tag, "Sequence", - ett_sequence, - &def_len, &len, subtree); + return offset; +} - start_offset = asn1->offset; - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); +static int +dissect_gsm_map_NewPassword(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_NumericString, + pinfo, tree, tvb, offset, hf_index, + NULL); - GSM_MAP_PARAM_DISPLAY(subtree, saved_offset, tag, GSM_MAP_P_IMSI, "IMSI"); + return offset; +} - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); - GSM_MAP_PARAM_DISPLAY(subtree, saved_offset, tag, GSM_MAP_P_LMSI, "LMSI"); +static const value_string gsm_map_GetPasswordArg_vals[] = { + { 0, "enterPW" }, + { 1, "enterNewPW" }, + { 2, "enterNewPW-Again" }, + { 0, NULL } +}; - dissect_map_params(asn1, subtree, len - (asn1->offset - start_offset)); - if (!def_len) - { - dissect_map_eoc(asn1, subtree); - } - break; +static int +dissect_gsm_map_GetPasswordArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, NULL); - default: - GSM_MAP_PARAM_DISPLAY(tree, saved_offset, tag, GSM_MAP_P_NONE, "Identity"); - break; - } + return offset; } -static void -param_TripletList(ASN1_SCK *asn1, proto_tree *tree, guint exp_len) -{ - guint saved_offset, orig_offset; - guint tag, len; - gboolean def_len = FALSE; - proto_tree *subtree; - orig_offset = asn1->offset; +static int +dissect_gsm_map_CurrentPassword(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_NumericString, + pinfo, tree, tvb, offset, hf_index, + NULL); - while ((tvb_length_remaining(asn1->tvb, asn1->offset) > 0) && - (!tcap_check_tag(asn1, 0))) - { - if ((exp_len != 0) && - ((asn1->offset - orig_offset) >= exp_len)) - { - break; - } + return offset; +} - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); +static const asn_namedbit ServiceIndicator_bits[] = { + { 0, &hf_gsm_map_ServiceIndicator_clirInvoked, -1, -1, NULL, NULL }, + { 1, &hf_gsm_map_ServiceIndicator_camelInvoked, -1, -1, NULL, NULL }, + { 0, NULL, 0, 0, NULL, NULL } +}; - GSM_MAP_START_SUBTREE(tree, saved_offset, tag, "Sequence", - ett_sequence, - &def_len, &len, subtree); +static int +dissect_gsm_map_ServiceIndicator(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_bitstring(implicit_tag, pinfo, tree, tvb, offset, + ServiceIndicator_bits, hf_index, ett_gsm_map_ServiceIndicator, + NULL); - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); + return offset; +} +static int dissect_serviceIndicator_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_ServiceIndicator(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_serviceIndicator); +} - GSM_MAP_PARAM_DISPLAY(subtree, saved_offset, tag, GSM_MAP_P_RAND, "RAND"); +static const ber_sequence_t T_ccbs_Data_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_ccbs_Feature_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_translatedB_Number_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_serviceIndicator_impl }, + { BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_callInfo_impl }, + { BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_networkSignalInfo_impl }, + { 0, 0, 0, NULL } +}; - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); +static int +dissect_gsm_map_T_ccbs_Data(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + T_ccbs_Data_sequence, hf_index, ett_gsm_map_T_ccbs_Data); - GSM_MAP_PARAM_DISPLAY(subtree, saved_offset, tag, GSM_MAP_P_SRES, "SRES"); + return offset; +} +static int dissect_ccbs_Data_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_ccbs_Data(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_ccbs_Data); +} - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); +static const ber_sequence_t RegisterCC_EntryArg_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_ss_Code_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ccbs_Data_impl }, + { 0, 0, 0, NULL } +}; - GSM_MAP_PARAM_DISPLAY(subtree, saved_offset, tag, GSM_MAP_P_KC, "Kc"); +static int +dissect_gsm_map_RegisterCC_EntryArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + RegisterCC_EntryArg_sequence, hf_index, ett_gsm_map_RegisterCC_EntryArg); - if (!def_len) - { - dissect_map_eoc(asn1, subtree); - } - } + return offset; } -static void -param_QuintupletList(ASN1_SCK *asn1, proto_tree *tree, guint exp_len) -{ - guint saved_offset, orig_offset; - guint tag, len; - gboolean def_len = FALSE; - proto_tree *subtree; - - orig_offset = asn1->offset; +static const ber_sequence_t RegisterCC_EntryRes_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ccbs_Feature_impl }, + { 0, 0, 0, NULL } +}; - while ((tvb_length_remaining(asn1->tvb, asn1->offset) > 0) && - (!tcap_check_tag(asn1, 0))) - { - if ((exp_len != 0) && - ((asn1->offset - orig_offset) >= exp_len)) - { - break; - } +static int +dissect_gsm_map_RegisterCC_EntryRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + RegisterCC_EntryRes_sequence, hf_index, ett_gsm_map_RegisterCC_EntryRes); - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); + return offset; +} - GSM_MAP_START_SUBTREE(tree, saved_offset, tag, "Sequence", - ett_sequence, - &def_len, &len, subtree); +static const ber_sequence_t EraseCC_EntryArg_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_ss_Code_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ccbs_Index_impl }, + { 0, 0, 0, NULL } +}; - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); +static int +dissect_gsm_map_EraseCC_EntryArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + EraseCC_EntryArg_sequence, hf_index, ett_gsm_map_EraseCC_EntryArg); - GSM_MAP_PARAM_DISPLAY(subtree, saved_offset, tag, GSM_MAP_P_RAND, "RAND"); + return offset; +} - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); +static const ber_sequence_t EraseCC_EntryRes_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_ss_Code_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ss_Status_impl }, + { 0, 0, 0, NULL } +}; - GSM_MAP_PARAM_DISPLAY(subtree, saved_offset, tag, GSM_MAP_P_XRES, "XRES"); +static int +dissect_gsm_map_EraseCC_EntryRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + EraseCC_EntryRes_sequence, hf_index, ett_gsm_map_EraseCC_EntryRes); - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); + return offset; +} - GSM_MAP_PARAM_DISPLAY(subtree, saved_offset, tag, GSM_MAP_P_CK, "CK"); - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); +static int +dissect_gsm_map_BOOLEAN(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_boolean(pinfo, tree, tvb, offset, hf_index); - GSM_MAP_PARAM_DISPLAY(subtree, saved_offset, tag, GSM_MAP_P_IK, "IK"); + return offset; +} +static int dissect_sm_RP_PRI_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_BOOLEAN(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_sm_RP_PRI); +} - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); - GSM_MAP_PARAM_DISPLAY(subtree, saved_offset, tag, GSM_MAP_P_AUTN, "AUTN"); +static int +dissect_gsm_map_ServiceCentreAddress(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { - if (!def_len) - { - dissect_map_eoc(asn1, subtree); - } - } -} + tvbuff_t *parameter_tvb; + char *digit_str; -static void -param_SM_RP_DA(ASN1_SCK *asn1, proto_tree *tree) -{ - guint saved_offset; - guint tag; - gint idx; + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + ¶meter_tvb); + if (!parameter_tvb) + return offset; - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); + proto_tree_add_item(tree, hf_gsm_map_extension, parameter_tvb, 0,1,FALSE); + proto_tree_add_item(tree, hf_gsm_map_nature_of_number, parameter_tvb, 0,1,FALSE); + proto_tree_add_item(tree, hf_gsm_map_number_plan, parameter_tvb, 0,1,FALSE); - switch (tag) - { - case 0x80: /* IMSI */ - idx = GSM_MAP_P_IMSI; - break; + digit_str = unpack_digits(parameter_tvb, 1); - case 0x81: /* LMSI */ - idx = GSM_MAP_P_LMSI; - break; + proto_tree_add_string(tree, hf_gsm_map_servicecentreaddress_digits, parameter_tvb, 1, -1, digit_str); + g_free(digit_str); - case 0x84: /* AddressString */ - idx = GSM_MAP_P_SC_ADDR_DA; - break; - default: - /* - * this occurs in the mobile terminated case for - * subsequent messages - */ - idx = GSM_MAP_P_NONE; - break; - } - GSM_MAP_PARAM_DISPLAY(tree, saved_offset, tag, idx, "SM-RP-DA"); + return offset; +} +static int dissect_serviceCentreAddress(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_ServiceCentreAddress(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_serviceCentreAddress); +} +static int dissect_serviceCentreAddress_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_ServiceCentreAddress(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_serviceCentreAddress); +} +static int dissect_serviceCentreAddressOA_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_ServiceCentreAddress(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_serviceCentreAddressOA); +} +static int dissect_serviceCentreAddressDA_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_ServiceCentreAddress(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_serviceCentreAddressDA); } -static void -param_SM_RP_OA(ASN1_SCK *asn1, proto_tree *tree, int *direction_p) -{ - guint saved_offset; - guint tag; - gint idx; - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); - switch (tag) - { - case 0x82: /* MSISDN */ - idx = GSM_MAP_P_MSISDN; +static int +dissect_gsm_map_INTEGER_0_10(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, NULL); - *direction_p = P2P_DIR_RECV; - break; + return offset; +} +static int dissect_sm_RP_MTI_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_INTEGER_0_10(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_sm_RP_MTI); +} - case 0x84: /* AddressString */ - idx = GSM_MAP_P_SC_ADDR_OA; - *direction_p = P2P_DIR_SENT; - break; +static int +dissect_gsm_map_OCTET_STRING_SIZE_1_12(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - default: - idx = GSM_MAP_P_NONE; + return offset; +} +static int dissect_sm_RP_SMEA_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_OCTET_STRING_SIZE_1_12(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_sm_RP_SMEA); +} - /* - * this occurs in the mobile terminated case for - * subsequent messages - */ - *direction_p = P2P_DIR_SENT; - break; - } +static const ber_sequence_t RoutingInfoForSMArg_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_msisdn_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_sm_RP_PRI_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_serviceCentreAddress_impl }, + { BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gprsSupportIndicator_impl }, + { BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_sm_RP_MTI_impl }, + { BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_sm_RP_SMEA_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_RoutingInfoForSMArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + RoutingInfoForSMArg_sequence, hf_index, ett_gsm_map_RoutingInfoForSMArg); - GSM_MAP_PARAM_DISPLAY(tree, saved_offset, tag, idx, "SM-RP-OA"); + return offset; } -static void -param_SM_RP_UI(ASN1_SCK *asn1, proto_tree *tree) -{ - guint saved_offset; - guint tag, len; - gboolean def_len = FALSE; - proto_tree *subtree; - tvbuff_t *tpdu_tvb; - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); +static int +dissect_gsm_map_T_networkNode_Number(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - GSM_MAP_START_SUBTREE(tree, saved_offset, tag, "SM-RP-UI", - ett_param_1[GSM_MAP_P_SIG_INFO], - &def_len, &len, subtree); + return offset; +} +static int dissect_networkNode_Number_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_networkNode_Number(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_networkNode_Number); +} - proto_tree_add_text(subtree, asn1->tvb, asn1->offset, len, "TPDU"); - /* - * dissect the embedded TPDU message - */ - tpdu_tvb = tvb_new_subset(asn1->tvb, asn1->offset, len, len); +static const value_string gsm_map_T_additional_Number_vals[] = { + { 0, "msc-Number" }, + { 1, "sgsn-Number" }, + { 0, NULL } +}; - dissector_try_port(sms_dissector_table, 0, tpdu_tvb, g_pinfo, g_tree); +static const ber_choice_t T_additional_Number_choice[] = { + { 0, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_msc_Number_impl }, + { 1, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_sgsn_Number_impl }, + { 0, 0, 0, 0, NULL } +}; - asn1->offset += len; +static int +dissect_gsm_map_T_additional_Number(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + T_additional_Number_choice, hf_index, ett_gsm_map_T_additional_Number); - if (!def_len) - { - dissect_map_eoc(asn1, subtree); - } + return offset; +} +static int dissect_additional_Number(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_additional_Number(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_additional_Number); } -static void -param_LWI_LMSI(ASN1_SCK *asn1, proto_tree *tree) -{ - guint saved_offset, start_offset; - guint tag, len; - gboolean def_len = FALSE; - proto_tree *subtree; - - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); - - GSM_MAP_START_SUBTREE(tree, saved_offset, tag, "LOCATION INFO WITH LMSI", - ett_param_1[GSM_MAP_P_LIWLMSI], - &def_len, &len, subtree); +static const ber_sequence_t T_locationInfoWithLMSI_sequence[] = { + { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_networkNode_Number_impl }, + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_lmsi }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gprsNodeIndicator_impl }, + { BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL, dissect_additional_Number }, + { 0, 0, 0, NULL } +}; - start_offset = asn1->offset; +static int +dissect_gsm_map_T_locationInfoWithLMSI(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + T_locationInfoWithLMSI_sequence, hf_index, ett_gsm_map_T_locationInfoWithLMSI); - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); + return offset; +} +static int dissect_locationInfoWithLMSI_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_locationInfoWithLMSI(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_locationInfoWithLMSI); +} - GSM_MAP_PARAM_DISPLAY(subtree, saved_offset, tag, GSM_MAP_P_NETNODE_NUM, "NETWORK NODE NUMBER"); +static const ber_sequence_t RoutingInfoForSMRes_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_imsi }, + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_locationInfoWithLMSI_impl }, + { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { 0, 0, 0, NULL } +}; - dissect_map_params(asn1, subtree, len - (asn1->offset - start_offset)); +static int +dissect_gsm_map_RoutingInfoForSMRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + RoutingInfoForSMRes_sequence, hf_index, ett_gsm_map_RoutingInfoForSMRes); - if (!def_len) - { - dissect_map_eoc(asn1, subtree); - } + return offset; } -/* MESSAGES */ +static const value_string gsm_map_Sm_RP_DA_vals[] = { + { 0, "imsi" }, + { 1, "lmsi" }, + { 4, "serviceCentreAddressDA" }, + { 5, "noSM-RP-DA" }, + { 0, NULL } +}; -static void -op_update_loc(ASN1_SCK *asn1, proto_tree *tree, guint exp_len) -{ - guint saved_offset, start_offset; - guint tag, len; - gboolean def_len = FALSE; - proto_tree *subtree; +static const ber_choice_t Sm_RP_DA_choice[] = { + { 0, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_imsi_impl }, + { 1, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_lmsi_impl }, + { 4, BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_serviceCentreAddressDA_impl }, + { 5, BER_CLASS_CON, 5, BER_FLAGS_IMPLTAG, dissect_noSM_RP_DA_impl }, + { 0, 0, 0, 0, NULL } +}; - exp_len = exp_len; +static int +dissect_gsm_map_Sm_RP_DA(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + Sm_RP_DA_choice, hf_index, ett_gsm_map_Sm_RP_DA); - if (tvb_length_remaining(asn1->tvb, asn1->offset) <= 0) return; + return offset; +} +static int dissect_sm_RP_DA(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_Sm_RP_DA(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_sm_RP_DA); +} - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); - if (TCAP_CONSTRUCTOR(tag) == FALSE) - { - GSM_MAP_PARAM_DISPLAY(tree, saved_offset, tag, GSM_MAP_P_IMSI, "IMSI"); +static const value_string gsm_map_Sm_RP_OA_vals[] = { + { 2, "msisdn" }, + { 4, "serviceCentreAddressOA" }, + { 5, "noSM-RP-OA" }, + { 0, NULL } +}; - return; - } +static const ber_choice_t Sm_RP_OA_choice[] = { + { 2, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_msisdn_impl }, + { 4, BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_serviceCentreAddressOA_impl }, + { 5, BER_CLASS_CON, 5, BER_FLAGS_IMPLTAG, dissect_noSM_RP_OA_impl }, + { 0, 0, 0, 0, NULL } +}; - GSM_MAP_START_SUBTREE(tree, saved_offset, tag, "Sequence", - ett_sequence, - &def_len, &len, subtree); +static int +dissect_gsm_map_Sm_RP_OA(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + Sm_RP_OA_choice, hf_index, ett_gsm_map_Sm_RP_OA); - start_offset = asn1->offset; + return offset; +} +static int dissect_sm_RP_OA(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_Sm_RP_OA(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_sm_RP_OA); +} - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); - GSM_MAP_PARAM_DISPLAY(subtree, saved_offset, tag, GSM_MAP_P_IMSI, "IMSI"); +static int +dissect_gsm_map_Sm_RP_UI(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); + tvbuff_t *tpdu_tvb; + + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + &tpdu_tvb); + /* + * dissect the embedded TPDU message + */ + if (!tpdu_tvb) + return offset; - GSM_MAP_PARAM_DISPLAY(subtree, saved_offset, tag, GSM_MAP_P_MSC_NUMBER, "MSC Number"); + dissector_try_port(sms_dissector_table, 0, tpdu_tvb, pinfo, top_tree); - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); + return offset; +} +static int dissect_sm_RP_UI(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_Sm_RP_UI(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_sm_RP_UI); +} - GSM_MAP_PARAM_DISPLAY(subtree, saved_offset, tag, GSM_MAP_P_VLR_NUMBER, "VLR Number"); +static const ber_sequence_t Mo_forwardSM_Arg_sequence[] = { + { BER_CLASS_CON, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_sm_RP_DA }, + { BER_CLASS_CON, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_sm_RP_OA }, + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_sm_RP_UI }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_imsi }, + { 0, 0, 0, NULL } +}; - dissect_map_params(asn1, subtree, len - (asn1->offset - start_offset)); +static int +dissect_gsm_map_Mo_forwardSM_Arg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + Mo_forwardSM_Arg_sequence, hf_index, ett_gsm_map_Mo_forwardSM_Arg); - if (!def_len) - { - dissect_map_eoc(asn1, subtree); - } + return offset; } -static void -op_update_loc_rr(ASN1_SCK *asn1, proto_tree *tree, guint exp_len) -{ - guint saved_offset, start_offset; - guint tag, len; - gboolean def_len = FALSE; - proto_tree *subtree; +static const ber_sequence_t Mo_forwardSM_Res_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_sm_RP_UI }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { 0, 0, 0, NULL } +}; - exp_len = exp_len; +static int +dissect_gsm_map_Mo_forwardSM_Res(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + Mo_forwardSM_Res_sequence, hf_index, ett_gsm_map_Mo_forwardSM_Res); - if (tvb_length_remaining(asn1->tvb, asn1->offset) <= 0) return; + return offset; +} - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); +static const ber_sequence_t Mt_forwardSM_Arg_sequence[] = { + { BER_CLASS_CON, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_sm_RP_DA }, + { BER_CLASS_CON, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_sm_RP_OA }, + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_sm_RP_UI }, + { BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_moreMessagesToSend }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { 0, 0, 0, NULL } +}; - if (TCAP_CONSTRUCTOR(tag) == FALSE) - { - GSM_MAP_PARAM_DISPLAY(tree, saved_offset, tag, GSM_MAP_P_HLR_NUMBER, "HLR Number"); +static int +dissect_gsm_map_Mt_forwardSM_Arg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + Mt_forwardSM_Arg_sequence, hf_index, ett_gsm_map_Mt_forwardSM_Arg); - return; - } + return offset; +} - GSM_MAP_START_SUBTREE(tree, saved_offset, tag, "Sequence", - ett_sequence, - &def_len, &len, subtree); +static const ber_sequence_t Mt_forwardSM_Res_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_sm_RP_UI }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { 0, 0, 0, NULL } +}; - start_offset = asn1->offset; +static int +dissect_gsm_map_Mt_forwardSM_Res(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + Mt_forwardSM_Res_sequence, hf_index, ett_gsm_map_Mt_forwardSM_Res); - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); + return offset; +} - GSM_MAP_PARAM_DISPLAY(subtree, saved_offset, tag, GSM_MAP_P_HLR_NUMBER, "HLR Number"); - dissect_map_params(asn1, subtree, len - (asn1->offset - start_offset)); +static int +dissect_gsm_map_StoredMSISDN(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_gsm_map_Msisdn(implicit_tag, tvb, offset, pinfo, tree, hf_index); - if (!def_len) - { - dissect_map_eoc(asn1, subtree); - } + return offset; +} +static int dissect_storedMSISDN(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_StoredMSISDN(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_storedMSISDN); } -static void -op_cancel_loc(ASN1_SCK *asn1, proto_tree *tree, guint exp_len) -{ - guint saved_offset, start_offset; - guint tag, len; - gboolean def_len = FALSE; - proto_tree *subtree; - exp_len = exp_len; +static const value_string gsm_map_Sm_DeliveryOutcome_vals[] = { + { 0, "memoryCapacityExceeded" }, + { 1, "absentSubscriber" }, + { 2, "successfulTransfer" }, + { 0, NULL } +}; - if (tvb_length_remaining(asn1->tvb, asn1->offset) <= 0) return; - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); +static int +dissect_gsm_map_Sm_DeliveryOutcome(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, NULL); - if (tag != 0xa3) - { - /* - * Hmmm, unexpected - */ - return; - } + return offset; +} +static int dissect_sm_DeliveryOutcome(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_Sm_DeliveryOutcome(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_sm_DeliveryOutcome); +} +static int dissect_additionalSM_DeliveryOutcome_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_Sm_DeliveryOutcome(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_additionalSM_DeliveryOutcome); +} - GSM_MAP_START_SUBTREE(tree, saved_offset, tag, "Constructor Sequence", - ett_sequence, - &def_len, &len, subtree); +static const ber_sequence_t ReportSM_DeliveryStatusArg_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_msisdn }, + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_serviceCentreAddress }, + { BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_sm_DeliveryOutcome }, + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_absentSubscriberDiagnosticSM_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gprsSupportIndicator_impl }, + { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_deliveryOutcomeIndicator_impl }, + { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_additionalSM_DeliveryOutcome_impl }, + { BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_additionalAbsentSubscriberDiagnosticSM_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_ReportSM_DeliveryStatusArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + ReportSM_DeliveryStatusArg_sequence, hf_index, ett_gsm_map_ReportSM_DeliveryStatusArg); - start_offset = asn1->offset; + return offset; +} - param_Identity(asn1, subtree); +static const ber_sequence_t ReportSM_DeliveryStatusRes_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_storedMSISDN }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { 0, 0, 0, NULL } +}; - dissect_map_params(asn1, subtree, len - (asn1->offset - start_offset)); +static int +dissect_gsm_map_ReportSM_DeliveryStatusRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + ReportSM_DeliveryStatusRes_sequence, hf_index, ett_gsm_map_ReportSM_DeliveryStatusRes); - if (!def_len) - { - dissect_map_eoc(asn1, subtree); - } + return offset; } -static void -op_send_auth_info(ASN1_SCK *asn1, proto_tree *tree, guint exp_len) -{ - guint saved_offset, start_offset; - guint tag, len; - gboolean def_len = FALSE; - proto_tree *subtree; +static const asn_namedbit T_mw_Status_bits[] = { + { 0, &hf_gsm_map_T_mw_Status_scAddressNotIncluded, -1, -1, NULL, NULL }, + { 1, &hf_gsm_map_T_mw_Status_mnrfSet, -1, -1, NULL, NULL }, + { 2, &hf_gsm_map_T_mw_Status_mcefSet, -1, -1, NULL, NULL }, + { 3, &hf_gsm_map_T_mw_Status_mnrgSet, -1, -1, NULL, NULL }, + { 0, NULL, 0, 0, NULL, NULL } +}; - exp_len = exp_len; +static int +dissect_gsm_map_T_mw_Status(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_bitstring(implicit_tag, pinfo, tree, tvb, offset, + T_mw_Status_bits, hf_index, ett_gsm_map_T_mw_Status, + NULL); - if (tvb_length_remaining(asn1->tvb, asn1->offset) <= 0) return; + return offset; +} +static int dissect_mw_Status(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_mw_Status(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_mw_Status); +} - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); +static const ber_sequence_t InformServiceCentreArg_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_storedMSISDN }, + { BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_mw_Status }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { 0, 0, 0, NULL } +}; - if (TCAP_CONSTRUCTOR(tag) == FALSE) - { - GSM_MAP_PARAM_DISPLAY(tree, saved_offset, tag, GSM_MAP_P_IMSI, "IMSI"); +static int +dissect_gsm_map_InformServiceCentreArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + InformServiceCentreArg_sequence, hf_index, ett_gsm_map_InformServiceCentreArg); - return; - } + return offset; +} - GSM_MAP_START_SUBTREE(tree, saved_offset, tag, "Sequence", - ett_sequence, - &def_len, &len, subtree); +static const ber_sequence_t AlertServiceCentreArg_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_msisdn }, + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_serviceCentreAddress }, + { 0, 0, 0, NULL } +}; - start_offset = asn1->offset; +static int +dissect_gsm_map_AlertServiceCentreArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + AlertServiceCentreArg_sequence, hf_index, ett_gsm_map_AlertServiceCentreArg); - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); + return offset; +} - GSM_MAP_PARAM_DISPLAY(subtree, saved_offset, tag, GSM_MAP_P_IMSI, "IMSI"); - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); +static const value_string gsm_map_T_alertReason_vals[] = { + { 0, "msPresent" }, + { 1, "memoryAvailable" }, + { 0, NULL } +}; - GSM_MAP_PARAM_DISPLAY(subtree, saved_offset, tag, GSM_MAP_P_NONE, "Number Of Requested Vectors"); - dissect_map_params(asn1, subtree, len - (asn1->offset - start_offset)); +static int +dissect_gsm_map_T_alertReason(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, NULL); - if (!def_len) - { - dissect_map_eoc(asn1, subtree); - } + return offset; +} +static int dissect_alertReason(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_alertReason(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_alertReason); } -static void -op_send_auth_info_rr(ASN1_SCK *asn1, proto_tree *tree, guint exp_len) -{ - guint saved_offset, start_offset; - guint tag, len; - gboolean def_len = FALSE; - proto_tree *subtree; - - exp_len = exp_len; +static const ber_sequence_t ReadyForSM_Arg_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_imsi_impl }, + { BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_alertReason }, + { BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_alertReasonIndicator }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { 0, 0, 0, NULL } +}; - if (tvb_length_remaining(asn1->tvb, asn1->offset) <= 0) return; +static int +dissect_gsm_map_ReadyForSM_Arg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + ReadyForSM_Arg_sequence, hf_index, ett_gsm_map_ReadyForSM_Arg); - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); + return offset; +} - if ((tag != 0x30) && - (tag != 0x31)) - { - /* - * Hmmm, unexpected - */ - return; - } +static const ber_sequence_t ReadyForSM_Res_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { 0, 0, 0, NULL } +}; - GSM_MAP_START_SUBTREE(tree, saved_offset, tag, - (tag == 0x30) ? "TripletList" : "QuintupletList", - ett_sequence, - &def_len, &len, subtree); +static int +dissect_gsm_map_ReadyForSM_Res(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + ReadyForSM_Res_sequence, hf_index, ett_gsm_map_ReadyForSM_Res); - start_offset = asn1->offset; + return offset; +} - if (tag == 0x30) - { - param_TripletList(asn1, subtree, len); - } - else - { - param_QuintupletList(asn1, subtree, len); - } +static const ber_sequence_t RequestedInfo_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_locationInformationFlag_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_subscriberStateFlag_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { 0, 0, 0, NULL } +}; - dissect_map_params(asn1, subtree, len - (asn1->offset - start_offset)); +static int +dissect_gsm_map_RequestedInfo(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + RequestedInfo_sequence, hf_index, ett_gsm_map_RequestedInfo); - if (!def_len) - { - dissect_map_eoc(asn1, subtree); - } + return offset; +} +static int dissect_requestedInfo_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_RequestedInfo(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_requestedInfo); } -static void -op_restore_data(ASN1_SCK *asn1, proto_tree *tree, guint exp_len) -{ - guint saved_offset, start_offset; - guint tag, len; - gboolean def_len = FALSE; - proto_tree *subtree; - - exp_len = exp_len; +static const ber_sequence_t ProvideSubscriberInfoArg_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_imsi_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_lmsi_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_requestedInfo_impl }, + { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { 0, 0, 0, NULL } +}; - if (tvb_length_remaining(asn1->tvb, asn1->offset) <= 0) return; +static int +dissect_gsm_map_ProvideSubscriberInfoArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + ProvideSubscriberInfoArg_sequence, hf_index, ett_gsm_map_ProvideSubscriberInfoArg); - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); + return offset; +} - if (TCAP_CONSTRUCTOR(tag) == FALSE) - { - GSM_MAP_PARAM_DISPLAY(tree, saved_offset, tag, GSM_MAP_P_IMSI, "IMSI"); +static const ber_sequence_t ProvideSubscriberInfoRes_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_subscriberInfo }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { 0, 0, 0, NULL } +}; - return; - } +static int +dissect_gsm_map_ProvideSubscriberInfoRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + ProvideSubscriberInfoRes_sequence, hf_index, ett_gsm_map_ProvideSubscriberInfoRes); - GSM_MAP_START_SUBTREE(tree, saved_offset, tag, "Sequence", - ett_sequence, - &def_len, &len, subtree); + return offset; +} - start_offset = asn1->offset; - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); +static const value_string gsm_map_T_subscriberIdentity_vals[] = { + { 0, "imsi" }, + { 1, "msisdn" }, + { 0, NULL } +}; - GSM_MAP_PARAM_DISPLAY(subtree, saved_offset, tag, GSM_MAP_P_IMSI, "IMSI"); +static const ber_choice_t T_subscriberIdentity_choice[] = { + { 0, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_imsi_impl }, + { 1, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_msisdn_impl }, + { 0, 0, 0, 0, NULL } +}; - dissect_map_params(asn1, subtree, len - (asn1->offset - start_offset)); +static int +dissect_gsm_map_T_subscriberIdentity(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + T_subscriberIdentity_choice, hf_index, ett_gsm_map_T_subscriberIdentity); - if (!def_len) - { - dissect_map_eoc(asn1, subtree); - } + return offset; +} +static int dissect_subscriberIdentity(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_subscriberIdentity(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_subscriberIdentity); } -static void -op_restore_data_rr(ASN1_SCK *asn1, proto_tree *tree, guint exp_len) -{ - guint saved_offset, start_offset; - guint tag, len; - gboolean def_len = FALSE; - proto_tree *subtree; +static const ber_sequence_t AnyTimeInterrogationArg_sequence[] = { + { BER_CLASS_CON, 0, 0, dissect_subscriberIdentity }, + { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_requestedInfo_impl }, + { BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_gsmSCF_Address_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { 0, 0, 0, NULL } +}; - exp_len = exp_len; +static int +dissect_gsm_map_AnyTimeInterrogationArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + AnyTimeInterrogationArg_sequence, hf_index, ett_gsm_map_AnyTimeInterrogationArg); - if (tvb_length_remaining(asn1->tvb, asn1->offset) <= 0) return; + return offset; +} - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); +static const ber_sequence_t AnyTimeInterrogationRes_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_subscriberInfo }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { 0, 0, 0, NULL } +}; - if (TCAP_CONSTRUCTOR(tag) == FALSE) - { - GSM_MAP_PARAM_DISPLAY(tree, saved_offset, tag, GSM_MAP_P_HLR_NUMBER, "HLR Number"); +static int +dissect_gsm_map_AnyTimeInterrogationRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + AnyTimeInterrogationRes_sequence, hf_index, ett_gsm_map_AnyTimeInterrogationRes); - return; - } + return offset; +} - GSM_MAP_START_SUBTREE(tree, saved_offset, tag, "Sequence", - ett_sequence, - &def_len, &len, subtree); +static const ber_sequence_t T_ss_EventSpecification_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_ss_EventSpecification_item }, +}; - start_offset = asn1->offset; +static int +dissect_gsm_map_T_ss_EventSpecification(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + T_ss_EventSpecification_sequence_of, hf_index, ett_gsm_map_T_ss_EventSpecification); - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); + return offset; +} +static int dissect_ss_EventSpecification_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_ss_EventSpecification(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_ss_EventSpecification); +} - GSM_MAP_PARAM_DISPLAY(subtree, saved_offset, tag, GSM_MAP_P_HLR_NUMBER, "HLR Number"); +static const ber_sequence_t Ss_InvocationNotificationArg_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_imsi_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_msisdn_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_ss_Event_impl }, + { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ss_EventSpecification_impl }, + { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { 0, 0, 0, NULL } +}; - dissect_map_params(asn1, subtree, len - (asn1->offset - start_offset)); +static int +dissect_gsm_map_Ss_InvocationNotificationArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + Ss_InvocationNotificationArg_sequence, hf_index, ett_gsm_map_Ss_InvocationNotificationArg); - if (!def_len) - { - dissect_map_eoc(asn1, subtree); - } + return offset; } -static void -op_send_rti(ASN1_SCK *asn1, proto_tree *tree, guint exp_len) -{ - guint saved_offset, start_offset; - guint tag, len; - gboolean def_len = FALSE; - proto_tree *subtree; +static const ber_sequence_t Ss_InvocationNotificationRes_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { 0, 0, 0, NULL } +}; - exp_len = exp_len; +static int +dissect_gsm_map_Ss_InvocationNotificationRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + Ss_InvocationNotificationRes_sequence, hf_index, ett_gsm_map_Ss_InvocationNotificationRes); - if (tvb_length_remaining(asn1->tvb, asn1->offset) <= 0) return; + return offset; +} - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); - if (TCAP_CONSTRUCTOR(tag) == FALSE) - { - /* - * Hmmm, unexpected - */ - return; - } +static int +dissect_gsm_map_OCTET_STRING_SIZE_5_10(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - GSM_MAP_START_SUBTREE(tree, saved_offset, tag, "Sequence", - ett_sequence, - &def_len, &len, subtree); + return offset; +} +static int dissect_codec_Info(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_OCTET_STRING_SIZE_5_10(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_codec_Info); +} - start_offset = asn1->offset; +static const ber_sequence_t PrepareGroupCallArg_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_teleservice }, + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_asciCallReference }, + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_codec_Info }, + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_cipheringAlgorithm }, + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_groupKeyNumber_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_groupKey_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_priority_impl }, + { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_uplinkFree_impl }, + { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { 0, 0, 0, NULL } +}; - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); +static int +dissect_gsm_map_PrepareGroupCallArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + PrepareGroupCallArg_sequence, hf_index, ett_gsm_map_PrepareGroupCallArg); - GSM_MAP_PARAM_DISPLAY(subtree, saved_offset, tag, GSM_MAP_P_MSISDN, "MSISDN"); + return offset; +} - dissect_map_params(asn1, subtree, len - (asn1->offset - start_offset)); - if (!def_len) - { - dissect_map_eoc(asn1, subtree); - } -} +static int +dissect_gsm_map_T_groupCallNumber(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); -static void -op_send_rti_rr(ASN1_SCK *asn1, proto_tree *tree, guint exp_len) -{ - guint saved_offset, start_offset; - guint tag, len; - gboolean def_len = FALSE; - proto_tree *subtree; + return offset; +} +static int dissect_groupCallNumber(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_groupCallNumber(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_groupCallNumber); +} - exp_len = exp_len; +static const ber_sequence_t PrepareGroupCallRes_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_groupCallNumber }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { 0, 0, 0, NULL } +}; - if (tvb_length_remaining(asn1->tvb, asn1->offset) <= 0) return; +static int +dissect_gsm_map_PrepareGroupCallRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + PrepareGroupCallRes_sequence, hf_index, ett_gsm_map_PrepareGroupCallRes); - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); + return offset; +} - if (TCAP_CONSTRUCTOR(tag) == FALSE) - { - /* - * Hmmm, unexpected - */ - return; - } +static const ber_sequence_t SendGroupCallEndSignalArg_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_imsi }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { 0, 0, 0, NULL } +}; - GSM_MAP_START_SUBTREE(tree, saved_offset, tag, "Sequence", - ett_sequence, - &def_len, &len, subtree); +static int +dissect_gsm_map_SendGroupCallEndSignalArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + SendGroupCallEndSignalArg_sequence, hf_index, ett_gsm_map_SendGroupCallEndSignalArg); - start_offset = asn1->offset; + return offset; +} - /* - * spec says [9] but 'real data' show '04' not '89' ! - */ - if (tcap_check_tag(asn1, 0x04)) - { - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); +static const ber_sequence_t SendGroupCallEndSignalRes_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { 0, 0, 0, NULL } +}; - GSM_MAP_PARAM_DISPLAY(subtree, saved_offset, tag, GSM_MAP_P_IMSI, "IMSI"); - } +static int +dissect_gsm_map_SendGroupCallEndSignalRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + SendGroupCallEndSignalRes_sequence, hf_index, ett_gsm_map_SendGroupCallEndSignalRes); - if (tcap_check_tag(asn1, 0x04)) - { - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); + return offset; +} - GSM_MAP_PARAM_DISPLAY(subtree, saved_offset, tag, GSM_MAP_P_ROAMING_NUM, "Roaming Number"); - } +static const ber_sequence_t ProcessGroupCallSignallingArg_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_uplinkRequest_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_uplinkReleaseIndication_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_releaseGroupCall_impl }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { 0, 0, 0, NULL } +}; - dissect_map_params(asn1, subtree, len - (asn1->offset - start_offset)); +static int +dissect_gsm_map_ProcessGroupCallSignallingArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + ProcessGroupCallSignallingArg_sequence, hf_index, ett_gsm_map_ProcessGroupCallSignallingArg); - if (!def_len) - { - dissect_map_eoc(asn1, subtree); - } + return offset; } -static void -op_provide_rn(ASN1_SCK *asn1, proto_tree *tree, guint exp_len) -{ - guint saved_offset, start_offset; - guint tag, len; - gboolean def_len = FALSE; - proto_tree *subtree; - - exp_len = exp_len; +static const ber_sequence_t ForwardGroupCallSignallingArg_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_imsi }, + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_uplinkRequestAck_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_uplinkReleaseIndication_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_uplinkRejectCommand_impl }, + { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_uplinkSeizedCommand_impl }, + { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_uplinkReleaseCommand_impl }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { 0, 0, 0, NULL } +}; - if (tvb_length_remaining(asn1->tvb, asn1->offset) <= 0) return; +static int +dissect_gsm_map_ForwardGroupCallSignallingArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + ForwardGroupCallSignallingArg_sequence, hf_index, ett_gsm_map_ForwardGroupCallSignallingArg); - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); + return offset; +} - if (TCAP_CONSTRUCTOR(tag) == FALSE) - { - /* - * Hmmm, unexpected - */ - return; - } - GSM_MAP_START_SUBTREE(tree, saved_offset, tag, "Sequence", - ett_sequence, - &def_len, &len, subtree); +static int +dissect_gsm_map_OCTET_STRING_SIZE_5_17(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - start_offset = asn1->offset; + return offset; +} +static int dissect_sgsn_Address(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_OCTET_STRING_SIZE_5_17(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_sgsn_Address); +} +static int dissect_sgsn_Address_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_OCTET_STRING_SIZE_5_17(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_sgsn_Address); +} - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); +static const ber_sequence_t T_sgsn_Capability_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_solsaSupportIndicator }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { 0, 0, 0, NULL } +}; - GSM_MAP_PARAM_DISPLAY(subtree, saved_offset, tag, GSM_MAP_P_IMSI, "IMSI"); +static int +dissect_gsm_map_T_sgsn_Capability(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + T_sgsn_Capability_sequence, hf_index, ett_gsm_map_T_sgsn_Capability); - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); + return offset; +} +static int dissect_sgsn_Capability_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_sgsn_Capability(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_sgsn_Capability); +} - GSM_MAP_PARAM_DISPLAY(subtree, saved_offset, tag, GSM_MAP_P_MSC_NUMBER, "MSC Number"); +static const ber_sequence_t UpdateGprsLocationArg_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_imsi }, + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_sgsn_Number }, + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_sgsn_Address }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_sgsn_Capability_impl }, + { 0, 0, 0, NULL } +}; - if (tcap_check_tag(asn1, 0x82)) - { - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); +static int +dissect_gsm_map_UpdateGprsLocationArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + UpdateGprsLocationArg_sequence, hf_index, ett_gsm_map_UpdateGprsLocationArg); - GSM_MAP_PARAM_DISPLAY(subtree, saved_offset, tag, GSM_MAP_P_MSISDN, "MSISDN"); - } + return offset; +} - if (tcap_check_tag(asn1, 0x84)) - { - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); +static const ber_sequence_t UpdateGprsLocationRes_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_hlr_Number }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { 0, 0, 0, NULL } +}; - GSM_MAP_PARAM_DISPLAY(subtree, saved_offset, tag, GSM_MAP_P_LMSI, "LMSI"); - } +static int +dissect_gsm_map_UpdateGprsLocationRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + UpdateGprsLocationRes_sequence, hf_index, ett_gsm_map_UpdateGprsLocationRes); - if (tcap_check_tag(asn1, 0x85)) - { - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); + return offset; +} - GSM_MAP_PARAM_DISPLAY(subtree, saved_offset, tag, GSM_MAP_P_NONE, "GSM Bearer Capability"); - } - if (tcap_check_tag(asn1, 0xa6)) - { - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); +static int +dissect_gsm_map_Ggsn_Address(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - GSM_MAP_PARAM_DISPLAY(subtree, saved_offset, tag, GSM_MAP_P_NONE, "Network Signal Info"); - } + return offset; +} +static int dissect_ggsn_Address_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_Ggsn_Address(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_ggsn_Address); +} - if (tcap_check_tag(asn1, 0x87)) - { - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); - GSM_MAP_PARAM_DISPLAY(subtree, saved_offset, tag, GSM_MAP_P_NONE, "Suppression Of Announcement"); - } +static int +dissect_gsm_map_Ggsn_Number(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - if (tcap_check_tag(asn1, 0x88)) - { - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); + return offset; +} +static int dissect_ggsn_Number_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_Ggsn_Number(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_ggsn_Number); +} - GSM_MAP_PARAM_DISPLAY(subtree, saved_offset, tag, GSM_MAP_P_GMSC_ADDR, "GMSC Address"); - } +static const ber_sequence_t SendRoutingInfoForGprsArg_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_imsi_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ggsn_Address_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_ggsn_Number_impl }, + { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { 0, 0, 0, NULL } +}; - if (tcap_check_tag(asn1, 0x89)) - { - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); +static int +dissect_gsm_map_SendRoutingInfoForGprsArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + SendRoutingInfoForGprsArg_sequence, hf_index, ett_gsm_map_SendRoutingInfoForGprsArg); - GSM_MAP_PARAM_DISPLAY(subtree, saved_offset, tag, GSM_MAP_P_NONE, "Call Reference Number"); - } + return offset; +} - if (tcap_check_tag(asn1, 0x8a)) - { - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); +static const ber_sequence_t SendRoutingInfoForGprsRes_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_sgsn_Address_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ggsn_Address_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mobileNotReachableReason_impl }, + { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { 0, 0, 0, NULL } +}; - GSM_MAP_PARAM_DISPLAY(subtree, saved_offset, tag, GSM_MAP_P_NONE, "OR Interrogation"); - } +static int +dissect_gsm_map_SendRoutingInfoForGprsRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + SendRoutingInfoForGprsRes_sequence, hf_index, ett_gsm_map_SendRoutingInfoForGprsRes); - if (tcap_check_tag(asn1, 0x8b)) - { - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); + return offset; +} - GSM_MAP_PARAM_DISPLAY(subtree, saved_offset, tag, GSM_MAP_P_NONE, "Extension Container"); - } +static const ber_sequence_t FailureReportArg_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_imsi_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_ggsn_Number_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ggsn_Address_impl }, + { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { 0, 0, 0, NULL } +}; - if (tcap_check_tag(asn1, 0x8c)) - { - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); +static int +dissect_gsm_map_FailureReportArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + FailureReportArg_sequence, hf_index, ett_gsm_map_FailureReportArg); - GSM_MAP_PARAM_DISPLAY(subtree, saved_offset, tag, GSM_MAP_P_NONE, "Alerting Pattern"); - } + return offset; +} - if (tcap_check_tag(asn1, 0x8d)) - { - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); +static const ber_sequence_t FailureReportRes_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ggsn_Address_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { 0, 0, 0, NULL } +}; - GSM_MAP_PARAM_DISPLAY(subtree, saved_offset, tag, GSM_MAP_P_NONE, "CCBS Call"); - } +static int +dissect_gsm_map_FailureReportRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + FailureReportRes_sequence, hf_index, ett_gsm_map_FailureReportRes); - if (tcap_check_tag(asn1, 0x8f)) - { - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); + return offset; +} - GSM_MAP_PARAM_DISPLAY(subtree, saved_offset, tag, GSM_MAP_P_NONE, "Supported Camel Phases In GMSC"); - } +static const ber_sequence_t NoteMsPresentForGprsArg_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_imsi_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_sgsn_Address_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ggsn_Address_impl }, + { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { 0, 0, 0, NULL } +}; - if (tcap_check_tag(asn1, 0x8e)) - { - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); +static int +dissect_gsm_map_NoteMsPresentForGprsArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + NoteMsPresentForGprsArg_sequence, hf_index, ett_gsm_map_NoteMsPresentForGprsArg); - GSM_MAP_PARAM_DISPLAY(subtree, saved_offset, tag, GSM_MAP_P_NONE, "Additional Signal Info"); - } + return offset; +} - if (tcap_check_tag(asn1, 0x90)) - { - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); +static const ber_sequence_t NoteMsPresentForGprsRes_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { 0, 0, 0, NULL } +}; - GSM_MAP_PARAM_DISPLAY(subtree, saved_offset, tag, GSM_MAP_P_NONE, "OR Not Supported In GMSC"); - } +static int +dissect_gsm_map_NoteMsPresentForGprsRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + NoteMsPresentForGprsRes_sequence, hf_index, ett_gsm_map_NoteMsPresentForGprsRes); - if (tcap_check_tag(asn1, 0x91)) - { - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); + return offset; +} - GSM_MAP_PARAM_DISPLAY(subtree, saved_offset, tag, GSM_MAP_P_NONE, "Pre-paging Supported"); - } - if (tcap_check_tag(asn1, 0x92)) - { - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); +static const value_string gsm_map_LcsClientType_vals[] = { + { 0, "emergencyServices" }, + { 1, "valueAddedServices" }, + { 2, "plmnOperatorServices" }, + { 3, "lawfulInterceptServices" }, + { 0, NULL } +}; - GSM_MAP_PARAM_DISPLAY(subtree, saved_offset, tag, GSM_MAP_P_NONE, "Long FTN Supported"); - } - dissect_map_params(asn1, subtree, len - (asn1->offset - start_offset)); +static int +dissect_gsm_map_LcsClientType(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, NULL); - if (!def_len) - { - dissect_map_eoc(asn1, subtree); - } + return offset; +} +static int dissect_lcsClientType_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_LcsClientType(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_lcsClientType); } -static void -op_provide_rn_rr(ASN1_SCK *asn1, proto_tree *tree, guint exp_len) -{ - guint saved_offset, start_offset; - guint tag, len; - gboolean def_len = FALSE; - proto_tree *subtree; - - exp_len = exp_len; +static const ber_sequence_t LcsClientExternalID_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_externalAddress_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { 0, 0, 0, NULL } +}; - if (tvb_length_remaining(asn1->tvb, asn1->offset) <= 0) return; +static int +dissect_gsm_map_LcsClientExternalID(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + LcsClientExternalID_sequence, hf_index, ett_gsm_map_LcsClientExternalID); - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); + return offset; +} +static int dissect_lcsClientExternalID_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_LcsClientExternalID(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_lcsClientExternalID); +} - if (TCAP_CONSTRUCTOR(tag) == FALSE) - { - GSM_MAP_PARAM_DISPLAY(tree, saved_offset, tag, GSM_MAP_P_ROAMING_NUM, "Roaming Number"); - return; - } +static const value_string gsm_map_LcsClientInternalID_vals[] = { + { 0, "broadcastService" }, + { 1, "o-andM-HPLMN" }, + { 2, "o-andM-VPLMN" }, + { 3, "anonymousLocation" }, + { 4, "targetMSsubscribedService" }, + { 0, NULL } +}; - GSM_MAP_START_SUBTREE(tree, saved_offset, tag, "Sequence", - ett_sequence, - &def_len, &len, subtree); - start_offset = asn1->offset; +static int +dissect_gsm_map_LcsClientInternalID(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, NULL); - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); + return offset; +} +static int dissect_lcsClientInternalID_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_LcsClientInternalID(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_lcsClientInternalID); +} - GSM_MAP_PARAM_DISPLAY(subtree, saved_offset, tag, GSM_MAP_P_ROAMING_NUM, "Roaming Number"); +static const ber_sequence_t LcsClientName_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_dataCodingScheme_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_nameString_impl }, + { 0, 0, 0, NULL } +}; - dissect_map_params(asn1, subtree, len - (asn1->offset - start_offset)); +static int +dissect_gsm_map_LcsClientName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + LcsClientName_sequence, hf_index, ett_gsm_map_LcsClientName); - if (!def_len) - { - dissect_map_eoc(asn1, subtree); - } + return offset; +} +static int dissect_lcsClientName_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_LcsClientName(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_lcsClientName); } -/* - * Description: - * Generic dissector for Supplementary Services - */ -static void -op_ss_generic(ASN1_SCK *asn1, proto_tree *tree, guint exp_len) -{ +static const ber_sequence_t Lcs_ClientID_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_lcsClientType_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_lcsClientExternalID_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_lcsClientDialedByMS_impl }, + { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_lcsClientInternalID_impl }, + { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_lcsClientName_impl }, + { 0, 0, 0, NULL } +}; - if (tvb_length_remaining(asn1->tvb, asn1->offset) <= 0) return; +static int +dissect_gsm_map_Lcs_ClientID(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + Lcs_ClientID_sequence, hf_index, ett_gsm_map_Lcs_ClientID); - gsm_ss_dissect(asn1, tree, exp_len, g_opr_code, g_comp_type_tag); + return offset; +} +static int dissect_lcs_ClientID(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_Lcs_ClientID(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_lcs_ClientID); +} +static int dissect_lcs_ClientID_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_Lcs_ClientID(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_lcs_ClientID); } -static void -op_mo_forward_sm(ASN1_SCK *asn1, proto_tree *tree, guint exp_len) -{ - guint saved_offset, start_offset; - guint tag, len; - gboolean def_len = FALSE; - proto_tree *subtree; - exp_len = exp_len; +static const value_string gsm_map_Lcs_Event_vals[] = { + { 0, "emergencyCallOrigination" }, + { 1, "emergencyCallRelease" }, + { 2, "mo-lr" }, + { 0, NULL } +}; + - if (tvb_length_remaining(asn1->tvb, asn1->offset) <= 0) return; +static int +dissect_gsm_map_Lcs_Event(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, NULL); - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); + return offset; +} +static int dissect_lcs_Event(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_Lcs_Event(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_lcs_Event); +} - if (TCAP_CONSTRUCTOR(tag) == FALSE) - { - /* - * Hmmm, unexpected - */ - return; - } +static const ber_sequence_t LcsLocationInfo_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_msc_Number }, + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_lmsi_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_LcsLocationInfo(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + LcsLocationInfo_sequence, hf_index, ett_gsm_map_LcsLocationInfo); - GSM_MAP_START_SUBTREE(tree, saved_offset, tag, "Sequence", - ett_sequence, - &def_len, &len, subtree); + return offset; +} +static int dissect_lcsLocationInfo(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_LcsLocationInfo(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_lcsLocationInfo); +} +static int dissect_lcsLocationInfo_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_LcsLocationInfo(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_lcsLocationInfo); +} - start_offset = asn1->offset; - param_SM_RP_DA(asn1, subtree); +static const value_string gsm_map_T_locationEstimateType_vals[] = { + { 0, "currentLocation" }, + { 1, "currentOrLastKnownLocation" }, + { 2, "initialLocation" }, + { 0, NULL } +}; - param_SM_RP_OA(asn1, subtree, &g_pinfo->p2p_dir); - param_SM_RP_UI(asn1, subtree); +static int +dissect_gsm_map_T_locationEstimateType(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, NULL); - /* - * older versions of GSM MAP had only one ForwardSM message - */ - if ((tvb_length_remaining(asn1->tvb, asn1->offset) > (def_len ? 0 : TCAP_EOC_LEN)) && - (gsm_map_app_context < 3) && - (g_pinfo->p2p_dir == P2P_DIR_SENT)) - { - /* - * 'more messages' for V1 context - */ - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); + return offset; +} +static int dissect_locationEstimateType_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_locationEstimateType(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_locationEstimateType); +} - GSM_MAP_PARAM_DISPLAY(subtree, saved_offset, tag, GSM_MAP_P_NONE, "More Messages To Send"); - } +static const ber_sequence_t T_locationType_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_locationEstimateType_impl }, + { 0, 0, 0, NULL } +}; - dissect_map_params(asn1, subtree, len - (asn1->offset - start_offset)); +static int +dissect_gsm_map_T_locationType(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + T_locationType_sequence, hf_index, ett_gsm_map_T_locationType); - if (!def_len) - { - dissect_map_eoc(asn1, subtree); - } + return offset; +} +static int dissect_locationType(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_locationType(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_locationType); } -static void -op_mt_forward_sm(ASN1_SCK *asn1, proto_tree *tree, guint exp_len) -{ - guint saved_offset, start_offset; - guint tag, len; - gboolean def_len = FALSE; - proto_tree *subtree; - exp_len = exp_len; +static int +dissect_gsm_map_T_mlc_Number(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - if (tvb_length_remaining(asn1->tvb, asn1->offset) <= 0) return; + return offset; +} +static int dissect_mlc_Number(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_mlc_Number(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_mlc_Number); +} - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); - if (TCAP_CONSTRUCTOR(tag) == FALSE) - { - /* - * Hmmm, unexpected - */ - return; - } +static const value_string gsm_map_T_responseTimeCategory_vals[] = { + { 0, "lowdelay" }, + { 1, "delaytolerant" }, + { 0, NULL } +}; - GSM_MAP_START_SUBTREE(tree, saved_offset, tag, "Sequence", - ett_sequence, - &def_len, &len, subtree); - start_offset = asn1->offset; +static int +dissect_gsm_map_T_responseTimeCategory(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, NULL); - param_SM_RP_DA(asn1, subtree); + return offset; +} +static int dissect_responseTimeCategory(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_responseTimeCategory(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_responseTimeCategory); +} - param_SM_RP_OA(asn1, subtree, &g_pinfo->p2p_dir); +static const ber_sequence_t T_responseTime_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_responseTimeCategory }, + { 0, 0, 0, NULL } +}; - param_SM_RP_UI(asn1, subtree); +static int +dissect_gsm_map_T_responseTime(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + T_responseTime_sequence, hf_index, ett_gsm_map_T_responseTime); - if (tvb_length_remaining(asn1->tvb, asn1->offset) > 0) - { - /* - * 'more messages' - */ - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); + return offset; +} +static int dissect_responseTime_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_responseTime(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_responseTime); +} - GSM_MAP_PARAM_DISPLAY(subtree, saved_offset, tag, GSM_MAP_P_NONE, "More Messages To Send"); - } +static const ber_sequence_t T_lcs_QoS_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_horizontal_accuracy_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_verticalCoordinateRequest_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_vertical_accuracy_impl }, + { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_responseTime_impl }, + { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { 0, 0, 0, NULL } +}; - dissect_map_params(asn1, subtree, len - (asn1->offset - start_offset)); +static int +dissect_gsm_map_T_lcs_QoS(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + T_lcs_QoS_sequence, hf_index, ett_gsm_map_T_lcs_QoS); - if (!def_len) - { - dissect_map_eoc(asn1, subtree); - } + return offset; +} +static int dissect_lcs_QoS_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_lcs_QoS(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_lcs_QoS); } -static void -op_forward_sm_rr(ASN1_SCK *asn1, proto_tree *tree, guint exp_len) -{ - guint saved_offset, start_offset; - guint tag, len; - gboolean def_len = FALSE; - proto_tree *subtree; +static const ber_sequence_t ProvideSubscriberLocation_Arg_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_locationType }, + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_mlc_Number }, + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_lcs_ClientID_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_privacyOverride_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_imsi_impl }, + { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_msisdn_impl }, + { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_lmsi_impl }, + { BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_imei_impl }, + { BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_lcs_Priority_impl }, + { BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_lcs_QoS_impl }, + { BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_ProvideSubscriberLocation_Arg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + ProvideSubscriberLocation_Arg_sequence, hf_index, ett_gsm_map_ProvideSubscriberLocation_Arg); - exp_len = exp_len; + return offset; +} - if (tvb_length_remaining(asn1->tvb, asn1->offset) <= 0) return; +static const ber_sequence_t ProvideSubscriberLocation_Res_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_locationEstimate }, + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ageOfLocationEstimate_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { 0, 0, 0, NULL } +}; - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); +static int +dissect_gsm_map_ProvideSubscriberLocation_Res(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + ProvideSubscriberLocation_Res_sequence, hf_index, ett_gsm_map_ProvideSubscriberLocation_Res); - if (TCAP_CONSTRUCTOR(tag) == FALSE) - { - /* - * Hmmm, unexpected - */ - return; - } + return offset; +} - GSM_MAP_START_SUBTREE(tree, saved_offset, tag, "Sequence", - ett_sequence, - &def_len, &len, subtree); - start_offset = asn1->offset; +static const value_string gsm_map_TargetMS_vals[] = { + { 0, "imsi" }, + { 1, "msisdn" }, + { 0, NULL } +}; - param_SM_RP_UI(asn1, subtree); +static const ber_choice_t TargetMS_choice[] = { + { 0, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_imsi_impl }, + { 1, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_msisdn_impl }, + { 0, 0, 0, 0, NULL } +}; - dissect_map_params(asn1, subtree, len - (asn1->offset - start_offset)); +static int +dissect_gsm_map_TargetMS(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + TargetMS_choice, hf_index, ett_gsm_map_TargetMS); - if (!def_len) - { - dissect_map_eoc(asn1, subtree); - } + return offset; +} +static int dissect_targetMS(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_TargetMS(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_targetMS); } -static void -op_send_rti_sm(ASN1_SCK *asn1, proto_tree *tree, guint exp_len) -{ - guint saved_offset, start_offset; - guint tag, len; - gboolean def_len = FALSE; - proto_tree *subtree; - exp_len = exp_len; +static int +dissect_gsm_map_T_mlcNumber(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - if (tvb_length_remaining(asn1->tvb, asn1->offset) <= 0) return; + return offset; +} +static int dissect_mlcNumber_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_mlcNumber(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_mlcNumber); +} - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); +static const ber_sequence_t RoutingInfoForLCS_Arg_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_mlcNumber_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_NOTCHKTAG, dissect_targetMS }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { 0, 0, 0, NULL } +}; - if (TCAP_CONSTRUCTOR(tag) == FALSE) - { - /* - * Hmmm, unexpected - */ - return; - } +static int +dissect_gsm_map_RoutingInfoForLCS_Arg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + RoutingInfoForLCS_Arg_sequence, hf_index, ett_gsm_map_RoutingInfoForLCS_Arg); - GSM_MAP_START_SUBTREE(tree, saved_offset, tag, "Sequence", - ett_sequence, - &def_len, &len, subtree); + return offset; +} - start_offset = asn1->offset; +static const ber_sequence_t RoutingInfoForLCS_Res_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_NOTCHKTAG, dissect_targetMS }, + { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_lcsLocationInfo_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { 0, 0, 0, NULL } +}; - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); +static int +dissect_gsm_map_RoutingInfoForLCS_Res(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + RoutingInfoForLCS_Res_sequence, hf_index, ett_gsm_map_RoutingInfoForLCS_Res); - GSM_MAP_PARAM_DISPLAY(subtree, saved_offset, tag, GSM_MAP_P_MSISDN, "MSISDN"); + return offset; +} - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); - GSM_MAP_PARAM_DISPLAY(subtree, saved_offset, tag, GSM_MAP_P_BOOL, "SM-RP-PRI"); +static int +dissect_gsm_map_T_na_ESRD(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); + return offset; +} +static int dissect_na_ESRD_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_na_ESRD(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_na_ESRD); +} - GSM_MAP_PARAM_DISPLAY(subtree, saved_offset, tag, GSM_MAP_P_SC_ADDR, "Service Centre Address"); - dissect_map_params(asn1, subtree, len - (asn1->offset - start_offset)); +static int +dissect_gsm_map_T_na_ESRK(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - if (!def_len) - { - dissect_map_eoc(asn1, subtree); - } + return offset; +} +static int dissect_na_ESRK_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_na_ESRK(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_na_ESRK); } -static void -op_send_rti_sm_rr(ASN1_SCK *asn1, proto_tree *tree, guint exp_len) -{ - guint saved_offset, start_offset; - guint tag, len; - gboolean def_len = FALSE; - proto_tree *subtree; - - exp_len = exp_len; +static const ber_sequence_t SubscriberLocationReport_Arg_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_lcs_Event }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_lcs_ClientID }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_lcsLocationInfo }, + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_msisdn_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_imsi_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_imei_impl }, + { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_na_ESRD_impl }, + { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_na_ESRK_impl }, + { BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_locationEstimate_impl }, + { BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ageOfLocationEstimate_impl }, + { BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { 0, 0, 0, NULL } +}; - if (tvb_length_remaining(asn1->tvb, asn1->offset) <= 0) return; +static int +dissect_gsm_map_SubscriberLocationReport_Arg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + SubscriberLocationReport_Arg_sequence, hf_index, ett_gsm_map_SubscriberLocationReport_Arg); - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); + return offset; +} - if (TCAP_CONSTRUCTOR(tag) == FALSE) - { - /* - * Hmmm, unexpected - */ - return; - } +static const ber_sequence_t SubscriberLocationReport_Res_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { 0, 0, 0, NULL } +}; - GSM_MAP_START_SUBTREE(tree, saved_offset, tag, "Sequence", - ett_sequence, - &def_len, &len, subtree); +static int +dissect_gsm_map_SubscriberLocationReport_Res(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + SubscriberLocationReport_Res_sequence, hf_index, ett_gsm_map_SubscriberLocationReport_Res); - start_offset = asn1->offset; + return offset; +} - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); - GSM_MAP_PARAM_DISPLAY(subtree, saved_offset, tag, GSM_MAP_P_IMSI, "IMSI"); +static const value_string gsm_map_NetworkResource_vals[] = { + { 0, "plmn" }, + { 1, "hlr" }, + { 2, "vlr" }, + { 3, "pvlr" }, + { 4, "controllingMSC" }, + { 5, "vmsc" }, + { 6, "eir" }, + { 7, "rss" }, + { 0, NULL } +}; - param_LWI_LMSI(asn1, subtree); - dissect_map_params(asn1, subtree, len - (asn1->offset - start_offset)); +static int +dissect_gsm_map_NetworkResource(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, NULL); - if (!def_len) - { - dissect_map_eoc(asn1, subtree); - } + return offset; +} +static int dissect_networkResource(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_NetworkResource(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_networkResource); } -static void -op_alert_sc(ASN1_SCK *asn1, proto_tree *tree, guint exp_len) -{ - guint saved_offset, start_offset; - guint tag, len; - gboolean def_len = FALSE; - proto_tree *subtree; +static const ber_sequence_t T_extensibleSystemFailureParam_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_networkResource }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_T_extensibleSystemFailureParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + T_extensibleSystemFailureParam_sequence, hf_index, ett_gsm_map_T_extensibleSystemFailureParam); - exp_len = exp_len; + return offset; +} +static int dissect_extensibleSystemFailureParam(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_extensibleSystemFailureParam(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_extensibleSystemFailureParam); +} - if (tvb_length_remaining(asn1->tvb, asn1->offset) <= 0) return; - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); +static const value_string gsm_map_SystemFailureParam_vals[] = { + { 0, "networkResource" }, + { 1, "extensibleSystemFailureParam" }, + { 0, NULL } +}; - if (TCAP_CONSTRUCTOR(tag) == FALSE) - { - /* - * Hmmm, unexpected - */ - return; - } +static const ber_choice_t SystemFailureParam_choice[] = { + { 0, BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_networkResource }, + { 1, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_extensibleSystemFailureParam }, + { 0, 0, 0, 0, NULL } +}; - GSM_MAP_START_SUBTREE(tree, saved_offset, tag, "Sequence", - ett_sequence, - &def_len, &len, subtree); +static int +dissect_gsm_map_SystemFailureParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + SystemFailureParam_choice, hf_index, ett_gsm_map_SystemFailureParam); - start_offset = asn1->offset; + return offset; +} - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); +static const ber_sequence_t DataMissingParam_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { 0, 0, 0, NULL } +}; - GSM_MAP_PARAM_DISPLAY(subtree, saved_offset, tag, GSM_MAP_P_MSISDN, "MSISDN"); +static int +dissect_gsm_map_DataMissingParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + DataMissingParam_sequence, hf_index, ett_gsm_map_DataMissingParam); - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); + return offset; +} - GSM_MAP_PARAM_DISPLAY(subtree, saved_offset, tag, GSM_MAP_P_SC_ADDR, "Service Centre Address"); +static const ber_sequence_t UnexpectedDataParam_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { 0, 0, 0, NULL } +}; - dissect_map_params(asn1, subtree, len - (asn1->offset - start_offset)); +static int +dissect_gsm_map_UnexpectedDataParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + UnexpectedDataParam_sequence, hf_index, ett_gsm_map_UnexpectedDataParam); - if (!def_len) - { - dissect_map_eoc(asn1, subtree); - } + return offset; } -static void -op_ready_sm(ASN1_SCK *asn1, proto_tree *tree, guint exp_len) -{ - guint saved_offset, start_offset; - guint tag, len; - gboolean def_len = FALSE; - proto_tree *subtree; +static const ber_sequence_t FacilityNotSupParam_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { 0, 0, 0, NULL } +}; - exp_len = exp_len; +static int +dissect_gsm_map_FacilityNotSupParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + FacilityNotSupParam_sequence, hf_index, ett_gsm_map_FacilityNotSupParam); - if (tvb_length_remaining(asn1->tvb, asn1->offset) <= 0) return; + return offset; +} - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); +static const ber_sequence_t IncompatibleTerminalParam_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { 0, 0, 0, NULL } +}; - if (TCAP_CONSTRUCTOR(tag) == FALSE) - { - /* - * Hmmm, unexpected - */ - return; - } +static int +dissect_gsm_map_IncompatibleTerminalParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + IncompatibleTerminalParam_sequence, hf_index, ett_gsm_map_IncompatibleTerminalParam); - GSM_MAP_START_SUBTREE(tree, saved_offset, tag, "Sequence", - ett_sequence, - &def_len, &len, subtree); + return offset; +} - start_offset = asn1->offset; +static const ber_sequence_t ResourceLimitationParam_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { 0, 0, 0, NULL } +}; - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); +static int +dissect_gsm_map_ResourceLimitationParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + ResourceLimitationParam_sequence, hf_index, ett_gsm_map_ResourceLimitationParam); - GSM_MAP_PARAM_DISPLAY(subtree, saved_offset, tag, GSM_MAP_P_IMSI, "IMSI"); + return offset; +} - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); - GSM_MAP_PARAM_DISPLAY(subtree, saved_offset, tag, GSM_MAP_P_ALERT_REASON, "Alert Reason"); +static const value_string gsm_map_T_unknownSubscriberDiagnostic_vals[] = { + { 0, "imsiUnknown" }, + { 1, "gprsSubscriptionUnknown" }, + { 0, NULL } +}; - dissect_map_params(asn1, subtree, len - (asn1->offset - start_offset)); - if (!def_len) - { - dissect_map_eoc(asn1, subtree); - } +static int +dissect_gsm_map_T_unknownSubscriberDiagnostic(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, NULL); + + return offset; +} +static int dissect_unknownSubscriberDiagnostic(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_unknownSubscriberDiagnostic(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_unknownSubscriberDiagnostic); } -static void -op_alert_sc_wr(ASN1_SCK *asn1, proto_tree *tree, guint exp_len) -{ - guint saved_offset, start_offset; - guint tag, len; - gboolean def_len = FALSE; - proto_tree *subtree; +static const ber_sequence_t UnknownSubscriberParam_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_unknownSubscriberDiagnostic }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_UnknownSubscriberParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + UnknownSubscriberParam_sequence, hf_index, ett_gsm_map_UnknownSubscriberParam); - exp_len = exp_len; + return offset; +} - if (tvb_length_remaining(asn1->tvb, asn1->offset) <= 0) return; +static const ber_sequence_t NumberChangedParam_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { 0, 0, 0, NULL } +}; - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); +static int +dissect_gsm_map_NumberChangedParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + NumberChangedParam_sequence, hf_index, ett_gsm_map_NumberChangedParam); - if (TCAP_CONSTRUCTOR(tag) == FALSE) - { - /* - * Hmmm, unexpected - */ - return; - } + return offset; +} - GSM_MAP_START_SUBTREE(tree, saved_offset, tag, "Sequence", - ett_sequence, - &def_len, &len, subtree); +static const ber_sequence_t UnidentifiedSubParam_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { 0, 0, 0, NULL } +}; - start_offset = asn1->offset; +static int +dissect_gsm_map_UnidentifiedSubParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + UnidentifiedSubParam_sequence, hf_index, ett_gsm_map_UnidentifiedSubParam); - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); + return offset; +} - GSM_MAP_PARAM_DISPLAY(subtree, saved_offset, tag, GSM_MAP_P_MSISDN, "MSISDN"); - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); +static const value_string gsm_map_T_roamingNotAllowedCause_vals[] = { + { 0, "plmnRoamingNotAllowed" }, + { 3, "operatorDeterminedBarring" }, + { 0, NULL } +}; - GSM_MAP_PARAM_DISPLAY(subtree, saved_offset, tag, GSM_MAP_P_SC_ADDR, "Service Centre Address"); - dissect_map_params(asn1, subtree, len - (asn1->offset - start_offset)); +static int +dissect_gsm_map_T_roamingNotAllowedCause(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, NULL); - if (!def_len) - { - dissect_map_eoc(asn1, subtree); - } + return offset; +} +static int dissect_roamingNotAllowedCause(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_roamingNotAllowedCause(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_roamingNotAllowedCause); } -#define GSM_MAP_NUM_OP (sizeof(gsm_map_opr_code_strings)/sizeof(value_string)) -static gint ett_op[GSM_MAP_NUM_OP]; -static void (*op_fcn[])(ASN1_SCK *asn1, proto_tree *tree, guint exp_len) = { - op_update_loc, /* Update Location */ - op_cancel_loc, /* Cancel Location */ - NULL, /* Purge MS */ - NULL, /* Send Identification */ - NULL, /* Update GPRS Location */ - NULL, /* Detach IMSI */ - NULL, /* Note MM Event */ - NULL, /* Prepare Handover */ - NULL, /* Prepare Subsequent Handover */ - NULL, /* Perform Handover */ - NULL, /* Perform Subsequent Handover */ - NULL, /* Send End Signal */ - NULL, /* Process Access Signalling */ - NULL, /* Forward Access Signalling */ - op_send_auth_info, /* Send Authentication Info */ - NULL, /* Authentication Failure Report */ - NULL, /* Check IMEI */ - NULL, /* Reset */ - op_restore_data, /* Restore Data */ - NULL, /* Forward Check SS Indication */ - NULL, /* Activate Trace Mode */ - NULL, /* Deactivate Trace Mode */ - NULL, /* Send IMSI */ - NULL, /* Trace Subscriber Activity */ - NULL, /* Note Internal Handover */ - op_send_rti, /* Send Routing Info */ - op_provide_rn, /* Provide Roaming Number */ - NULL, /* Provide SIWFS Number */ - NULL, /* SIWFS Signalling Modify */ - NULL, /* Resume Call Handling */ - NULL, /* Set Reporting State */ - NULL, /* Status Report */ - NULL, /* Remote User Free */ - NULL, /* Prepare Group Call */ - NULL, /* Send Group Call End Signalling */ - NULL, /* Process Group Call Signalling */ - NULL, /* Forward Group Call Signalling */ - NULL, /* IST Alert */ - NULL, /* IST Command */ - op_ss_generic, /* Register SS */ - op_ss_generic, /* Erase SS */ - op_ss_generic, /* Activate SS */ - op_ss_generic, /* Deactivate SS */ - op_ss_generic, /* Interrogate SS */ - op_ss_generic, /* Process Unstructured SS Request */ - op_ss_generic, /* Unstructured SS Request */ - op_ss_generic, /* Unstructured SS Notify */ - op_ss_generic, /* Register Password */ - op_ss_generic, /* Get Password */ - op_ss_generic, /* Register CC Entry */ - op_ss_generic, /* Erase CC Entry */ - NULL, /* Begin Subscriber Activity */ - op_ss_generic, /* Process Unstructured SS Data */ - op_ss_generic, /* SS Invocation Notification */ - op_mo_forward_sm, /* MO Forward SM */ - op_mt_forward_sm, /* MT Forward SM */ - op_send_rti_sm, /* Send Routing Info For SM */ - NULL, /* Report SM Delivery Status */ - NULL, /* Inform Service Center */ - op_alert_sc, /* Alert Service Center */ - op_ready_sm, /* Ready For SM */ - NULL, /* Note Subscriber Present */ - op_alert_sc_wr, /* Alert SC Without Result */ - NULL, /* Insert Subscriber Data */ - NULL, /* Delete Subscriber Data */ - NULL, /* Provide Subscriber Info */ - NULL, /* Any Time Interrogation */ - NULL, /* Send Parameters */ - NULL, /* Any Time Subscription Interrogation */ - NULL, /* Any Time Modification */ - NULL, /* Note Subscriber Data Modified */ - NULL, /* Send Routing Info For GPRS */ - NULL, /* Failure Report */ - NULL, /* Note MS Present For GPRS */ - NULL, /* Provide Subscriber Location */ - NULL, /* Send Routing Info For LCS */ - NULL, /* Subscriber Location Report */ - - NULL /* NONE */ -}; - -static gint ett_op_rr[GSM_MAP_NUM_OP]; -static void (*op_fcn_rr[])(ASN1_SCK *asn1, proto_tree *tree, guint exp_len) = { - op_update_loc_rr, /* Update Location */ - NULL, /* Cancel Location */ - NULL, /* Purge MS */ - NULL, /* Send Identification */ - NULL, /* Update GPRS Location */ - NULL, /* Detach IMSI */ - NULL, /* Note MM Event */ - NULL, /* Prepare Handover */ - NULL, /* Prepare Subsequent Handover */ - NULL, /* Perform Handover */ - NULL, /* Perform Subsequent Handover */ - NULL, /* Send End Signal */ - NULL, /* Process Access Signalling */ - NULL, /* Forward Access Signalling */ - op_send_auth_info_rr, /* Send Authentication Info */ - NULL, /* Authentication Failure Report */ - NULL, /* Check IMEI */ - NULL, /* Reset */ - op_restore_data_rr, /* Restore Data */ - NULL, /* Forward Check SS Indication */ - NULL, /* Activate Trace Mode */ - NULL, /* Deactivate Trace Mode */ - NULL, /* Send IMSI */ - NULL, /* Trace Subscriber Activity */ - NULL, /* Note Internal Handover */ - op_send_rti_rr, /* Send Routing Info */ - op_provide_rn_rr, /* Provide Roaming Number */ - NULL, /* Provide SIWFS Number */ - NULL, /* SIWFS Signalling Modify */ - NULL, /* Resume Call Handling */ - NULL, /* Set Reporting State */ - NULL, /* Status Report */ - NULL, /* Remote User Free */ - NULL, /* Prepare Group Call */ - NULL, /* Send Group Call End Signalling */ - NULL, /* Process Group Call Signalling */ - NULL, /* Forward Group Call Signalling */ - NULL, /* IST Alert */ - NULL, /* IST Command */ - op_ss_generic, /* Register SS */ - op_ss_generic, /* Erase SS */ - op_ss_generic, /* Activate SS */ - op_ss_generic, /* Deactivate SS */ - op_ss_generic, /* Interrogate SS */ - op_ss_generic, /* Process Unstructured SS Request */ - op_ss_generic, /* Unstructured SS Request */ - op_ss_generic, /* Unstructured SS Notify */ - op_ss_generic, /* Register Password */ - op_ss_generic, /* Get Password */ - op_ss_generic, /* Register CC Entry */ - op_ss_generic, /* Erase CC Entry */ - NULL, /* Begin Subscriber Activity */ - op_ss_generic, /* Process Unstructured SS Data */ - op_ss_generic, /* SS Invocation Notification */ - op_forward_sm_rr, /* MO Forward SM */ - op_forward_sm_rr, /* MT Forward SM */ - op_send_rti_sm_rr, /* Send Routing Info For SM */ - NULL, /* Report SM Delivery Status */ - NULL, /* Inform Service Center */ - NULL, /* Alert Service Center */ - NULL, /* Ready For SM */ - NULL, /* Note Subscriber Present */ - NULL, /* Alert SC Without Result */ - NULL, /* Insert Subscriber Data */ - NULL, /* Delete Subscriber Data */ - NULL, /* Provide Subscriber Info */ - NULL, /* Any Time Interrogation */ - NULL, /* Send Parameters */ - NULL, /* Any Time Subscription Interrogation */ - NULL, /* Any Time Modification */ - NULL, /* Note Subscriber Data Modified */ - NULL, /* Send Routing Info For GPRS */ - NULL, /* Failure Report */ - NULL, /* Note MS Present For GPRS */ - NULL, /* Provide Subscriber Location */ - NULL, /* Send Routing Info For LCS */ - NULL, /* Subscriber Location Report */ - - NULL /* NONE */ -}; - - -/* GENERIC MAP DISSECTOR FUNCTIONS */ - -static int -dissect_map_tag(ASN1_SCK *asn1, proto_tree *tree, guint *tag, guchar * str, - proto_item **item_p) -{ - guint saved_offset, real_tag; +static const ber_sequence_t RoamingNotAllowedParam_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_roamingNotAllowedCause }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_RoamingNotAllowedParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + RoamingNotAllowedParam_sequence, hf_index, ett_gsm_map_RoamingNotAllowedParam); - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &real_tag); + return offset; +} - if ((*tag != (guint) -1) && (real_tag != *tag)) - { - asn1->offset = saved_offset; - return(MAP_FAIL); - } +static const ber_sequence_t IllegalSubscriberParam_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { 0, 0, 0, NULL } +}; - *item_p = - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s: 0x%02x", str, real_tag); +static int +dissect_gsm_map_IllegalSubscriberParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + IllegalSubscriberParam_sequence, hf_index, ett_gsm_map_IllegalSubscriberParam); - return(MAP_OK); + return offset; } +static const ber_sequence_t IllegalEquipmentParam_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { 0, 0, 0, NULL } +}; static int -dissect_map_len(ASN1_SCK *asn1, proto_tree *tree, gboolean *def_len, guint *len) -{ - guint saved_offset; +dissect_gsm_map_IllegalEquipmentParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + IllegalEquipmentParam_sequence, hf_index, ett_gsm_map_IllegalEquipmentParam); - saved_offset = asn1->offset; - *len = 0; - *def_len = FALSE; - asn1_length_decode(asn1, def_len, len); + return offset; +} - if (*def_len) - { - proto_tree_add_uint(tree, hf_map_length, asn1->tvb, saved_offset, - asn1->offset - saved_offset, *len); - } - else - { - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, "Length: Indefinite"); - } +static const ber_sequence_t BearerServNotProvParam_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_BearerServNotProvParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + BearerServNotProvParam_sequence, hf_index, ett_gsm_map_BearerServNotProvParam); - return(MAP_OK); + return offset; } +static const ber_sequence_t TeleservNotProvParam_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { 0, 0, 0, NULL } +}; static int -dissect_map_integer(ASN1_SCK *asn1, proto_tree *tree, guint len, guchar * str) -{ - guint saved_offset; - gint32 invokeId; +dissect_gsm_map_TeleservNotProvParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + TeleservNotProvParam_sequence, hf_index, ett_gsm_map_TeleservNotProvParam); + + return offset; +} - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, len, &invokeId); +static const ber_sequence_t TracingBufferFullParam_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { 0, 0, 0, NULL } +}; - proto_tree_add_int_format(tree, hf_map_int, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - invokeId, "%s %d", str, invokeId); +static int +dissect_gsm_map_TracingBufferFullParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + TracingBufferFullParam_sequence, hf_index, ett_gsm_map_TracingBufferFullParam); - return(MAP_OK); + return offset; } +static const ber_sequence_t NoRoamingNbParam_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { 0, 0, 0, NULL } +}; static int -dissect_map_invokeId(ASN1_SCK *asn1, proto_tree *tree) -{ - guint saved_offset = 0; - guint len; - guint tag; - proto_item *item, *null_item; - proto_tree *subtree; - gboolean def_len; - - if (tcap_check_tag(asn1, TCAP_INVOKE_ID_TAG)) - { - saved_offset = asn1->offset; - item = - proto_tree_add_text(tree, asn1->tvb, - saved_offset, -1, "Invoke Id"); +dissect_gsm_map_NoRoamingNbParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + NoRoamingNbParam_sequence, hf_index, ett_gsm_map_NoRoamingNbParam); - subtree = proto_item_add_subtree(item, ett_component); + return offset; +} - tag = -1; - dissect_map_tag(asn1, subtree, &tag, "Invoke Id Tag", &null_item); - dissect_map_len(asn1, subtree, &def_len, &len); - dissect_map_integer(asn1, subtree, len, "Invoke Id:"); - proto_item_set_len(item, asn1->offset - saved_offset); - } +static const value_string gsm_map_T_absentSubscriberReason_vals[] = { + { 0, "imsiDetach" }, + { 1, "restrictedArea" }, + { 2, "noPageResponse" }, + { 0, NULL } +}; - return(MAP_OK); + +static int +dissect_gsm_map_T_absentSubscriberReason(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, NULL); + + return offset; +} +static int dissect_absentSubscriberReason_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_absentSubscriberReason(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_absentSubscriberReason); } +static const ber_sequence_t AbsentSubscriberParam_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_absentSubscriberReason_impl }, + { 0, 0, 0, NULL } +}; -static void -dissect_map_problem(ASN1_SCK *asn1, proto_tree *tree) -{ - guint orig_offset, saved_offset, len_offset; - guint len; - guint tag; - proto_tree *subtree; - proto_item *item = NULL; - gchar *str = NULL; - gchar *type_str = NULL; - gint32 spec; - gboolean def_len; +static int +dissect_gsm_map_AbsentSubscriberParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + AbsentSubscriberParam_sequence, hf_index, ett_gsm_map_AbsentSubscriberParam); - orig_offset = asn1->offset; - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); + return offset; +} - len_offset = asn1->offset; - asn1_length_decode(asn1, &def_len, &len); +static const ber_sequence_t BusySubscriberParam_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ccbs_Possible_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ccbs_Busy_impl }, + { 0, 0, 0, NULL } +}; - item = - proto_tree_add_text(tree, asn1->tvb, saved_offset, -1, "Problem Code"); +static int +dissect_gsm_map_BusySubscriberParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + BusySubscriberParam_sequence, hf_index, ett_gsm_map_BusySubscriberParam); - subtree = proto_item_add_subtree(item, ett_problem); + return offset; +} - if (!def_len) - { - len = tcap_find_eoc(asn1); - } +static const ber_sequence_t NoSubscriberReplyParam_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { 0, 0, 0, NULL } +}; - proto_item_set_len(item, (asn1->offset - saved_offset) + len + - (def_len ? 0 : TCAP_EOC_LEN)); +static int +dissect_gsm_map_NoSubscriberReplyParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + NoSubscriberReplyParam_sequence, hf_index, ett_gsm_map_NoSubscriberReplyParam); - if (len != 1) - { - proto_tree_add_text(subtree, asn1->tvb, - asn1->offset, len, "Unknown encoding of Problem Code"); + return offset; +} - asn1->offset += len; - if (!def_len) - { - asn1_eoc_decode(asn1, -1); - } +static const value_string gsm_map_CallBarringCause_vals[] = { + { 0, "barringServiceActive" }, + { 1, "operatorBarring" }, + { 0, NULL } +}; - return; - } - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &spec); +static int +dissect_gsm_map_CallBarringCause(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, NULL); - switch (tag) - { - case MAP_GE_PROBLEM_TAG: - type_str = "General Problem"; - switch (spec) - { - case 0: str = "Unrecognized Component"; break; - case 1: str = "Mistyped Component"; break; - case 2: str = "Badly Structured Component"; break; - default: - str = "Undefined"; - break; - } - break; + return offset; +} +static int dissect_callBarringCause(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_CallBarringCause(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_callBarringCause); +} - case MAP_IN_PROBLEM_TAG: - type_str = "Invoke"; - switch (spec) - { - case 0: str = "Duplicate Invoke ID"; break; - case 1: str = "Unrecognized Operation"; break; - case 2: str = "Mistyped Parameter"; break; - case 3: str = "Resource Limitation"; break; - case 4: str = "Initiating Release"; break; - case 5: str = "Unrecognized Linked ID"; break; - case 6: str = "Linked Response Unexpected"; break; - case 7: str = "Unexpected Linked Operation"; break; - default: - str = "Undefined"; - break; - } - break; +static const ber_sequence_t T_extensibleCallBarredParam_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_callBarringCause }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_unauthorisedMessageOriginator_impl }, + { 0, 0, 0, NULL } +}; - case MAP_RR_PROBLEM_TAG: - type_str = "Return Result"; - switch (spec) - { - case 0: str = "Unrecognized Invoke ID"; break; - case 1: str = "Return Result Unexpected"; break; - case 2: str = "Mistyped Parameter"; break; - default: - str = "Undefined"; - break; - } - break; +static int +dissect_gsm_map_T_extensibleCallBarredParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + T_extensibleCallBarredParam_sequence, hf_index, ett_gsm_map_T_extensibleCallBarredParam); - case MAP_RE_PROBLEM_TAG: - type_str = "Return Error"; - switch (spec) - { - case 0: str = "Unrecognized Invoke ID"; break; - case 1: str = "Return Error Unexpected"; break; - case 2: str = "Unrecognized Error"; break; - case 3: str = "Unexpected Error"; break; - case 4: str = "Mistyped Parameter"; break; - default: - str = "Undefined"; - break; - } - break; + return offset; +} +static int dissect_extensibleCallBarredParam(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_extensibleCallBarredParam(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_extensibleCallBarredParam); +} - default: - type_str = "Undefined"; - break; - } - proto_tree_add_text(subtree, asn1->tvb, - orig_offset, len_offset - orig_offset, - "%s: %02x", type_str, tag); +static const value_string gsm_map_CallBarredParam_vals[] = { + { 0, "callBarringCause" }, + { 1, "extensibleCallBarredParam" }, + { 0, NULL } +}; - if (def_len) - { - proto_tree_add_uint(subtree, hf_map_length, asn1->tvb, - len_offset, saved_offset - len_offset, len); - } - else - { - proto_tree_add_text(subtree, asn1->tvb, - len_offset, saved_offset - len_offset, "Length: Indefinite"); - } +static const ber_choice_t CallBarredParam_choice[] = { + { 0, BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_callBarringCause }, + { 1, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_extensibleCallBarredParam }, + { 0, 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_CallBarredParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + CallBarredParam_choice, hf_index, ett_gsm_map_CallBarredParam); - proto_tree_add_text(subtree, asn1->tvb, saved_offset, 1, - "Problem Specifier %s", str); + return offset; } +static const ber_sequence_t ForwardingFailedParam_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { 0, 0, 0, NULL } +}; static int -dissect_map_lnkId(ASN1_SCK *asn1, proto_tree *tree) -{ - guint saved_offset = 0; - guint len; - guint tag; - proto_item *item, *null_item; - proto_tree *subtree; - gboolean def_len; - - if (tcap_check_tag(asn1, TCAP_LINKED_ID_TAG)) - { - saved_offset = asn1->offset; - - item = - proto_tree_add_text(tree, asn1->tvb, - saved_offset, -1, "Linked Id"); +dissect_gsm_map_ForwardingFailedParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + ForwardingFailedParam_sequence, hf_index, ett_gsm_map_ForwardingFailedParam); - subtree = proto_item_add_subtree(item, ett_component); + return offset; +} - tag = -1; - dissect_map_tag(asn1, tree, &tag, "Linked Id Tag", &null_item); - dissect_map_len(asn1, tree, &def_len, &len); - dissect_map_integer(asn1, tree, len, "Linked Id:"); +static const ber_sequence_t Or_NotAllowedParam_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { 0, 0, 0, NULL } +}; - proto_item_set_len(item, asn1->offset - saved_offset); - } +static int +dissect_gsm_map_Or_NotAllowedParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + Or_NotAllowedParam_sequence, hf_index, ett_gsm_map_Or_NotAllowedParam); - return(MAP_OK); + return offset; } +static const ber_sequence_t ForwardingViolationParam_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { 0, 0, 0, NULL } +}; static int -dissect_map_opr_code(ASN1_SCK *asn1, packet_info *pinfo, proto_tree *tree, gint *op_idx_p, guint *opr_code_p) -{ - guint opr_offset = 0, saved_offset = 0; - guint len; - guint tag; - gint32 val; - gchar *str = NULL; - proto_item *item; - proto_tree *subtree; - gboolean def_len; +dissect_gsm_map_ForwardingViolationParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + ForwardingViolationParam_sequence, hf_index, ett_gsm_map_ForwardingViolationParam); - if (tcap_check_tag(asn1, MAP_OPR_CODE_TAG)) - { - opr_offset = asn1->offset; + return offset; +} + + +static const value_string gsm_map_T_cug_RejectCause_vals[] = { + { 0, "incomingCallsBarredWithinCUG" }, + { 1, "subscriberNotMemberOfCUG" }, + { 5, "requestedBasicServiceViolatesCUG-Constraints" }, + { 7, "calledPartySS-InteractionViolation" }, + { 0, NULL } +}; - item = - proto_tree_add_text(tree, asn1->tvb, opr_offset, -1, - "Operation Code"); - subtree = proto_item_add_subtree(item, ett_opr_code); +static int +dissect_gsm_map_T_cug_RejectCause(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, NULL); - tag = -1; - asn1_id_decode1(asn1, &tag); + return offset; +} +static int dissect_cug_RejectCause(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_cug_RejectCause(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_cug_RejectCause); +} - proto_tree_add_text(subtree, asn1->tvb, - opr_offset, asn1->offset - opr_offset, - "Operation Code Tag: 0x%02x", tag); +static const ber_sequence_t Cug_RejectParam_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_cug_RejectCause }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { 0, 0, 0, NULL } +}; - dissect_map_len(asn1, subtree, &def_len, &len); +static int +dissect_gsm_map_Cug_RejectParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + Cug_RejectParam_sequence, hf_index, ett_gsm_map_Cug_RejectParam); - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, len, &val); - proto_tree_add_int(subtree, hf_map_opr_code, asn1->tvb, saved_offset, - asn1->offset - saved_offset, val); + return offset; +} - proto_item_set_len(item, asn1->offset - opr_offset); +static const ber_sequence_t Ati_NotAllowedParam_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { 0, 0, 0, NULL } +}; - str = my_match_strval(val, gsm_map_opr_code_strings, op_idx_p); +static int +dissect_gsm_map_Ati_NotAllowedParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + Ati_NotAllowedParam_sequence, hf_index, ett_gsm_map_Ati_NotAllowedParam); - if (NULL == str) return(MAP_FAIL); + return offset; +} - if (check_col(pinfo->cinfo, COL_INFO)) - { - col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", str); - } +static const ber_sequence_t NoGroupCallNbParam_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { 0, 0, 0, NULL } +}; - *opr_code_p = val; - } +static int +dissect_gsm_map_NoGroupCallNbParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + NoGroupCallNbParam_sequence, hf_index, ett_gsm_map_NoGroupCallNbParam); - return(MAP_OK); + return offset; } +static const ber_sequence_t Ss_IncompatibilityCause_sequence[] = { + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ss_Code_impl }, + { BER_CLASS_CON, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_basicService }, + { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ss_Status_impl }, + { 0, 0, 0, NULL } +}; static int -dissect_map_eoc(ASN1_SCK *asn1, proto_tree *tree) -{ - guint saved_offset; +dissect_gsm_map_Ss_IncompatibilityCause(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + Ss_IncompatibilityCause_sequence, hf_index, ett_gsm_map_Ss_IncompatibilityCause); - saved_offset = asn1->offset; + return offset; +} - if (tvb_length_remaining(asn1->tvb, saved_offset) <= 0) - { - return(MAP_FAIL); - } - if (!asn1_eoc(asn1, -1)) - { - return(MAP_FAIL); - } +static const value_string gsm_map_Pw_RegistrationFailureCause_vals[] = { + { 0, "undetermined" }, + { 1, "invalidFormat" }, + { 2, "newPasswordsMismatch" }, + { 0, NULL } +}; - asn1_eoc_decode(asn1, -1); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, "End of Contents"); +static int +dissect_gsm_map_Pw_RegistrationFailureCause(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, NULL); - return(MAP_OK); + return offset; } +static const ber_sequence_t ShortTermDenialParam_sequence[] = { + { 0, 0, 0, NULL } +}; -static void -dissect_map_invoke(ASN1_SCK *asn1, packet_info *pinfo, proto_tree *tree) -{ - proto_tree *subtree; - guint orig_offset, saved_offset; - guint len; - guint tag; - proto_item *item; - gint op_idx; - gboolean def_len; - int ret; - int opr_code_sts; - static gsm_map_tap_rec_t tap_rec; +static int +dissect_gsm_map_ShortTermDenialParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + ShortTermDenialParam_sequence, hf_index, ett_gsm_map_ShortTermDenialParam); - orig_offset = asn1->offset; - saved_offset = asn1->offset; - ret = asn1_id_decode1(asn1, &tag); + return offset; +} - item = - proto_tree_add_text(tree, asn1->tvb, saved_offset, -1, "Component"); +static const ber_sequence_t LongTermDenialParam_sequence[] = { + { 0, 0, 0, NULL } +}; - subtree = - proto_item_add_subtree(item, ett_components); +static int +dissect_gsm_map_LongTermDenialParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + LongTermDenialParam_sequence, hf_index, ett_gsm_map_LongTermDenialParam); - proto_tree_add_text(subtree, asn1->tvb, saved_offset, - asn1->offset - saved_offset, - "Invoke Type Tag: 0x%02x", tag); + return offset; +} - dissect_map_len(asn1, subtree, &def_len, &len); +static const ber_sequence_t SubBusyForMT_SMS_Param_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_gprsConnectionSuspended }, + { 0, 0, 0, NULL } +}; - saved_offset = asn1->offset; +static int +dissect_gsm_map_SubBusyForMT_SMS_Param(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + SubBusyForMT_SMS_Param_sequence, hf_index, ett_gsm_map_SubBusyForMT_SMS_Param); - dissect_map_invokeId(asn1, subtree); + return offset; +} - dissect_map_lnkId(asn1, subtree); - opr_code_sts = dissect_map_opr_code(asn1, pinfo, subtree, &op_idx, &g_opr_code); +static const value_string gsm_map_T_sm_EnumeratedDeliveryFailureCause_vals[] = { + { 0, "memoryCapacityExceeded" }, + { 1, "equipmentProtocolError" }, + { 2, "equipmentNotSM-Equipped" }, + { 3, "unknownServiceCentre" }, + { 4, "sc-Congestion" }, + { 5, "invalidSME-Address" }, + { 6, "subscriberNotSC-Subscriber" }, + { 0, NULL } +}; - if (opr_code_sts == MAP_OK) - { - if (def_len) - { - len -= asn1->offset - saved_offset; - } - else - { - len = tcap_find_eoc(asn1); - } - /* - * decode elements - */ - if (op_fcn[op_idx] == NULL) - { - dissect_map_params(asn1, subtree, len); - } - else - { - (*op_fcn[op_idx])(asn1, subtree, len); - } - } +static int +dissect_gsm_map_T_sm_EnumeratedDeliveryFailureCause(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, NULL); - if (!def_len) - { - dissect_map_eoc(asn1, subtree); - } + return offset; +} +static int dissect_sm_EnumeratedDeliveryFailureCause(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_sm_EnumeratedDeliveryFailureCause(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_sm_EnumeratedDeliveryFailureCause); +} - proto_item_set_len(item, asn1->offset - orig_offset); - if (opr_code_sts == MAP_OK) - { - tap_rec.invoke = TRUE; - tap_rec.opr_code_idx = op_idx; - tap_rec.size = asn1->offset - orig_offset; +static int +dissect_gsm_map_OCTET_STRING_SIZE_1_200(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - tap_queue_packet(gsm_map_tap, pinfo, &tap_rec); - } + return offset; +} +static int dissect_diagnosticInfo(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_OCTET_STRING_SIZE_1_200(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_diagnosticInfo); } +static const ber_sequence_t Sm_DeliveryFailureCause_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_sm_EnumeratedDeliveryFailureCause }, + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_diagnosticInfo }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { 0, 0, 0, NULL } +}; -static void -dissect_map_rr(ASN1_SCK *asn1, packet_info *pinfo, proto_tree *tree, gchar *str) -{ - guint tag, len, comp_len; - gint op_idx; - guint orig_offset, saved_offset; - proto_item *item; - proto_tree *seq_subtree, *subtree; - gboolean def_len; - gboolean comp_def_len; - int opr_code_sts; - static gsm_map_tap_rec_t tap_rec; +static int +dissect_gsm_map_Sm_DeliveryFailureCause(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + Sm_DeliveryFailureCause_sequence, hf_index, ett_gsm_map_Sm_DeliveryFailureCause); - tag = -1; - orig_offset = asn1->offset; - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); + return offset; +} - item = - proto_tree_add_text(tree, asn1->tvb, saved_offset, -1, "Component"); +static const ber_sequence_t MessageWaitListFullParam_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { 0, 0, 0, NULL } +}; - subtree = - proto_item_add_subtree(item, ett_components); +static int +dissect_gsm_map_MessageWaitListFullParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + MessageWaitListFullParam_sequence, hf_index, ett_gsm_map_MessageWaitListFullParam); - proto_tree_add_text(subtree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s: %02x", str, tag); + return offset; +} - dissect_map_len(asn1, subtree, &comp_def_len, &comp_len); +static const ber_sequence_t AbsentSubscriberSM_Param_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_absentSubscriberDiagnosticSM }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_additionalAbsentSubscriberDiagnosticSM_impl }, + { 0, 0, 0, NULL } +}; - saved_offset = asn1->offset; +static int +dissect_gsm_map_AbsentSubscriberSM_Param(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + AbsentSubscriberSM_Param_sequence, hf_index, ett_gsm_map_AbsentSubscriberSM_Param); - dissect_map_invokeId(asn1, subtree); + return offset; +} - if (tvb_length_remaining(asn1->tvb, asn1->offset) <= 0) - { - proto_item_set_len(item, asn1->offset - orig_offset); +static const ber_sequence_t UnauthorizedRequestingNetwork_Param_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { 0, 0, 0, NULL } +}; - return; - } +static int +dissect_gsm_map_UnauthorizedRequestingNetwork_Param(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + UnauthorizedRequestingNetwork_Param_sequence, hf_index, ett_gsm_map_UnauthorizedRequestingNetwork_Param); - saved_offset = asn1->offset; + return offset; +} - tag = -1; - asn1_id_decode1(asn1, &tag); - opr_code_sts = MAP_FAIL; +static const value_string gsm_map_T_unauthorizedLCSClient_Diagnostic_vals[] = { + { 0, "noAdditionalInformation" }, + { 1, "clientNotInMSPrivacyExceptionList" }, + { 2, "callToClientNotSetup" }, + { 3, "privacyOverrideNotApplicable" }, + { 4, "disallowedByLocalRegulatoryRequirements" }, + { 0, NULL } +}; - if (TCAP_CONSTRUCTOR(tag)) - { - GSM_MAP_START_SUBTREE(subtree, saved_offset, tag, "Sequence", - ett_sequence, - &def_len, &len, seq_subtree); - saved_offset = asn1->offset; +static int +dissect_gsm_map_T_unauthorizedLCSClient_Diagnostic(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, NULL); - opr_code_sts = dissect_map_opr_code(asn1, pinfo, seq_subtree, &op_idx, &g_opr_code); + return offset; +} +static int dissect_unauthorizedLCSClient_Diagnostic_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_unauthorizedLCSClient_Diagnostic(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_unauthorizedLCSClient_Diagnostic); +} - if (opr_code_sts == MAP_OK) - { - len -= asn1->offset - saved_offset; - - /* - * decode elements - */ - if (op_fcn_rr[op_idx] == NULL) - { - dissect_map_params(asn1, seq_subtree, len); - } - else - { - (*op_fcn_rr[op_idx])(asn1, seq_subtree, len); - } - } +static const ber_sequence_t UnauthorizedLCSClient_Param_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_unauthorizedLCSClient_Diagnostic_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { 0, 0, 0, NULL } +}; - if (!def_len) - { - dissect_map_eoc(asn1, seq_subtree); - } - } +static int +dissect_gsm_map_UnauthorizedLCSClient_Param(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + UnauthorizedLCSClient_Param_sequence, hf_index, ett_gsm_map_UnauthorizedLCSClient_Param); - if (!comp_def_len) - { - dissect_map_eoc(asn1, subtree); - } + return offset; +} - proto_item_set_len(item, asn1->offset - orig_offset); - if (opr_code_sts == MAP_OK) - { - tap_rec.invoke = FALSE; - tap_rec.opr_code_idx = op_idx; - tap_rec.size = asn1->offset - orig_offset; +static const value_string gsm_map_T_positionMethodFailure_Diagnostic_vals[] = { + { 0, "congestion" }, + { 1, "insufficientResources" }, + { 2, "insufficientMeasurementData" }, + { 3, "inconsistentMeasurementData" }, + { 4, "locationProcedureNotCompleted" }, + { 5, "locationProcedureNotSupportedByTargetMS" }, + { 6, "qoSNotAttainable" }, + { 7, "positionMethodNotAvailableInNetwork" }, + { 8, "positionMethodNotAvailableInLocationArea" }, + { 0, NULL } +}; - tap_queue_packet(gsm_map_tap, pinfo, &tap_rec); - } + +static int +dissect_gsm_map_T_positionMethodFailure_Diagnostic(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, NULL); + + return offset; +} +static int dissect_positionMethodFailure_Diagnostic_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_T_positionMethodFailure_Diagnostic(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_positionMethodFailure_Diagnostic); } +static const ber_sequence_t PositionMethodFailure_Param_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_positionMethodFailure_Diagnostic_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl }, + { 0, 0, 0, NULL } +}; static int -dissect_map_re(ASN1_SCK *asn1, proto_tree *tree) -{ - guint tag, len, comp_len; - guint orig_offset, saved_offset; - proto_item *item; - proto_tree *subtree, *temp_subtree; - gboolean comp_def_len, def_len; - gchar *str; - gint32 int_val; +dissect_gsm_map_PositionMethodFailure_Param(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + PositionMethodFailure_Param_sequence, hf_index, ett_gsm_map_PositionMethodFailure_Param); + + return offset; +} + +static const ber_sequence_t UnknownOrUnreachableLCSClient_Param_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer }, + { 0, 0, 0, NULL } +}; - tag = -1; - orig_offset = asn1->offset; - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); +static int +dissect_gsm_map_UnknownOrUnreachableLCSClient_Param(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + UnknownOrUnreachableLCSClient_Param_sequence, hf_index, ett_gsm_map_UnknownOrUnreachableLCSClient_Param); - item = - proto_tree_add_text(tree, asn1->tvb, saved_offset, -1, "Component"); + return offset; +} - subtree = proto_item_add_subtree(item, ett_components); - proto_tree_add_text(subtree, asn1->tvb, saved_offset, asn1->offset - saved_offset, - "Return Error Type Tag: 0x%02x", tag); +/*--- End of included file: packet-gsm_map-fn.c ---*/ - dissect_map_len(asn1, subtree, &comp_def_len, &comp_len); - if (!comp_def_len) - { - comp_len = tcap_find_eoc(asn1); - } +/* Stuff included from the "old" packet-gsm_map.c for tapping purposes */ +static gchar * +my_match_strval(guint32 val, const value_string *vs, gint *idx) +{ + gint i = 0; - saved_offset = asn1->offset; + while (vs[i].strptr) { + if (vs[i].value == val) + { + *idx = i; + return(vs[i].strptr); + } - dissect_map_invokeId(asn1, subtree); + i++; + } - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); + *idx = -1; + return(NULL); +} +/* End includes from old" packet-gsm_map.c */ -#define MAP_LOCAL_ERR_CODE_TAG 0x2 -#define MAP_GBL_ERR_CODE_TAG 0x6 +const value_string gsm_map_opr_code_strings[] = { + { 2, "updateLocation" }, + { 3, "cancelLocation" }, + { 4, "provideRoamingNumber" }, + { 6, "resumeCallHandling" }, + { 7, "insertSubscriberData" }, + { 8, "deleteSubscriberData" }, + { 9, "sendParameters" }, /* map-ac infoRetrieval (14) version1 (1)*/ + { 10, "registerSS" }, + { 11, "eraseSS" }, + { 12, "activateSS" }, + { 13, "deactivateSS" }, + { 14, "interrogateSS" }, + { 17, "registerPassword" }, + { 18, "getPassword" }, + { 19, "processUnstructuredSS-Data" }, /* map-ac networkFunctionalSs (18) version1 (1) */ + { 22, "sendRoutingInfo" }, + { 23, "updateGprsLocation" }, + { 24, "sendRoutingInfoForGprs" }, + { 25, "failureReport" }, + { 26, "noteMsPresentForGprs" }, + { 28, "performHandover" }, /* map-ac handoverControl (11) version1 (1)*/ + { 29, "sendEndSignal" }, + { 30, "performSubsequentHandover" }, /* map-ac handoverControl (11) version1 (1) */ + { 31, "provideSIWFSNumber" }, + { 32, "sIWFSSignallingModify" }, + { 33, "processAccessSignalling" }, + { 34, "forwardAccessSignalling" }, + { 35, "noteInternalHandover" }, /* map-ac handoverControl (11) version1 (1) */ + { 37, "reset" }, + { 38, "forwardCheckSS-Indication" }, + { 39, "prepareGroupCall" }, + { 40, "sendGroupCallEndSignal" }, + { 41, "processGroupCallSignalling" }, + { 42, "forwardGroupCallSignalling" }, + { 43, "checkIMEI" }, + { 44, "mt-forwardSM" }, + { 45, "sendRoutingInfoForSM" }, + { 46, "mo-forwardSM" }, + { 47, "reportSM-DeliveryStatus" }, + { 48, "noteSubscriberPresent" }, /* map-ac mwdMngt (24) version1 (1) */ + { 49, "alertServiceCentreWithoutResult" }, /* map-ac shortMsgAlert (23) version1 (1) */ + { 50, "activateTraceMode" }, + { 51, "deactivateTraceMode" }, + { 52, "traceSubscriberActivity" }, /* map-ac handoverControl (11) version1 (1) */ + { 54, "beginSubscriberActivity" }, /* map-ac networkFunctionalSs (18) version1 (1) */ + { 55, "sendIdentification" }, + { 56, "sendAuthenticationInfo" }, + { 57, "restoreData" }, + { 58, "sendIMSI" }, + { 59, "processUnstructuredSS-Request" }, + { 60, "unstructuredSS-Request" }, + { 61, "unstructuredSS-Notify" }, + { 63, "informServiceCentre" }, + { 64, "alertServiceCentre" }, + { 66, "readyForSM" }, + { 67, "purgeMS" }, + { 68, "prepareHandover" }, + { 69, "prepareSubsequentHandover" }, + { 70, "provideSubscriberInfo" }, + { 71, "anyTimeInterrogation" }, + { 72, "ss-InvocationNotification" }, + { 73, "setReportingState" }, + { 74, "statusReport" }, + { 75, "remoteUserFree" }, + { 76, "registerCC-Entry" }, + { 77, "eraseCC-Entry" }, + { 83, "provideSubscriberLocation" }, + { 85, "sendRoutingInfoForLCS" }, + { 86, "subscriberLocationReport" }, + { 0, NULL } +}; - switch (tag) - { - case MAP_LOCAL_ERR_CODE_TAG: - GSM_MAP_START_SUBTREE(subtree, saved_offset, tag, "Local Error Code", - ett_err_code, - &def_len, &len, temp_subtree); +static const true_false_string gsm_map_extension_value = { + "No Extension", + "Extension" +}; +static const value_string gsm_map_nature_of_number_values[] = { + { 0x00, "unknown" }, + { 0x01, "International Number" }, + { 0x02, "National Significant Number" }, + { 0x03, "Network Specific Number" }, + { 0x04, "Subscriber Number" }, + { 0x05, "Reserved" }, + { 0x06, "Abbreviated Number" }, + { 0x07, "Reserved for extension" }, + { 0, NULL } +}; +static const value_string gsm_map_number_plan_values[] = { + { 0x00, "unknown" }, + { 0x01, "ISDN/Telephony Numbering (Rec ITU-T E.164)" }, + { 0x02, "spare" }, + { 0x03, "Data Numbering (ITU-T Rec. X.121)" }, + { 0x04, "Telex Numbering (ITU-T Rec. F.69)" }, + { 0x05, "spare" }, + { 0x06, "Land Mobile Numbering (ITU-T Rec. E.212)" }, + { 0x07, "spare" }, + { 0x08, "National Numbering" }, + { 0x09, "Private Numbering" }, + { 0x0f, "Reserved for extension" }, + { 0, NULL } +}; - if (len > 0) - { - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, len, &int_val); +static const true_false_string gsm_map_Ss_Status_q_bit_values = { + "Quiescent", + "Operative" +}; +static const true_false_string gsm_map_Ss_Status_p_values = { + "Provisioned", + "Not Provisioned" +}; +static const true_false_string gsm_map_Ss_Status_r_values = { + "Registered", + "Not Registered" +}; +static const true_false_string gsm_map_Ss_Status_a_values = { + "Active", + "not Active" +}; - str = match_strval(int_val, gsm_ss_err_code_strings); +static guint32 opcode=0; - proto_tree_add_text(temp_subtree, asn1->tvb, - saved_offset, len, "Error Code: %s (%d)", - (str == NULL) ? "Unknown Error Code" : str, - int_val); - } - break; +static int +dissect_gsm_map_Opcode(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_ber_integer(FALSE, pinfo, tree, tvb, offset, hf_index, &opcode); - case MAP_GBL_ERR_CODE_TAG: - GSM_MAP_START_SUBTREE(subtree, saved_offset, tag, "Global Error Code", - ett_err_code, - &def_len, &len, temp_subtree); + if (check_col(pinfo->cinfo, COL_INFO)){ + col_set_str(pinfo->cinfo, COL_INFO, val_to_str(opcode, gsm_map_opr_code_strings, "Unknown GSM-MAP (%u)")); + } - if (len > 0) - { - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, len, &int_val); + return offset; +} - proto_tree_add_text(temp_subtree, asn1->tvb, - saved_offset, len, "Error Code: %d", - int_val); - } +static int dissect_invokeData(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + switch(opcode){ + case 2: /*updateLocation*/ + offset=dissect_gsm_map_UpdateLocationArg(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 3: /*cancelLocation*/ + offset=dissect_gsm_map_CancelLocationArg(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 4: /*provideRoamingNumber*/ + offset=dissect_gsm_map_ProvideRoamingNumberArg(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 6: /*resumeCallHandling*/ + offset=dissect_gsm_map_ResumeCallHandlingArg(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 7: /*insertSubscriberData*/ + offset=dissect_gsm_map_InsertSubscriberDataArg(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 8: /*deleteSubscriberData*/ + offset=dissect_gsm_map_DeleteSubscriberDataArg(FALSE, tvb, offset, pinfo, tree, -1); + break; + /* TODO find out why this isn't in the ASN1 file + case 9: sendParameters + offset=dissect_gsm_map_DeleteSubscriberDataArg(FALSE, tvb, offset, pinfo, tree, -1); + break; + */ + case 10: /*registerSS*/ + offset=dissect_gsm_map_RegisterSS_Arg(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 11: /*eraseSS*/ + offset=dissect_gsm_map_Ss_ForBS(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 12: /*activateSS*/ + offset=dissect_gsm_map_Ss_ForBS(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 13: /*deactivateSS*/ + offset=dissect_gsm_map_Ss_ForBS(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 14: /*interrogateSS*/ + offset=dissect_gsm_map_Ss_ForBS(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 17: /*registerPassword*/ + offset=dissect_gsm_map_Ss_Code(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_ss_Code); + break; + case 18: /*getPassword*/ + offset=dissect_gsm_map_GetPasswordArg(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_getPassword); + break; + case 22: /*sendRoutingInfo*/ + offset=dissect_gsm_map_SendRoutingInfoArg(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 23: /*updateGprsLocation*/ + offset=dissect_gsm_map_UpdateGprsLocationArg(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 24: /*sendRoutingInfoForGprs*/ + offset=dissect_gsm_map_SendRoutingInfoForGprsArg(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 25: /*failureReport*/ + offset=dissect_gsm_map_FailureReportArg(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 26: /*noteMsPresentForGprs*/ + offset=dissect_gsm_map_NoteMsPresentForGprsArg(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 29: /*sendEndSignal*/ + offset=dissect_gsm_map_Bss_APDU(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 31: /*provideSIWFSNumbe*/ + offset=dissect_gsm_map_ProvideSIWFSNumberArg(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 32: /*sIWFSSignallingModify*/ + offset=dissect_gsm_map_SIWFSSignallingModifyArg(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 33: /*processAccessSignalling*/ + offset=dissect_gsm_map_Bss_APDU(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 34: /*forwardAccessSignalling*/ + offset=dissect_gsm_map_Bss_APDU(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 37: /*reset*/ + offset=dissect_gsm_map_ResetArg(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 38: /*forwardCheckSS-Indication*/ + return offset; + break; + case 39: /*prepareGroupCall*/ + offset=dissect_gsm_map_PrepareGroupCallArg(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 40: /*sendGroupCallEndSignal*/ + dissect_gsm_map_SendGroupCallEndSignalArg(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 42: /*processGroupCallSignalling*/ + offset=dissect_gsm_map_ProcessGroupCallSignallingArg(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 43: /*checkIMEI*/ + offset=dissect_gsm_map_CheckIMEIArg(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 44: /*mt-forwardSM*/ + offset=dissect_gsm_map_CheckIMEIArg(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 45: /*sendRoutingInfoForSM*/ + offset=dissect_gsm_map_RoutingInfoForSMRes(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 46: /*mo-forwardSM*/ + offset=dissect_gsm_map_Mo_forwardSM_Arg(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 47: /*reportSM-DeliveryStatus*/ + offset=dissect_gsm_map_ReportSM_DeliveryStatusArg(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 50: /*activateTraceMode*/ + offset=dissect_gsm_map_ActivateTraceModeArg(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 51: /*deactivateTraceMode*/ + offset=dissect_gsm_map_DeactivateTraceModeArg(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 55: /*sendIdentification*/ + offset=dissect_gsm_map_Tmsi(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 56: /*sendAuthenticationInfo*/ + if (application_context_version < 3 ){ + offset=dissect_gsm_map_SendAuthenticationInfoArg(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_imsi); + }else{ + offset=dissect_gsm_map_SendAuthenticationInfoArgV3(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_SendAuthenticationInfoArg); + } break; + case 57: /*restoreData*/ + offset=dissect_gsm_map_RestoreDataArg(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 58: /*sendIMSI*/ + offset=dissect_gsm_map_Msisdn(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 59: /*processUnstructuredSS-Request*/ + offset=dissect_gsm_map_Ussd_Arg(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 60: /*unstructuredSS-Request*/ + offset=dissect_gsm_map_Ussd_Arg(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 61: /*unstructuredSS-Notify*/ + offset=dissect_gsm_map_Ussd_Arg(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 63: /*informServiceCentre*/ + offset=dissect_gsm_map_InformServiceCentreArg(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 64: /*alertServiceCentre*/ + offset=dissect_gsm_map_AlertServiceCentreArg(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 66: /*readyForSM*/ + offset=dissect_gsm_map_ReadyForSM_Arg(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 67: /*purgeMS*/ + offset=dissect_gsm_map_PurgeMS_Arg(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 68: /*prepareHandover*/ + offset=dissect_gsm_map_PrepareHO_Arg(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 69: /*prepareSubsequentHandover*/ + offset=dissect_gsm_map_PrepareSubsequentHO_Arg(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 70: /*provideSubscriberInfo*/ + offset=dissect_gsm_map_ProvideSubscriberInfoArg(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 71: /*anyTimeInterrogation*/ + offset=dissect_gsm_map_AnyTimeInterrogationArg(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 72: /*ss-InvocationNotificatio*/ + offset=dissect_gsm_map_Ss_InvocationNotificationArg(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 73: /*setReportingState*/ + offset=dissect_gsm_map_SetReportingStateArg(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 74: /*statusReport*/ + offset=dissect_gsm_map_StatusReportArg(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 75: /*remoteUserFree*/ + offset=dissect_gsm_map_RemoteUserFreeArg(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 76: /*registerCC-Entry*/ + offset=dissect_gsm_map_RegisterCC_EntryArg(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 77: /*eraseCC-Entry*/ + offset=dissect_gsm_map_EraseCC_EntryArg(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 83: /*provideSubscriberLocation*/ + offset=dissect_gsm_map_ProvideSubscriberLocation_Arg(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 85: /*sendRoutingInfoForLCS*/ + offset=dissect_gsm_map_RoutingInfoForLCS_Arg(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 86: /*subscriberLocationReport*/ + offset=dissect_gsm_map_SubscriberLocationReport_Arg(FALSE, tvb, offset, pinfo, tree, -1); + break; + default: + proto_tree_add_text(tree, tvb, offset, -1, "Unknown invokeData blob"); + } + return offset; +} - default: - GSM_MAP_START_SUBTREE(subtree, saved_offset, tag, "Unknown Error Code", - ett_err_code, - &def_len, &len, temp_subtree); - - if (len > 0) - { - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, len, &int_val); - proto_tree_add_text(temp_subtree, asn1->tvb, - saved_offset, len, "Error Code: %d", - int_val); - } +static int dissect_returnResultData(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + switch(opcode){ + case 2: /*updateLocation*/ + offset=dissect_gsm_map_UpdateLocationRes(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 3: /*cancelLocation*/ + offset=dissect_gsm_map_CancelLocationRes(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 4: /*provideRoamingNumber*/ + offset=dissect_gsm_map_ProvideRoamingNumberRes(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 6: /*resumeCallHandling*/ + offset=dissect_gsm_map_ResumeCallHandlingRes(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 7: /*insertSubscriberData*/ + offset=dissect_gsm_map_InsertSubscriberDataRes(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 8: /*deleteSubscriberData*/ + offset=dissect_gsm_map_DeleteSubscriberDataRes(FALSE, tvb, offset, pinfo, tree, -1); + break; + /* TODO find out why this isn't in the ASN1 file + case 9: sendParameters + offset=dissect_gsm_map_DeleteSubscriberDataArg(FALSE, tvb, offset, pinfo, tree, -1); + break; + */ + case 10: /*registerSS*/ + offset=dissect_gsm_map_Ss_Info(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 11: /*eraseSS*/ + offset=dissect_gsm_map_Ss_Info(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 12: /*activateSS*/ + offset=dissect_gsm_map_Ss_Info(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 13: /*deactivateSS*/ + offset=dissect_gsm_map_Ss_Info(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 14: /*interrogateSS*/ + offset=dissect_gsm_map_Ss_Info(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 17: /*registerPassword*/ + offset=dissect_gsm_map_NewPassword(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_ss_Code); + break; + case 18: /*getPassword*/ + offset=dissect_gsm_map_CurrentPassword(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_currentPassword); + break; + case 22: /*sendRoutingInfo*/ + /* This is done to get around a problem with IMPLICIT tag:s */ + offset = offset +2; + offset=dissect_gsm_map_SendRoutingInfoRes(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 23: /*updateGprsLocation*/ + offset=dissect_gsm_map_UpdateGprsLocationRes(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 24: /*sendRoutingInfoForGprs*/ + offset=dissect_gsm_map_SendRoutingInfoForGprsRes(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 25: /*failureReport*/ + offset=dissect_gsm_map_FailureReportRes(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 26: /*noteMsPresentForGprs*/ + offset=dissect_gsm_map_NoteMsPresentForGprsRes(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 29: /*sendEndSignal*/ + /* Taken from MAP-MobileServiceOperations{ 0 identified-organization (4) etsi (0) mobileDomain + * (0) gsm-Network (1) modules (3) map-MobileServiceOperations (5) version9 (9) } + */ + offset=dissect_gsm_map_ExtensionContainer(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 31: /*provideSIWFSNumbe*/ + offset=dissect_gsm_map_ProvideSIWFSNumberRes(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 32: /*provideSIWFSNumbe*/ + offset=dissect_gsm_map_SIWFSSignallingModifyRes(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 39: /*prepareGroupCall*/ + offset=dissect_gsm_map_PrepareGroupCallRes(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 40: /*sendGroupCallEndSignal*/ + dissect_gsm_map_SendGroupCallEndSignalRes(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 43: /*checkIMEI*/ + offset=dissect_gsm_map_EquipmentStatus(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 45: /*sendRoutingInfoForSM*/ + offset=dissect_gsm_map_RoutingInfoForSMRes(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 46: /*mo-forwardSM*/ + offset=dissect_gsm_map_Mo_forwardSM_Res(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 48: /*reportSM-DeliveryStatus*/ + offset=dissect_gsm_map_ReportSM_DeliveryStatusArg(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 50: /*activateTraceMode*/ + offset=dissect_gsm_map_ActivateTraceModeRes(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 51: /*deactivateTraceMode*/ + offset=dissect_gsm_map_DeactivateTraceModeRes(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 55: /*sendIdentification*/ + offset=dissect_gsm_map_SendIdentificationRes(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 57: /*restoreData*/ + offset=dissect_gsm_map_RestoreDataRes(FALSE, tvb, offset, pinfo, tree, -1); break; - } + case 58: /*sendIMSI*/ + offset=dissect_gsm_map_Imsi(FALSE, tvb, offset, pinfo, tree,hf_gsm_map_imsi); + break; + case 59: /*unstructuredSS-Request*/ + offset=dissect_gsm_map_Ussd_Res(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 60: /*unstructuredSS-Request*/ + offset=dissect_gsm_map_Ussd_Res(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 61: /*unstructuredSS-Notify*/ + /* TRUE ? */ + proto_tree_add_text(tree, tvb, offset, -1, "Unknown returnResultData blob"); + break; + case 66: /*readyForSM*/ + offset=dissect_gsm_map_ReadyForSM_Res(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 67: /*purgeMS*/ + offset=dissect_gsm_map_PurgeMS_Res(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 68: /*prepareHandover*/ + offset=dissect_gsm_map_PrepareHO_Res(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 69: /*prepareSubsequentHandover*/ + offset=dissect_gsm_map_Bss_APDU(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 70: /*provideSubscriberInfo*/ + offset=dissect_gsm_map_ProvideSubscriberInfoRes(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 71: /*anyTimeInterrogation*/ + offset=dissect_gsm_map_AnyTimeInterrogationRes(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 72: /*ss-InvocationNotificatio*/ + offset=dissect_gsm_map_Ss_InvocationNotificationRes(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 73: /*setReportingState*/ + offset=dissect_gsm_map_SetReportingStateRes(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 74: /*statusReport*/ + offset=dissect_gsm_map_StatusReportRes(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 75: /*remoteUserFree*/ + offset=dissect_gsm_map_RemoteUserFreeRes(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 76: /*registerCC-Entry*/ + offset=dissect_gsm_map_RegisterCC_EntryRes(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 77: /*eraseCC-Entry*/ + offset=dissect_gsm_map_EraseCC_EntryRes(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 83: /*provideSubscriberLocation*/ + offset=dissect_gsm_map_ProvideSubscriberLocation_Res(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 85: /*sendRoutingInfoForLCS*/ + offset=dissect_gsm_map_RoutingInfoForLCS_Arg(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 86: /*subscriberLocationReport*/ + offset=dissect_gsm_map_SubscriberLocationReport_Res(FALSE, tvb, offset, pinfo, tree, -1); + break; + default: + proto_tree_add_text(tree, tvb, offset, -1, "Unknown returnResultData blob"); + } + return offset; +} - dissect_map_params(asn1, subtree, comp_len - (asn1->offset - saved_offset)); +static int +dissect_invokeCmd(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_Opcode(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_invokeCmd); +} - if (!def_len) - { - dissect_map_eoc(asn1, subtree); - } +static int dissect_invokeid(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ber_integer(FALSE, pinfo, tree, tvb, offset, hf_gsm_map_invokeid, NULL); +} - proto_item_set_len(item, asn1->offset - orig_offset); - return(MAP_OK); +static const value_string InvokeId_vals[] = { + { 0, "invokeid" }, + { 1, "absent" }, + { 0, NULL } +}; + +static int dissect_absent(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_NULL(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_absent); } -static void -dissect_map_reject(ASN1_SCK *asn1, proto_tree *tree) -{ - guint tag, len; - guint saved_offset; - proto_item *item; - proto_tree *subtree; - gboolean def_len; +static const ber_choice_t InvokeId_choice[] = { + { 0, BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_invokeid }, + { 1, BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_NOOWNTAG, dissect_absent }, + { 0, 0, 0, 0, NULL } +}; + +static int +dissect_gsm_map_InvokeId(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + InvokeId_choice, hf_index, ett_gsm_map_InvokeId); - tag = -1; + return offset; +} +static int dissect_invokeId(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_InvokeId(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_invokeId); +} - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); +static const ber_sequence_t InvokePDU_sequence[] = { + { BER_CLASS_UNI, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_invokeId }, + { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_invokeCmd }, + { BER_CLASS_UNI, -1/*depends on Cmd*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_invokeData }, + { 0, 0, 0, NULL } +}; - item = - proto_tree_add_text(tree, asn1->tvb, saved_offset, -1, "Component"); +static int +dissect_gsm_map_InvokePDU(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + InvokePDU_sequence, hf_index, ett_gsm_map_InvokePDU); - subtree = proto_item_add_subtree(item, ett_components); + return offset; +} +static int dissect_invoke_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_InvokePDU(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_invoke); +} - proto_tree_add_text(subtree, asn1->tvb, saved_offset, asn1->offset - saved_offset, - "Reject Type Tag: 0x%02x", tag); +static const ber_sequence_t ReturnResult_result_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_invokeCmd }, + { BER_CLASS_UNI, -1/*depends on Cmd*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_returnResultData }, + { 0, 0, 0, NULL } +}; +static int +dissect_returnResult_result(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + offset = dissect_ber_sequence(FALSE, pinfo, tree, tvb, offset, + ReturnResult_result_sequence, hf_gsm_map_returnResult_result, ett_gsm_map_ReturnResult_result); - dissect_map_len(asn1, subtree, &def_len, &len); + return offset; +} - dissect_map_invokeId(asn1, subtree); - dissect_map_problem(asn1, subtree); +static const ber_sequence_t ReturnResultPDU_sequence[] = { + { BER_CLASS_UNI, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_invokeId }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_returnResult_result }, + { 0, 0, 0, NULL } +}; - if (!def_len) - { - dissect_map_eoc(asn1, subtree); - } +static int +dissect_gsm_map_returnResultPDU(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + ReturnResultPDU_sequence, hf_index, ett_gsm_map_ReturnResultPDU); - proto_item_set_len(item, asn1->offset - saved_offset); + return offset; +} +static int dissect_returnResult_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_returnResultPDU(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_returnResult); } +static const value_string GSMMAPPDU_vals[] = { + { 1, "invoke" }, + { 2, "returnResult" }, + { 3, "returnError" }, + { 4, "reject" }, + { 0, NULL } +}; -static void -dissect_map_message(packet_info *pinfo, proto_tree *map_tree, ASN1_SCK *asn1) -{ - guint saved_offset; - gchar *str = NULL; - static int i = 0; +static const ber_choice_t GSMMAPPDU_choice[] = { + { 1, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_invoke_impl }, + { 2, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_returnResult_impl }, +#ifdef REMOVED + { 3, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_returnError_impl }, + { 4, BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_reject_impl }, +#endif + { 0, 0, 0, 0, NULL } +}; - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &g_comp_type_tag); - asn1->offset = saved_offset; +static guint8 gsmmap_pdu_type = 0; +static guint8 gsm_map_pdu_size = 0; - str = match_strval(g_comp_type_tag, tcap_component_type_str); +static int +dissect_gsm_map_GSMMAPPDU(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo , proto_tree *tree, int hf_index) { - if (NULL == str) return; + char *version_ptr, *version_str; - if (check_col(pinfo->cinfo, COL_INFO)) - { - if (0 == i) - { - col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", str); + application_context_version = 0; + if (pinfo->private_data != NULL){ + version_ptr = strrchr(pinfo->private_data,'.'); + version_str = g_strdup(version_ptr+1); + application_context_version = atoi(version_str); } - else - { - col_append_fstr(pinfo->cinfo, COL_INFO, "& %s ", str); - } - } - switch(g_comp_type_tag) - { - case TCAP_COMP_INVOKE : - dissect_map_invoke(asn1, pinfo, map_tree); - break; + gsmmap_pdu_type = tvb_get_guint8(tvb, offset)&0x0f; + /* Get the length and add 2 */ + gsm_map_pdu_size = tvb_get_guint8(tvb, offset+1)+2; - case TCAP_COMP_RRL : - dissect_map_rr(asn1, pinfo, map_tree, "Return Result(Last) Type Tag"); - break; + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + GSMMAPPDU_choice, hf_index, ett_gsm_map_GSMMAPPDU); - case TCAP_COMP_RE : - dissect_map_re(asn1, map_tree); - break; + if (check_col(pinfo->cinfo, COL_INFO)){ + col_prepend_fstr(pinfo->cinfo, COL_INFO, val_to_str(opcode, gsm_map_opr_code_strings, "Unknown GSM-MAP (%u)")); + } - case TCAP_COMP_REJECT : - dissect_map_reject(asn1, map_tree); - break; + return offset; +} - case TCAP_COMP_RRN : - dissect_map_rr(asn1, pinfo, map_tree, "Return Result(Not Last) Type Tag"); - break; - default: - proto_tree_add_text(map_tree, asn1->tvb, saved_offset, -1, - "Message type not handled, ignoring"); - break; - } -} static void -dissect_map(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) +dissect_gsm_map(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree) { - proto_item *ti; - proto_tree *map_tree; - ASN1_SCK asn1; - int offset = 0; + proto_item *item=NULL; + proto_tree *tree=NULL; + /* Used for gsm_map TAP */ + static gsm_map_tap_rec_t tap_rec; + gint op_idx; + gchar *str = NULL; + - /* - * Make entries in Protocol column on summary display - */ if (check_col(pinfo->cinfo, COL_PROTOCOL)) { col_set_str(pinfo->cinfo, COL_PROTOCOL, "GSM MAP"); } - - /* Dissect the packet (even if !tree so can update the INFO column) */ - g_pinfo = pinfo; - g_tree = tree; + top_tree = parent_tree; /* create display subtree for the protocol */ - ti = proto_tree_add_item(tree, proto_map, tvb, 0, -1, FALSE); + if(parent_tree){ + item = proto_tree_add_item(parent_tree, proto_gsm_map, tvb, 0, -1, FALSE); + tree = proto_item_add_subtree(item, ett_gsm_map); + } - map_tree = proto_item_add_subtree(ti, ett_map); + dissect_gsm_map_GSMMAPPDU(FALSE, tvb, 0, pinfo, tree, -1); + str = my_match_strval(opcode, gsm_map_opr_code_strings, &op_idx); - asn1_open(&asn1, tvb, offset); + tap_rec.invoke = FALSE; + if ( gsmmap_pdu_type == 1 ) + tap_rec.invoke = TRUE; + tap_rec.opr_code_idx = op_idx; + tap_rec.size = gsm_map_pdu_size; + tap_queue_packet(gsm_map_tap, pinfo, &tap_rec); + - dissect_map_message(pinfo, map_tree, &asn1); - asn1_close(&asn1, &offset); } +static const value_string ssCode_vals[] = { + { 0x00, "allSS - all SS" }, + { 0x10 ,"allLineIdentificationSS - all line identification SS" }, + { 0x11 ,"clip - calling line identification presentation" }, + { 0x12 ,"clir - calling line identification restriction" }, + { 0x13 ,"colp - connected line identification presentation" }, + { 0x14 ,"colr - connected line identification restriction" }, + { 0x15 ,"mci - malicious call identification" }, + { 0x18 ,"allNameIdentificationSS - all name indentification SS" }, + { 0x19 ,"cnap - calling name presentation" }, + { 0x20 ,"allForwardingSS - all forwarding SS" }, + { 0x21 ,"cfu - call forwarding unconditional" }, + { 0x28 ,"allCondForwardingSS - all conditional forwarding SS" }, + { 0x29 ,"cfb - call forwarding busy" }, + { 0x2a ,"cfnry - call forwarding on no reply" }, + { 0x2b ,"cfnrc - call forwarding on mobile subscriber not reachable" }, + { 0x24 ,"cd - call deflection" }, + { 0x30 ,"allCallOfferingSS - all call offering SS includes also all forwarding SS" }, + { 0x31 ,"ect - explicit call transfer" }, + { 0x32 ,"mah - mobile access hunting" }, + { 0x40 ,"allCallCompletionSS - all Call completion SS" }, + { 0x41 ,"cw - call waiting" }, + { 0x42 ,"hold - call hold" }, + { 0x43 ,"ccbs-A - completion of call to busy subscribers, originating side" }, + { 0x44 ,"ccbs-B - completion of call to busy subscribers, destination side" }, + { 0x45 ,"mc - multicall" }, + { 0x50 ,"allMultiPartySS - all multiparty SS" }, + { 0x51 ,"multiPTY - multiparty" }, + { 0x60 ,"allCommunityOfInterestSS - all community of interest SS" }, + { 0x61 ,"cug - closed user group" }, + { 0x70 ,"allChargingSS - all charging SS" }, + { 0x71 ,"aoci - advice of charge information" }, + { 0x72 ,"aocc - advice of charge charging" }, + { 0x80 ,"allAdditionalInfoTransferSS - all additional information transfer SS" }, + { 0x81 ,"uus1 - UUS1 user-to-user signalling" }, + { 0x82 ,"uus2 - UUS2 user-to-user signalling" }, + { 0x83 ,"uus3 - UUS3 user-to-user signalling" }, + { 0x90 ,"allCallRestrictionSS - all Callrestriction SS" }, + { 0x91 ,"barringOfOutgoingCalls" }, + { 0x92 ,"baoc - barring of all outgoing calls" }, + { 0x93 ,"boic - barring of outgoing international calls" }, + { 0x94 ,"boicExHC - barring of outgoing international calls except those directed to the home PLMN" }, + { 0x99 ,"barringOfIncomingCalls" }, + { 0x9a ,"baic - barring of all incoming calls" }, + { 0x9b ,"bicRoam - barring of incoming calls when roaming outside home PLMN Country" }, + { 0xf0 ,"allPLMN-specificSS" }, + { 0xa0 ,"allCallPrioritySS - all call priority SS" }, + { 0xa1 ,"emlpp - enhanced Multilevel Precedence Pre-emption (EMLPP) service" }, + { 0xb0 ,"allLCSPrivacyException - all LCS Privacy Exception Classes" }, + { 0xb1 ,"universal - allow location by any LCS client" }, + { 0xb2 ,"callrelated - allow location by any value added LCS client to which a call is established from the target MS" }, + { 0xb3 ,"callunrelated - allow location by designated external value added LCS clients" }, + { 0xb4 ,"plmnoperator - allow location by designated PLMN operator LCS clients" }, + { 0xc0 ,"allMOLR-SS - all Mobile Originating Location Request Classes" }, + { 0xc1 ,"basicSelfLocation - allow an MS to request its own location" }, + { 0xc2 ,"autonomousSelfLocation - allow an MS to perform self location without interaction with the PLMN for a predetermined period of time" }, + { 0xc3 ,"transferToThirdParty - allow an MS to request transfer of its location to another LCS client" }, + + { 0xf1 ,"plmn-specificSS-1" }, + { 0xf2 ,"plmn-specificSS-2" }, + { 0xf3 ,"plmn-specificSS-3" }, + { 0xf4 ,"plmn-specificSS-4" }, + { 0xf5 ,"plmn-specificSS-5" }, + { 0xf6 ,"plmn-specificSS-6" }, + { 0xf7 ,"plmn-specificSS-7" }, + { 0xf8 ,"plmn-specificSS-8" }, + { 0xf9 ,"plmn-specificSS-9" }, + { 0xfa ,"plmn-specificSS-a" }, + { 0xfb ,"plmn-specificSS-b" }, + { 0xfc ,"plmn-specificSS-c" }, + { 0xfd ,"plmn-specificSS-d" }, + { 0xfe ,"plmn-specificSS-e" }, + { 0xff ,"plmn-specificSS-f" }, + { 0, NULL } +}; -/* Register the protocol with Ethereal */ -void -proto_reg_handoff_map(void) -{ +static const value_string Teleservice_vals[] = { +{0x00, "allTeleservices" }, +{0x10, "allSpeechTransmissionServices" }, +{0x11, "telephony" }, +{0x12, "emergencyCalls" }, +{0x20, "allShortMessageServices" }, +{0x21, "shortMessageMT-PP" }, +{0x22, "shortMessageMO-PP" }, +{0x60, "allFacsimileTransmissionServices" }, +{0x61, "facsimileGroup3AndAlterSpeech" }, +{0x62, "automaticFacsimileGroup3" }, +{0x63, "facsimileGroup4" }, + +{0x70, "allDataTeleservices" }, +{0x80, "allTeleservices-ExeptSMS" }, + +{0x90, "allVoiceGroupCallServices" }, +{0x91, "voiceGroupCall" }, +{0x92, "voiceBroadcastCall" }, + +{0xd0, "allPLMN-specificTS" }, +{0xd1, "plmn-specificTS-1" }, +{0xd2, "plmn-specificTS-2" }, +{0xd3, "plmn-specificTS-3" }, +{0xd4, "plmn-specificTS-4" }, +{0xd5, "plmn-specificTS-5" }, +{0xd6, "plmn-specificTS-6" }, +{0xd7, "plmn-specificTS-7" }, +{0xd8, "plmn-specificTS-8" }, +{0xd9, "plmn-specificTS-9" }, +{0xda, "plmn-specificTS-A" }, +{0xdb, "plmn-specificTS-B" }, +{0xdc, "plmn-specificTS-C" }, +{0xdd, "plmn-specificTS-D" }, +{0xde, "plmn-specificTS-E" }, +{0xdf, "plmn-specificTS-F" }, + { 0, NULL } +}; +/*--- proto_reg_handoff_gsm_map ---------------------------------------*/ +void proto_reg_handoff_gsm_map(void) { dissector_handle_t map_handle; static int map_prefs_initialized = FALSE; - map_handle = create_dissector_handle(dissect_map, proto_map); + map_handle = create_dissector_handle(dissect_gsm_map, proto_gsm_map); if (!map_prefs_initialized) { map_prefs_initialized = TRUE; @@ -3049,129 +8279,1963 @@ proto_reg_handoff_map(void) dissector_add("tcap.itu_ssn", tcap_itu_ssn4, map_handle); } -void -proto_register_map(void) -{ - guint i; - gint last_offset; - module_t *map_module; - - /* Setup list of header fields See Section 1.6.1 for details*/ - static hf_register_info hf[] = - { - { &hf_map_length, - { "Length", "map.len", - FT_UINT8, BASE_HEX, NULL, 0, - "", HFILL } - }, - { &hf_map_opr_code, - { "Operation Code", "map.oprcode", - FT_INT32, BASE_DEC, VALS(gsm_map_opr_code_strings), 0, - "", HFILL } - }, - { &hf_map_int, - { "Integer Data", "map.data", - FT_INT32, BASE_DEC, 0, 0, - "", HFILL } - }, - { &hf_map_imsi, - { "IMSI", "map.imsi", - FT_STRING, BASE_DEC, 0, 0, - "", HFILL } - }, - { &hf_map_addrstring, - { "AddressString", "map.addrstring", - FT_STRING, BASE_DEC, 0, 0, - "", HFILL } - }, - { &hf_map_rand, - { "RAND", "map.rand", - FT_BYTES, BASE_HEX, 0, 0, - "", HFILL } - }, - { &hf_map_sres, - { "SRES", "map.sres", - FT_BYTES, BASE_HEX, 0, 0, - "", HFILL } - }, - { &hf_map_kc, - { "Kc", "map.kc", - FT_BYTES, BASE_HEX, 0, 0, - "", HFILL } - }, - { &hf_map_xres, - { "XRES", "map.xres", - FT_BYTES, BASE_HEX, 0, 0, - "", HFILL } - }, - { &hf_map_ck, - { "CK", "map.ck", - FT_BYTES, BASE_HEX, 0, 0, - "", HFILL } - }, - { &hf_map_ik, - { "IK", "map.ik", - FT_BYTES, BASE_HEX, 0, 0, - "", HFILL } - }, - { &hf_map_autn, - { "AUTN", "map.autn", - FT_BYTES, BASE_HEX, 0, 0, - "", HFILL } - } - }; - - /* Setup protocol subtree array */ -#define NUM_INDIVIDUAL_PARAMS 9 - static gint *ett[NUM_INDIVIDUAL_PARAMS+(GSM_MAP_NUM_OP*2)+NUM_PARAM_1]; - - memset((void *) ett, 0, sizeof(ett)); - - ett[0] = &ett_map; - ett[1] = &ett_opr_code; - ett[2] = &ett_component; - ett[3] = &ett_components; - ett[4] = &ett_sequence; - ett[5] = &ett_param; - ett[6] = &ett_params; - ett[7] = &ett_problem; - ett[8] = &ett_err_code; - - last_offset = NUM_INDIVIDUAL_PARAMS; - - for (i=0; i < GSM_MAP_NUM_OP; i++, last_offset++) - { - ett_op[i] = -1; - ett[last_offset] = &ett_op[i]; - } - - for (i=0; i < GSM_MAP_NUM_OP; i++, last_offset++) - { - ett_op_rr[i] = -1; - ett[last_offset] = &ett_op_rr[i]; - } - - for (i=0; i < NUM_PARAM_1; i++, last_offset++) - { - ett_param_1[i] = -1; - ett[last_offset] = &ett_param_1[i]; - } - - /* Register the protocol name and description */ - proto_map = - proto_register_protocol("GSM Mobile Application Part", - "GSM MAP", "gsm_map"); - - /* Required function calls to register the header fields and subtrees used */ - proto_register_field_array(proto_map, hf, array_length(hf)); - proto_register_subtree_array(ett, array_length(ett)); - - sms_dissector_table = - register_dissector_table("gsm_map.sms_tpdu", "GSM SMS TPDU", - FT_UINT8, BASE_DEC); - - gsm_map_tap = register_tap("gsm_map"); - +/*--- proto_register_gsm_map -------------------------------------------*/ +void proto_register_gsm_map(void) { + module_t *gsm_map_module; + + /* List of fields */ + static hf_register_info hf[] = { + { &hf_gsm_map_invokeCmd, + { "invokeCmd", "gsm_map.invokeCmd", + FT_UINT32, BASE_DEC, VALS(gsm_map_opr_code_strings), 0, + "InvokePDU/invokeCmd", HFILL }}, + { &hf_gsm_map_invokeid, + { "invokeid", "gsm_map.invokeid", + FT_INT32, BASE_DEC, NULL, 0, + "InvokeId/invokeid", HFILL }}, + { &hf_gsm_map_absent, + { "absent", "gsm_map.absent", + FT_NONE, BASE_NONE, NULL, 0, + "InvokeId/absent", HFILL }}, + { &hf_gsm_map_invokeId, + { "invokeId", "gsm_map.invokeId", + FT_UINT32, BASE_DEC, VALS(InvokeId_vals), 0, + "InvokePDU/invokeId", HFILL }}, + { &hf_gsm_map_SendAuthenticationInfoArg, + { "SendAuthenticationInfoArg", "gsm_map.SendAuthenticationInfoArg", + FT_BYTES, BASE_NONE, NULL, 0, + "SendAuthenticationInfoArg", HFILL }}, + { &hf_gsm_map_currentPassword, + { "currentPassword", "gsm_map.currentPassword", + FT_STRING, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_invoke, + { "invoke", "gsm_map.invoke", + FT_NONE, BASE_NONE, NULL, 0, + "GSMMAPPDU/invoke", HFILL }}, + { &hf_gsm_map_returnResult, + { "returnResult", "gsm_map.returnResult", + FT_NONE, BASE_NONE, NULL, 0, + "GSMMAPPDU/returnResult", HFILL }}, + { &hf_gsm_map_getPassword, + { "Password", "gsm_map.password", + FT_UINT8, BASE_DEC, VALS(gsm_map_GetPasswordArg_vals), 0, + "Password", HFILL }}, + { &hf_gsm_map_extension, + { "Extension", "gsm_map.extension", + FT_BOOLEAN, 8, TFS(&gsm_map_extension_value), 0x80, + "Extension", HFILL }}, + { &hf_gsm_map_nature_of_number, + { "Nature of number", "gsm_map.nature_of_number", + FT_UINT8, BASE_HEX, VALS(gsm_map_nature_of_number_values), 0x70, + "ature of number", HFILL }}, + { &hf_gsm_map_number_plan, + { "Number plan", "gsm_map.number_plan", + FT_UINT8, BASE_HEX, VALS(gsm_map_number_plan_values), 0x0f, + "Number plan", HFILL }}, + { &hf_gsm_map_misdn_digits, + { "Misdn digits", "gsm_map.misdn_digits", + FT_STRING, BASE_NONE, NULL, 0, + "Misdn digits", HFILL }}, + { &hf_gsm_map_servicecentreaddress_digits, + { "ServiceCentreAddress digits", "gsm_map.servicecentreaddress_digits", + FT_STRING, BASE_NONE, NULL, 0, + "ServiceCentreAddress digits", HFILL }}, + { &hf_gsm_map_map_gmsc_address_digits, + { "Gmsc Address digits digits", "gsm_map.gmsc_address_digits", + FT_STRING, BASE_NONE, NULL, 0, + "Gmsc Address digits", HFILL }}, + { &hf_gsm_map_imsi_digits, + { "Imsi digits", "gsm_map.imsi_digits", + FT_STRING, BASE_NONE, NULL, 0, + "Imsi digits", HFILL }}, + {&hf_gsm_map_map_RoamingNumber_digits, + { "RoamingNumber digits", "gsm_map.RoamingNumber_digits", + FT_STRING, BASE_NONE, NULL, 0, + "RoamingNumber digits", HFILL }}, + { &hf_gsm_map_Ss_Status_unused, + { "Unused", "gsm_map.unused", + FT_UINT8, BASE_HEX, NULL, 0xf0, + "Unused", HFILL }}, + { &hf_gsm_map_Ss_Status_q_bit, + { "Q bit", "gsm_map.ss_status_q_bit", + FT_BOOLEAN, 8, TFS(&gsm_map_Ss_Status_q_bit_values), 0x08, + "Q bit", HFILL }}, + { &hf_gsm_map_Ss_Status_p_bit, + { "P bit", "gsm_map.ss_status_p_bit", + FT_BOOLEAN, 8, TFS(&gsm_map_Ss_Status_p_values), 0x04, + "P bit", HFILL }}, + { &hf_gsm_map_Ss_Status_r_bit, + { "R bit", "ss_status_r_bit", + FT_BOOLEAN, 8, TFS(&gsm_map_Ss_Status_r_values), 0x02, + "R bit", HFILL }}, + { &hf_gsm_map_Ss_Status_a_bit, + { "A bit", "ss_status_a_bit", + FT_BOOLEAN, 8, TFS(&gsm_map_Ss_Status_a_values), 0x01, + "A bit", HFILL }}, + + +/*--- Included file: packet-gsm_map-hfarr.c ---*/ + + { &hf_gsm_map_protocolId, + { "protocolId", "gsm_map.protocolId", + FT_UINT32, BASE_DEC, VALS(gsm_map_ProtocolId_vals), 0, + "Bss-APDU/protocolId", HFILL }}, + { &hf_gsm_map_signalInfo, + { "signalInfo", "gsm_map.signalInfo", + FT_BYTES, BASE_HEX, NULL, 0, + "Bss-APDU/signalInfo", HFILL }}, + { &hf_gsm_map_extensionContainer, + { "extensionContainer", "gsm_map.extensionContainer", + FT_NONE, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_supportedCamelPhases, + { "supportedCamelPhases", "gsm_map.supportedCamelPhases", + FT_BYTES, BASE_HEX, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_solsaSupportIndicator, + { "solsaSupportIndicator", "gsm_map.solsaSupportIndicator", + FT_NONE, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_imsi, + { "imsi", "gsm_map.imsi", + FT_BYTES, BASE_HEX, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_msc_Number, + { "msc-Number", "gsm_map.msc_Number", + FT_BYTES, BASE_HEX, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_vlr_Number, + { "vlr-Number", "gsm_map.vlr_Number", + FT_BYTES, BASE_HEX, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_lmsi, + { "lmsi", "gsm_map.lmsi", + FT_BYTES, BASE_HEX, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_vlr_Capability, + { "vlr-Capability", "gsm_map.vlr_Capability", + FT_NONE, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_hlr_Number, + { "hlr-Number", "gsm_map.hlr_Number", + FT_BYTES, BASE_HEX, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_PrivateExtensionList_item, + { "Item", "gsm_map.PrivateExtensionList_item", + FT_NONE, BASE_NONE, NULL, 0, + "PrivateExtensionList/_item", HFILL }}, + { &hf_gsm_map_identity, + { "identity", "gsm_map.identity", + FT_UINT32, BASE_DEC, VALS(gsm_map_T_identity_vals), 0, + "CancelLocationArg/identity", HFILL }}, + { &hf_gsm_map_imsi_WithLMSI, + { "imsi-WithLMSI", "gsm_map.imsi_WithLMSI", + FT_NONE, BASE_NONE, NULL, 0, + "CancelLocationArg/identity/imsi-WithLMSI", HFILL }}, + { &hf_gsm_map_cancellationType, + { "cancellationType", "gsm_map.cancellationType", + FT_UINT32, BASE_DEC, VALS(gsm_map_CancellationType_vals), 0, + "CancelLocationArg/cancellationType", HFILL }}, + { &hf_gsm_map_sgsn_Number, + { "sgsn-Number", "gsm_map.sgsn_Number", + FT_BYTES, BASE_HEX, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_freezeTMSI, + { "freezeTMSI", "gsm_map.freezeTMSI", + FT_NONE, BASE_NONE, NULL, 0, + "PurgeMS-Res/freezeTMSI", HFILL }}, + { &hf_gsm_map_freezeP_TMSI, + { "freezeP-TMSI", "gsm_map.freezeP_TMSI", + FT_NONE, BASE_NONE, NULL, 0, + "PurgeMS-Res/freezeP-TMSI", HFILL }}, + { &hf_gsm_map_authenticationSetList, + { "authenticationSetList", "gsm_map.authenticationSetList", + FT_NONE, BASE_NONE, NULL, 0, + "SendIdentificationRes/authenticationSetList", HFILL }}, + { &hf_gsm_map_authenticationSetList_item, + { "Item", "gsm_map.authenticationSetList_item", + FT_NONE, BASE_NONE, NULL, 0, + "SendIdentificationRes/authenticationSetList/_item", HFILL }}, + { &hf_gsm_map_rand, + { "rand", "gsm_map.rand", + FT_BYTES, BASE_HEX, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_sres, + { "sres", "gsm_map.sres", + FT_BYTES, BASE_HEX, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_kc, + { "kc", "gsm_map.kc", + FT_BYTES, BASE_HEX, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_targetCellId, + { "targetCellId", "gsm_map.targetCellId", + FT_BYTES, BASE_HEX, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_ho_NumberNotRequired, + { "ho-NumberNotRequired", "gsm_map.ho_NumberNotRequired", + FT_NONE, BASE_NONE, NULL, 0, + "PrepareHO-Arg/ho-NumberNotRequired", HFILL }}, + { &hf_gsm_map_bss_APDU, + { "bss-APDU", "gsm_map.bss_APDU", + FT_NONE, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_handoverNumber, + { "handoverNumber", "gsm_map.handoverNumber", + FT_BYTES, BASE_HEX, NULL, 0, + "PrepareHO-Res/handoverNumber", HFILL }}, + { &hf_gsm_map_targetMSC_Number, + { "targetMSC-Number", "gsm_map.targetMSC_Number", + FT_BYTES, BASE_HEX, NULL, 0, + "PrepareSubsequentHO-Arg/targetMSC-Number", HFILL }}, + { &hf_gsm_map_numberOfRequestedVectors, + { "numberOfRequestedVectors", "gsm_map.numberOfRequestedVectors", + FT_UINT32, BASE_DEC, NULL, 0, + "SendAuthenticationInfoArgV3/numberOfRequestedVectors", HFILL }}, + { &hf_gsm_map_segmentationProhibited, + { "segmentationProhibited", "gsm_map.segmentationProhibited", + FT_NONE, BASE_NONE, NULL, 0, + "SendAuthenticationInfoArgV3/segmentationProhibited", HFILL }}, + { &hf_gsm_map_immediateResponsePreferred, + { "immediateResponsePreferred", "gsm_map.immediateResponsePreferred", + FT_NONE, BASE_NONE, NULL, 0, + "SendAuthenticationInfoArgV3/immediateResponsePreferred", HFILL }}, + { &hf_gsm_map_re_synchronisationInfo, + { "re-synchronisationInfo", "gsm_map.re_synchronisationInfo", + FT_NONE, BASE_NONE, NULL, 0, + "SendAuthenticationInfoArgV3/re-synchronisationInfo", HFILL }}, + { &hf_gsm_map_auts, + { "auts", "gsm_map.auts", + FT_BYTES, BASE_HEX, NULL, 0, + "SendAuthenticationInfoArgV3/re-synchronisationInfo/auts", HFILL }}, + { &hf_gsm_map_requestingNodeType, + { "requestingNodeType", "gsm_map.requestingNodeType", + FT_UINT32, BASE_DEC, VALS(gsm_map_T_requestingNodeType_vals), 0, + "SendAuthenticationInfoArgV3/requestingNodeType", HFILL }}, + { &hf_gsm_map_requestingPLMN_Id, + { "requestingPLMN-Id", "gsm_map.requestingPLMN_Id", + FT_BYTES, BASE_HEX, NULL, 0, + "SendAuthenticationInfoArgV3/requestingPLMN-Id", HFILL }}, + { &hf_gsm_map_SendAuthenticationInfoRes_item, + { "Item", "gsm_map.SendAuthenticationInfoRes_item", + FT_NONE, BASE_NONE, NULL, 0, + "SendAuthenticationInfoRes/_item", HFILL }}, + { &hf_gsm_map_bearerService, + { "bearerService", "gsm_map.bearerService", + FT_BYTES, BASE_HEX, NULL, 0, + "BasicService/bearerService", HFILL }}, + { &hf_gsm_map_teleservice, + { "teleservice", "gsm_map.teleservice", + FT_UINT8, BASE_DEC, VALS(Teleservice_vals), 0, + "", HFILL }}, + { &hf_gsm_map_BasicServiceGroupList_item, + { "Item", "gsm_map.BasicServiceGroupList_item", + FT_UINT32, BASE_DEC, VALS(gsm_map_BasicService_vals), 0, + "BasicServiceGroupList/_item", HFILL }}, + { &hf_gsm_map_bcsmTriggerDetectionPoint, + { "bcsmTriggerDetectionPoint", "gsm_map.bcsmTriggerDetectionPoint", + FT_UINT32, BASE_DEC, VALS(gsm_map_BcsmTriggerDetectionPoint_vals), 0, + "BcsmCamelTDPData/bcsmTriggerDetectionPoint", HFILL }}, + { &hf_gsm_map_serviceKey, + { "serviceKey", "gsm_map.serviceKey", + FT_UINT32, BASE_DEC, NULL, 0, + "BcsmCamelTDPData/serviceKey", HFILL }}, + { &hf_gsm_map_gsmSCFAddress, + { "gsmSCFAddress", "gsm_map.gsmSCFAddress", + FT_BYTES, BASE_HEX, NULL, 0, + "BcsmCamelTDPData/gsmSCFAddress", HFILL }}, + { &hf_gsm_map_defaultCallHandling, + { "defaultCallHandling", "gsm_map.defaultCallHandling", + FT_UINT32, BASE_DEC, VALS(gsm_map_DefaultCallHandling_vals), 0, + "BcsmCamelTDPData/defaultCallHandling", HFILL }}, + { &hf_gsm_map_BcsmCamelTDPDataList_item, + { "Item", "gsm_map.BcsmCamelTDPDataList_item", + FT_NONE, BASE_NONE, NULL, 0, + "BcsmCamelTDPDataList/_item", HFILL }}, + { &hf_gsm_map_o_BcsmCamelTDPDataList, + { "o-BcsmCamelTDPDataList", "gsm_map.o_BcsmCamelTDPDataList", + FT_NONE, BASE_NONE, NULL, 0, + "O-CSI/o-BcsmCamelTDPDataList", HFILL }}, + { &hf_gsm_map_camelCapabilityHandling, + { "camelCapabilityHandling", "gsm_map.camelCapabilityHandling", + FT_UINT32, BASE_DEC, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_msisdn, + { "msisdn", "gsm_map.msisdn", + FT_BYTES, BASE_HEX, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_category, + { "category", "gsm_map.category", + FT_BYTES, BASE_HEX, NULL, 0, + "InsertSubscriberDataArg/category", HFILL }}, + { &hf_gsm_map_subscriberStatus, + { "subscriberStatus", "gsm_map.subscriberStatus", + FT_UINT32, BASE_DEC, VALS(gsm_map_SubscriberStatus_vals), 0, + "InsertSubscriberDataArg/subscriberStatus", HFILL }}, + { &hf_gsm_map_bearerServiceList, + { "bearerServiceList", "gsm_map.bearerServiceList", + FT_NONE, BASE_NONE, NULL, 0, + "InsertSubscriberDataArg/bearerServiceList", HFILL }}, + { &hf_gsm_map_bearerServiceList_item, + { "Item", "gsm_map.bearerServiceList_item", + FT_BYTES, BASE_HEX, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_teleserviceList, + { "teleserviceList", "gsm_map.teleserviceList", + FT_NONE, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_teleserviceList_item, + { "Item", "gsm_map.teleserviceList_item", + FT_UINT8, BASE_DEC, VALS(Teleservice_vals), 0, + "", HFILL }}, + { &hf_gsm_map_provisionedSS, + { "provisionedSS", "gsm_map.provisionedSS", + FT_NONE, BASE_NONE, NULL, 0, + "InsertSubscriberDataArg/provisionedSS", HFILL }}, + { &hf_gsm_map_provisionedSS_item, + { "Item", "gsm_map.provisionedSS_item", + FT_UINT32, BASE_DEC, VALS(gsm_map_T_provisionedSS_item_vals), 0, + "InsertSubscriberDataArg/provisionedSS/_item", HFILL }}, + { &hf_gsm_map_forwardingInfo, + { "forwardingInfo", "gsm_map.forwardingInfo", + FT_NONE, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_callBarringInfo, + { "callBarringInfo", "gsm_map.callBarringInfo", + FT_NONE, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_cug_Info, + { "cug-Info", "gsm_map.cug_Info", + FT_NONE, BASE_NONE, NULL, 0, + "InsertSubscriberDataArg/provisionedSS/_item/cug-Info", HFILL }}, + { &hf_gsm_map_cug_SubscriptionList, + { "cug-SubscriptionList", "gsm_map.cug_SubscriptionList", + FT_NONE, BASE_NONE, NULL, 0, + "InsertSubscriberDataArg/provisionedSS/_item/cug-Info/cug-SubscriptionList", HFILL }}, + { &hf_gsm_map_cug_SubscriptionList_item, + { "Item", "gsm_map.cug_SubscriptionList_item", + FT_NONE, BASE_NONE, NULL, 0, + "InsertSubscriberDataArg/provisionedSS/_item/cug-Info/cug-SubscriptionList/_item", HFILL }}, + { &hf_gsm_map_cug_Index, + { "cug-Index", "gsm_map.cug_Index", + FT_UINT32, BASE_DEC, NULL, 0, + "InsertSubscriberDataArg/provisionedSS/_item/cug-Info/cug-SubscriptionList/_item/cug-Index", HFILL }}, + { &hf_gsm_map_cug_Interlock, + { "cug-Interlock", "gsm_map.cug_Interlock", + FT_BYTES, BASE_HEX, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_intraCUG_Options, + { "intraCUG-Options", "gsm_map.intraCUG_Options", + FT_UINT32, BASE_DEC, VALS(gsm_map_IntraCUG_Options_vals), 0, + "InsertSubscriberDataArg/provisionedSS/_item/cug-Info/cug-SubscriptionList/_item/intraCUG-Options", HFILL }}, + { &hf_gsm_map_basicServiceGroupList, + { "basicServiceGroupList", "gsm_map.basicServiceGroupList", + FT_NONE, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_cug_FeatureList, + { "cug-FeatureList", "gsm_map.cug_FeatureList", + FT_NONE, BASE_NONE, NULL, 0, + "InsertSubscriberDataArg/provisionedSS/_item/cug-Info/cug-FeatureList", HFILL }}, + { &hf_gsm_map_cug_FeatureList_item, + { "Item", "gsm_map.cug_FeatureList_item", + FT_NONE, BASE_NONE, NULL, 0, + "InsertSubscriberDataArg/provisionedSS/_item/cug-Info/cug-FeatureList/_item", HFILL }}, + { &hf_gsm_map_basicService, + { "basicService", "gsm_map.basicService", + FT_UINT32, BASE_DEC, VALS(gsm_map_BasicService_vals), 0, + "", HFILL }}, + { &hf_gsm_map_preferentialCUG_Indicator, + { "preferentialCUG-Indicator", "gsm_map.preferentialCUG_Indicator", + FT_UINT32, BASE_DEC, NULL, 0, + "InsertSubscriberDataArg/provisionedSS/_item/cug-Info/cug-FeatureList/_item/preferentialCUG-Indicator", HFILL }}, + { &hf_gsm_map_interCUG_Restrictions, + { "interCUG-Restrictions", "gsm_map.interCUG_Restrictions", + FT_BYTES, BASE_HEX, NULL, 0, + "InsertSubscriberDataArg/provisionedSS/_item/cug-Info/cug-FeatureList/_item/interCUG-Restrictions", HFILL }}, + { &hf_gsm_map_ss_Data2, + { "ss-Data2", "gsm_map.ss_Data2", + FT_NONE, BASE_NONE, NULL, 0, + "InsertSubscriberDataArg/provisionedSS/_item/ss-Data2", HFILL }}, + { &hf_gsm_map_ss_Code, + { "ss-Code", "gsm_map.ss_Code", + FT_UINT8, BASE_DEC, VALS(ssCode_vals), 0, + "", HFILL }}, + { &hf_gsm_map_ss_Status, + { "ss-Status", "gsm_map.ss_Status", + FT_BYTES, BASE_HEX, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_ss_SubscriptionOption, + { "ss-SubscriptionOption", "gsm_map.ss_SubscriptionOption", + FT_UINT32, BASE_DEC, VALS(gsm_map_Ss_SubscriptionOption_vals), 0, + "", HFILL }}, + { &hf_gsm_map_emlpp_Info, + { "emlpp-Info", "gsm_map.emlpp_Info", + FT_NONE, BASE_NONE, NULL, 0, + "InsertSubscriberDataArg/provisionedSS/_item/emlpp-Info", HFILL }}, + { &hf_gsm_map_maximumentitledPriority, + { "maximumentitledPriority", "gsm_map.maximumentitledPriority", + FT_UINT32, BASE_DEC, NULL, 0, + "InsertSubscriberDataArg/provisionedSS/_item/emlpp-Info/maximumentitledPriority", HFILL }}, + { &hf_gsm_map_defaultPriority, + { "defaultPriority", "gsm_map.defaultPriority", + FT_UINT32, BASE_DEC, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_odb_Data, + { "odb-Data", "gsm_map.odb_Data", + FT_NONE, BASE_NONE, NULL, 0, + "InsertSubscriberDataArg/odb-Data", HFILL }}, + { &hf_gsm_map_odb_GeneralData, + { "odb-GeneralData", "gsm_map.odb_GeneralData", + FT_BYTES, BASE_HEX, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_odb_HPLMN_Data, + { "odb-HPLMN-Data", "gsm_map.odb_HPLMN_Data", + FT_BYTES, BASE_HEX, NULL, 0, + "InsertSubscriberDataArg/odb-Data/odb-HPLMN-Data", HFILL }}, + { &hf_gsm_map_roamingRestrictionDueToUnsupportedFeature, + { "roamingRestrictionDueToUnsupportedFeature", "gsm_map.roamingRestrictionDueToUnsupportedFeature", + FT_NONE, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_regionalSubscriptionData, + { "regionalSubscriptionData", "gsm_map.regionalSubscriptionData", + FT_NONE, BASE_NONE, NULL, 0, + "InsertSubscriberDataArg/regionalSubscriptionData", HFILL }}, + { &hf_gsm_map_regionalSubscriptionData_item, + { "Item", "gsm_map.regionalSubscriptionData_item", + FT_BYTES, BASE_HEX, NULL, 0, + "InsertSubscriberDataArg/regionalSubscriptionData/_item", HFILL }}, + { &hf_gsm_map_vbsSubscriptionData, + { "vbsSubscriptionData", "gsm_map.vbsSubscriptionData", + FT_NONE, BASE_NONE, NULL, 0, + "InsertSubscriberDataArg/vbsSubscriptionData", HFILL }}, + { &hf_gsm_map_vbsSubscriptionData_item, + { "Item", "gsm_map.vbsSubscriptionData_item", + FT_NONE, BASE_NONE, NULL, 0, + "InsertSubscriberDataArg/vbsSubscriptionData/_item", HFILL }}, + { &hf_gsm_map_groupid, + { "groupid", "gsm_map.groupid", + FT_BYTES, BASE_HEX, NULL, 0, + "InsertSubscriberDataArg/vbsSubscriptionData/_item/groupid", HFILL }}, + { &hf_gsm_map_broadcastInitEntitlement, + { "broadcastInitEntitlement", "gsm_map.broadcastInitEntitlement", + FT_NONE, BASE_NONE, NULL, 0, + "InsertSubscriberDataArg/vbsSubscriptionData/_item/broadcastInitEntitlement", HFILL }}, + { &hf_gsm_map_vgcsSubscriptionData, + { "vgcsSubscriptionData", "gsm_map.vgcsSubscriptionData", + FT_NONE, BASE_NONE, NULL, 0, + "InsertSubscriberDataArg/vgcsSubscriptionData", HFILL }}, + { &hf_gsm_map_vgcsSubscriptionData_item, + { "Item", "gsm_map.vgcsSubscriptionData_item", + FT_NONE, BASE_NONE, NULL, 0, + "InsertSubscriberDataArg/vgcsSubscriptionData/_item", HFILL }}, + { &hf_gsm_map_groupId, + { "groupId", "gsm_map.groupId", + FT_BYTES, BASE_HEX, NULL, 0, + "InsertSubscriberDataArg/vgcsSubscriptionData/_item/groupId", HFILL }}, + { &hf_gsm_map_vlrCamelSubscriptionInfo, + { "vlrCamelSubscriptionInfo", "gsm_map.vlrCamelSubscriptionInfo", + FT_NONE, BASE_NONE, NULL, 0, + "InsertSubscriberDataArg/vlrCamelSubscriptionInfo", HFILL }}, + { &hf_gsm_map_o_CSI, + { "o-CSI", "gsm_map.o_CSI", + FT_NONE, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_ss_CSI, + { "ss-CSI", "gsm_map.ss_CSI", + FT_NONE, BASE_NONE, NULL, 0, + "InsertSubscriberDataArg/vlrCamelSubscriptionInfo/ss-CSI", HFILL }}, + { &hf_gsm_map_ss_CamelData, + { "ss-CamelData", "gsm_map.ss_CamelData", + FT_NONE, BASE_NONE, NULL, 0, + "InsertSubscriberDataArg/vlrCamelSubscriptionInfo/ss-CSI/ss-CamelData", HFILL }}, + { &hf_gsm_map_ss_EventList, + { "ss-EventList", "gsm_map.ss_EventList", + FT_NONE, BASE_NONE, NULL, 0, + "InsertSubscriberDataArg/vlrCamelSubscriptionInfo/ss-CSI/ss-CamelData/ss-EventList", HFILL }}, + { &hf_gsm_map_ss_EventList_item, + { "Item", "gsm_map.ss_EventList_item", + FT_BYTES, BASE_HEX, NULL, 0, + "InsertSubscriberDataArg/vlrCamelSubscriptionInfo/ss-CSI/ss-CamelData/ss-EventList/_item", HFILL }}, + { &hf_gsm_map_gsmSCF_Address, + { "gsmSCF-Address", "gsm_map.gsmSCF_Address", + FT_BYTES, BASE_HEX, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_o_BcsmCamelTDP_CriteriaList, + { "o-BcsmCamelTDP-CriteriaList", "gsm_map.o_BcsmCamelTDP_CriteriaList", + FT_NONE, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_tif_CSI, + { "tif-CSI", "gsm_map.tif_CSI", + FT_NONE, BASE_NONE, NULL, 0, + "InsertSubscriberDataArg/vlrCamelSubscriptionInfo/tif-CSI", HFILL }}, + { &hf_gsm_map_naea_PreferredCI, + { "naea-PreferredCI", "gsm_map.naea_PreferredCI", + FT_NONE, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_gprsSubscriptionData, + { "gprsSubscriptionData", "gsm_map.gprsSubscriptionData", + FT_NONE, BASE_NONE, NULL, 0, + "InsertSubscriberDataArg/gprsSubscriptionData", HFILL }}, + { &hf_gsm_map_completeDataListIncluded, + { "completeDataListIncluded", "gsm_map.completeDataListIncluded", + FT_NONE, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_gprsDataList, + { "gprsDataList", "gsm_map.gprsDataList", + FT_NONE, BASE_NONE, NULL, 0, + "InsertSubscriberDataArg/gprsSubscriptionData/gprsDataList", HFILL }}, + { &hf_gsm_map_gprsDataList_item, + { "Item", "gsm_map.gprsDataList_item", + FT_NONE, BASE_NONE, NULL, 0, + "InsertSubscriberDataArg/gprsSubscriptionData/gprsDataList/_item", HFILL }}, + { &hf_gsm_map_pdp_ContextId, + { "pdp-ContextId", "gsm_map.pdp_ContextId", + FT_UINT32, BASE_DEC, NULL, 0, + "InsertSubscriberDataArg/gprsSubscriptionData/gprsDataList/_item/pdp-ContextId", HFILL }}, + { &hf_gsm_map_pdp_Type, + { "pdp-Type", "gsm_map.pdp_Type", + FT_BYTES, BASE_HEX, NULL, 0, + "InsertSubscriberDataArg/gprsSubscriptionData/gprsDataList/_item/pdp-Type", HFILL }}, + { &hf_gsm_map_pdp_Address, + { "pdp-Address", "gsm_map.pdp_Address", + FT_BYTES, BASE_HEX, NULL, 0, + "InsertSubscriberDataArg/gprsSubscriptionData/gprsDataList/_item/pdp-Address", HFILL }}, + { &hf_gsm_map_qos_Subscribed, + { "qos-Subscribed", "gsm_map.qos_Subscribed", + FT_BYTES, BASE_HEX, NULL, 0, + "InsertSubscriberDataArg/gprsSubscriptionData/gprsDataList/_item/qos-Subscribed", HFILL }}, + { &hf_gsm_map_vplmnAddressAllowed, + { "vplmnAddressAllowed", "gsm_map.vplmnAddressAllowed", + FT_NONE, BASE_NONE, NULL, 0, + "InsertSubscriberDataArg/gprsSubscriptionData/gprsDataList/_item/vplmnAddressAllowed", HFILL }}, + { &hf_gsm_map_apn, + { "apn", "gsm_map.apn", + FT_BYTES, BASE_HEX, NULL, 0, + "InsertSubscriberDataArg/gprsSubscriptionData/gprsDataList/_item/apn", HFILL }}, + { &hf_gsm_map_roamingRestrictedInSgsnDueToUnsupportedFeature, + { "roamingRestrictedInSgsnDueToUnsupportedFeature", "gsm_map.roamingRestrictedInSgsnDueToUnsupportedFeature", + FT_NONE, BASE_NONE, NULL, 0, + "InsertSubscriberDataArg/roamingRestrictedInSgsnDueToUnsupportedFeature", HFILL }}, + { &hf_gsm_map_networkAccessMode, + { "networkAccessMode", "gsm_map.networkAccessMode", + FT_UINT32, BASE_DEC, VALS(gsm_map_T_networkAccessMode_vals), 0, + "InsertSubscriberDataArg/networkAccessMode", HFILL }}, + { &hf_gsm_map_lsaInformation, + { "lsaInformation", "gsm_map.lsaInformation", + FT_NONE, BASE_NONE, NULL, 0, + "InsertSubscriberDataArg/lsaInformation", HFILL }}, + { &hf_gsm_map_lsaOnlyAccessIndicator, + { "lsaOnlyAccessIndicator", "gsm_map.lsaOnlyAccessIndicator", + FT_UINT32, BASE_DEC, VALS(gsm_map_T_lsaOnlyAccessIndicator_vals), 0, + "InsertSubscriberDataArg/lsaInformation/lsaOnlyAccessIndicator", HFILL }}, + { &hf_gsm_map_lsaDataList, + { "lsaDataList", "gsm_map.lsaDataList", + FT_NONE, BASE_NONE, NULL, 0, + "InsertSubscriberDataArg/lsaInformation/lsaDataList", HFILL }}, + { &hf_gsm_map_lsaDataList_item, + { "Item", "gsm_map.lsaDataList_item", + FT_NONE, BASE_NONE, NULL, 0, + "InsertSubscriberDataArg/lsaInformation/lsaDataList/_item", HFILL }}, + { &hf_gsm_map_lsaIdentity, + { "lsaIdentity", "gsm_map.lsaIdentity", + FT_BYTES, BASE_HEX, NULL, 0, + "InsertSubscriberDataArg/lsaInformation/lsaDataList/_item/lsaIdentity", HFILL }}, + { &hf_gsm_map_lsaAttributes, + { "lsaAttributes", "gsm_map.lsaAttributes", + FT_BYTES, BASE_HEX, NULL, 0, + "InsertSubscriberDataArg/lsaInformation/lsaDataList/_item/lsaAttributes", HFILL }}, + { &hf_gsm_map_lsaActiveModeIndicator, + { "lsaActiveModeIndicator", "gsm_map.lsaActiveModeIndicator", + FT_NONE, BASE_NONE, NULL, 0, + "InsertSubscriberDataArg/lsaInformation/lsaDataList/_item/lsaActiveModeIndicator", HFILL }}, + { &hf_gsm_map_lmu_Indicator, + { "lmu-Indicator", "gsm_map.lmu_Indicator", + FT_NONE, BASE_NONE, NULL, 0, + "InsertSubscriberDataArg/lmu-Indicator", HFILL }}, + { &hf_gsm_map_lcsInformation, + { "lcsInformation", "gsm_map.lcsInformation", + FT_NONE, BASE_NONE, NULL, 0, + "InsertSubscriberDataArg/lcsInformation", HFILL }}, + { &hf_gsm_map_gmlc_List, + { "gmlc-List", "gsm_map.gmlc_List", + FT_NONE, BASE_NONE, NULL, 0, + "InsertSubscriberDataArg/lcsInformation/gmlc-List", HFILL }}, + { &hf_gsm_map_gmlc_List_item, + { "Item", "gsm_map.gmlc_List_item", + FT_BYTES, BASE_HEX, NULL, 0, + "InsertSubscriberDataArg/lcsInformation/gmlc-List/_item", HFILL }}, + { &hf_gsm_map_lcs_PrivacyExceptionList, + { "lcs-PrivacyExceptionList", "gsm_map.lcs_PrivacyExceptionList", + FT_NONE, BASE_NONE, NULL, 0, + "InsertSubscriberDataArg/lcsInformation/lcs-PrivacyExceptionList", HFILL }}, + { &hf_gsm_map_lcs_PrivacyExceptionList_item, + { "Item", "gsm_map.lcs_PrivacyExceptionList_item", + FT_NONE, BASE_NONE, NULL, 0, + "InsertSubscriberDataArg/lcsInformation/lcs-PrivacyExceptionList/_item", HFILL }}, + { &hf_gsm_map_notificationToMSUser, + { "notificationToMSUser", "gsm_map.notificationToMSUser", + FT_UINT32, BASE_DEC, VALS(gsm_map_NotificationToMSUser_vals), 0, + "", HFILL }}, + { &hf_gsm_map_externalClientList, + { "externalClientList", "gsm_map.externalClientList", + FT_NONE, BASE_NONE, NULL, 0, + "InsertSubscriberDataArg/lcsInformation/lcs-PrivacyExceptionList/_item/externalClientList", HFILL }}, + { &hf_gsm_map_externalClientList_item, + { "Item", "gsm_map.externalClientList_item", + FT_NONE, BASE_NONE, NULL, 0, + "InsertSubscriberDataArg/lcsInformation/lcs-PrivacyExceptionList/_item/externalClientList/_item", HFILL }}, + { &hf_gsm_map_clientIdentity, + { "clientIdentity", "gsm_map.clientIdentity", + FT_NONE, BASE_NONE, NULL, 0, + "InsertSubscriberDataArg/lcsInformation/lcs-PrivacyExceptionList/_item/externalClientList/_item/clientIdentity", HFILL }}, + { &hf_gsm_map_externalAddress, + { "externalAddress", "gsm_map.externalAddress", + FT_BYTES, BASE_HEX, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_gmlc_Restriction, + { "gmlc-Restriction", "gsm_map.gmlc_Restriction", + FT_UINT32, BASE_DEC, VALS(gsm_map_T_gmlc_Restriction_vals), 0, + "InsertSubscriberDataArg/lcsInformation/lcs-PrivacyExceptionList/_item/externalClientList/_item/gmlc-Restriction", HFILL }}, + { &hf_gsm_map_plmnClientList, + { "plmnClientList", "gsm_map.plmnClientList", + FT_NONE, BASE_NONE, NULL, 0, + "InsertSubscriberDataArg/lcsInformation/lcs-PrivacyExceptionList/_item/plmnClientList", HFILL }}, + { &hf_gsm_map_plmnClientList_item, + { "Item", "gsm_map.plmnClientList_item", + FT_UINT32, BASE_DEC, VALS(gsm_map_T_plmnClientList_item_vals), 0, + "InsertSubscriberDataArg/lcsInformation/lcs-PrivacyExceptionList/_item/plmnClientList/_item", HFILL }}, + { &hf_gsm_map_molr_List, + { "molr-List", "gsm_map.molr_List", + FT_NONE, BASE_NONE, NULL, 0, + "InsertSubscriberDataArg/lcsInformation/molr-List", HFILL }}, + { &hf_gsm_map_molr_List_item, + { "Item", "gsm_map.molr_List_item", + FT_NONE, BASE_NONE, NULL, 0, + "InsertSubscriberDataArg/lcsInformation/molr-List/_item", HFILL }}, + { &hf_gsm_map_bearerServiceList1, + { "bearerServiceList", "gsm_map.bearerServiceList", + FT_NONE, BASE_NONE, NULL, 0, + "InsertSubscriberDataRes/bearerServiceList", HFILL }}, + { &hf_gsm_map_ss_List, + { "ss-List", "gsm_map.ss_List", + FT_NONE, BASE_NONE, NULL, 0, + "InsertSubscriberDataRes/ss-List", HFILL }}, + { &hf_gsm_map_ss_List_item, + { "Item", "gsm_map.ss_List_item", + FT_BYTES, BASE_HEX, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_regionalSubscriptionResponse, + { "regionalSubscriptionResponse", "gsm_map.regionalSubscriptionResponse", + FT_UINT32, BASE_DEC, VALS(gsm_map_RegionalSubscriptionResponse_vals), 0, + "", HFILL }}, + { &hf_gsm_map_callBarringFeatureList, + { "callBarringFeatureList", "gsm_map.callBarringFeatureList", + FT_NONE, BASE_NONE, NULL, 0, + "CallBarringInfo/callBarringFeatureList", HFILL }}, + { &hf_gsm_map_callBarringFeatureList_item, + { "Item", "gsm_map.callBarringFeatureList_item", + FT_NONE, BASE_NONE, NULL, 0, + "CallBarringInfo/callBarringFeatureList/_item", HFILL }}, + { &hf_gsm_map_forwardedToNumber, + { "forwardedToNumber", "gsm_map.forwardedToNumber", + FT_BYTES, BASE_HEX, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_forwardedToSubaddress, + { "forwardedToSubaddress", "gsm_map.forwardedToSubaddress", + FT_BYTES, BASE_HEX, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_forwardingOptions, + { "forwardingOptions", "gsm_map.forwardingOptions", + FT_BYTES, BASE_HEX, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_noReplyConditionTime, + { "noReplyConditionTime", "gsm_map.noReplyConditionTime", + FT_INT32, BASE_DEC, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_matchType, + { "matchType", "gsm_map.matchType", + FT_UINT32, BASE_DEC, VALS(gsm_map_MatchType_vals), 0, + "DestinationNumberCriteria/matchType", HFILL }}, + { &hf_gsm_map_destinationNumberList, + { "destinationNumberList", "gsm_map.destinationNumberList", + FT_NONE, BASE_NONE, NULL, 0, + "DestinationNumberCriteria/destinationNumberList", HFILL }}, + { &hf_gsm_map_destinationNumberList_item, + { "Item", "gsm_map.destinationNumberList_item", + FT_BYTES, BASE_HEX, NULL, 0, + "DestinationNumberCriteria/destinationNumberList/_item", HFILL }}, + { &hf_gsm_map_destinationNumberLengthList, + { "destinationNumberLengthList", "gsm_map.destinationNumberLengthList", + FT_NONE, BASE_NONE, NULL, 0, + "DestinationNumberCriteria/destinationNumberLengthList", HFILL }}, + { &hf_gsm_map_destinationNumberLengthList_item, + { "Item", "gsm_map.destinationNumberLengthList_item", + FT_UINT32, BASE_DEC, NULL, 0, + "DestinationNumberCriteria/destinationNumberLengthList/_item", HFILL }}, + { &hf_gsm_map_forwardingFeatureList, + { "forwardingFeatureList", "gsm_map.forwardingFeatureList", + FT_NONE, BASE_NONE, NULL, 0, + "ForwardingInfo/forwardingFeatureList", HFILL }}, + { &hf_gsm_map_forwardingFeatureList_item, + { "Item", "gsm_map.forwardingFeatureList_item", + FT_NONE, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_naea_PreferredCIC, + { "naea-PreferredCIC", "gsm_map.naea_PreferredCIC", + FT_BYTES, BASE_HEX, NULL, 0, + "Naea-PreferredCI/naea-PreferredCIC", HFILL }}, + { &hf_gsm_map_O_BcsmCamelTDP_CriteriaList_item, + { "Item", "gsm_map.O_BcsmCamelTDP_CriteriaList_item", + FT_NONE, BASE_NONE, NULL, 0, + "O-BcsmCamelTDP-CriteriaList/_item", HFILL }}, + { &hf_gsm_map_o_BcsmTriggerDetectionPoint, + { "o-BcsmTriggerDetectionPoint", "gsm_map.o_BcsmTriggerDetectionPoint", + FT_UINT32, BASE_DEC, VALS(gsm_map_BcsmTriggerDetectionPoint_vals), 0, + "O-BcsmCamelTDP-CriteriaList/_item/o-BcsmTriggerDetectionPoint", HFILL }}, + { &hf_gsm_map_destinationNumberCriteria, + { "destinationNumberCriteria", "gsm_map.destinationNumberCriteria", + FT_NONE, BASE_NONE, NULL, 0, + "O-BcsmCamelTDP-CriteriaList/_item/destinationNumberCriteria", HFILL }}, + { &hf_gsm_map_basicServiceCriteria, + { "basicServiceCriteria", "gsm_map.basicServiceCriteria", + FT_NONE, BASE_NONE, NULL, 0, + "O-BcsmCamelTDP-CriteriaList/_item/basicServiceCriteria", HFILL }}, + { &hf_gsm_map_callTypeCriteria, + { "callTypeCriteria", "gsm_map.callTypeCriteria", + FT_UINT32, BASE_DEC, VALS(gsm_map_CallTypeCriteria_vals), 0, + "O-BcsmCamelTDP-CriteriaList/_item/callTypeCriteria", HFILL }}, + { &hf_gsm_map_cliRestrictionOption, + { "cliRestrictionOption", "gsm_map.cliRestrictionOption", + FT_UINT32, BASE_DEC, VALS(gsm_map_CliRestrictionOption_vals), 0, + "", HFILL }}, + { &hf_gsm_map_overrideCategory, + { "overrideCategory", "gsm_map.overrideCategory", + FT_UINT32, BASE_DEC, VALS(gsm_map_OverrideCategory_vals), 0, + "Ss-SubscriptionOption/overrideCategory", HFILL }}, + { &hf_gsm_map_basicServiceList, + { "basicServiceList", "gsm_map.basicServiceList", + FT_NONE, BASE_NONE, NULL, 0, + "DeleteSubscriberDataArg/basicServiceList", HFILL }}, + { &hf_gsm_map_ss_List1, + { "ss-List", "gsm_map.ss_List", + FT_NONE, BASE_NONE, NULL, 0, + "DeleteSubscriberDataArg/ss-List", HFILL }}, + { &hf_gsm_map_regionalSubscriptionIdentifier, + { "regionalSubscriptionIdentifier", "gsm_map.regionalSubscriptionIdentifier", + FT_BYTES, BASE_HEX, NULL, 0, + "DeleteSubscriberDataArg/regionalSubscriptionIdentifier", HFILL }}, + { &hf_gsm_map_vbsGroupIndication, + { "vbsGroupIndication", "gsm_map.vbsGroupIndication", + FT_NONE, BASE_NONE, NULL, 0, + "DeleteSubscriberDataArg/vbsGroupIndication", HFILL }}, + { &hf_gsm_map_vgcsGroupIndication, + { "vgcsGroupIndication", "gsm_map.vgcsGroupIndication", + FT_NONE, BASE_NONE, NULL, 0, + "DeleteSubscriberDataArg/vgcsGroupIndication", HFILL }}, + { &hf_gsm_map_camelSubscriptionInfoWithdraw, + { "camelSubscriptionInfoWithdraw", "gsm_map.camelSubscriptionInfoWithdraw", + FT_NONE, BASE_NONE, NULL, 0, + "DeleteSubscriberDataArg/camelSubscriptionInfoWithdraw", HFILL }}, + { &hf_gsm_map_gprsSubscriptionDataWithdraw, + { "gprsSubscriptionDataWithdraw", "gsm_map.gprsSubscriptionDataWithdraw", + FT_UINT32, BASE_DEC, VALS(gsm_map_T_gprsSubscriptionDataWithdraw_vals), 0, + "DeleteSubscriberDataArg/gprsSubscriptionDataWithdraw", HFILL }}, + { &hf_gsm_map_allGPRSData, + { "allGPRSData", "gsm_map.allGPRSData", + FT_NONE, BASE_NONE, NULL, 0, + "DeleteSubscriberDataArg/gprsSubscriptionDataWithdraw/allGPRSData", HFILL }}, + { &hf_gsm_map_contextIdList, + { "contextIdList", "gsm_map.contextIdList", + FT_NONE, BASE_NONE, NULL, 0, + "DeleteSubscriberDataArg/gprsSubscriptionDataWithdraw/contextIdList", HFILL }}, + { &hf_gsm_map_contextIdList_item, + { "Item", "gsm_map.contextIdList_item", + FT_UINT32, BASE_DEC, NULL, 0, + "DeleteSubscriberDataArg/gprsSubscriptionDataWithdraw/contextIdList/_item", HFILL }}, + { &hf_gsm_map_roamingRestrictedInSgsnDueToUnsuppportedFeature, + { "roamingRestrictedInSgsnDueToUnsuppportedFeature", "gsm_map.roamingRestrictedInSgsnDueToUnsuppportedFeature", + FT_NONE, BASE_NONE, NULL, 0, + "DeleteSubscriberDataArg/roamingRestrictedInSgsnDueToUnsuppportedFeature", HFILL }}, + { &hf_gsm_map_lsaInformationWithdraw, + { "lsaInformationWithdraw", "gsm_map.lsaInformationWithdraw", + FT_UINT32, BASE_DEC, VALS(gsm_map_T_lsaInformationWithdraw_vals), 0, + "DeleteSubscriberDataArg/lsaInformationWithdraw", HFILL }}, + { &hf_gsm_map_allLSAData, + { "allLSAData", "gsm_map.allLSAData", + FT_NONE, BASE_NONE, NULL, 0, + "DeleteSubscriberDataArg/lsaInformationWithdraw/allLSAData", HFILL }}, + { &hf_gsm_map_lsaIdentityList, + { "lsaIdentityList", "gsm_map.lsaIdentityList", + FT_NONE, BASE_NONE, NULL, 0, + "DeleteSubscriberDataArg/lsaInformationWithdraw/lsaIdentityList", HFILL }}, + { &hf_gsm_map_lsaIdentityList_item, + { "Item", "gsm_map.lsaIdentityList_item", + FT_BYTES, BASE_HEX, NULL, 0, + "DeleteSubscriberDataArg/lsaInformationWithdraw/lsaIdentityList/_item", HFILL }}, + { &hf_gsm_map_gmlc_ListWithdraw, + { "gmlc-ListWithdraw", "gsm_map.gmlc_ListWithdraw", + FT_NONE, BASE_NONE, NULL, 0, + "DeleteSubscriberDataArg/gmlc-ListWithdraw", HFILL }}, + { &hf_gsm_map_hlr_List, + { "hlr-List", "gsm_map.hlr_List", + FT_NONE, BASE_NONE, NULL, 0, + "ResetArg/hlr-List", HFILL }}, + { &hf_gsm_map_hlr_List_item, + { "Item", "gsm_map.hlr_List_item", + FT_BYTES, BASE_HEX, NULL, 0, + "ResetArg/hlr-List/_item", HFILL }}, + { &hf_gsm_map_msNotReachable, + { "msNotReachable", "gsm_map.msNotReachable", + FT_NONE, BASE_NONE, NULL, 0, + "RestoreDataRes/msNotReachable", HFILL }}, + { &hf_gsm_map_traceReference, + { "traceReference", "gsm_map.traceReference", + FT_BYTES, BASE_HEX, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_traceType, + { "traceType", "gsm_map.traceType", + FT_UINT32, BASE_DEC, NULL, 0, + "ActivateTraceModeArg/traceType", HFILL }}, + { &hf_gsm_map_omc_Id, + { "omc-Id", "gsm_map.omc_Id", + FT_BYTES, BASE_HEX, NULL, 0, + "ActivateTraceModeArg/omc-Id", HFILL }}, + { &hf_gsm_map_cug_CheckInfo, + { "cug-CheckInfo", "gsm_map.cug_CheckInfo", + FT_NONE, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_numberOfForwarding, + { "numberOfForwarding", "gsm_map.numberOfForwarding", + FT_UINT32, BASE_DEC, NULL, 0, + "SendRoutingInfoArg/numberOfForwarding", HFILL }}, + { &hf_gsm_map_interrogationType, + { "interrogationType", "gsm_map.interrogationType", + FT_UINT32, BASE_DEC, VALS(gsm_map_T_interrogationType_vals), 0, + "SendRoutingInfoArg/interrogationType", HFILL }}, + { &hf_gsm_map_or_Interrogation, + { "or-Interrogation", "gsm_map.or_Interrogation", + FT_NONE, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_or_Capability, + { "or-Capability", "gsm_map.or_Capability", + FT_UINT32, BASE_DEC, NULL, 0, + "SendRoutingInfoArg/or-Capability", HFILL }}, + { &hf_gsm_map_gmsc_Address, + { "gmsc-Address", "gsm_map.gmsc_Address", + FT_BYTES, BASE_HEX, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_callReferenceNumber, + { "callReferenceNumber", "gsm_map.callReferenceNumber", + FT_BYTES, BASE_HEX, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_forwardingReason, + { "forwardingReason", "gsm_map.forwardingReason", + FT_UINT32, BASE_DEC, VALS(gsm_map_T_forwardingReason_vals), 0, + "SendRoutingInfoArg/forwardingReason", HFILL }}, + { &hf_gsm_map_basicServiceGroup, + { "basicServiceGroup", "gsm_map.basicServiceGroup", + FT_UINT32, BASE_DEC, VALS(gsm_map_BasicService_vals), 0, + "", HFILL }}, + { &hf_gsm_map_networkSignalInfo, + { "networkSignalInfo", "gsm_map.networkSignalInfo", + FT_NONE, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_camelInfo, + { "camelInfo", "gsm_map.camelInfo", + FT_NONE, BASE_NONE, NULL, 0, + "SendRoutingInfoArg/camelInfo", HFILL }}, + { &hf_gsm_map_suppress_T_CSI, + { "suppress-T-CSI", "gsm_map.suppress_T_CSI", + FT_NONE, BASE_NONE, NULL, 0, + "SendRoutingInfoArg/camelInfo/suppress-T-CSI", HFILL }}, + { &hf_gsm_map_suppressionOfAnnouncement, + { "suppressionOfAnnouncement", "gsm_map.suppressionOfAnnouncement", + FT_NONE, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_alertingPattern, + { "alertingPattern", "gsm_map.alertingPattern", + FT_BYTES, BASE_HEX, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_ccbs_Call, + { "ccbs-Call", "gsm_map.ccbs_Call", + FT_NONE, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_supportedCCBS_Phase, + { "supportedCCBS-Phase", "gsm_map.supportedCCBS_Phase", + FT_UINT32, BASE_DEC, NULL, 0, + "SendRoutingInfoArg/supportedCCBS-Phase", HFILL }}, + { &hf_gsm_map_additionalSignalInfo, + { "additionalSignalInfo", "gsm_map.additionalSignalInfo", + FT_NONE, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_extendedRoutingInfo, + { "extendedRoutingInfo", "gsm_map.extendedRoutingInfo", + FT_UINT32, BASE_DEC, VALS(gsm_map_T_extendedRoutingInfo_vals), 0, + "SendRoutingInfoRes/extendedRoutingInfo", HFILL }}, + { &hf_gsm_map_routingInfo, + { "routingInfo", "gsm_map.routingInfo", + FT_UINT32, BASE_DEC, VALS(gsm_map_T_routingInfo_vals), 0, + "SendRoutingInfoRes/extendedRoutingInfo/routingInfo", HFILL }}, + { &hf_gsm_map_roamingNumber, + { "roamingNumber", "gsm_map.roamingNumber", + FT_BYTES, BASE_HEX, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_forwardingData, + { "forwardingData", "gsm_map.forwardingData", + FT_NONE, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_camelRoutingInfo, + { "camelRoutingInfo", "gsm_map.camelRoutingInfo", + FT_NONE, BASE_NONE, NULL, 0, + "SendRoutingInfoRes/extendedRoutingInfo/camelRoutingInfo", HFILL }}, + { &hf_gsm_map_gmscCamelSubscriptionInfo, + { "gmscCamelSubscriptionInfo", "gsm_map.gmscCamelSubscriptionInfo", + FT_NONE, BASE_NONE, NULL, 0, + "SendRoutingInfoRes/extendedRoutingInfo/camelRoutingInfo/gmscCamelSubscriptionInfo", HFILL }}, + { &hf_gsm_map_t_CSI, + { "t-CSI", "gsm_map.t_CSI", + FT_NONE, BASE_NONE, NULL, 0, + "SendRoutingInfoRes/extendedRoutingInfo/camelRoutingInfo/gmscCamelSubscriptionInfo/t-CSI", HFILL }}, + { &hf_gsm_map_t_BcsmCamelTDPDataList, + { "t-BcsmCamelTDPDataList", "gsm_map.t_BcsmCamelTDPDataList", + FT_NONE, BASE_NONE, NULL, 0, + "SendRoutingInfoRes/extendedRoutingInfo/camelRoutingInfo/gmscCamelSubscriptionInfo/t-CSI/t-BcsmCamelTDPDataList", HFILL }}, + { &hf_gsm_map_cugSubscriptionFlag, + { "cugSubscriptionFlag", "gsm_map.cugSubscriptionFlag", + FT_NONE, BASE_NONE, NULL, 0, + "SendRoutingInfoRes/cugSubscriptionFlag", HFILL }}, + { &hf_gsm_map_subscriberInfo, + { "subscriberInfo", "gsm_map.subscriberInfo", + FT_NONE, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_ss_List2, + { "ss-List", "gsm_map.ss_List", + FT_NONE, BASE_NONE, NULL, 0, + "SendRoutingInfoRes/ss-List", HFILL }}, + { &hf_gsm_map_forwardingInterrogationRequired, + { "forwardingInterrogationRequired", "gsm_map.forwardingInterrogationRequired", + FT_NONE, BASE_NONE, NULL, 0, + "SendRoutingInfoRes/forwardingInterrogationRequired", HFILL }}, + { &hf_gsm_map_vmsc_Address, + { "vmsc-Address", "gsm_map.vmsc_Address", + FT_BYTES, BASE_HEX, NULL, 0, + "SendRoutingInfoRes/vmsc-Address", HFILL }}, + { &hf_gsm_map_ccbs_Indicators, + { "ccbs-Indicators", "gsm_map.ccbs_Indicators", + FT_NONE, BASE_NONE, NULL, 0, + "SendRoutingInfoRes/ccbs-Indicators", HFILL }}, + { &hf_gsm_map_ccbs_Possible, + { "ccbs-Possible", "gsm_map.ccbs_Possible", + FT_NONE, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_keepCCBS_CallIndicator, + { "keepCCBS-CallIndicator", "gsm_map.keepCCBS_CallIndicator", + FT_NONE, BASE_NONE, NULL, 0, + "SendRoutingInfoRes/ccbs-Indicators/keepCCBS-CallIndicator", HFILL }}, + { &hf_gsm_map_numberPortabilityStatus, + { "numberPortabilityStatus", "gsm_map.numberPortabilityStatus", + FT_UINT32, BASE_DEC, VALS(gsm_map_T_numberPortabilityStatus_vals), 0, + "SendRoutingInfoRes/numberPortabilityStatus", HFILL }}, + { &hf_gsm_map_assumedIdle, + { "assumedIdle", "gsm_map.assumedIdle", + FT_NONE, BASE_NONE, NULL, 0, + "SubscriberState/assumedIdle", HFILL }}, + { &hf_gsm_map_camelBusy, + { "camelBusy", "gsm_map.camelBusy", + FT_NONE, BASE_NONE, NULL, 0, + "SubscriberState/camelBusy", HFILL }}, + { &hf_gsm_map_notProvidedFromVLR, + { "notProvidedFromVLR", "gsm_map.notProvidedFromVLR", + FT_NONE, BASE_NONE, NULL, 0, + "SubscriberState/notProvidedFromVLR", HFILL }}, + { &hf_gsm_map_ageOfLocationInformation, + { "ageOfLocationInformation", "gsm_map.ageOfLocationInformation", + FT_UINT32, BASE_DEC, NULL, 0, + "LocationInformation/ageOfLocationInformation", HFILL }}, + { &hf_gsm_map_geographicalInformation, + { "geographicalInformation", "gsm_map.geographicalInformation", + FT_BYTES, BASE_HEX, NULL, 0, + "LocationInformation/geographicalInformation", HFILL }}, + { &hf_gsm_map_vlr_number, + { "vlr-number", "gsm_map.vlr_number", + FT_BYTES, BASE_HEX, NULL, 0, + "LocationInformation/vlr-number", HFILL }}, + { &hf_gsm_map_locationNumber, + { "locationNumber", "gsm_map.locationNumber", + FT_BYTES, BASE_HEX, NULL, 0, + "LocationInformation/locationNumber", HFILL }}, + { &hf_gsm_map_cellIdOrLAI, + { "cellIdOrLAI", "gsm_map.cellIdOrLAI", + FT_UINT32, BASE_DEC, VALS(gsm_map_T_cellIdOrLAI_vals), 0, + "LocationInformation/cellIdOrLAI", HFILL }}, + { &hf_gsm_map_cellIdFixedLength, + { "cellIdFixedLength", "gsm_map.cellIdFixedLength", + FT_BYTES, BASE_HEX, NULL, 0, + "LocationInformation/cellIdOrLAI/cellIdFixedLength", HFILL }}, + { &hf_gsm_map_laiFixedLength, + { "laiFixedLength", "gsm_map.laiFixedLength", + FT_BYTES, BASE_HEX, NULL, 0, + "LocationInformation/cellIdOrLAI/laiFixedLength", HFILL }}, + { &hf_gsm_map_locationInformation, + { "locationInformation", "gsm_map.locationInformation", + FT_NONE, BASE_NONE, NULL, 0, + "SubscriberInfo/locationInformation", HFILL }}, + { &hf_gsm_map_subscriberState, + { "subscriberState", "gsm_map.subscriberState", + FT_UINT32, BASE_DEC, VALS(gsm_map_SubscriberState_vals), 0, + "SubscriberInfo/subscriberState", HFILL }}, + { &hf_gsm_map_ext_ProtocolId, + { "ext-ProtocolId", "gsm_map.ext_ProtocolId", + FT_UINT32, BASE_DEC, VALS(gsm_map_T_ext_ProtocolId_vals), 0, + "AdditionalSignalInfo/ext-ProtocolId", HFILL }}, + { &hf_gsm_map_signalInfo1, + { "signalInfo", "gsm_map.signalInfo", + FT_BYTES, BASE_HEX, NULL, 0, + "AdditionalSignalInfo/signalInfo", HFILL }}, + { &hf_gsm_map_cug_OutgoingAccess, + { "cug-OutgoingAccess", "gsm_map.cug_OutgoingAccess", + FT_NONE, BASE_NONE, NULL, 0, + "Cug-CheckInfo/cug-OutgoingAccess", HFILL }}, + { &hf_gsm_map_gsm_BearerCapability, + { "gsm-BearerCapability", "gsm_map.gsm_BearerCapability", + FT_NONE, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_supportedCamelPhasesInGMSC, + { "supportedCamelPhasesInGMSC", "gsm_map.supportedCamelPhasesInGMSC", + FT_BYTES, BASE_HEX, NULL, 0, + "ProvideRoamingNumberArg/supportedCamelPhasesInGMSC", HFILL }}, + { &hf_gsm_map_orNotSupportedInGMSC, + { "orNotSupportedInGMSC", "gsm_map.orNotSupportedInGMSC", + FT_NONE, BASE_NONE, NULL, 0, + "ProvideRoamingNumberArg/orNotSupportedInGMSC", HFILL }}, + { &hf_gsm_map_uu_Data, + { "uu-Data", "gsm_map.uu_Data", + FT_NONE, BASE_NONE, NULL, 0, + "ResumeCallHandlingArg/uu-Data", HFILL }}, + { &hf_gsm_map_uuIndicator, + { "uuIndicator", "gsm_map.uuIndicator", + FT_BYTES, BASE_HEX, NULL, 0, + "ResumeCallHandlingArg/uu-Data/uuIndicator", HFILL }}, + { &hf_gsm_map_uui, + { "uui", "gsm_map.uui", + FT_BYTES, BASE_HEX, NULL, 0, + "ResumeCallHandlingArg/uu-Data/uui", HFILL }}, + { &hf_gsm_map_uusCFInteraction, + { "uusCFInteraction", "gsm_map.uusCFInteraction", + FT_NONE, BASE_NONE, NULL, 0, + "ResumeCallHandlingArg/uu-Data/uusCFInteraction", HFILL }}, + { &hf_gsm_map_allInformationSent, + { "allInformationSent", "gsm_map.allInformationSent", + FT_NONE, BASE_NONE, NULL, 0, + "ResumeCallHandlingArg/allInformationSent", HFILL }}, + { &hf_gsm_map_isdn_BearerCapability, + { "isdn-BearerCapability", "gsm_map.isdn_BearerCapability", + FT_NONE, BASE_NONE, NULL, 0, + "ProvideSIWFSNumberArg/isdn-BearerCapability", HFILL }}, + { &hf_gsm_map_call_Direction, + { "call-Direction", "gsm_map.call_Direction", + FT_BYTES, BASE_HEX, NULL, 0, + "ProvideSIWFSNumberArg/call-Direction", HFILL }}, + { &hf_gsm_map_b_Subscriber_Address, + { "b-Subscriber-Address", "gsm_map.b_Subscriber_Address", + FT_BYTES, BASE_HEX, NULL, 0, + "ProvideSIWFSNumberArg/b-Subscriber-Address", HFILL }}, + { &hf_gsm_map_chosenChannel, + { "chosenChannel", "gsm_map.chosenChannel", + FT_NONE, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_lowerLayerCompatibility, + { "lowerLayerCompatibility", "gsm_map.lowerLayerCompatibility", + FT_NONE, BASE_NONE, NULL, 0, + "ProvideSIWFSNumberArg/lowerLayerCompatibility", HFILL }}, + { &hf_gsm_map_highLayerCompatibility, + { "highLayerCompatibility", "gsm_map.highLayerCompatibility", + FT_NONE, BASE_NONE, NULL, 0, + "ProvideSIWFSNumberArg/highLayerCompatibility", HFILL }}, + { &hf_gsm_map_sIWFSNumber, + { "sIWFSNumber", "gsm_map.sIWFSNumber", + FT_BYTES, BASE_HEX, NULL, 0, + "ProvideSIWFSNumberRes/sIWFSNumber", HFILL }}, + { &hf_gsm_map_channelType, + { "channelType", "gsm_map.channelType", + FT_NONE, BASE_NONE, NULL, 0, + "SIWFSSignallingModifyArg/channelType", HFILL }}, + { &hf_gsm_map_ccbs_Monitoring, + { "ccbs-Monitoring", "gsm_map.ccbs_Monitoring", + FT_UINT32, BASE_DEC, VALS(gsm_map_Ccbs_Monitoring_vals), 0, + "SetReportingStateArg/ccbs-Monitoring", HFILL }}, + { &hf_gsm_map_ccbs_SubscriberStatus, + { "ccbs-SubscriberStatus", "gsm_map.ccbs_SubscriberStatus", + FT_UINT32, BASE_DEC, VALS(gsm_map_Ccbs_SubscriberStatus_vals), 0, + "", HFILL }}, + { &hf_gsm_map_eventReportData, + { "eventReportData", "gsm_map.eventReportData", + FT_NONE, BASE_NONE, NULL, 0, + "StatusReportArg/eventReportData", HFILL }}, + { &hf_gsm_map_callReportdata, + { "callReportdata", "gsm_map.callReportdata", + FT_NONE, BASE_NONE, NULL, 0, + "StatusReportArg/callReportdata", HFILL }}, + { &hf_gsm_map_monitoringMode, + { "monitoringMode", "gsm_map.monitoringMode", + FT_UINT32, BASE_DEC, VALS(gsm_map_MonitoringMode_vals), 0, + "StatusReportArg/callReportdata/monitoringMode", HFILL }}, + { &hf_gsm_map_callOutcome, + { "callOutcome", "gsm_map.callOutcome", + FT_UINT32, BASE_DEC, VALS(gsm_map_CallOutcome_vals), 0, + "StatusReportArg/callReportdata/callOutcome", HFILL }}, + { &hf_gsm_map_callInfo, + { "callInfo", "gsm_map.callInfo", + FT_NONE, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_ccbs_Feature, + { "ccbs-Feature", "gsm_map.ccbs_Feature", + FT_NONE, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_translatedB_Number, + { "translatedB-Number", "gsm_map.translatedB_Number", + FT_BYTES, BASE_HEX, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_replaceB_Number, + { "replaceB-Number", "gsm_map.replaceB_Number", + FT_NONE, BASE_NONE, NULL, 0, + "RemoteUserFreeArg/replaceB-Number", HFILL }}, + { &hf_gsm_map_ruf_Outcome, + { "ruf-Outcome", "gsm_map.ruf_Outcome", + FT_UINT32, BASE_DEC, VALS(gsm_map_Ruf_Outcome_vals), 0, + "RemoteUserFreeRes/ruf-Outcome", HFILL }}, + { &hf_gsm_map_ss_Data, + { "ss-Data", "gsm_map.ss_Data", + FT_NONE, BASE_NONE, NULL, 0, + "Ss-Info/ss-Data", HFILL }}, + { &hf_gsm_map_ccbs_Index, + { "ccbs-Index", "gsm_map.ccbs_Index", + FT_UINT32, BASE_DEC, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_b_subscriberNumber, + { "b-subscriberNumber", "gsm_map.b_subscriberNumber", + FT_BYTES, BASE_HEX, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_b_subscriberSubaddress, + { "b-subscriberSubaddress", "gsm_map.b_subscriberSubaddress", + FT_BYTES, BASE_HEX, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_forwardingFeatureList1, + { "forwardingFeatureList", "gsm_map.forwardingFeatureList", + FT_NONE, BASE_NONE, NULL, 0, + "InterrogateSS-Res/forwardingFeatureList", HFILL }}, + { &hf_gsm_map_genericServiceInfo, + { "genericServiceInfo", "gsm_map.genericServiceInfo", + FT_NONE, BASE_NONE, NULL, 0, + "InterrogateSS-Res/genericServiceInfo", HFILL }}, + { &hf_gsm_map_maximumEntitledPriority, + { "maximumEntitledPriority", "gsm_map.maximumEntitledPriority", + FT_UINT32, BASE_DEC, NULL, 0, + "InterrogateSS-Res/genericServiceInfo/maximumEntitledPriority", HFILL }}, + { &hf_gsm_map_ccbs_FeatureList, + { "ccbs-FeatureList", "gsm_map.ccbs_FeatureList", + FT_NONE, BASE_NONE, NULL, 0, + "InterrogateSS-Res/genericServiceInfo/ccbs-FeatureList", HFILL }}, + { &hf_gsm_map_ccbs_FeatureList_item, + { "Item", "gsm_map.ccbs_FeatureList_item", + FT_NONE, BASE_NONE, NULL, 0, + "InterrogateSS-Res/genericServiceInfo/ccbs-FeatureList/_item", HFILL }}, + { &hf_gsm_map_ussd_DataCodingScheme, + { "ussd-DataCodingScheme", "gsm_map.ussd_DataCodingScheme", + FT_BYTES, BASE_HEX, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_ussd_String, + { "ussd-String", "gsm_map.ussd_String", + FT_BYTES, BASE_HEX, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_ccbs_Data, + { "ccbs-Data", "gsm_map.ccbs_Data", + FT_NONE, BASE_NONE, NULL, 0, + "RegisterCC-EntryArg/ccbs-Data", HFILL }}, + { &hf_gsm_map_serviceIndicator, + { "serviceIndicator", "gsm_map.serviceIndicator", + FT_BYTES, BASE_HEX, NULL, 0, + "RegisterCC-EntryArg/ccbs-Data/serviceIndicator", HFILL }}, + { &hf_gsm_map_sm_RP_PRI, + { "sm-RP-PRI", "gsm_map.sm_RP_PRI", + FT_BOOLEAN, 8, NULL, 0, + "RoutingInfoForSMArg/sm-RP-PRI", HFILL }}, + { &hf_gsm_map_serviceCentreAddress, + { "serviceCentreAddress", "gsm_map.serviceCentreAddress", + FT_BYTES, BASE_HEX, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_gprsSupportIndicator, + { "gprsSupportIndicator", "gsm_map.gprsSupportIndicator", + FT_NONE, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_sm_RP_MTI, + { "sm-RP-MTI", "gsm_map.sm_RP_MTI", + FT_UINT32, BASE_DEC, NULL, 0, + "RoutingInfoForSMArg/sm-RP-MTI", HFILL }}, + { &hf_gsm_map_sm_RP_SMEA, + { "sm-RP-SMEA", "gsm_map.sm_RP_SMEA", + FT_BYTES, BASE_HEX, NULL, 0, + "RoutingInfoForSMArg/sm-RP-SMEA", HFILL }}, + { &hf_gsm_map_locationInfoWithLMSI, + { "locationInfoWithLMSI", "gsm_map.locationInfoWithLMSI", + FT_NONE, BASE_NONE, NULL, 0, + "RoutingInfoForSMRes/locationInfoWithLMSI", HFILL }}, + { &hf_gsm_map_networkNode_Number, + { "networkNode-Number", "gsm_map.networkNode_Number", + FT_BYTES, BASE_HEX, NULL, 0, + "RoutingInfoForSMRes/locationInfoWithLMSI/networkNode-Number", HFILL }}, + { &hf_gsm_map_gprsNodeIndicator, + { "gprsNodeIndicator", "gsm_map.gprsNodeIndicator", + FT_NONE, BASE_NONE, NULL, 0, + "RoutingInfoForSMRes/locationInfoWithLMSI/gprsNodeIndicator", HFILL }}, + { &hf_gsm_map_additional_Number, + { "additional-Number", "gsm_map.additional_Number", + FT_UINT32, BASE_DEC, VALS(gsm_map_T_additional_Number_vals), 0, + "RoutingInfoForSMRes/locationInfoWithLMSI/additional-Number", HFILL }}, + { &hf_gsm_map_sm_RP_DA, + { "sm-RP-DA", "gsm_map.sm_RP_DA", + FT_UINT32, BASE_DEC, VALS(gsm_map_Sm_RP_DA_vals), 0, + "", HFILL }}, + { &hf_gsm_map_sm_RP_OA, + { "sm-RP-OA", "gsm_map.sm_RP_OA", + FT_UINT32, BASE_DEC, VALS(gsm_map_Sm_RP_OA_vals), 0, + "", HFILL }}, + { &hf_gsm_map_sm_RP_UI, + { "sm-RP-UI", "gsm_map.sm_RP_UI", + FT_BYTES, BASE_HEX, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_serviceCentreAddressOA, + { "serviceCentreAddressOA", "gsm_map.serviceCentreAddressOA", + FT_BYTES, BASE_HEX, NULL, 0, + "Sm-RP-OA/serviceCentreAddressOA", HFILL }}, + { &hf_gsm_map_noSM_RP_OA, + { "noSM-RP-OA", "gsm_map.noSM_RP_OA", + FT_NONE, BASE_NONE, NULL, 0, + "Sm-RP-OA/noSM-RP-OA", HFILL }}, + { &hf_gsm_map_serviceCentreAddressDA, + { "serviceCentreAddressDA", "gsm_map.serviceCentreAddressDA", + FT_BYTES, BASE_HEX, NULL, 0, + "Sm-RP-DA/serviceCentreAddressDA", HFILL }}, + { &hf_gsm_map_noSM_RP_DA, + { "noSM-RP-DA", "gsm_map.noSM_RP_DA", + FT_NONE, BASE_NONE, NULL, 0, + "Sm-RP-DA/noSM-RP-DA", HFILL }}, + { &hf_gsm_map_moreMessagesToSend, + { "moreMessagesToSend", "gsm_map.moreMessagesToSend", + FT_NONE, BASE_NONE, NULL, 0, + "Mt-forwardSM-Arg/moreMessagesToSend", HFILL }}, + { &hf_gsm_map_sm_DeliveryOutcome, + { "sm-DeliveryOutcome", "gsm_map.sm_DeliveryOutcome", + FT_UINT32, BASE_DEC, VALS(gsm_map_Sm_DeliveryOutcome_vals), 0, + "ReportSM-DeliveryStatusArg/sm-DeliveryOutcome", HFILL }}, + { &hf_gsm_map_absentSubscriberDiagnosticSM, + { "absentSubscriberDiagnosticSM", "gsm_map.absentSubscriberDiagnosticSM", + FT_UINT32, BASE_DEC, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_deliveryOutcomeIndicator, + { "deliveryOutcomeIndicator", "gsm_map.deliveryOutcomeIndicator", + FT_NONE, BASE_NONE, NULL, 0, + "ReportSM-DeliveryStatusArg/deliveryOutcomeIndicator", HFILL }}, + { &hf_gsm_map_additionalSM_DeliveryOutcome, + { "additionalSM-DeliveryOutcome", "gsm_map.additionalSM_DeliveryOutcome", + FT_UINT32, BASE_DEC, VALS(gsm_map_Sm_DeliveryOutcome_vals), 0, + "ReportSM-DeliveryStatusArg/additionalSM-DeliveryOutcome", HFILL }}, + { &hf_gsm_map_additionalAbsentSubscriberDiagnosticSM, + { "additionalAbsentSubscriberDiagnosticSM", "gsm_map.additionalAbsentSubscriberDiagnosticSM", + FT_UINT32, BASE_DEC, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_storedMSISDN, + { "storedMSISDN", "gsm_map.storedMSISDN", + FT_BYTES, BASE_HEX, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_mw_Status, + { "mw-Status", "gsm_map.mw_Status", + FT_BYTES, BASE_HEX, NULL, 0, + "InformServiceCentreArg/mw-Status", HFILL }}, + { &hf_gsm_map_alertReason, + { "alertReason", "gsm_map.alertReason", + FT_UINT32, BASE_DEC, VALS(gsm_map_T_alertReason_vals), 0, + "ReadyForSM-Arg/alertReason", HFILL }}, + { &hf_gsm_map_alertReasonIndicator, + { "alertReasonIndicator", "gsm_map.alertReasonIndicator", + FT_NONE, BASE_NONE, NULL, 0, + "ReadyForSM-Arg/alertReasonIndicator", HFILL }}, + { &hf_gsm_map_requestedInfo, + { "requestedInfo", "gsm_map.requestedInfo", + FT_NONE, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_locationInformationFlag, + { "locationInformation", "gsm_map.locationInformation", + FT_NONE, BASE_NONE, NULL, 0, + "RequestedInfo/locationInformation", HFILL }}, + { &hf_gsm_map_subscriberStateFlag, + { "subscriberState", "gsm_map.subscriberState", + FT_NONE, BASE_NONE, NULL, 0, + "RequestedInfo/subscriberState", HFILL }}, + { &hf_gsm_map_subscriberIdentity, + { "subscriberIdentity", "gsm_map.subscriberIdentity", + FT_UINT32, BASE_DEC, VALS(gsm_map_T_subscriberIdentity_vals), 0, + "AnyTimeInterrogationArg/subscriberIdentity", HFILL }}, + { &hf_gsm_map_ss_Event, + { "ss-Event", "gsm_map.ss_Event", + FT_BYTES, BASE_HEX, NULL, 0, + "Ss-InvocationNotificationArg/ss-Event", HFILL }}, + { &hf_gsm_map_ss_EventSpecification, + { "ss-EventSpecification", "gsm_map.ss_EventSpecification", + FT_NONE, BASE_NONE, NULL, 0, + "Ss-InvocationNotificationArg/ss-EventSpecification", HFILL }}, + { &hf_gsm_map_ss_EventSpecification_item, + { "Item", "gsm_map.ss_EventSpecification_item", + FT_BYTES, BASE_HEX, NULL, 0, + "Ss-InvocationNotificationArg/ss-EventSpecification/_item", HFILL }}, + { &hf_gsm_map_asciCallReference, + { "asciCallReference", "gsm_map.asciCallReference", + FT_BYTES, BASE_HEX, NULL, 0, + "PrepareGroupCallArg/asciCallReference", HFILL }}, + { &hf_gsm_map_codec_Info, + { "codec-Info", "gsm_map.codec_Info", + FT_BYTES, BASE_HEX, NULL, 0, + "PrepareGroupCallArg/codec-Info", HFILL }}, + { &hf_gsm_map_cipheringAlgorithm, + { "cipheringAlgorithm", "gsm_map.cipheringAlgorithm", + FT_BYTES, BASE_HEX, NULL, 0, + "PrepareGroupCallArg/cipheringAlgorithm", HFILL }}, + { &hf_gsm_map_groupKeyNumber, + { "groupKeyNumber", "gsm_map.groupKeyNumber", + FT_UINT32, BASE_DEC, NULL, 0, + "PrepareGroupCallArg/groupKeyNumber", HFILL }}, + { &hf_gsm_map_groupKey, + { "groupKey", "gsm_map.groupKey", + FT_BYTES, BASE_HEX, NULL, 0, + "PrepareGroupCallArg/groupKey", HFILL }}, + { &hf_gsm_map_priority, + { "priority", "gsm_map.priority", + FT_UINT32, BASE_DEC, NULL, 0, + "PrepareGroupCallArg/priority", HFILL }}, + { &hf_gsm_map_uplinkFree, + { "uplinkFree", "gsm_map.uplinkFree", + FT_NONE, BASE_NONE, NULL, 0, + "PrepareGroupCallArg/uplinkFree", HFILL }}, + { &hf_gsm_map_groupCallNumber, + { "groupCallNumber", "gsm_map.groupCallNumber", + FT_BYTES, BASE_HEX, NULL, 0, + "PrepareGroupCallRes/groupCallNumber", HFILL }}, + { &hf_gsm_map_uplinkRequest, + { "uplinkRequest", "gsm_map.uplinkRequest", + FT_NONE, BASE_NONE, NULL, 0, + "ProcessGroupCallSignallingArg/uplinkRequest", HFILL }}, + { &hf_gsm_map_uplinkReleaseIndication, + { "uplinkReleaseIndication", "gsm_map.uplinkReleaseIndication", + FT_NONE, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_releaseGroupCall, + { "releaseGroupCall", "gsm_map.releaseGroupCall", + FT_NONE, BASE_NONE, NULL, 0, + "ProcessGroupCallSignallingArg/releaseGroupCall", HFILL }}, + { &hf_gsm_map_uplinkRequestAck, + { "uplinkRequestAck", "gsm_map.uplinkRequestAck", + FT_NONE, BASE_NONE, NULL, 0, + "ForwardGroupCallSignallingArg/uplinkRequestAck", HFILL }}, + { &hf_gsm_map_uplinkRejectCommand, + { "uplinkRejectCommand", "gsm_map.uplinkRejectCommand", + FT_NONE, BASE_NONE, NULL, 0, + "ForwardGroupCallSignallingArg/uplinkRejectCommand", HFILL }}, + { &hf_gsm_map_uplinkSeizedCommand, + { "uplinkSeizedCommand", "gsm_map.uplinkSeizedCommand", + FT_NONE, BASE_NONE, NULL, 0, + "ForwardGroupCallSignallingArg/uplinkSeizedCommand", HFILL }}, + { &hf_gsm_map_uplinkReleaseCommand, + { "uplinkReleaseCommand", "gsm_map.uplinkReleaseCommand", + FT_NONE, BASE_NONE, NULL, 0, + "ForwardGroupCallSignallingArg/uplinkReleaseCommand", HFILL }}, + { &hf_gsm_map_sgsn_Address, + { "sgsn-Address", "gsm_map.sgsn_Address", + FT_BYTES, BASE_HEX, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_sgsn_Capability, + { "sgsn-Capability", "gsm_map.sgsn_Capability", + FT_NONE, BASE_NONE, NULL, 0, + "UpdateGprsLocationArg/sgsn-Capability", HFILL }}, + { &hf_gsm_map_ggsn_Address, + { "ggsn-Address", "gsm_map.ggsn_Address", + FT_BYTES, BASE_HEX, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_ggsn_Number, + { "ggsn-Number", "gsm_map.ggsn_Number", + FT_BYTES, BASE_HEX, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_mobileNotReachableReason, + { "mobileNotReachableReason", "gsm_map.mobileNotReachableReason", + FT_UINT32, BASE_DEC, NULL, 0, + "SendRoutingInfoForGprsRes/mobileNotReachableReason", HFILL }}, + { &hf_gsm_map_dataCodingScheme, + { "dataCodingScheme", "gsm_map.dataCodingScheme", + FT_BYTES, BASE_HEX, NULL, 0, + "LcsClientName/dataCodingScheme", HFILL }}, + { &hf_gsm_map_nameString, + { "nameString", "gsm_map.nameString", + FT_BYTES, BASE_HEX, NULL, 0, + "LcsClientName/nameString", HFILL }}, + { &hf_gsm_map_lcsClientType, + { "lcsClientType", "gsm_map.lcsClientType", + FT_UINT32, BASE_DEC, VALS(gsm_map_LcsClientType_vals), 0, + "Lcs-ClientID/lcsClientType", HFILL }}, + { &hf_gsm_map_lcsClientExternalID, + { "lcsClientExternalID", "gsm_map.lcsClientExternalID", + FT_NONE, BASE_NONE, NULL, 0, + "Lcs-ClientID/lcsClientExternalID", HFILL }}, + { &hf_gsm_map_lcsClientDialedByMS, + { "lcsClientDialedByMS", "gsm_map.lcsClientDialedByMS", + FT_BYTES, BASE_HEX, NULL, 0, + "Lcs-ClientID/lcsClientDialedByMS", HFILL }}, + { &hf_gsm_map_lcsClientInternalID, + { "lcsClientInternalID", "gsm_map.lcsClientInternalID", + FT_UINT32, BASE_DEC, VALS(gsm_map_LcsClientInternalID_vals), 0, + "Lcs-ClientID/lcsClientInternalID", HFILL }}, + { &hf_gsm_map_lcsClientName, + { "lcsClientName", "gsm_map.lcsClientName", + FT_NONE, BASE_NONE, NULL, 0, + "Lcs-ClientID/lcsClientName", HFILL }}, + { &hf_gsm_map_locationType, + { "locationType", "gsm_map.locationType", + FT_NONE, BASE_NONE, NULL, 0, + "ProvideSubscriberLocation-Arg/locationType", HFILL }}, + { &hf_gsm_map_locationEstimateType, + { "locationEstimateType", "gsm_map.locationEstimateType", + FT_UINT32, BASE_DEC, VALS(gsm_map_T_locationEstimateType_vals), 0, + "ProvideSubscriberLocation-Arg/locationType/locationEstimateType", HFILL }}, + { &hf_gsm_map_mlc_Number, + { "mlc-Number", "gsm_map.mlc_Number", + FT_BYTES, BASE_HEX, NULL, 0, + "ProvideSubscriberLocation-Arg/mlc-Number", HFILL }}, + { &hf_gsm_map_lcs_ClientID, + { "lcs-ClientID", "gsm_map.lcs_ClientID", + FT_NONE, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_privacyOverride, + { "privacyOverride", "gsm_map.privacyOverride", + FT_NONE, BASE_NONE, NULL, 0, + "ProvideSubscriberLocation-Arg/privacyOverride", HFILL }}, + { &hf_gsm_map_imei, + { "imei", "gsm_map.imei", + FT_BYTES, BASE_HEX, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_lcs_Priority, + { "lcs-Priority", "gsm_map.lcs_Priority", + FT_BYTES, BASE_HEX, NULL, 0, + "ProvideSubscriberLocation-Arg/lcs-Priority", HFILL }}, + { &hf_gsm_map_lcs_QoS, + { "lcs-QoS", "gsm_map.lcs_QoS", + FT_NONE, BASE_NONE, NULL, 0, + "ProvideSubscriberLocation-Arg/lcs-QoS", HFILL }}, + { &hf_gsm_map_horizontal_accuracy, + { "horizontal-accuracy", "gsm_map.horizontal_accuracy", + FT_BYTES, BASE_HEX, NULL, 0, + "ProvideSubscriberLocation-Arg/lcs-QoS/horizontal-accuracy", HFILL }}, + { &hf_gsm_map_verticalCoordinateRequest, + { "verticalCoordinateRequest", "gsm_map.verticalCoordinateRequest", + FT_NONE, BASE_NONE, NULL, 0, + "ProvideSubscriberLocation-Arg/lcs-QoS/verticalCoordinateRequest", HFILL }}, + { &hf_gsm_map_vertical_accuracy, + { "vertical-accuracy", "gsm_map.vertical_accuracy", + FT_BYTES, BASE_HEX, NULL, 0, + "ProvideSubscriberLocation-Arg/lcs-QoS/vertical-accuracy", HFILL }}, + { &hf_gsm_map_responseTime, + { "responseTime", "gsm_map.responseTime", + FT_NONE, BASE_NONE, NULL, 0, + "ProvideSubscriberLocation-Arg/lcs-QoS/responseTime", HFILL }}, + { &hf_gsm_map_responseTimeCategory, + { "responseTimeCategory", "gsm_map.responseTimeCategory", + FT_UINT32, BASE_DEC, VALS(gsm_map_T_responseTimeCategory_vals), 0, + "ProvideSubscriberLocation-Arg/lcs-QoS/responseTime/responseTimeCategory", HFILL }}, + { &hf_gsm_map_locationEstimate, + { "locationEstimate", "gsm_map.locationEstimate", + FT_BYTES, BASE_HEX, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_ageOfLocationEstimate, + { "ageOfLocationEstimate", "gsm_map.ageOfLocationEstimate", + FT_UINT32, BASE_DEC, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_mlcNumber, + { "mlcNumber", "gsm_map.mlcNumber", + FT_BYTES, BASE_HEX, NULL, 0, + "RoutingInfoForLCS-Arg/mlcNumber", HFILL }}, + { &hf_gsm_map_targetMS, + { "targetMS", "gsm_map.targetMS", + FT_UINT32, BASE_DEC, VALS(gsm_map_TargetMS_vals), 0, + "", HFILL }}, + { &hf_gsm_map_lcsLocationInfo, + { "lcsLocationInfo", "gsm_map.lcsLocationInfo", + FT_NONE, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_gsm_map_lcs_Event, + { "lcs-Event", "gsm_map.lcs_Event", + FT_UINT32, BASE_DEC, VALS(gsm_map_Lcs_Event_vals), 0, + "SubscriberLocationReport-Arg/lcs-Event", HFILL }}, + { &hf_gsm_map_na_ESRD, + { "na-ESRD", "gsm_map.na_ESRD", + FT_BYTES, BASE_HEX, NULL, 0, + "SubscriberLocationReport-Arg/na-ESRD", HFILL }}, + { &hf_gsm_map_na_ESRK, + { "na-ESRK", "gsm_map.na_ESRK", + FT_BYTES, BASE_HEX, NULL, 0, + "SubscriberLocationReport-Arg/na-ESRK", HFILL }}, + { &hf_gsm_map_networkResource, + { "networkResource", "gsm_map.networkResource", + FT_UINT32, BASE_DEC, VALS(gsm_map_NetworkResource_vals), 0, + "", HFILL }}, + { &hf_gsm_map_extensibleSystemFailureParam, + { "extensibleSystemFailureParam", "gsm_map.extensibleSystemFailureParam", + FT_NONE, BASE_NONE, NULL, 0, + "SystemFailureParam/extensibleSystemFailureParam", HFILL }}, + { &hf_gsm_map_unknownSubscriberDiagnostic, + { "unknownSubscriberDiagnostic", "gsm_map.unknownSubscriberDiagnostic", + FT_UINT32, BASE_DEC, VALS(gsm_map_T_unknownSubscriberDiagnostic_vals), 0, + "UnknownSubscriberParam/unknownSubscriberDiagnostic", HFILL }}, + { &hf_gsm_map_roamingNotAllowedCause, + { "roamingNotAllowedCause", "gsm_map.roamingNotAllowedCause", + FT_UINT32, BASE_DEC, VALS(gsm_map_T_roamingNotAllowedCause_vals), 0, + "RoamingNotAllowedParam/roamingNotAllowedCause", HFILL }}, + { &hf_gsm_map_absentSubscriberReason, + { "absentSubscriberReason", "gsm_map.absentSubscriberReason", + FT_UINT32, BASE_DEC, VALS(gsm_map_T_absentSubscriberReason_vals), 0, + "AbsentSubscriberParam/absentSubscriberReason", HFILL }}, + { &hf_gsm_map_ccbs_Busy, + { "ccbs-Busy", "gsm_map.ccbs_Busy", + FT_NONE, BASE_NONE, NULL, 0, + "BusySubscriberParam/ccbs-Busy", HFILL }}, + { &hf_gsm_map_callBarringCause, + { "callBarringCause", "gsm_map.callBarringCause", + FT_UINT32, BASE_DEC, VALS(gsm_map_CallBarringCause_vals), 0, + "", HFILL }}, + { &hf_gsm_map_extensibleCallBarredParam, + { "extensibleCallBarredParam", "gsm_map.extensibleCallBarredParam", + FT_NONE, BASE_NONE, NULL, 0, + "CallBarredParam/extensibleCallBarredParam", HFILL }}, + { &hf_gsm_map_unauthorisedMessageOriginator, + { "unauthorisedMessageOriginator", "gsm_map.unauthorisedMessageOriginator", + FT_NONE, BASE_NONE, NULL, 0, + "CallBarredParam/extensibleCallBarredParam/unauthorisedMessageOriginator", HFILL }}, + { &hf_gsm_map_cug_RejectCause, + { "cug-RejectCause", "gsm_map.cug_RejectCause", + FT_UINT32, BASE_DEC, VALS(gsm_map_T_cug_RejectCause_vals), 0, + "Cug-RejectParam/cug-RejectCause", HFILL }}, + { &hf_gsm_map_gprsConnectionSuspended, + { "gprsConnectionSuspended", "gsm_map.gprsConnectionSuspended", + FT_NONE, BASE_NONE, NULL, 0, + "SubBusyForMT-SMS-Param/gprsConnectionSuspended", HFILL }}, + { &hf_gsm_map_sm_EnumeratedDeliveryFailureCause, + { "sm-EnumeratedDeliveryFailureCause", "gsm_map.sm_EnumeratedDeliveryFailureCause", + FT_UINT32, BASE_DEC, VALS(gsm_map_T_sm_EnumeratedDeliveryFailureCause_vals), 0, + "Sm-DeliveryFailureCause/sm-EnumeratedDeliveryFailureCause", HFILL }}, + { &hf_gsm_map_diagnosticInfo, + { "diagnosticInfo", "gsm_map.diagnosticInfo", + FT_BYTES, BASE_HEX, NULL, 0, + "Sm-DeliveryFailureCause/diagnosticInfo", HFILL }}, + { &hf_gsm_map_unauthorizedLCSClient_Diagnostic, + { "unauthorizedLCSClient-Diagnostic", "gsm_map.unauthorizedLCSClient_Diagnostic", + FT_UINT32, BASE_DEC, VALS(gsm_map_T_unauthorizedLCSClient_Diagnostic_vals), 0, + "UnauthorizedLCSClient-Param/unauthorizedLCSClient-Diagnostic", HFILL }}, + { &hf_gsm_map_positionMethodFailure_Diagnostic, + { "positionMethodFailure-Diagnostic", "gsm_map.positionMethodFailure_Diagnostic", + FT_UINT32, BASE_DEC, VALS(gsm_map_T_positionMethodFailure_Diagnostic_vals), 0, + "PositionMethodFailure-Param/positionMethodFailure-Diagnostic", HFILL }}, + { &hf_gsm_map_privateExtensionList, + { "privateExtensionList", "gsm_map.privateExtensionList", + FT_NONE, BASE_NONE, NULL, 0, + "ExtensionContainer/privateExtensionList", HFILL }}, + { &hf_gsm_map_pcsExtensions, + { "pcsExtensions", "gsm_map.pcsExtensions", + FT_NONE, BASE_NONE, NULL, 0, + "ExtensionContainer/pcsExtensions", HFILL }}, + { &hf_gsm_map_SupportedCamelPhases_phase1, + { "phase1", "gsm_map.phase1", + FT_BOOLEAN, 8, NULL, 0x80, + "", HFILL }}, + { &hf_gsm_map_SupportedCamelPhases_phase2, + { "phase2", "gsm_map.phase2", + FT_BOOLEAN, 8, NULL, 0x40, + "", HFILL }}, + { &hf_gsm_map_Odb_GeneralData_allOGCallsBarred, + { "allOGCallsBarred", "gsm_map.allOGCallsBarred", + FT_BOOLEAN, 8, NULL, 0x80, + "", HFILL }}, + { &hf_gsm_map_Odb_GeneralData_internationalOGCallsBarred, + { "internationalOGCallsBarred", "gsm_map.internationalOGCallsBarred", + FT_BOOLEAN, 8, NULL, 0x40, + "", HFILL }}, + { &hf_gsm_map_Odb_GeneralData_internationalOGCallsNotToHPLMNCountryBarred, + { "internationalOGCallsNotToHPLMNCountryBarred", "gsm_map.internationalOGCallsNotToHPLMNCountryBarred", + FT_BOOLEAN, 8, NULL, 0x20, + "", HFILL }}, + { &hf_gsm_map_Odb_GeneralData_premiumRateInformationOGCallsBarred, + { "premiumRateInformationOGCallsBarred", "gsm_map.premiumRateInformationOGCallsBarred", + FT_BOOLEAN, 8, NULL, 0x10, + "", HFILL }}, + { &hf_gsm_map_Odb_GeneralData_premiumRateEntertainementOGCallsBarred, + { "premiumRateEntertainementOGCallsBarred", "gsm_map.premiumRateEntertainementOGCallsBarred", + FT_BOOLEAN, 8, NULL, 0x08, + "", HFILL }}, + { &hf_gsm_map_Odb_GeneralData_ssAccessBarred, + { "ssAccessBarred", "gsm_map.ssAccessBarred", + FT_BOOLEAN, 8, NULL, 0x04, + "", HFILL }}, + { &hf_gsm_map_Odb_GeneralData_interzonalOGCallsBarred, + { "interzonalOGCallsBarred", "gsm_map.interzonalOGCallsBarred", + FT_BOOLEAN, 8, NULL, 0x02, + "", HFILL }}, + { &hf_gsm_map_Odb_GeneralData_interzonalOGCallsNotToHPLMNCountryBarred, + { "interzonalOGCallsNotToHPLMNCountryBarred", "gsm_map.interzonalOGCallsNotToHPLMNCountryBarred", + FT_BOOLEAN, 8, NULL, 0x01, + "", HFILL }}, + { &hf_gsm_map_Odb_GeneralData_interzonalOGCallsAndIntOGCallsNotToHPLMNCountryBarred, + { "interzonalOGCallsAndIntOGCallsNotToHPLMNCountryBarred", "gsm_map.interzonalOGCallsAndIntOGCallsNotToHPLMNCountryBarred", + FT_BOOLEAN, 8, NULL, 0x80, + "", HFILL }}, + { &hf_gsm_map_Odb_GeneralData_allECTBarred, + { "allECTBarred", "gsm_map.allECTBarred", + FT_BOOLEAN, 8, NULL, 0x40, + "", HFILL }}, + { &hf_gsm_map_Odb_GeneralData_chargeableECTBarred, + { "chargeableECTBarred", "gsm_map.chargeableECTBarred", + FT_BOOLEAN, 8, NULL, 0x20, + "", HFILL }}, + { &hf_gsm_map_Odb_GeneralData_internationalECTBarred, + { "internationalECTBarred", "gsm_map.internationalECTBarred", + FT_BOOLEAN, 8, NULL, 0x10, + "", HFILL }}, + { &hf_gsm_map_Odb_GeneralData_interzonalECTBarred, + { "interzonalECTBarred", "gsm_map.interzonalECTBarred", + FT_BOOLEAN, 8, NULL, 0x08, + "", HFILL }}, + { &hf_gsm_map_Odb_GeneralData_doublyChargeableECTBarred, + { "doublyChargeableECTBarred", "gsm_map.doublyChargeableECTBarred", + FT_BOOLEAN, 8, NULL, 0x04, + "", HFILL }}, + { &hf_gsm_map_Odb_GeneralData_multipleECTBarred, + { "multipleECTBarred", "gsm_map.multipleECTBarred", + FT_BOOLEAN, 8, NULL, 0x02, + "", HFILL }}, + { &hf_gsm_map_Odb_HPLMN_Data_plmnSpecificBarringType1, + { "plmnSpecificBarringType1", "gsm_map.plmnSpecificBarringType1", + FT_BOOLEAN, 8, NULL, 0x80, + "", HFILL }}, + { &hf_gsm_map_Odb_HPLMN_Data_plmnSpecificBarringType2, + { "plmnSpecificBarringType2", "gsm_map.plmnSpecificBarringType2", + FT_BOOLEAN, 8, NULL, 0x40, + "", HFILL }}, + { &hf_gsm_map_Odb_HPLMN_Data_plmnSpecificBarringType3, + { "plmnSpecificBarringType3", "gsm_map.plmnSpecificBarringType3", + FT_BOOLEAN, 8, NULL, 0x20, + "", HFILL }}, + { &hf_gsm_map_Odb_HPLMN_Data_plmnSpecificBarringType4, + { "plmnSpecificBarringType4", "gsm_map.plmnSpecificBarringType4", + FT_BOOLEAN, 8, NULL, 0x10, + "", HFILL }}, + { &hf_gsm_map_ServiceIndicator_clirInvoked, + { "clirInvoked", "gsm_map.clirInvoked", + FT_BOOLEAN, 8, NULL, 0x80, + "", HFILL }}, + { &hf_gsm_map_ServiceIndicator_camelInvoked, + { "camelInvoked", "gsm_map.camelInvoked", + FT_BOOLEAN, 8, NULL, 0x40, + "", HFILL }}, + { &hf_gsm_map_T_mw_Status_scAddressNotIncluded, + { "scAddressNotIncluded", "gsm_map.scAddressNotIncluded", + FT_BOOLEAN, 8, NULL, 0x80, + "", HFILL }}, + { &hf_gsm_map_T_mw_Status_mnrfSet, + { "mnrfSet", "gsm_map.mnrfSet", + FT_BOOLEAN, 8, NULL, 0x40, + "", HFILL }}, + { &hf_gsm_map_T_mw_Status_mcefSet, + { "mcefSet", "gsm_map.mcefSet", + FT_BOOLEAN, 8, NULL, 0x20, + "", HFILL }}, + { &hf_gsm_map_T_mw_Status_mnrgSet, + { "mnrgSet", "gsm_map.mnrgSet", + FT_BOOLEAN, 8, NULL, 0x10, + "", HFILL }}, + +/*--- End of included file: packet-gsm_map-hfarr.c ---*/ + + }; + + /* List of subtrees */ + static gint *ett[] = { + &ett_gsm_map, + &ett_gsm_map_InvokeId, + &ett_gsm_map_InvokePDU, + &ett_gsm_map_ReturnResultPDU, + &ett_gsm_map_ReturnResult_result, + &ett_gsm_map_GSMMAPPDU, + +/*--- Included file: packet-gsm_map-ettarr.c ---*/ + + &ett_gsm_map_Bss_APDU, + &ett_gsm_map_SupportedCamelPhases, + &ett_gsm_map_Vlr_Capability, + &ett_gsm_map_UpdateLocationArg, + &ett_gsm_map_UpdateLocationRes, + &ett_gsm_map_PrivateExtensionList, + &ett_gsm_map_PrivateExtension, + &ett_gsm_map_PcsExtensions, + &ett_gsm_map_CancelLocationArg, + &ett_gsm_map_T_identity, + &ett_gsm_map_T_imsi_WithLMSI, + &ett_gsm_map_CancelLocationRes, + &ett_gsm_map_PurgeMS_Arg, + &ett_gsm_map_PurgeMS_Res, + &ett_gsm_map_SendIdentificationRes, + &ett_gsm_map_T_authenticationSetList, + &ett_gsm_map_T_authenticationSetList_item, + &ett_gsm_map_PrepareHO_Arg, + &ett_gsm_map_PrepareHO_Res, + &ett_gsm_map_PrepareSubsequentHO_Arg, + &ett_gsm_map_SendAuthenticationInfoArgV3, + &ett_gsm_map_T_re_synchronisationInfo, + &ett_gsm_map_SendAuthenticationInfoRes, + &ett_gsm_map_SendAuthenticationInfoRes_item, + &ett_gsm_map_BasicService, + &ett_gsm_map_BasicServiceGroupList, + &ett_gsm_map_Odb_GeneralData, + &ett_gsm_map_Odb_HPLMN_Data, + &ett_gsm_map_BcsmCamelTDPData, + &ett_gsm_map_BcsmCamelTDPDataList, + &ett_gsm_map_O_CSI, + &ett_gsm_map_InsertSubscriberDataArg, + &ett_gsm_map_T_bearerServiceList, + &ett_gsm_map_SEQUENCE_SIZE_1_20_OF_Teleservice, + &ett_gsm_map_T_provisionedSS, + &ett_gsm_map_T_provisionedSS_item, + &ett_gsm_map_T_cug_Info, + &ett_gsm_map_T_cug_SubscriptionList, + &ett_gsm_map_T_cug_SubscriptionList_item, + &ett_gsm_map_T_cug_FeatureList, + &ett_gsm_map_T_cug_FeatureList_item, + &ett_gsm_map_T_ss_Data2, + &ett_gsm_map_T_emlpp_Info, + &ett_gsm_map_T_odb_Data, + &ett_gsm_map_T_regionalSubscriptionData, + &ett_gsm_map_T_vbsSubscriptionData, + &ett_gsm_map_T_vbsSubscriptionData_item, + &ett_gsm_map_T_vgcsSubscriptionData, + &ett_gsm_map_T_vgcsSubscriptionData_item, + &ett_gsm_map_T_vlrCamelSubscriptionInfo, + &ett_gsm_map_T_ss_CSI, + &ett_gsm_map_T_ss_CamelData, + &ett_gsm_map_T_ss_EventList, + &ett_gsm_map_T_gprsSubscriptionData, + &ett_gsm_map_T_gprsDataList, + &ett_gsm_map_T_gprsDataList_item, + &ett_gsm_map_T_lsaInformation, + &ett_gsm_map_T_lsaDataList, + &ett_gsm_map_T_lsaDataList_item, + &ett_gsm_map_T_lcsInformation, + &ett_gsm_map_T_gmlc_List, + &ett_gsm_map_T_lcs_PrivacyExceptionList, + &ett_gsm_map_T_lcs_PrivacyExceptionList_item, + &ett_gsm_map_T_externalClientList, + &ett_gsm_map_T_externalClientList_item, + &ett_gsm_map_T_clientIdentity, + &ett_gsm_map_T_plmnClientList, + &ett_gsm_map_T_molr_List, + &ett_gsm_map_T_molr_List_item, + &ett_gsm_map_InsertSubscriberDataRes, + &ett_gsm_map_T_bearerServiceList1, + &ett_gsm_map_T_ss_List, + &ett_gsm_map_CallBarringInfo, + &ett_gsm_map_T_callBarringFeatureList, + &ett_gsm_map_T_callBarringFeatureList_item, + &ett_gsm_map_ForwardingFeatureList, + &ett_gsm_map_DestinationNumberCriteria, + &ett_gsm_map_T_destinationNumberList, + &ett_gsm_map_T_destinationNumberLengthList, + &ett_gsm_map_ForwardingInfo, + &ett_gsm_map_SEQUENCE_SIZE_1_32_OF_ForwardingFeatureList, + &ett_gsm_map_Naea_PreferredCI, + &ett_gsm_map_O_BcsmCamelTDP_CriteriaList, + &ett_gsm_map_O_BcsmCamelTDP_CriteriaList_item, + &ett_gsm_map_Ss_SubscriptionOption, + &ett_gsm_map_DeleteSubscriberDataArg, + &ett_gsm_map_T_ss_List1, + &ett_gsm_map_T_gprsSubscriptionDataWithdraw, + &ett_gsm_map_T_contextIdList, + &ett_gsm_map_T_lsaInformationWithdraw, + &ett_gsm_map_T_lsaIdentityList, + &ett_gsm_map_DeleteSubscriberDataRes, + &ett_gsm_map_ResetArg, + &ett_gsm_map_T_hlr_List, + &ett_gsm_map_RestoreDataArg, + &ett_gsm_map_RestoreDataRes, + &ett_gsm_map_ActivateTraceModeArg, + &ett_gsm_map_ActivateTraceModeRes, + &ett_gsm_map_DeactivateTraceModeArg, + &ett_gsm_map_DeactivateTraceModeRes, + &ett_gsm_map_SendRoutingInfoArg, + &ett_gsm_map_T_camelInfo, + &ett_gsm_map_SendRoutingInfoRes, + &ett_gsm_map_T_extendedRoutingInfo, + &ett_gsm_map_T_routingInfo, + &ett_gsm_map_T_camelRoutingInfo, + &ett_gsm_map_T_gmscCamelSubscriptionInfo, + &ett_gsm_map_T_t_CSI, + &ett_gsm_map_T_ss_List2, + &ett_gsm_map_T_ccbs_Indicators, + &ett_gsm_map_SubscriberState, + &ett_gsm_map_LocationInformation, + &ett_gsm_map_T_cellIdOrLAI, + &ett_gsm_map_SubscriberInfo, + &ett_gsm_map_AdditionalSignalInfo, + &ett_gsm_map_Cug_CheckInfo, + &ett_gsm_map_ForwardingData, + &ett_gsm_map_ProvideRoamingNumberArg, + &ett_gsm_map_ProvideRoamingNumberRes, + &ett_gsm_map_ResumeCallHandlingArg, + &ett_gsm_map_T_uu_Data, + &ett_gsm_map_ResumeCallHandlingRes, + &ett_gsm_map_ProvideSIWFSNumberArg, + &ett_gsm_map_ProvideSIWFSNumberRes, + &ett_gsm_map_SIWFSSignallingModifyArg, + &ett_gsm_map_SIWFSSignallingModifyRes, + &ett_gsm_map_SetReportingStateArg, + &ett_gsm_map_SetReportingStateRes, + &ett_gsm_map_StatusReportArg, + &ett_gsm_map_T_eventReportData, + &ett_gsm_map_T_callReportdata, + &ett_gsm_map_StatusReportRes, + &ett_gsm_map_RemoteUserFreeArg, + &ett_gsm_map_RemoteUserFreeRes, + &ett_gsm_map_Ss_Data, + &ett_gsm_map_RegisterSS_Arg, + &ett_gsm_map_Ss_Info, + &ett_gsm_map_Ccbs_Feature, + &ett_gsm_map_Ss_ForBS, + &ett_gsm_map_InterrogateSS_Res, + &ett_gsm_map_SEQUENCE_SIZE_1_13_OF_ForwardingFeatureList, + &ett_gsm_map_T_genericServiceInfo, + &ett_gsm_map_T_ccbs_FeatureList, + &ett_gsm_map_T_ccbs_FeatureList_item, + &ett_gsm_map_Ussd_Arg, + &ett_gsm_map_Ussd_Res, + &ett_gsm_map_ServiceIndicator, + &ett_gsm_map_RegisterCC_EntryArg, + &ett_gsm_map_T_ccbs_Data, + &ett_gsm_map_RegisterCC_EntryRes, + &ett_gsm_map_EraseCC_EntryArg, + &ett_gsm_map_EraseCC_EntryRes, + &ett_gsm_map_RoutingInfoForSMArg, + &ett_gsm_map_RoutingInfoForSMRes, + &ett_gsm_map_T_locationInfoWithLMSI, + &ett_gsm_map_T_additional_Number, + &ett_gsm_map_Mo_forwardSM_Arg, + &ett_gsm_map_Mo_forwardSM_Res, + &ett_gsm_map_Sm_RP_OA, + &ett_gsm_map_Sm_RP_DA, + &ett_gsm_map_Mt_forwardSM_Arg, + &ett_gsm_map_Mt_forwardSM_Res, + &ett_gsm_map_ReportSM_DeliveryStatusArg, + &ett_gsm_map_ReportSM_DeliveryStatusRes, + &ett_gsm_map_InformServiceCentreArg, + &ett_gsm_map_T_mw_Status, + &ett_gsm_map_AlertServiceCentreArg, + &ett_gsm_map_ReadyForSM_Arg, + &ett_gsm_map_ReadyForSM_Res, + &ett_gsm_map_ProvideSubscriberInfoArg, + &ett_gsm_map_ProvideSubscriberInfoRes, + &ett_gsm_map_RequestedInfo, + &ett_gsm_map_AnyTimeInterrogationArg, + &ett_gsm_map_T_subscriberIdentity, + &ett_gsm_map_AnyTimeInterrogationRes, + &ett_gsm_map_Ss_InvocationNotificationArg, + &ett_gsm_map_T_ss_EventSpecification, + &ett_gsm_map_Ss_InvocationNotificationRes, + &ett_gsm_map_PrepareGroupCallArg, + &ett_gsm_map_PrepareGroupCallRes, + &ett_gsm_map_SendGroupCallEndSignalArg, + &ett_gsm_map_SendGroupCallEndSignalRes, + &ett_gsm_map_ProcessGroupCallSignallingArg, + &ett_gsm_map_ForwardGroupCallSignallingArg, + &ett_gsm_map_UpdateGprsLocationArg, + &ett_gsm_map_T_sgsn_Capability, + &ett_gsm_map_UpdateGprsLocationRes, + &ett_gsm_map_SendRoutingInfoForGprsArg, + &ett_gsm_map_SendRoutingInfoForGprsRes, + &ett_gsm_map_FailureReportArg, + &ett_gsm_map_FailureReportRes, + &ett_gsm_map_NoteMsPresentForGprsArg, + &ett_gsm_map_NoteMsPresentForGprsRes, + &ett_gsm_map_LcsClientExternalID, + &ett_gsm_map_LcsClientName, + &ett_gsm_map_Lcs_ClientID, + &ett_gsm_map_LcsLocationInfo, + &ett_gsm_map_ProvideSubscriberLocation_Arg, + &ett_gsm_map_T_locationType, + &ett_gsm_map_T_lcs_QoS, + &ett_gsm_map_T_responseTime, + &ett_gsm_map_ProvideSubscriberLocation_Res, + &ett_gsm_map_TargetMS, + &ett_gsm_map_RoutingInfoForLCS_Arg, + &ett_gsm_map_RoutingInfoForLCS_Res, + &ett_gsm_map_SubscriberLocationReport_Arg, + &ett_gsm_map_SubscriberLocationReport_Res, + &ett_gsm_map_SystemFailureParam, + &ett_gsm_map_T_extensibleSystemFailureParam, + &ett_gsm_map_DataMissingParam, + &ett_gsm_map_UnexpectedDataParam, + &ett_gsm_map_FacilityNotSupParam, + &ett_gsm_map_IncompatibleTerminalParam, + &ett_gsm_map_ResourceLimitationParam, + &ett_gsm_map_UnknownSubscriberParam, + &ett_gsm_map_NumberChangedParam, + &ett_gsm_map_UnidentifiedSubParam, + &ett_gsm_map_RoamingNotAllowedParam, + &ett_gsm_map_IllegalSubscriberParam, + &ett_gsm_map_IllegalEquipmentParam, + &ett_gsm_map_BearerServNotProvParam, + &ett_gsm_map_TeleservNotProvParam, + &ett_gsm_map_TracingBufferFullParam, + &ett_gsm_map_NoRoamingNbParam, + &ett_gsm_map_AbsentSubscriberParam, + &ett_gsm_map_BusySubscriberParam, + &ett_gsm_map_NoSubscriberReplyParam, + &ett_gsm_map_CallBarredParam, + &ett_gsm_map_T_extensibleCallBarredParam, + &ett_gsm_map_ForwardingFailedParam, + &ett_gsm_map_Or_NotAllowedParam, + &ett_gsm_map_ForwardingViolationParam, + &ett_gsm_map_Cug_RejectParam, + &ett_gsm_map_Ati_NotAllowedParam, + &ett_gsm_map_NoGroupCallNbParam, + &ett_gsm_map_Ss_IncompatibilityCause, + &ett_gsm_map_ShortTermDenialParam, + &ett_gsm_map_LongTermDenialParam, + &ett_gsm_map_SubBusyForMT_SMS_Param, + &ett_gsm_map_Sm_DeliveryFailureCause, + &ett_gsm_map_MessageWaitListFullParam, + &ett_gsm_map_AbsentSubscriberSM_Param, + &ett_gsm_map_UnauthorizedRequestingNetwork_Param, + &ett_gsm_map_UnauthorizedLCSClient_Param, + &ett_gsm_map_PositionMethodFailure_Param, + &ett_gsm_map_UnknownOrUnreachableLCSClient_Param, + &ett_gsm_map_ExtensionContainer, + +/*--- End of included file: packet-gsm_map-ettarr.c ---*/ + + }; + + /* Register protocol */ + proto_gsm_map = proto_register_protocol(PNAME, PSNAME, PFNAME); +/*XXX register_dissector("gsm_map", dissect_gsm_map, proto_gsm_map);*/ + /* Register fields and subtrees */ + proto_register_field_array(proto_gsm_map, hf, array_length(hf)); + proto_register_subtree_array(ett, array_length(ett)); + + sms_dissector_table = register_dissector_table("gsm_map.sms_tpdu", + "GSM SMS TPDU",FT_UINT8, BASE_DEC); + + gsm_map_tap = register_tap("gsm_map"); register_ber_oid_name("0.4.0.0.1.0.1.2","itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) gsm-Network(1) map-ac(0) networkLocUp(1) version2(2)" ); register_ber_oid_name("0.4.0.0.1.0.2.2","itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) gsm-Network(1) map-ac(0) locationCancel(2) version2(2)" ); register_ber_oid_name("0.4.0.0.1.0.2.1","itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) gsm-Network(1) map-ac(0) locationCancel(2) version1(1)" ); @@ -3210,25 +10274,27 @@ proto_register_map(void) register_ber_oid_name("0.4.0.0.1.0.25.2","itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) gsm-Network(1) map-ac(0) shortMsgMT-Relay(25) version2(2)" ); register_ber_oid_name("0.4.0.0.1.0.25.1","itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) gsm-Network(1) map-ac(0) msPurging(27) version2(2)" ); - /* Register our configuration options, particularly our ports */ + /* Register our configuration options, particularly our ssn:s */ - map_module = prefs_register_protocol(proto_map, proto_reg_handoff_map); - prefs_register_uint_preference(map_module, "tcap.itu_ssn1", + gsm_map_module = prefs_register_protocol(proto_gsm_map, proto_reg_handoff_gsm_map); + prefs_register_uint_preference(gsm_map_module, "tcap.itu_ssn1", "Subsystem number used for GSM MAP 1", "Set Subsystem number used for GSM MAP", 10, &global_tcap_itu_ssn1); - prefs_register_uint_preference(map_module, "tcap.itu_ssn2", + prefs_register_uint_preference(gsm_map_module, "tcap.itu_ssn2", "Subsystem number used for GSM MAP 2", "Set Subsystem number used for GSM MAP", 10, &global_tcap_itu_ssn2); - prefs_register_uint_preference(map_module, "tcap.itu_ssn3", + prefs_register_uint_preference(gsm_map_module, "tcap.itu_ssn3", "Subsystem number used for GSM MAP 3", "Set Subsystem number used for GSM MAP", 10, &global_tcap_itu_ssn3); - prefs_register_uint_preference(map_module, "tcap.itu_ssn4", + prefs_register_uint_preference(gsm_map_module, "tcap.itu_ssn4", "Subsystem number used for GSM MAP 4", "Set Subsystem number used for GSM MAP", 10, &global_tcap_itu_ssn4); + } + diff --git a/epan/dissectors/packet-gsm_map.h b/epan/dissectors/packet-gsm_map.h index c313a8f1b8..751608d693 100644 --- a/epan/dissectors/packet-gsm_map.h +++ b/epan/dissectors/packet-gsm_map.h @@ -1,10 +1,16 @@ -/* packet-gsm_map.h +/* Do not modify this file. */ +/* It is created automatically by the ASN.1 to Ethereal dissector compiler */ +/* .\packet-gsm_map.h */ +/* ../../tools/asn2eth.py -X -b -e -p gsm_map -c gsmmap.cnf -s packet-gsm_map-template GSMMAP.asn */ + +/* Input file: packet-gsm_map-template.h */ + +/* packet-gsm_map-template.h + * Routines for GSM MAP packet dissection + * Copyright 2004, Anders Broman * * $Id$ * - * Copyright 2004, Michael Lum , - * In association with Telos Technology Inc. - * * Ethereal - Network traffic analyzer * By Gerald Combs * Copyright 1998 Gerald Combs @@ -21,10 +27,13 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +#ifndef PACKET_GSM_MAP_H +#define PACKET_GSM_MAP_H +/* Defines for the GSM MAP taps */ #define GSM_MAP_MAX_NUM_OPR_CODES 256 typedef struct _gsm_map_tap_rec_t { @@ -33,10 +42,8 @@ typedef struct _gsm_map_tap_rec_t { guint16 size; } gsm_map_tap_rec_t; - -/* - * the following allows TAP code access to the operations - * without having to duplicate it. With MSVC and a - * libethereal.dll, we need a special declaration. - */ ETH_VAR_IMPORT const value_string gsm_map_opr_code_strings[]; + +/* #include "packet-gsm_map-exp.h"*/ + +#endif /* PACKET_GSM_MAP_H */ -- cgit v1.2.3