forked from osmocom/wireshark
731 lines
20 KiB
INI
731 lines
20 KiB
INI
# gsm_map.cnf
|
|
# gsm_map conformation file
|
|
|
|
# $Id$
|
|
|
|
#.MODULE_IMPORT
|
|
|
|
#.EXPORTS
|
|
AddressString
|
|
Add-GeographicalInformation
|
|
AgeOfLocationInformation
|
|
AlertingPattern
|
|
AreaEventInfo
|
|
CCBS-Feature
|
|
CellGlobalIdOrServiceAreaIdFixedLength
|
|
CUG-Index
|
|
CUG-Interlock
|
|
CUG-Info
|
|
CurrentPassword
|
|
DeferredLocationEventType
|
|
EraseCC-EntryArg
|
|
EraseCC-EntryRes
|
|
Ext-BasicServiceCode
|
|
Ext-GeographicalInformation
|
|
Ext-QoS-Subscribed
|
|
Ext2-QoS-Subscribed
|
|
ExtensionContainer
|
|
GeographicalInformation
|
|
GetPasswordArg
|
|
GPRSChargingID
|
|
GSMMAPLocalErrorcode
|
|
GSN-Address
|
|
IMEI
|
|
IMSI
|
|
InterrogateSS-Res
|
|
ISDN-AddressString
|
|
ISDN-SubaddressString
|
|
LAIFixedLength
|
|
LCSClientExternalID
|
|
LCSClientName
|
|
LCSRequestorID
|
|
LCSCodeword
|
|
LCSServiceTypeID
|
|
LCS-ReferenceNumber
|
|
LCS-QoS
|
|
LocationInformation
|
|
LocationType
|
|
LSAIdentity
|
|
MS-Classmark2
|
|
NewPassword
|
|
NotificationToMSUser
|
|
OfferedCamel4Functionalities
|
|
ProtectedPayload
|
|
QoS-Subscribed
|
|
RAIdentity
|
|
RegisterCC-EntryRes
|
|
RegisterSS-Arg
|
|
SubscriberState
|
|
SecurityHeader
|
|
SupportedCamelPhases
|
|
SupportedGADShapes
|
|
SS-Code
|
|
SS-Status
|
|
SS-Info
|
|
SS-ForBS-Code
|
|
USSD-DataCodingScheme
|
|
USSD-String
|
|
Ussd-Arg
|
|
Ussd-Res
|
|
UU-Data
|
|
|
|
#.PDU
|
|
|
|
#.NO_EMIT
|
|
|
|
|
|
#.TYPE_RENAME
|
|
|
|
#.FIELD_RENAME
|
|
Ext-SS-Info/ss-Data ext-ss-Data
|
|
RequestedInfo/subscriberState subscriberState-flg
|
|
RequestedSubscriptionInfo/supportedVLR-CAMEL-Phases supportedVLR-CAMEL-Phases_flg
|
|
RequestedSubscriptionInfo/supportedSGSN-CAMEL-Phases supportedSGSN-CAMEL-Phases_flg
|
|
PrepareGroupCallArg/teleservice ext-teleservice
|
|
BasicServiceCode/teleservice teleservice-code
|
|
PDP-ContextInfo/qos-Subscribed ext-qos-Subscribed
|
|
AccessNetworkSignalInfo/signalInfo longsignalInfo
|
|
Ext-SS-Info/callBarringInfo ext-callBarringInfo
|
|
RequestedInfo/locationInformation locationInformation_flg
|
|
RequestedInfo/imei imei_flg
|
|
Ext-ForwFeature/forwardingOptions ext-forwardingOptions
|
|
Ext-SS-Info/forwardingInfo ext-forwardingInfo
|
|
RegisterSS-Arg/forwardedToNumber forwardedToNumber_addr
|
|
ModificationRequestFor-CF-Info/forwardedToNumber forwardedToNumber_addr
|
|
Ext-ForwFeature/basicService ext-basicService
|
|
Ext-CallBarringFeature/basicService ext-basicService
|
|
CUG-Feature/basicService ext-basicService
|
|
SendRoutingInfoRes/basicService ext-basicService
|
|
ModificationRequestFor-CF-Info/basicService ext-basicService
|
|
ModificationRequestFor-CB-Info/basicService ext-basicService
|
|
SendRoutingInfoArg/basicServiceGroup ext-basicServiceGroup
|
|
ResumeCallHandlingArg/basicServiceGroup ext-basicServiceGroup
|
|
Ext-ForwFeature/ss-Status ext-ss-Status
|
|
Ext-CallBarringFeature/ss-Status ext-ss-Status
|
|
Ext-SS-Data/ss-Status ext-ss-Status
|
|
LCS-PrivacyClass/ss-Status ext-ss-Status
|
|
MOLR-Class/ss-Status ext-ss-Status
|
|
MC-SS-Info/ss-Status ext-ss-Status
|
|
ModificationRequestFor-CF-Info/ss-Status ext-ss-Status
|
|
ModificationRequestFor-CB-Info/ss-Status ext-ss-Status
|
|
SS-Data/basicServiceGroupList ext-basicServiceGroupList
|
|
InterrogateSS-Res/basicServiceGroupList ext-basicServiceGroupList
|
|
Ext-CallBarInfo/callBarringFeatureList ext-callBarringFeatureList
|
|
CallBarringData/callBarringFeatureList ext-callBarringFeatureList
|
|
Ext-CallBarringInfoFor-CSE/callBarringFeatureList ext-callBarringFeatureList
|
|
Ext-ForwInfo/forwardingFeatureList ext-forwardingFeatureList
|
|
CallForwardingData/forwardingFeatureList ext-forwardingFeatureList
|
|
Ext-ForwardingInfoFor-CSE/forwardingFeatureList ext-forwardingFeatureList
|
|
Ext-ForwFeature/noReplyConditionTime ext-noReplyConditionTime
|
|
ModificationRequestFor-CF-Info/noReplyConditionTime ext-noReplyConditionTime
|
|
ReturnError/errorCode returnErrorCode
|
|
ERROR/localValue localErrorcode
|
|
OPERATION/localValue operationLocalvalue
|
|
#----------------------------------------------------------------------------------------
|
|
#.PDU
|
|
Component
|
|
|
|
#.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
|
|
|
|
%(DEFAULT_BODY)s
|
|
if (check_col(actx->pinfo->cinfo, COL_INFO)){
|
|
col_append_fstr(actx->pinfo->cinfo, COL_INFO, gsm_map_opr_code(opcode));
|
|
}
|
|
|
|
#.FN_PARS GSMMAPLocalErrorcode
|
|
|
|
VAL_PTR = &errorCode
|
|
|
|
#.FN_PARS Sm-RP-UI
|
|
|
|
VAL_PTR = &tpdu_tvb
|
|
|
|
#.FN_BODY Sm-RP-UI
|
|
|
|
tvbuff_t *tpdu_tvb;
|
|
|
|
%(DEFAULT_BODY)s
|
|
|
|
/*
|
|
* dissect the embedded TPDU message
|
|
*/
|
|
if (!tpdu_tvb)
|
|
return offset;
|
|
|
|
dissector_try_port(sms_dissector_table, 0, tpdu_tvb, actx->pinfo, top_tree);
|
|
#.END
|
|
#----------------------------------------------------------------------------------------
|
|
#.FN_PARS IMSI
|
|
|
|
VAL_PTR = ¶meter_tvb
|
|
|
|
#.FN_BODY IMSI
|
|
|
|
tvbuff_t *parameter_tvb;
|
|
char *digit_str;
|
|
|
|
%(DEFAULT_BODY)s
|
|
|
|
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);
|
|
|
|
|
|
|
|
#.END
|
|
#----------------------------------------------------------------------------------------
|
|
#.FN_PARS ServiceCentreAddress
|
|
|
|
VAL_PTR = ¶meter_tvb
|
|
|
|
#.FN_BODY ServiceCentreAddress
|
|
|
|
tvbuff_t *parameter_tvb;
|
|
char *digit_str;
|
|
|
|
%(DEFAULT_BODY)s
|
|
|
|
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_servicecentreaddress_digits, parameter_tvb, 1, -1, digit_str);
|
|
actx->pinfo->p2p_dir = P2P_DIR_SENT;
|
|
|
|
#.END
|
|
#----------------------------------------------------------------------------------------
|
|
#.FN_PARS ISDN-AddressString
|
|
|
|
VAL_PTR = ¶meter_tvb
|
|
|
|
#.FN_BODY ISDN-AddressString
|
|
|
|
tvbuff_t *parameter_tvb;
|
|
char *digit_str;
|
|
guint8 octet;
|
|
guint8 na;
|
|
guint8 np;
|
|
proto_item *item;
|
|
proto_tree *subtree;
|
|
|
|
%(DEFAULT_BODY)s
|
|
|
|
if (!parameter_tvb)
|
|
return offset;
|
|
|
|
item = get_ber_last_created_item();
|
|
subtree = proto_item_add_subtree(item, ett_gsm_map_isdn_address_string);
|
|
|
|
proto_tree_add_item(subtree, hf_gsm_map_extension, parameter_tvb, 0,1,FALSE);
|
|
proto_tree_add_item(subtree, hf_gsm_map_nature_of_number, parameter_tvb, 0,1,FALSE);
|
|
proto_tree_add_item(subtree, hf_gsm_map_number_plan, parameter_tvb, 0,1,FALSE);
|
|
|
|
digit_str = unpack_digits(parameter_tvb, 1);
|
|
|
|
proto_tree_add_string(subtree, hf_gsm_map_isdn_address_digits, parameter_tvb, 1, -1, digit_str);
|
|
|
|
octet = tvb_get_guint8(parameter_tvb,0);
|
|
na = (octet & 0x70)>>4;
|
|
np = octet & 0x0f;
|
|
if ((na == 1) && (np==1))/*International Number & E164*/
|
|
dissect_e164_cc(parameter_tvb, subtree, 1, TRUE);
|
|
|
|
actx->pinfo->p2p_dir = P2P_DIR_RECV;
|
|
|
|
|
|
#.END
|
|
#----------------------------------------------------------------------------------------
|
|
#.FN_PARS AddressString
|
|
|
|
VAL_PTR = ¶meter_tvb
|
|
|
|
#.FN_BODY AddressString
|
|
|
|
tvbuff_t *parameter_tvb;
|
|
char *digit_str;
|
|
guint8 octet;
|
|
guint8 na;
|
|
guint8 np;
|
|
proto_item *item;
|
|
proto_tree *subtree;
|
|
|
|
%(DEFAULT_BODY)s
|
|
|
|
if (!parameter_tvb)
|
|
return offset;
|
|
|
|
item = get_ber_last_created_item();
|
|
subtree = proto_item_add_subtree(item, ett_gsm_map_isdn_address_string);
|
|
|
|
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_address_digits, parameter_tvb, 1, -1, digit_str);
|
|
|
|
octet = tvb_get_guint8(parameter_tvb,0);
|
|
na = (octet & 0x70)>>4;
|
|
np = octet & 0x0f;
|
|
if ((na == 1) && (np==1))/*International Number & E164*/
|
|
dissect_e164_cc(parameter_tvb, subtree, 1, TRUE);
|
|
|
|
#----------------------------------------------------------------------------------------
|
|
#.FN_PARS SS-Status
|
|
|
|
VAL_PTR = ¶meter_tvb
|
|
|
|
#.FN_BODY SS-Status
|
|
|
|
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_PARS Ext-SS-Status
|
|
|
|
VAL_PTR = ¶meter_tvb
|
|
|
|
#.FN_BODY Ext-SS-Status
|
|
/* 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_PARS ProtocolId
|
|
|
|
VAL_PTR = &protocolId
|
|
|
|
#----------------------------------------------------------------------------------------
|
|
#.FN_PARS AccessNetworkProtocolId
|
|
|
|
VAL_PTR = &AccessNetworkProtocolId
|
|
|
|
#----------------------------------------------------------------------------------------
|
|
#.FN_PARS SignalInfo
|
|
|
|
VAL_PTR = ¶meter_tvb
|
|
|
|
#.FN_BODY SignalInfo
|
|
|
|
tvbuff_t *parameter_tvb;
|
|
guint8 octet;
|
|
guint8 length;
|
|
tvbuff_t *next_tvb;
|
|
|
|
|
|
%(DEFAULT_BODY)s
|
|
|
|
if (!parameter_tvb)
|
|
return offset;
|
|
switch (protocolId){
|
|
/* gsm-0408 */
|
|
case 1:
|
|
break;
|
|
/* gsm-0806 */
|
|
case 2:
|
|
break;
|
|
/* gsm-BSSMAP TODO Is it correct to stripp off two first octets here?*/
|
|
case 3:
|
|
octet = tvb_get_guint8(parameter_tvb,0);
|
|
length = tvb_get_guint8(parameter_tvb,1);
|
|
if ( octet == 0) {/* DISCRIMINATION TS 48 006 */
|
|
next_tvb = tvb_new_subset(parameter_tvb, 2, -1, -1);
|
|
dissect_bssmap(next_tvb, actx->pinfo, tree);
|
|
}
|
|
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;
|
|
}
|
|
|
|
#----------------------------------------------------------------------------------------
|
|
#.FN_PARS LongSignalInfo
|
|
|
|
VAL_PTR = ¶meter_tvb
|
|
|
|
#.FN_BODY LongSignalInfo
|
|
|
|
tvbuff_t *parameter_tvb;
|
|
guint8 octet;
|
|
guint8 length;
|
|
tvbuff_t *next_tvb;
|
|
proto_item *item;
|
|
proto_tree *subtree;
|
|
|
|
|
|
%(DEFAULT_BODY)s
|
|
|
|
if (!parameter_tvb)
|
|
return offset;
|
|
|
|
item = get_ber_last_created_item();
|
|
subtree = proto_item_add_subtree(item, ett_gsm_map_LongSignalInfo);
|
|
|
|
switch (AccessNetworkProtocolId){
|
|
/* ts3G-48006 */
|
|
case 1:
|
|
octet = tvb_get_guint8(parameter_tvb,0);
|
|
length = tvb_get_guint8(parameter_tvb,1);
|
|
if ( octet == 0) {/* DISCRIMINATION TS 48 006 */
|
|
/* gsm-BSSMAP? */
|
|
next_tvb = tvb_new_subset(parameter_tvb, 2, -1, -1);
|
|
dissect_bssmap(next_tvb, actx->pinfo, tree);
|
|
}
|
|
break;
|
|
/* ts3G-25413 */
|
|
case 2:
|
|
call_dissector(ranap_handle, parameter_tvb, actx->pinfo, tree);
|
|
break;
|
|
default:
|
|
break;
|
|
|
|
}
|
|
|
|
#----------------------------------------------------------------------------------------
|
|
#.FN_BODY USSD-DataCodingScheme VAL_PTR = ¶meter_tvb
|
|
#-- The structure of the USSD-DataCodingScheme is defined by
|
|
#-- the Cell Broadcast Data Coding Scheme as described in
|
|
#-- TS 3GPP TS 23.038
|
|
#--
|
|
/*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 smpp_handle_dcs return encoding type? - like 7bit Alphabet
|
|
*/
|
|
int CodingScheme_offset = 0;
|
|
tvbuff_t *parameter_tvb;
|
|
%(DEFAULT_BODY)s
|
|
if (!parameter_tvb)
|
|
return offset;
|
|
smpp_handle_dcs(tree, parameter_tvb, &CodingScheme_offset);
|
|
#--
|
|
#-- octet = tvb_get_guint8(tvb,0);
|
|
#-- length = tvb_get_guint8(tvb,1);
|
|
#-- if ( octet == 4) {
|
|
#-- next_tvb = tvb_new_subset(tvb, 2, -1, -1);
|
|
#-- smpp_handle_dcs(tree, next_tvb, &offset);
|
|
#-- }
|
|
|
|
#.END
|
|
#----------------------------------------------------------------------------------------
|
|
#.FN_BODY USSD-String VAL_PTR = ¶meter_tvb
|
|
|
|
tvbuff_t *parameter_tvb;
|
|
int length;
|
|
guint8 out_len;
|
|
/* XXX - The maximum item label length is 240. Does this really need to be 1024?
|
|
* use ep_alloc ?
|
|
* TODO: Shouldent this function use USSD-DataCodingScheme to chose decoding method???
|
|
*/
|
|
static unsigned char bigbuf[1024];
|
|
|
|
%(DEFAULT_BODY)s
|
|
if (!parameter_tvb)
|
|
return offset;
|
|
|
|
length = tvb_length_remaining(parameter_tvb,0);
|
|
|
|
out_len = gsm_sms_char_7bit_unpack(0, length, sizeof(bigbuf),
|
|
tvb_get_ptr(parameter_tvb, 0, length), bigbuf);
|
|
|
|
bigbuf[out_len] = '\0';
|
|
gsm_sms_char_ascii_decode(bigbuf, bigbuf, out_len);
|
|
bigbuf[1023] = '\0';
|
|
proto_tree_add_text(tree, parameter_tvb, 0, length, "USSD String: %%s", bigbuf);
|
|
|
|
#-- guint8 octet;
|
|
#-- guint8 length;
|
|
#-- guint8 out_len;
|
|
#-- /* XXX - The maximum item label length is 240. Does this really need to be 1024? */
|
|
#-- static char bigbuf[1024];
|
|
|
|
#-- octet = tvb_get_guint8(tvb,0);
|
|
#-- length = tvb_get_guint8(tvb,1);
|
|
|
|
#-- out_len = gsm_sms_char_7bit_unpack(0, length, sizeof(bigbuf),
|
|
#-- tvb_get_ptr(tvb, offset+2, length), bigbuf);
|
|
#-- bigbuf[out_len] = '\0';
|
|
#-- gsm_sms_char_ascii_decode(bigbuf, bigbuf, out_len);
|
|
#-- bigbuf[1023] = '\0';
|
|
#--
|
|
#-- proto_tree_add_text(tree, tvb, offset+2, length, "USSD String: %%s", bigbuf);
|
|
|
|
#.END
|
|
|
|
#----------------------------------------------------------------------------------------
|
|
#.FN_BODY PrivateExtension/extType
|
|
|
|
|
|
proto_tree_add_text(tree, tvb, offset, -1, "Extension Data");
|
|
if (obj_id){
|
|
offset=call_ber_oid_callback(obj_id, tvb, offset, actx->pinfo, tree);
|
|
}else{
|
|
call_dissector(data_handle, tvb, actx->pinfo, tree);
|
|
offset = tvb_length_remaining(tvb,offset);
|
|
}
|
|
|
|
|
|
#.END
|
|
#.FN_FTR ForwardingOptions
|
|
|
|
proto_tree_add_item(tree, hf_gsm_map_notification_to_forwarding_party, tvb, 0,1,FALSE);
|
|
proto_tree_add_item(tree, hf_gsm_map_redirecting_presentation, tvb, 0,1,FALSE);
|
|
proto_tree_add_item(tree, hf_gsm_map_notification_to_calling_party, tvb, 0,1,FALSE);
|
|
proto_tree_add_item(tree, hf_gsm_map_forwarding_reason, tvb, 0,1,FALSE);
|
|
#.FN_FTR Ext-ForwFeature/forwardingOptions
|
|
|
|
proto_tree_add_item(tree, hf_gsm_map_notification_to_forwarding_party, tvb, 0,1,FALSE);
|
|
proto_tree_add_item(tree, hf_gsm_map_redirecting_presentation, tvb, 0,1,FALSE);
|
|
proto_tree_add_item(tree, hf_gsm_map_notification_to_calling_party, tvb, 0,1,FALSE);
|
|
proto_tree_add_item(tree, hf_gsm_map_forwarding_reason, tvb, 0,1,FALSE);
|
|
|
|
#.FN_PARS PDP-Type
|
|
|
|
VAL_PTR = ¶meter_tvb
|
|
|
|
#.FN_BODY PDP-Type
|
|
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,FALSE);
|
|
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,FALSE);
|
|
break;
|
|
case 1: /* IETF */
|
|
proto_tree_add_item(tree, hf_gsm_map_ietf_pdp_type_number, parameter_tvb, 0,1,FALSE);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
#.FN_PARS QoS-Subscribed
|
|
|
|
VAL_PTR = ¶meter_tvb
|
|
|
|
#.FN_BODY QoS-Subscribed
|
|
|
|
tvbuff_t *parameter_tvb;
|
|
|
|
%(DEFAULT_BODY)s
|
|
|
|
if (!parameter_tvb)
|
|
return offset;
|
|
de_sm_qos(parameter_tvb, tree, 0, 3, NULL,0);
|
|
|
|
#.FN_PARS Ext-QoS-Subscribed
|
|
|
|
VAL_PTR = ¶meter_tvb
|
|
|
|
#.FN_BODY Ext-QoS-Subscribed
|
|
|
|
tvbuff_t *parameter_tvb;
|
|
|
|
%(DEFAULT_BODY)s
|
|
|
|
if (!parameter_tvb)
|
|
return offset;
|
|
dissect_gsm_map_ext_qos_subscribed(tvb, actx->pinfo, tree);
|
|
|
|
#.FN_PARS GSN-Address
|
|
|
|
VAL_PTR = ¶meter_tvb
|
|
|
|
#.FN_BODY GSN-Address
|
|
|
|
tvbuff_t *parameter_tvb;
|
|
guint8 octet;
|
|
proto_item *item;
|
|
proto_tree *subtree;
|
|
|
|
%(DEFAULT_BODY)s
|
|
|
|
if (!parameter_tvb)
|
|
return offset;
|
|
item = get_ber_last_created_item();
|
|
subtree = proto_item_add_subtree(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, tvb_length_remaining(parameter_tvb, 1), FALSE);
|
|
break;
|
|
case 0x50: /* IPv4 */
|
|
proto_tree_add_item(subtree, hf_gsm_map_GSNAddress_IPv4, parameter_tvb, 1, tvb_length_remaining(parameter_tvb, 1), FALSE);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
#.FN_PARS RAIdentity
|
|
|
|
VAL_PTR = ¶meter_tvb
|
|
|
|
#.FN_BODY RAIdentity
|
|
|
|
tvbuff_t *parameter_tvb;
|
|
proto_item *item;
|
|
proto_tree *subtree;
|
|
|
|
%(DEFAULT_BODY)s
|
|
|
|
if (!parameter_tvb)
|
|
return offset;
|
|
item = get_ber_last_created_item();
|
|
subtree = proto_item_add_subtree(item, ett_gsm_map_RAIdentity);
|
|
de_gmm_rai(parameter_tvb, subtree, 0, 3, NULL,0);
|
|
|
|
#.FN_PARS LAIFixedLength
|
|
|
|
VAL_PTR = ¶meter_tvb
|
|
|
|
#.FN_BODY LAIFixedLength
|
|
|
|
tvbuff_t *parameter_tvb;
|
|
proto_item *item;
|
|
proto_tree *subtree;
|
|
|
|
%(DEFAULT_BODY)s
|
|
|
|
if (!parameter_tvb)
|
|
return offset;
|
|
item = get_ber_last_created_item();
|
|
subtree = proto_item_add_subtree(item, ett_gsm_map_LAIFixedLength);
|
|
dissect_e212_mcc_mnc(parameter_tvb, subtree, 0);
|
|
|
|
#.FN_PARS OBJECT_IDENTIFIER
|
|
FN_VARIANT = _str VAL_PTR = &obj_id
|
|
|
|
#.FN_BODY RadioResourceInformation VAL_PTR = ¶meter_tvb
|
|
tvbuff_t *parameter_tvb;
|
|
proto_item *item;
|
|
proto_tree *subtree;
|
|
|
|
%(DEFAULT_BODY)s
|
|
|
|
if (!parameter_tvb)
|
|
return offset;
|
|
|
|
item = get_ber_last_created_item();
|
|
subtree = proto_item_add_subtree(item, ett_gsm_map_RadioResourceInformation);
|
|
be_chan_type(tvb, subtree, 0, tvb_length_remaining(tvb,0), NULL, 0);
|
|
|
|
#.FN_BODY RANAP-ServiceHandover VAL_PTR = ¶meter_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 = ¶meter_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_mapIntegrityProtectionInformation);
|
|
|
|
#.FN_BODY EncryptionInformation VAL_PTR = ¶meter_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_mapEncryptionInformation);
|
|
|
|
#----------------------------------------------------------------------------------------
|
|
#.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)
|
|
#.END
|
|
|
|
|