aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/asn1/gsm_map/gsm_map.cnf
diff options
context:
space:
mode:
Diffstat (limited to 'epan/dissectors/asn1/gsm_map/gsm_map.cnf')
-rw-r--r--epan/dissectors/asn1/gsm_map/gsm_map.cnf1020
1 files changed, 1020 insertions, 0 deletions
diff --git a/epan/dissectors/asn1/gsm_map/gsm_map.cnf b/epan/dissectors/asn1/gsm_map/gsm_map.cnf
new file mode 100644
index 0000000000..e8b1cbb1bb
--- /dev/null
+++ b/epan/dissectors/asn1/gsm_map/gsm_map.cnf
@@ -0,0 +1,1020 @@
+#.OPT
+-b
+#-d satcom
+#-s packet-gsm_map-tmp
+#-k
+-o gsm_map
+#.END
+
+#.MODULE
+MAP-BS-Code gsm_map
+MAP-TS-Code gsm_map
+MAP-SS-Code gsm_map
+MAP-ExtensionDataTypes gsm_map
+MAP-CommonDataTypes gsm_map
+
+MAP-SS-DataTypes gsm_map.ss
+MAP-OM-DataTypes gsm_map.om
+MAP-ER-DataTypes gsm_map.er
+MAP-SM-DataTypes gsm_map.sm
+MAP-MS-DataTypes gsm_map.ms
+MAP-LCS-DataTypes gsm_map.lcs
+MAP-GR-DataTypes gsm_map.gr
+MAP-CH-DataTypes gsm_map.ch
+
+MAP-Errors gsm_map
+MAP-LocationServiceOperations gsm_map
+MAP-Group-Call-Operations gsm_map
+MAP-ShortMessageServiceOperations gsm_map
+MAP-SupplementaryServiceOperations gsm_map
+MAP-CallHandlingOperations gsm_map
+MAP-OperationAndMaintenanceOperations gsm_map
+MAP-MobileServiceOperations gsm_map
+MAP-Protocol gsm_map
+MAP-DialogueInformation gsm_map.dialogue
+MAP-ApplicationContexts gsm_map
+SS-DataTypes gsm_ss
+SS-Operations gsm_ss
+DummyMAP gsm_old
+EricssonMAP gsm_map.ericsson
+
+Remote-Operations-Information-Objects ROS
+
+#.NO_EMIT ONLY_VALS
+CallBarredParam
+PW-RegistrationFailureCause
+SystemFailureParam
+ExtensionType
+NumberPorted/_untag
+
+#.OMIT_ASSIGNMENT
+Code
+Priority
+CommonComponentId
+SubscriberId
+GuidanceInfo
+SS-InfoList
+# Omitting SubscriberData makes CONTENT OF fail and InsertSubscriberDataArg will not get all its tags
+# Not yet used Nokia extensions
+SS-DataEmoInExt
+EmoInCategoryKey
+ANSIIsdArgExt
+ANSISriResExt
+PrefCarrierIdList
+USSD-Extension
+CosInfo
+AnyTimePO-BarringArg
+AnyTimePO-BarringRes
+CarrierIdCode
+COS-FeatureList
+GprsBarring
+COS-Feature
+CustomerGroupID
+SubGroupID
+ClassOfServiceID
+#.END
+#.PDU
+LCS-ClientID
+ISDN-AddressString
+
+#.USE_VALS_EXT
+GSMMAPOperationLocalvalue
+OperationLocalvalue
+
+#.EXPORTS
+AddressString
+Add-GeographicalInformation
+AgeOfLocationInformation
+AlertingPattern
+AreaEventInfo
+BasicServiceCode
+CallReferenceNumber
+CCBS-Feature
+CellGlobalIdOrServiceAreaIdOrLAI
+CellGlobalIdOrServiceAreaIdFixedLength
+CUG-CheckInfo
+CUG-Index
+CUG-Interlock
+CUG-Info
+CurrentPassword
+D-CSI
+DeferredLocationEventType
+DefaultGPRS-Handling
+DefaultSMS-Handling
+EraseCC-EntryArg
+EraseCC-EntryRes
+Ext-BasicServiceCode
+Ext-ForwOptions
+Ext-GeographicalInformation EXTERN WS_DLL
+Ext-NoRepCondTime
+Ext-QoS-Subscribed
+Ext2-QoS-Subscribed
+Ext3-QoS-Subscribed
+ExtensionContainer
+ExternalSignalInfo
+ForwardingOptions
+GeographicalInformation
+GetPasswordArg
+GlobalCellId EXTERN WS_DLL
+GPRSChargingID
+GPRSMSClass
+GSMMAPLocalErrorcode
+GSN-Address
+IMEI
+IMSI EXTERN WS_DLL
+InterrogateSS-Res
+ISDN-AddressString EXTERN WS_DLL
+ISDN-AddressString_PDU EXTERN WS_DLL
+ISDN-SubaddressString
+LAIFixedLength
+LCSClientExternalID
+LCS-ClientID
+LCS-ClientID_PDU
+LCSClientInternalID
+LCSClientName
+LCSClientType
+LCSRequestorID
+LCSCodeword
+LCS-Priority
+LCSServiceTypeID
+LCS-ReferenceNumber
+LCS-QoS
+LocationInformation
+LocationMethod
+LocationType
+LSAIdentity
+MS-Classmark2
+NAEA-CIC
+NetworkResource
+NewPassword
+NotificationToMSUser
+O-CSI
+O-BcsmCamelTDPCriteriaList
+OfferedCamel4Functionalities
+PositionMethodFailure-Diagnostic
+ProtectedPayload
+QoS-Subscribed
+RAIdentity
+RegisterCC-EntryRes
+RegisterSS-Arg
+SM-RP-DA
+SM-RP-OA
+SubscriberState
+SecurityHeader
+ServiceKey
+SupportedCamelPhases
+SupportedGADShapes
+SuppressionOfAnnouncement
+SS-Code
+SS-Status
+SS-Info
+SS-ForBS-Code
+TBCD-STRING
+UnauthorizedLCSClient-Diagnostic
+USSD-DataCodingScheme
+USSD-String
+USSD-Arg
+USSD-Res
+UU-Data
+VelocityEstimate
+#.END
+#.REGISTER
+MAP-DialoguePDU B "0.4.0.0.1.1.1.1" "map-DialogueAS"
+
+# This table creates the value_sting to name GSM MAP operation codes and errors
+# in file packet-camel-table.c which is included in the template file
+#
+#.TABLE_BODY OPERATION
+ { %(&operationCode)s, "%(_ident)s" },
+#.END
+
+#.TABLE2_BODY ERROR
+ { %(&errorCode)s, "%(_ident)s" },
+#.END
+
+
+# Conformance for ROS stuff
+
+#.FN_BODY InvokeParameter
+ offset = dissect_invokeData(tree, tvb, offset, actx);
+
+#.FN_BODY ReturnResultParameter
+ offset = dissect_returnResultData(tree, tvb, offset, actx);
+
+#.FN_BODY ReturnErrorParameter
+ offset = dissect_returnErrorData(tree, tvb, offset, actx);
+
+#.FN_PARS GSMMAPOperationLocalvalue
+
+ VAL_PTR = &opcode
+
+#.FN_BODY GSMMAPOperationLocalvalue
+ const char *opcode_string;
+
+%(DEFAULT_BODY)s
+ /* Retrieve opcode string and eventually update item value */
+ opcode_string = gsm_map_opr_code(opcode, actx->created_item);
+ col_append_str(actx->pinfo->cinfo, COL_INFO, opcode_string);
+ col_append_str(actx->pinfo->cinfo, COL_INFO, " ");
+
+#.FN_PARS GSMMAPLocalErrorcode
+
+ VAL_PTR = &errorCode
+# End ROS
+#----------------------------------------------------------------------------------------
+
+#.FN_BODY PrivateExtension/extId FN_VARIANT = _str VAL_PTR = &actx->external.direct_reference
+%(DEFAULT_BODY)s
+ actx->external.direct_ref_present = (actx->external.direct_reference != NULL) ? TRUE : FALSE;
+
+#.FN_BODY PrivateExtension/extType
+ proto_tree *ext_tree;
+ ext_tree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_gsm_map_extension_data, NULL, "Extension Data");
+ if (actx->external.direct_ref_present){
+ offset=call_ber_oid_callback(actx->external.direct_reference, tvb, offset, actx->pinfo, ext_tree, NULL);
+ }else{
+ call_dissector(data_handle, tvb, actx->pinfo, ext_tree);
+ offset = tvb_reported_length_remaining(tvb,offset);
+ }
+
+#.FN_PARS AccessNetworkProtocolId
+
+ VAL_PTR = &AccessNetworkProtocolId
+
+#.FN_BODY AddressString VAL_PTR = &parameter_tvb
+
+ tvbuff_t *parameter_tvb;
+ proto_tree *subtree;
+
+%(DEFAULT_BODY)s
+
+ if (!parameter_tvb)
+ return offset;
+
+ subtree = proto_item_add_subtree(actx->created_item, ett_gsm_map_isdn_address_string);
+ dissect_gsm_map_msisdn(parameter_tvb, actx->pinfo , subtree);
+
+#.FN_BODY IMSI VAL_PTR = &parameter_tvb
+ tvbuff_t *parameter_tvb;
+
+ offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, &parameter_tvb);
+
+ if (!parameter_tvb)
+ return offset;
+ if(tvb_reported_length(parameter_tvb)==0)
+ return offset;
+
+ /* Hide the octet string default printout */
+ PROTO_ITEM_SET_HIDDEN(actx->created_item);
+ dissect_e212_imsi(parameter_tvb, actx->pinfo, tree, 0, tvb_reported_length(parameter_tvb), FALSE);
+
+
+#.FN_BODY TBCD-STRING VAL_PTR = &parameter_tvb
+ tvbuff_t *parameter_tvb;
+ const char *digit_str;
+ proto_tree *subtree;
+
+ %(DEFAULT_BODY)s
+
+ if (!parameter_tvb)
+ return offset;
+ if(tvb_reported_length(parameter_tvb)==0)
+ return offset;
+
+ subtree = proto_item_add_subtree(actx->created_item, ett_gsm_map_tbcd_digits);
+ digit_str = tvb_bcd_dig_to_wmem_packet_str(parameter_tvb, 0, -1, NULL, FALSE);
+ proto_tree_add_string(subtree, hf_gsm_map_TBCD_digits, parameter_tvb, 0, -1, digit_str);
+
+#----------------------------------------------------------------------------------------
+#.FN_BODY LongSignalInfo VAL_PTR = &parameter_tvb
+#
+#7.6.9.1 AN-apdu
+#This parameter includes one or two concatenated complete 3GPP TS 25.413 or 3GPP TS 48.006 [48] messages, as
+#described in 3GPP TS 23.009 and 3GPP TS 29.010. The access network protocol ID indicates that the message or
+#messages are according to either 3GPP TS 48.006 [48] or 3GPP TS 25.413. For the coding of the messages see 3GPP
+#TS 25.413, 3GPP TS 48.006 [48] and 3GPP TS 48.008 [49].
+
+ tvbuff_t *parameter_tvb;
+ guint8 octet;
+ tvbuff_t *next_tvb;
+ proto_tree *subtree;
+
+
+%(DEFAULT_BODY)s
+
+ if (!parameter_tvb)
+ return offset;
+
+ subtree = proto_item_add_subtree(actx->created_item, ett_gsm_map_LongSignalInfo);
+
+ switch (AccessNetworkProtocolId){
+ /* ts3G-48006 */
+ case 1:
+ octet = tvb_get_guint8(parameter_tvb,0);
+ /* Discrimination parameter */
+ proto_tree_add_item(subtree, hf_gsm_map_disc_par, parameter_tvb, 0,1,ENC_BIG_ENDIAN);
+ if ( octet == 0) {/* DISCRIMINATION TS 48 006(GSM 08.06 version 5.3.0) */
+ /* Strip off discrimination and length */
+ proto_tree_add_item(subtree, hf_gsm_map_len, parameter_tvb, 1,1,ENC_BIG_ENDIAN);
+ next_tvb = tvb_new_subset_remaining(parameter_tvb, 2);
+ call_dissector_with_data(bssap_handle, next_tvb, actx->pinfo, subtree,
+ p_get_proto_data(actx->pinfo->pool, actx->pinfo, proto_gsm_map, actx->pinfo->curr_layer_num));
+ }else if(octet==1){
+ proto_tree_add_item(subtree, hf_gsm_map_dlci, parameter_tvb, 1,1,ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_gsm_map_len, parameter_tvb, 2,1,ENC_BIG_ENDIAN);
+ next_tvb = tvb_new_subset_remaining(parameter_tvb, 3);
+ call_dissector(dtap_handle, next_tvb, actx->pinfo, subtree);
+ }
+ break;
+ /* ts3G-25413 */
+ case 2:
+ call_dissector(ranap_handle, parameter_tvb, actx->pinfo, tree);
+ break;
+ default:
+ break;
+
+ }
+# Set SENT/RECEIVED depending if ISDN-AddressString or AddressString is used.
+# as it's a CHOICE only one is present.
+#.FN_BODY SM-RP-OAold/serviceCentreAddressOA
+ actx->pinfo->p2p_dir = P2P_DIR_SENT;
+%(DEFAULT_BODY)s
+
+#.FN_BODY SM-RP-OA/serviceCentreAddressOA
+ actx->pinfo->p2p_dir = P2P_DIR_SENT;
+%(DEFAULT_BODY)s
+
+#.FN_BODY SM-RP-DAold/imsi
+ actx->pinfo->p2p_dir = P2P_DIR_SENT;
+%(DEFAULT_BODY)s
+
+#.FN_BODY SM-RP-DAold/lmsi
+ actx->pinfo->p2p_dir = P2P_DIR_SENT;
+%(DEFAULT_BODY)s
+
+#.FN_BODY SM-RP-DA/imsi
+ actx->pinfo->p2p_dir = P2P_DIR_SENT;
+%(DEFAULT_BODY)s
+
+#.FN_BODY SM-RP-DA/lmsi
+ actx->pinfo->p2p_dir = P2P_DIR_SENT;
+%(DEFAULT_BODY)s
+
+#.FN_BODY SM-RP-OAold/msisdn
+actx->pinfo->p2p_dir = P2P_DIR_RECV;
+ %(DEFAULT_BODY)s
+
+#.FN_BODY SM-RP-OA/msisdn
+actx->pinfo->p2p_dir = P2P_DIR_RECV;
+ %(DEFAULT_BODY)s
+
+#.FN_BODY SM-RP-DAold/serviceCentreAddressDA
+ actx->pinfo->p2p_dir = P2P_DIR_RECV;
+%(DEFAULT_BODY)s
+
+#.FN_BODY SM-RP-DA/serviceCentreAddressDA
+ actx->pinfo->p2p_dir = P2P_DIR_RECV;
+%(DEFAULT_BODY)s
+
+#.FN_BODY SignalInfo VAL_PTR = &parameter_tvb
+ tvbuff_t *parameter_tvb;
+
+ %(DEFAULT_BODY)s
+ actx->value_ptr = (void*)parameter_tvb;
+
+
+#.FN_BODY SM-DeliveryFailureCause
+ /* dissect_gsm_map_SignalInfo will return parameter_tvb in actx */
+ guint8 oct;
+%(DEFAULT_BODY)s
+
+ if (!actx->value_ptr)
+ return offset;
+ /* Detailed diagnostic information contains either a SMS-SUBMIT-REPORT or a SMS-DELIVERY-REPORT */
+ oct = tvb_get_guint8((tvbuff_t*)actx->value_ptr, 0);
+ actx->pinfo->p2p_dir = ((oct & 0x03) == 0) ? P2P_DIR_RECV : P2P_DIR_SENT;
+ call_dissector_only(gsm_sms_handle, (tvbuff_t*)actx->value_ptr, actx->pinfo, top_tree, NULL);
+
+#.FN_BODY ForwardSM-Arg
+
+ /* dissect_gsm_map_SignalInfo will return parameter_tvb in actx */
+%(DEFAULT_BODY)s
+
+ if (!actx->value_ptr)
+ return offset;
+ if (actx->pinfo->p2p_dir == P2P_DIR_UNKNOWN) {
+ if (gsmmap_pdu_type == 1) {
+ actx->pinfo->p2p_dir = P2P_DIR_SENT;
+ } else {
+ actx->pinfo->p2p_dir = P2P_DIR_RECV;
+ }
+ }
+ call_dissector_only(gsm_sms_handle, (tvbuff_t*)actx->value_ptr, actx->pinfo, top_tree, NULL);
+
+#.FN_BODY MO-ForwardSM-Arg
+
+ /* dissect_gsm_map_SignalInfo will return parameter_tvb in actx */
+%(DEFAULT_BODY)s
+
+ if (!actx->value_ptr)
+ return offset;
+ if (actx->pinfo->p2p_dir == P2P_DIR_UNKNOWN) {
+ actx->pinfo->p2p_dir = P2P_DIR_RECV;
+ }
+ call_dissector_only(gsm_sms_handle, (tvbuff_t*)actx->value_ptr, actx->pinfo, top_tree, NULL);
+
+#.FN_BODY MO-ForwardSM-Res
+
+ /* dissect_gsm_map_SignalInfo will return parameter_tvb in actx */
+%(DEFAULT_BODY)s
+
+ if (!actx->value_ptr)
+ return offset;
+ if (actx->pinfo->p2p_dir == P2P_DIR_UNKNOWN) {
+ actx->pinfo->p2p_dir = P2P_DIR_SENT;
+ }
+ call_dissector_only(gsm_sms_handle, (tvbuff_t*)actx->value_ptr, actx->pinfo, top_tree, NULL);
+
+#.FN_BODY MT-ForwardSM-Arg
+
+ /* dissect_gsm_map_SignalInfo will return parameter_tvb in actx */
+%(DEFAULT_BODY)s
+
+ if (!actx->value_ptr)
+ return offset;
+ if (actx->pinfo->p2p_dir == P2P_DIR_UNKNOWN) {
+ actx->pinfo->p2p_dir = P2P_DIR_SENT;
+ }
+ call_dissector_only(gsm_sms_handle, (tvbuff_t*)actx->value_ptr, actx->pinfo, top_tree, NULL);
+
+#.FN_BODY MT-ForwardSM-Res
+
+ /* dissect_gsm_map_SignalInfo will return parameter_tvb in actx */
+%(DEFAULT_BODY)s
+
+ if (!actx->value_ptr)
+ return offset;
+ if (actx->pinfo->p2p_dir == P2P_DIR_UNKNOWN) {
+ actx->pinfo->p2p_dir = P2P_DIR_RECV;
+ }
+ call_dissector_only(gsm_sms_handle, (tvbuff_t*)actx->value_ptr, actx->pinfo, top_tree, NULL);
+
+#.FN_BODY MT-ForwardSM-VGCS-Arg
+
+ /* dissect_gsm_map_SignalInfo will return parameter_tvb in actx */
+%(DEFAULT_BODY)s
+
+ if (!actx->value_ptr)
+ return offset;
+ if (actx->pinfo->p2p_dir == P2P_DIR_UNKNOWN) {
+ actx->pinfo->p2p_dir = P2P_DIR_SENT;
+ }
+ call_dissector_only(gsm_sms_handle, (tvbuff_t*)actx->value_ptr, actx->pinfo, top_tree, NULL);
+
+#.FN_BODY MT-ForwardSM-VGCS-Res
+
+ /* dissect_gsm_map_SignalInfo will return parameter_tvb in actx */
+%(DEFAULT_BODY)s
+
+ if (!actx->value_ptr)
+ return offset;
+ if (actx->pinfo->p2p_dir == P2P_DIR_UNKNOWN) {
+ actx->pinfo->p2p_dir = P2P_DIR_RECV;
+ }
+ call_dissector_only(gsm_sms_handle, (tvbuff_t*)actx->value_ptr, actx->pinfo, top_tree, NULL);
+
+#.FN_BODY SS-Status VAL_PTR = &parameter_tvb
+
+ tvbuff_t *parameter_tvb;
+ guint8 octet;
+
+%(DEFAULT_BODY)s
+
+ 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);
+
+#.FN_BODY Ext-SS-Status VAL_PTR = &parameter_tvb
+ /* Note Ext-SS-Status can have more than one byte */
+
+ tvbuff_t *parameter_tvb;
+ guint8 octet;
+
+%(DEFAULT_BODY)s
+
+ 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);
+
+#.END
+
+#.FN_BODY USSD-DataCodingScheme VAL_PTR = &parameter_tvb
+ /*The structure of the USSD-DataCodingScheme is defined by
+ * the Cell Broadcast Data Coding Scheme as described in
+ * TS 3GPP TS 23.038
+ * TODO: Should dissect_cbs_data_coding_scheme return encoding type? - like 7bit Alphabet
+ */
+ tvbuff_t *parameter_tvb;
+ proto_tree *subtree;
+
+%(DEFAULT_BODY)s
+ if (!parameter_tvb)
+ return offset;
+ subtree = proto_item_add_subtree(actx->created_item, ett_gsm_map_cbs_data_coding);
+ dissect_cbs_data_coding_scheme(parameter_tvb, actx->pinfo, subtree, 0);
+
+#.FN_BODY USSD-String VAL_PTR = &parameter_tvb
+
+ tvbuff_t *parameter_tvb;
+ guint length;
+ proto_tree *subtree;
+
+%(DEFAULT_BODY)s
+ if (!parameter_tvb)
+ return offset;
+
+ length = tvb_ensure_captured_length_remaining(parameter_tvb,0);
+ subtree = proto_item_add_subtree(actx->created_item, ett_gsm_map_ussd_string);
+ switch(sms_encoding){
+ case SMS_ENCODING_7BIT:
+ case SMS_ENCODING_7BIT_LANG:
+ proto_tree_add_string(subtree, hf_gsm_map_ussd_string, parameter_tvb, 0, length, tvb_get_string_enc(wmem_packet_scope(), parameter_tvb, 0, length, ENC_3GPP_TS_23_038_7BITS|ENC_NA));
+ break;
+ case SMS_ENCODING_8BIT:
+ /* XXX - ASCII, or some extended ASCII? */
+ proto_tree_add_string(subtree, hf_gsm_map_ussd_string, parameter_tvb, 0, length, tvb_get_string_enc(wmem_packet_scope(), parameter_tvb, 0, length, ENC_ASCII|ENC_NA));
+ break;
+ case SMS_ENCODING_UCS2:
+ case SMS_ENCODING_UCS2_LANG:
+ proto_tree_add_string(subtree, hf_gsm_map_ussd_string, parameter_tvb, 0, length, tvb_get_string_enc(wmem_packet_scope(), parameter_tvb, 0, length, ENC_UCS_2|ENC_BIG_ENDIAN));
+ break;
+ default:
+ break;
+ }
+
+#.FN_FTR ForwardingOptions
+
+ proto_tree_add_item(tree, hf_gsm_map_notification_to_forwarding_party, tvb, 0,1,ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_gsm_map_redirecting_presentation, tvb, 0,1,ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_gsm_map_notification_to_calling_party, tvb, 0,1,ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_gsm_map_forwarding_reason, tvb, 0,1,ENC_BIG_ENDIAN);
+#.FN_FTR Ext-ForwFeature/forwardingOptions
+
+ proto_tree_add_item(tree, hf_gsm_map_notification_to_forwarding_party, tvb, 0,1,ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_gsm_map_redirecting_presentation, tvb, 0,1,ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_gsm_map_notification_to_calling_party, tvb, 0,1,ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_gsm_map_forwarding_reason, tvb, 0,1,ENC_BIG_ENDIAN);
+
+
+#.FN_BODY PDP-Type VAL_PTR = &parameter_tvb
+ guint8 pdp_type_org;
+ tvbuff_t *parameter_tvb;
+
+
+%(DEFAULT_BODY)s
+
+ if (!parameter_tvb)
+ return offset;
+ proto_tree_add_item(tree, hf_gsm_map_pdp_type_org, parameter_tvb, 0,1,ENC_BIG_ENDIAN);
+ pdp_type_org = tvb_get_guint8(parameter_tvb,1);
+ switch (pdp_type_org){
+ case 0: /* ETSI */
+ proto_tree_add_item(tree, hf_gsm_map_etsi_pdp_type_number, parameter_tvb, 0,1,ENC_BIG_ENDIAN);
+ break;
+ case 1: /* IETF */
+ proto_tree_add_item(tree, hf_gsm_map_ietf_pdp_type_number, parameter_tvb, 0,1,ENC_BIG_ENDIAN);
+ break;
+ default:
+ break;
+ }
+
+#.FN_BODY QoS-Subscribed VAL_PTR = &parameter_tvb
+
+
+ tvbuff_t *parameter_tvb;
+
+%(DEFAULT_BODY)s
+
+ if (!parameter_tvb)
+ return offset;
+ de_sm_qos(parameter_tvb, tree, actx->pinfo, 0, 3, NULL,0);
+
+#.FN_BODY Ext-QoS-Subscribed VAL_PTR = &parameter_tvb
+
+ tvbuff_t *parameter_tvb;
+
+%(DEFAULT_BODY)s
+
+ if (!parameter_tvb)
+ return offset;
+ dissect_gsm_map_ext_qos_subscribed(tvb, actx->pinfo, tree, actx);
+
+#.FN_BODY GSN-Address VAL_PTR = &parameter_tvb
+
+ tvbuff_t *parameter_tvb;
+ guint8 octet;
+ proto_tree *subtree;
+
+%(DEFAULT_BODY)s
+
+ if (!parameter_tvb)
+ return offset;
+ subtree = proto_item_add_subtree(actx->created_item, ett_gsm_map_pdptypenumber);
+
+ octet = tvb_get_guint8(parameter_tvb,0);
+ switch(octet){
+ case 0x04: /* IPv4 */
+ proto_tree_add_item(subtree, hf_gsm_map_GSNAddress_IPv4, parameter_tvb, 1, 4, ENC_BIG_ENDIAN);
+ break;
+ case 0x50: /* IPv6 */
+ proto_tree_add_item(subtree, hf_gsm_map_GSNAddress_IPv6, parameter_tvb, 1, 16, ENC_NA);
+ break;
+ default:
+ break;
+ }
+
+#.FN_BODY RAIdentity VAL_PTR = &parameter_tvb
+
+ tvbuff_t *parameter_tvb;
+ proto_tree *subtree;
+
+%(DEFAULT_BODY)s
+
+ if (!parameter_tvb)
+ return offset;
+ subtree = proto_item_add_subtree(actx->created_item, ett_gsm_map_RAIdentity);
+ de_gmm_rai(parameter_tvb, subtree, actx->pinfo, 0, 3, NULL,0);
+
+#.FN_BODY LAIFixedLength VAL_PTR = &parameter_tvb
+
+ tvbuff_t *parameter_tvb;
+ proto_tree *subtree;
+
+%(DEFAULT_BODY)s
+
+ if (!parameter_tvb)
+ return offset;
+ subtree = proto_item_add_subtree(actx->created_item, ett_gsm_map_LAIFixedLength);
+ dissect_e212_mcc_mnc(parameter_tvb, actx->pinfo, subtree, 0, E212_LAI, TRUE);
+
+#.FN_BODY RadioResourceInformation VAL_PTR = &parameter_tvb
+ tvbuff_t *parameter_tvb;
+ proto_tree *subtree;
+
+%(DEFAULT_BODY)s
+
+ if (!parameter_tvb)
+ return offset;
+
+ subtree = proto_item_add_subtree(actx->created_item, ett_gsm_map_RadioResourceInformation);
+ be_chan_type(parameter_tvb, subtree, actx->pinfo, 0, tvb_reported_length_remaining(tvb,0), NULL, 0);
+
+#.FN_BODY RANAP-ServiceHandover VAL_PTR = &parameter_tvb
+ tvbuff_t *parameter_tvb;
+ asn1_ctx_t asn1_ctx;
+
+%(DEFAULT_BODY)s
+
+ if (!parameter_tvb)
+ return offset;
+
+ asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, actx->pinfo);
+ dissect_ranap_Service_Handover(parameter_tvb, 0, &asn1_ctx, tree, hf_gsm_map_ranap_service_Handover);
+
+#.FN_BODY IntegrityProtectionInformation VAL_PTR = &parameter_tvb
+ tvbuff_t *parameter_tvb;
+ asn1_ctx_t asn1_ctx;
+
+%(DEFAULT_BODY)s
+
+ if (!parameter_tvb)
+ return offset;
+
+ asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, actx->pinfo);
+ dissect_ranap_IntegrityProtectionInformation(parameter_tvb, 0, &asn1_ctx, tree, hf_gsm_map_IntegrityProtectionInformation);
+
+#.FN_BODY EncryptionInformation VAL_PTR = &parameter_tvb
+ tvbuff_t *parameter_tvb;
+ asn1_ctx_t asn1_ctx;
+
+%(DEFAULT_BODY)s
+
+ if (!parameter_tvb)
+ return offset;
+
+ asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, actx->pinfo);
+ dissect_ranap_EncryptionInformation(parameter_tvb, 0, &asn1_ctx, tree, hf_gsm_map_EncryptionInformation);
+
+#.FN_PARS ProtocolId VAL_PTR = &ProtocolId
+#.FN_BODY Bss-APDU
+ guint8 octet;
+ guint8 length;
+ tvbuff_t *next_tvb;
+ proto_tree *subtree;
+/*
+ETS 300 599: December 2000 (GSM 09.02 version 4.19.1)
+5.6.9.1 BSS-apdu
+This parameter includes one or two concatenated complete 08.06 messages, as described in GSM 03.09
+and GSM 09.10. The Protocol ID indicates that the message or messages are according to GSM 08.06.
+For the coding of the messages see GSM 08.06 and GSM 08.08.
+*/
+ ProtocolId = 0xffffffff;
+%(DEFAULT_BODY)s
+if (!actx->value_ptr)
+ return offset;
+ subtree = proto_item_add_subtree(actx->created_item, ett_gsm_map_externalsignalinfo);
+ switch (ProtocolId){
+ case 1:
+ /* gsm-0408 */
+ /* As per comment abowe Individual IE:(s) will be found here in TLV format
+ * Unfortunatly a branch for each IE must be made to call the apropriate
+ * function
+ */
+ /* Get tag */
+ octet = tvb_get_guint8((tvbuff_t*)actx->value_ptr,0);
+ proto_tree_add_item(subtree, hf_gsm_map_ie_tag, (tvbuff_t*)actx->value_ptr, 0,1,ENC_BIG_ENDIAN);
+ /* get length */
+ length = tvb_get_guint8((tvbuff_t*)actx->value_ptr,1);
+ proto_tree_add_item(subtree, hf_gsm_map_len, (tvbuff_t*)actx->value_ptr, 1,1,ENC_BIG_ENDIAN);
+ /* Branch on tag */
+ switch(octet){
+ case 4:
+ /* Dissect the data part */
+ de_bearer_cap((tvbuff_t*)actx->value_ptr, subtree, actx->pinfo, 2, length, NULL, 0);
+ /* TODO: There may be more than one IE */
+ break;
+ default:
+ proto_tree_add_expert(subtree, actx->pinfo, &ei_gsm_map_undecoded, (tvbuff_t*)actx->value_ptr, 0, length);
+ break;
+ }/* switch(octet) */
+ break;
+ case 2:
+ /* gsm-0806 */
+ octet = tvb_get_guint8((tvbuff_t*)actx->value_ptr,0);
+ /* Discrimination parameter */
+ proto_tree_add_item(subtree, hf_gsm_map_disc_par, (tvbuff_t*)actx->value_ptr, 0,1,ENC_BIG_ENDIAN);
+ if ( octet == 0) {/* DISCRIMINATION TS 48 006(GSM 08.06 version 5.3.0) */
+ /* Strip off discrimination and length */
+ proto_tree_add_item(subtree, hf_gsm_map_len, (tvbuff_t*)actx->value_ptr, 1,1,ENC_BIG_ENDIAN);
+ next_tvb = tvb_new_subset_remaining((tvbuff_t*)actx->value_ptr, 2);
+ call_dissector_with_data(bssap_handle, next_tvb, actx->pinfo, subtree,
+ p_get_proto_data(actx->pinfo->pool, actx->pinfo, proto_gsm_map, actx->pinfo->curr_layer_num));
+ }else if(octet==1){
+ proto_tree_add_item(subtree, hf_gsm_map_dlci, (tvbuff_t*)actx->value_ptr, 1,1,ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_gsm_map_len, (tvbuff_t*)actx->value_ptr, 2,1,ENC_BIG_ENDIAN);
+ next_tvb = tvb_new_subset_remaining((tvbuff_t*)actx->value_ptr, 3);
+ call_dissector(dtap_handle, next_tvb, actx->pinfo, subtree);
+ }
+ break;
+ case 3:
+ /* gsm-BSSMAP -- Value 3 is reserved and must not be used*/
+ octet = tvb_get_guint8((tvbuff_t*)actx->value_ptr,0);
+ if ( octet == 0) {/* DISCRIMINATION TS 48 006 */
+ next_tvb = tvb_new_subset_remaining((tvbuff_t*)actx->value_ptr, 2);
+ call_dissector_with_data(bssap_handle, next_tvb, actx->pinfo, subtree,
+ p_get_proto_data(actx->pinfo->pool, actx->pinfo, proto_gsm_map, actx->pinfo->curr_layer_num));
+ }
+ break;
+ /* ets-300102-1 (~Q.931 ) */
+ case 4:
+ octet = tvb_get_guint8((tvbuff_t*)actx->value_ptr,0);
+ length = tvb_get_guint8((tvbuff_t*)actx->value_ptr,1);
+ if ( octet == 4 )
+ dissect_q931_bearer_capability_ie((tvbuff_t*)actx->value_ptr, 2, length, subtree);
+ break;
+ default:
+ break;
+ }/*switch (ProtocolId)*/
+
+#.FN_BODY ExternalSignalInfo
+/*
+-- Information about the internal structure is given in
+-- clause 7.6.9.
+7.6.9.4 External Signal Information
+This parameter contains concatenated information elements (including tag and length) which are defined by a common
+protocol version, preceded by the associated protocol ID. It is used to transport information of the indicated protocol via
+MAP interfaces
+*/
+ guint8 octet;
+ guint8 length;
+ tvbuff_t *next_tvb;
+ proto_tree *subtree;
+
+ ProtocolId = 0xffffffff;
+%(DEFAULT_BODY)s
+if (!actx->value_ptr)
+ return offset;
+ subtree = proto_item_add_subtree(actx->created_item, ett_gsm_map_externalsignalinfo);
+ switch (ProtocolId){
+ case 1:
+ /* gsm-0408 */
+ /* As per comment abowe Individual IE:(s) will be found here in TLV format
+ * Unfortunatly a branch for each IE must be made to call the apropriate
+ * function
+ */
+ /* Get tag */
+ octet = tvb_get_guint8((tvbuff_t*)actx->value_ptr,0);
+ proto_tree_add_item(subtree, hf_gsm_map_ie_tag, (tvbuff_t*)actx->value_ptr, 0,1,ENC_BIG_ENDIAN);
+ /* get length */
+ length = tvb_get_guint8((tvbuff_t*)actx->value_ptr,1);
+ proto_tree_add_item(subtree, hf_gsm_map_len, (tvbuff_t*)actx->value_ptr, 1,1,ENC_BIG_ENDIAN);
+ /* Branch on tag */
+ switch(octet){
+ case 4:
+ /* Dissect the data part */
+ de_bearer_cap((tvbuff_t*)actx->value_ptr, subtree, actx->pinfo, 2, length, NULL, 0);
+ /* TODO: There may be more than one IE */
+ break;
+ default:
+ proto_tree_add_expert(subtree, actx->pinfo, &ei_gsm_map_undecoded, (tvbuff_t*)actx->value_ptr, 0, length);
+ break;
+ }/* switch(octet) */
+ break;
+ case 2:
+ /* gsm-0806 */
+ octet = tvb_get_guint8((tvbuff_t*)actx->value_ptr,0);
+ /* Discrimination parameter */
+ proto_tree_add_item(subtree, hf_gsm_map_disc_par, (tvbuff_t*)actx->value_ptr, 0,1,ENC_BIG_ENDIAN);
+ if ( octet == 0) {/* DISCRIMINATION TS 48 006(GSM 08.06 version 5.3.0) */
+ /* Strip off discrimination and length */
+ proto_tree_add_item(subtree, hf_gsm_map_len, (tvbuff_t*)actx->value_ptr, 1,1,ENC_BIG_ENDIAN);
+ next_tvb = tvb_new_subset_remaining((tvbuff_t*)actx->value_ptr, 2);
+ call_dissector_with_data(bssap_handle, next_tvb, actx->pinfo, subtree,
+ p_get_proto_data(actx->pinfo->pool, actx->pinfo, proto_gsm_map, actx->pinfo->curr_layer_num));
+ }else if(octet==1){
+ proto_tree_add_item(subtree, hf_gsm_map_dlci, (tvbuff_t*)actx->value_ptr, 1,1,ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_gsm_map_len, (tvbuff_t*)actx->value_ptr, 2,1,ENC_BIG_ENDIAN);
+ next_tvb = tvb_new_subset_remaining((tvbuff_t*)actx->value_ptr, 3);
+ call_dissector(dtap_handle, next_tvb, actx->pinfo, subtree);
+ }
+ break;
+ case 3:
+ /* gsm-BSSMAP TODO Is it correct to stripp off two first octets here?*/
+ octet = tvb_get_guint8((tvbuff_t*)actx->value_ptr,0);
+ if ( octet == 0) {/* DISCRIMINATION TS 48 006 */
+ next_tvb = tvb_new_subset_remaining((tvbuff_t*)actx->value_ptr, 2);
+ call_dissector_with_data(bssap_handle, next_tvb, actx->pinfo, subtree,
+ p_get_proto_data(actx->pinfo->pool, actx->pinfo, proto_gsm_map, actx->pinfo->curr_layer_num));
+ }
+ break;
+ /* ets-300102-1 (~Q.931 ) */
+ case 4:
+ octet = tvb_get_guint8((tvbuff_t*)actx->value_ptr,0);
+ length = tvb_get_guint8((tvbuff_t*)actx->value_ptr,1);
+ if ( octet == 4 )
+ dissect_q931_bearer_capability_ie((tvbuff_t*)actx->value_ptr, 2, length, subtree);
+ break;
+ default:
+ break;
+ }/*switch (ProtocolId)*/
+
+#.FN_BODY GlobalCellId VAL_PTR = &parameter_tvb
+ tvbuff_t *parameter_tvb;
+ proto_tree *subtree;
+
+%(DEFAULT_BODY)s
+
+ if (!parameter_tvb)
+ return offset;
+
+ subtree = proto_item_add_subtree(actx->created_item, ett_gsm_map_GlobalCellId);
+ be_cell_id_aux(parameter_tvb, subtree, actx->pinfo, 0, tvb_reported_length_remaining(tvb,0), NULL, 0, 0);
+
+#.FN_BODY Ext-GeographicalInformation VAL_PTR = &parameter_tvb
+ tvbuff_t *parameter_tvb;
+ proto_tree *subtree;
+
+%(DEFAULT_BODY)s
+
+ if (!parameter_tvb)
+ return offset;
+
+ subtree = proto_item_add_subtree(actx->created_item, ett_gsm_map_GeographicalInformation);
+ dissect_geographical_description(parameter_tvb, actx->pinfo, subtree);
+
+
+# APN ::= OCTET STRING (SIZE (2..63))
+# Octets are coded according to TS 3GPP TS 23.003
+# 9.1 Structure of APN
+# :
+# The APN consists of one or more labels. Each label is coded as a one octet length field followed by that number of
+# octets coded as 8 bit ASCII characters. Following RFC 1035 [19] the labels shall consist only of the alphabetic
+# characters (A-Z and a-z), digits (0-9) and the hyphen (-). Following RFC 1123 [20], the label shall begin and end with
+# either an alphabetic character or a digit. The case of alphabetic characters is not significant. The APN is not terminated
+# by a length byte of zero.
+#.FN_BODY APN VAL_PTR = &parameter_tvb
+ tvbuff_t *parameter_tvb;
+ proto_tree *subtree;
+ int length, name_len, tmp;
+ guint8 *apn_str = NULL;
+
+%(DEFAULT_BODY)s
+ if (!parameter_tvb)
+ return offset;
+
+ length = tvb_reported_length(parameter_tvb);
+ name_len = tvb_get_guint8(parameter_tvb, 0);
+ apn_str = tvb_get_string_enc(wmem_packet_scope(), parameter_tvb, 1, length - 1, ENC_ASCII|ENC_NA);
+ if (name_len < length-1) {
+ for (;;) {
+ if (name_len >= length - 1)
+ break;
+ tmp = name_len;
+ name_len = name_len + apn_str[tmp] + 1;
+ apn_str[tmp] = '.';
+ }
+ }
+ proto_item_append_text(actx->created_item, " - %%s", apn_str);
+ subtree = proto_item_add_subtree(actx->created_item, ett_gsm_map_apn_str);
+ proto_tree_add_string(subtree, hf_gsm_apn_str, parameter_tvb, 0, -1, apn_str);
+
+
+#.FN_BODY LocationNumber VAL_PTR = &parameter_tvb
+ tvbuff_t *parameter_tvb;
+ proto_tree *subtree;
+ const char *digit_str;
+ guint8 na;
+ guint8 np;
+%(DEFAULT_BODY)s
+ if (!parameter_tvb)
+ return offset;
+
+ subtree = proto_item_add_subtree(actx->created_item, ett_gsm_map_LocationNumber);
+
+ proto_tree_add_item(subtree, hf_gsm_map_locationnumber_odd_even, tvb, 0, 1, ENC_BIG_ENDIAN);
+ na = tvb_get_guint8(tvb,0) & 0x7f;
+ proto_tree_add_item(subtree, hf_gsm_map_locationnumber_nai, tvb, 0, 1, ENC_BIG_ENDIAN);
+
+ proto_tree_add_item(subtree, hf_gsm_map_locationnumber_inn, tvb, 1, 1, ENC_BIG_ENDIAN);
+ np = (tvb_get_guint8(tvb,1) & 0x70) >> 4;
+ proto_tree_add_item(subtree, hf_gsm_map_locationnumber_npi, tvb, 1, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_gsm_map_locationnumber_apri, tvb, 1, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_gsm_map_locationnumber_screening_ind, tvb, 1, 1, ENC_BIG_ENDIAN);
+
+ digit_str = tvb_bcd_dig_to_wmem_packet_str(tvb, 2, -1, NULL, FALSE);
+
+ proto_tree_add_string(subtree, hf_gsm_map_locationnumber_digits, tvb, 2, -1, digit_str);
+
+ if ((na == 3) && (np==1))/*International Number & E164*/
+ dissect_e164_cc(tvb, subtree, 2, E164_ENC_BCD);
+
+#.FN_BODY EnhancedCheckIMEI-Arg/locationInformation VAL_PTR = &parameter_tvb
+ tvbuff_t *parameter_tvb;
+ proto_tree *subtree;
+ guint8 rat;
+%(DEFAULT_BODY)s
+ if (parameter_tvb) {
+ subtree = proto_item_add_subtree(actx->created_item, ett_gsm_map_ericsson_locationInformation);
+ rat = tvb_get_guint8(parameter_tvb, 0);
+ proto_tree_add_uint(subtree, hf_gsm_map_ericsson_locationInformation_rat, parameter_tvb, 0, 1, rat);
+ switch (rat) {
+ case 0:
+ /* GSM */
+ proto_tree_add_item(subtree, hf_gsm_map_ericsson_locationInformation_lac, parameter_tvb, 1, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_gsm_map_ericsson_locationInformation_ci, parameter_tvb, 3, 2, ENC_BIG_ENDIAN);
+ break;
+ case 1:
+ /* UMTS */
+ proto_tree_add_item(subtree, hf_gsm_map_ericsson_locationInformation_lac, parameter_tvb, 1, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_gsm_map_ericsson_locationInformation_sac, parameter_tvb, 3, 2, ENC_BIG_ENDIAN);
+ break;
+ default:
+ break;
+ }
+ }
+
+#----------------------------------------------------------------------------------------
+#.TYPE_ATTR
+SS-Code TYPE = FT_UINT8 DISPLAY = BASE_DEC STRINGS = VALS(ssCode_vals)
+Teleservice TYPE = FT_UINT8 DISPLAY = BASE_DEC STRINGS = VALS(Teleservice_vals)
+Bearerservice TYPE = FT_UINT8 DISPLAY = BASE_DEC STRINGS = VALS(Bearerservice_vals)
+TeleserviceCode TYPE = FT_UINT8 DISPLAY = BASE_DEC STRINGS = VALS(Teleservice_vals)
+BearerServiceCode TYPE = FT_UINT8 DISPLAY = BASE_DEC STRINGS = VALS(Bearerservice_vals)
+Ext-TeleserviceCode TYPE = FT_UINT8 DISPLAY = BASE_DEC STRINGS = VALS(Teleservice_vals)
+Ext-BearerServiceCode TYPE = FT_UINT8 DISPLAY = BASE_DEC STRINGS = VALS(Bearerservice_vals)
+ChargingCharacteristics TYPE = FT_UINT16 DISPLAY = BASE_DEC BITMASK = 0x0f00 STRINGS = VALS(chargingcharacteristics_values)
+RoutingInfo TYPE = FT_UINT32 DISPLAY = BASE_DEC STRINGS = VALS(gsm_map_ch_RoutingInfo_vals)
+
+#----------------------------------------------------------------------------------------
+#.FIELD_ATTR
+RequestedInfo/imei ABBREV = imei_null
+
+#.END