# gprscdr.cnf # Anders Broman 2011 #.IMPORT ../gsm_map/gsm_map-exp.cnf #.MODULE #.OMIT_ASSIGNMENT CalledNumber ChargeIndicator MscNo SystemType NodeAddress ServiceContextID ChangeLocationV651 SubscriberEquipmentNumber SubscriberEquipmentType # 6.4 If these are needed MBMS asn1 should be added. MSCAddress #.EXPORTS GPRSCallEventRecord GPRSCallEventRecord_PDU GPRSRecord GPRSRecord_PDU #.CLASS ATTRIBUTE &id ObjectIdentifierType &Value #.CLASS CONTEXT &id ObjectIdentifierType &Value #.PDU GPRSCallEventRecord GPRSRecord # Get the OID #.FN_PARS ManagementExtension/identifier FN_VARIANT = _str VAL_PTR = &obj_id #.FN_BODY ManagementExtension/information proto_tree *ext_tree; ext_tree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_gprscdr_managementextension_information, NULL, "Information"); if (obj_id){ offset=call_ber_oid_callback(obj_id, tvb, offset, actx->pinfo, ext_tree, NULL); }else{ proto_tree_add_expert(ext_tree, actx->pinfo, &ei_gprscdr_not_dissected, tvb, offset, -1); } #.FN_BODY TimeStamp VAL_PTR = ¶meter_tvb /* * * The contents of this field are a compact form of the UTCTime format * containing local time plus an offset to universal time. Binary coded * decimal encoding is employed for the digits to reduce the storage and * transmission overhead * e.g. YYMMDDhhmmssShhmm * where * YY = Year 00 to 99 BCD encoded * MM = Month 01 to 12 BCD encoded * DD = Day 01 to 31 BCD encoded * hh = hour 00 to 23 BCD encoded * mm = minute 00 to 59 BCD encoded * ss = second 00 to 59 BCD encoded * S = Sign 0 = "+", "-" ASCII encoded * hh = hour 00 to 23 BCD encoded * mm = minute 00 to 59 BCD encoded */ tvbuff_t *parameter_tvb; %(DEFAULT_BODY)s if (!parameter_tvb) return offset; proto_item_append_text(actx->created_item, " (UTC %%x-%%x-%%x %%x:%%x:%%x %%s%%x:%%x)", tvb_get_guint8(parameter_tvb,0), /* Year */ tvb_get_guint8(parameter_tvb,1), /* Month */ tvb_get_guint8(parameter_tvb,2), /* Day */ tvb_get_guint8(parameter_tvb,3), /* Hour */ tvb_get_guint8(parameter_tvb,4), /* Minute */ tvb_get_guint8(parameter_tvb,5), /* Second */ tvb_get_string_enc(wmem_packet_scope(), parameter_tvb,6,1,ENC_ASCII|ENC_NA), /* Sign */ tvb_get_guint8(parameter_tvb,7), /* Hour */ tvb_get_guint8(parameter_tvb,8) /* Minute */ ); #.FN_BODY MSTimeZone VAL_PTR = ¶meter_tvb /* * * 1.Octet: Time Zone and 2. Octet: Daylight saving time, see TS 29.060 [75] */ tvbuff_t *parameter_tvb; guint8 data, data2; char sign; %(DEFAULT_BODY)s if (!parameter_tvb) return offset; data = tvb_get_guint8(parameter_tvb, 0); sign = (data & 0x08) ? '-' : '+'; data = (data >> 4) + (data & 0x07) * 10; data2 = tvb_get_guint8(tvb, 1) & 0x3; proto_item_append_text(actx->created_item, " (GMT %%c %%d hours %%d minutes %%s)", sign, data / 4, data %% 4 * 15, val_to_str_const(data2, gprscdr_daylight_saving_time_vals, "Unknown") ); #.FN_BODY PLMN-Id VAL_PTR = ¶meter_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_gprscdr_plmn_id); dissect_e212_mcc_mnc(parameter_tvb, actx->pinfo, subtree, 0, E212_NONE, TRUE); #.FN_BODY QoSInformation /* This octet string is a 1:1 copy of the contents (i.e. starting with octet 4) of the * Quality of Service (QoS) Profile information element specified in 29.060, ch7.7.34. * */ header_field_info *hfi; hfi = proto_registrar_get_nth(hf_index); offset = decode_qos_umts(tvb, 0, actx->pinfo, tree, hfi->name, 0); #.FN_BODY EPCQoSInformation/aRP proto_tree *ext_tree_arp; guint length; /* * 8.86 Allocation/Retention Priority (ARP) * 3GPP TS 29.274 */ length = tvb_reported_length(tvb); ext_tree_arp = proto_tree_add_subtree(tree, tvb, 0, length, ett_gprscdr_eps_qos_arp, NULL, "aRP"); dissect_gtpv2_arp(tvb, actx->pinfo, ext_tree_arp, NULL, length, 0, 0, NULL); offset = length; #.FN_BODY GGSNPDPRecord/userLocationInformation offset = dissect_gprscdr_uli(tvb, actx, tree, 1); #.FN_BODY GGSNPDPRecordV750/userLocationInformation offset = dissect_gprscdr_uli(tvb, actx, tree, 1); #.FN_BODY EGSNPDPRecord/userLocationInformation offset = dissect_gprscdr_uli(tvb, actx, tree, 1); #.FN_BODY EGSNPDPRecordV750/userLocationInformation offset = dissect_gprscdr_uli(tvb, actx, tree, 1); #.FN_BODY ChangeOfCharConditionV651/userLocationInformation offset = dissect_gprscdr_uli(tvb, actx, tree, 1); #.FN_BODY ChangeOfServiceConditionV750/userLocationInformation offset = dissect_gprscdr_uli(tvb, actx, tree, 1); #.FN_BODY SGWRecord/userLocationInformation offset = dissect_gprscdr_uli(tvb, actx, tree, 2); #.FN_BODY SGWRecord/lastUserLocationInformation offset = dissect_gprscdr_uli(tvb, actx, tree, 2); #.FN_BODY PGWRecord/userLocationInformation offset = dissect_gprscdr_uli(tvb, actx, tree, 2); #.FN_BODY PGWRecord/lastUserLocationInformation offset = dissect_gprscdr_uli(tvb, actx, tree, 2); #.FN_BODY ChangeOfCharCondition/userLocationInformation offset = dissect_gprscdr_uli(tvb, actx, tree, 2); #.FN_BODY ChangeOfServiceCondition/userLocationInformation offset = dissect_gprscdr_uli(tvb, actx, tree, 2); #.FN_BODY RelatedChangeOfCharCondition/userLocationInformation offset = dissect_gprscdr_uli(tvb, actx, tree, 2); #.FN_BODY RelatedChangeOfServiceCondition/userLocationInformation offset = dissect_gprscdr_uli(tvb, actx, tree, 2); #.FN_BODY PDPType proto_tree *ext_tree_pdp_pdn_type; guint length; length = tvb_reported_length(tvb); if(length == 1) { /* * PDN/EPS Bearer * TS 29.274 * 8.34 PDN Type */ ext_tree_pdp_pdn_type = proto_tree_add_subtree(tree, tvb, 0, length, ett_gprscdr_pdp_pdn_type, NULL, "pDNType"); dissect_gtpv2_pdn_type(tvb, actx->pinfo, ext_tree_pdp_pdn_type, NULL, length, 0, 0, NULL); offset = length; } else { /* PDP context * TS 29.060 * 7.7.27 End User Address * Octet 4-5 */ ext_tree_pdp_pdn_type = proto_tree_add_subtree(tree, tvb, 0, length, ett_gprscdr_pdp_pdn_type, NULL, "pDPType"); offset = de_sm_pdp_addr(tvb, ext_tree_pdp_pdn_type, actx->pinfo, 0, length, NULL, 0); } #.FN_BODY GPRSRecord VAL_PTR = &branch_taken proto_item *item; gint branch_taken, t_offset = offset; gint32 tag; %(DEFAULT_BODY)s if(branch_taken == -1){ get_ber_identifier(tvb, t_offset, NULL, NULL, &tag); item = proto_tree_add_uint(tree, hf_index, tvb, t_offset, 1, tag); dissect_ber_identifier(actx->pinfo, tree, tvb, t_offset, NULL, NULL, &tag); expert_add_info_format(actx->pinfo, item, &ei_gprscdr_choice_not_found, "Record type(BER choice) not found: %%u", tag); } #.TYPE_ATTR IPBinV4Address TYPE = FT_IPv4 DISPLAY = BASE_NONE IPBinV6Address TYPE = FT_IPv6 DISPLAY = BASE_NONE RATType TYPE = FT_UINT32 DISPLAY = BASE_DEC STRINGS = VALS(gprscdr_rat_type_vals) #.END # # Editor modelines - http://www.wireshark.org/tools/modelines.html # # Local variables: # c-basic-offset: 2 # tab-width: 8 # indent-tabs-mode: nil # End: # # vi: set shiftwidth=2 tabstop=8 expandtab: # :indentSize=2:tabSize=8:noTabs=true: #