Revert "TODO epan/dissectors/asn1/kerberos/packet-kerberos-template.c new GSS flags"
[wireshark-sm.git] / epan / dissectors / asn1 / gprscdr / gprscdr.cnf
blob350dc2cfc9477fa72cda691f0f68876435015637
1 # gprscdr.cnf
2 # Anders Broman 2011
4 #.IMPORT ../gsm_map/gsm_map-exp.cnf
6 #.MODULE
8 #.OMIT_ASSIGNMENT
9 CalledNumber
10 CauseForTerm
11 ChargeIndicator
12 DataVolumeOctets
13 MscNo
14 SystemType
15 NodeAddress
16 ServiceContextID
17 ChangeLocationV651
18 SubscriberEquipmentNumber
19 SubscriberEquipmentType
20 Session-Id
21 PriorityType
22 MessageClass
23 # 6.4 If these are needed MBMS asn1 should be added.
24 MSCAddress
26 #.EXPORTS
27 CAMELInformationPDP
28 CAMELInformationPDP_PDU
29 GPRSCallEventRecord
30 GPRSCallEventRecord_PDU
31 GPRSRecord
32 GPRSRecord_PDU
34 #.CLASS ATTRIBUTE
35 &id                    ObjectIdentifierType
36 &Value
38 #.CLASS CONTEXT
39 &id                    ObjectIdentifierType
40 &Value
42 #.FIELD_RENAME
43 IPBinaryAddress/iPBinV6Address iPBinV6Address_choice
44 #.FIELD_ATTR
45 IPBinaryAddress/iPBinV6Address ABBREV=iPBinV6Address_choice
47 #.PDU
48 CAMELInformationPDP
49 GPRSCallEventRecord
50 GPRSRecord
52 # Get the OID
53 #.FN_PARS ManagementExtension/identifier FN_VARIANT = _str  VAL_PTR = &obj_id
55 #.FN_BODY ManagementExtension/information
57   proto_tree *ext_tree;
58   ext_tree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_gprscdr_managementextension_information, NULL, "Information");
59   if (obj_id){
60     offset=call_ber_oid_callback(obj_id, tvb, offset, actx->pinfo, ext_tree, NULL);
61   }else{
62     proto_tree_add_expert(ext_tree, actx->pinfo, &ei_gprscdr_not_dissected, tvb, offset, -1);
63   }
65 #.FN_BODY TimeStamp
66   uint32_t len;
67   nstime_t ts;
68   const char *date_str, *tz_str, *iso_str;
70   /* TimeStamp should be length of nine octets. */
71   len = tvb_reported_length(tvb);
72   if (len != 9)
73   {
74     expert_add_info_format(actx->pinfo, tree, &ei_gprscdr_timestamp_wrong_format,
75                            "Expected nine octets; got %u octets", len);
76     offset += len;
77     return offset;
78   }
80   /* The contents of this field are a compact form of the UTCTime format
81    * containing local time plus an offset to universal time. Binary coded
82    * decimal encoding is employed for the digits to reduce the storage and
83    * transmission overhead
84    * e.g. YYMMDDhhmmssShhmm
85    * where
86    * YY = Year 00 to 99           BCD encoded
87    * MM = Month 01 to 12                BCD encoded
88    * DD = Day 01 to 31            BCD encoded
89    * hh = hour 00 to 23           BCD encoded
90    * mm = minute 00 to 59               BCD encoded
91    * ss = second 00 to 59               BCD encoded
92    * S = Sign 0 = "+", "-"      ASCII encoded
93    * hh = hour 00 to 23           BCD encoded
94    * mm = minute 00 to 59               BCD encoded
95    */
96   date_str = tvb_bcd_dig_to_str_be(actx->pinfo->pool, tvb, 0, 6, NULL, false);
97   tz_str = tvb_bcd_dig_to_str_be(actx->pinfo->pool, tvb, 7, 2, NULL, false);
99   /* Format result as iso8601 format: YYYYMMDDhhmmss+hhmm.
100    * Field contains only last two digits of year and assume start from 2000 year.
101    */
102   iso_str = wmem_strdup_printf(actx->pinfo->pool, "20%s%s%s",
103                                date_str,  /* YYMMDDhhmmss  */
104                                tvb_get_string_enc(actx->pinfo->pool, tvb, 6, 1, ENC_ASCII | ENC_NA), /* TZ sign */
105                                tz_str);  /* TZ hhmm */
107   if (!iso8601_to_nstime(&ts, iso_str, ISO8601_DATETIME_BASIC))
108   {
109     expert_add_info_format(actx->pinfo, tree, &ei_gprscdr_timestamp_wrong_format,
110                            "TimeStamp invalid format: %s", iso_str);
112     offset += len;
113     return offset;
114   }
116   proto_tree_add_time(tree, hf_index, tvb, offset, len, &ts);
117   offset += len;
119 #.FN_BODY MSTimeZone VAL_PTR = &parameter_tvb
122  * 1.Octet: Time Zone and 2. Octet: Daylight saving time, see TS 29.060 [75]
123  */
124   tvbuff_t *parameter_tvb;
125   uint8_t data, data2;
126   char sign;
128 %(DEFAULT_BODY)s
130   if (!parameter_tvb)
131     return offset;
133   data = tvb_get_uint8(parameter_tvb, 0);
134   sign = (data & 0x08) ? '-' : '+';
135   data = (data >> 4) + (data & 0x07) * 10;
137   data2 = tvb_get_uint8(tvb, 1) & 0x3;
139   proto_item_append_text(actx->created_item, " (GMT %%c %%d hours %%d minutes %%s)",
140                          sign,
141                          data / 4,
142                          data %% 4 * 15,
143                          val_to_str_const(data2, gprscdr_daylight_saving_time_vals, "Unknown")
144                         );
146 #.FN_BODY PLMN-Id VAL_PTR = &parameter_tvb
147   tvbuff_t *parameter_tvb;
148   proto_tree *subtree;
150 %(DEFAULT_BODY)s
152   if (!parameter_tvb)
153     return offset;
155   subtree = proto_item_add_subtree(actx->created_item, ett_gprscdr_plmn_id);
156   dissect_e212_mcc_mnc(parameter_tvb, actx->pinfo, subtree, 0, E212_NONE, true);
158 #.FN_BODY QoSInformation
160   /* This octet string is a 1:1 copy of the contents (i.e. starting with octet 4) of the
161    * Quality of Service (QoS) Profile information element specified in 29.060, ch7.7.34.
162    *
163    */
165   header_field_info *hfi;
166   hfi = proto_registrar_get_nth(hf_index);
168   offset = decode_qos_umts(tvb, 0, actx->pinfo, tree, hfi->name, 0);
170 #.FN_BODY EPCQoSInformation/aRP
171   proto_tree *ext_tree_arp;
172   unsigned length;
174   /*
175    * 8.86 Allocation/Retention Priority (ARP)
176    * 3GPP TS 29.274
177    */
179   length = tvb_reported_length(tvb);
180   ext_tree_arp = proto_tree_add_subtree(tree, tvb, 0, length, ett_gprscdr_eps_qos_arp, NULL, "aRP");
182   dissect_gtpv2_arp(tvb, actx->pinfo, ext_tree_arp, NULL, length, 0, 0, NULL);
184   offset = length;
187 #.FN_BODY GGSNPDPRecord/userLocationInformation
189   offset = dissect_gprscdr_uli(tvb, actx, tree, 1);
191 #.FN_BODY GGSNPDPRecordV750/userLocationInformation
193   offset = dissect_gprscdr_uli(tvb, actx, tree, 1);
195 #.FN_BODY EGSNPDPRecord/userLocationInformation
197   offset = dissect_gprscdr_uli(tvb, actx, tree, 1);
199 #.FN_BODY EGSNPDPRecordV750/userLocationInformation
201   offset = dissect_gprscdr_uli(tvb, actx, tree, 1);
203 #.FN_BODY ChangeOfCharConditionV651/userLocationInformation
205   offset = dissect_gprscdr_uli(tvb, actx, tree, 1);
207 #.FN_BODY ChangeOfServiceConditionV750/userLocationInformation
209   offset = dissect_gprscdr_uli(tvb, actx, tree, 1);
211 #.FN_BODY SGWRecord/userLocationInformation
213   offset = dissect_gprscdr_uli(tvb, actx, tree, 2);
215 #.FN_BODY SGWRecord/lastUserLocationInformation
217   offset = dissect_gprscdr_uli(tvb, actx, tree, 2);
219 #.FN_BODY PGWRecord/userLocationInformation
221   offset = dissect_gprscdr_uli(tvb, actx, tree, 2);
223 #.FN_BODY PGWRecord/lastUserLocationInformation
225   offset = dissect_gprscdr_uli(tvb, actx, tree, 2);
227 #.FN_BODY ChangeOfCharCondition/userLocationInformation
229   offset = dissect_gprscdr_uli(tvb, actx, tree, 2);
231 #.FN_BODY ChangeOfServiceCondition/userLocationInformation
233   offset = dissect_gprscdr_uli(tvb, actx, tree, 2);
235 #.FN_BODY RelatedChangeOfCharCondition/userLocationInformation
237   offset = dissect_gprscdr_uli(tvb, actx, tree, 2);
239 #.FN_BODY RelatedChangeOfServiceCondition/userLocationInformation
241   offset = dissect_gprscdr_uli(tvb, actx, tree, 2);
243 #.FN_BODY PDPType
244   proto_tree *ext_tree_pdp_pdn_type;
245   unsigned length;
247   length = tvb_reported_length(tvb);
249   if(length == 1) {
250     /*
251      * PDN/EPS Bearer
252      * TS 29.274
253      * 8.34 PDN Type
254      */
255     ext_tree_pdp_pdn_type = proto_tree_add_subtree(tree, tvb, 0, length, ett_gprscdr_pdp_pdn_type, NULL, "pDNType");
256     dissect_gtpv2_pdn_type(tvb, actx->pinfo, ext_tree_pdp_pdn_type, NULL, length, 0, 0, NULL);
257     offset = length;
258   }
259   else {
260     /* PDP context
261      * TS 29.060
262      * 7.7.27 End User Address
263      * Octet 4-5
264      */
265     ext_tree_pdp_pdn_type = proto_tree_add_subtree(tree, tvb, 0, length, ett_gprscdr_pdp_pdn_type, NULL, "pDPType");
266     offset = de_sm_pdp_addr(tvb, ext_tree_pdp_pdn_type, actx->pinfo, 0, length, NULL, 0);
267   }
270 #.FN_BODY GPRSRecord VAL_PTR = &branch_taken
271 proto_item *item;
272 int branch_taken, t_offset = offset;
273 int32_t  tag;
275   %(DEFAULT_BODY)s
277   if(branch_taken == -1){
278     get_ber_identifier(tvb, t_offset, NULL, NULL, &tag);
279     item = proto_tree_add_uint(tree, hf_index, tvb, t_offset, 1, tag);
280     dissect_ber_identifier(actx->pinfo, tree, tvb, t_offset, NULL, NULL, &tag);
281     expert_add_info_format(actx->pinfo, item, &ei_gprscdr_choice_not_found,
282               "Record type(BER choice) not found: %%u", tag);
284 #.TYPE_ATTR
285 IPBinV4Address TYPE = FT_IPv4  DISPLAY = BASE_NONE
286 IPBinV6Address TYPE = FT_IPv6  DISPLAY = BASE_NONE
287 RATType  TYPE = FT_UINT32  DISPLAY = BASE_DEC  STRINGS = VALS(gprscdr_rat_type_vals)
288 EPCQoSInformation/maxRequestedBandwithUL  TYPE = FT_UINT32  DISPLAY = BASE_DEC
289 EPCQoSInformation/maxRequestedBandwithDL  TYPE = FT_UINT32  DISPLAY = BASE_DEC
290 EPCQoSInformation/guaranteedBitrateUL  TYPE = FT_UINT32  DISPLAY = BASE_DEC
291 EPCQoSInformation/guaranteedBitrateDL  TYPE = FT_UINT32  DISPLAY = BASE_DEC
292 EPCQoSInformation/aPNAggregateMaxBitrateUL  TYPE = FT_UINT32  DISPLAY = BASE_DEC
293 EPCQoSInformation/aPNAggregateMaxBitrateDL  TYPE = FT_UINT32  DISPLAY = BASE_DEC
294 EPCQoSInformation/extendedMaxRequestedBWUL  TYPE = FT_UINT32  DISPLAY = BASE_DEC
295 EPCQoSInformation/extendedMaxRequestedBWDL  TYPE = FT_UINT32  DISPLAY = BASE_DEC
296 EPCQoSInformation/extendedGBRUL  TYPE = FT_UINT32  DISPLAY = BASE_DEC
297 EPCQoSInformation/extendedGBRDL  TYPE = FT_UINT32  DISPLAY = BASE_DEC
298 EPCQoSInformation/extendedAPNAMBRUL  TYPE = FT_UINT32  DISPLAY = BASE_DEC
299 EPCQoSInformation/extendedAPNAMBRDL  TYPE = FT_UINT32  DISPLAY = BASE_DEC
300 CSGId  TYPE = FT_UINT32  DISPLAY = BASE_DEC
301 RatingGroupId  TYPE = FT_UINT32  DISPLAY = BASE_DEC
302 TimeStamp TYPE = FT_ABSOLUTE_TIME  DISPLAY = ABSOLUTE_TIME_LOCAL
303 #.END
306 # Editor modelines  -  https://www.wireshark.org/tools/modelines.html
308 # Local variables:
309 # c-basic-offset: 2
310 # tab-width: 8
311 # indent-tabs-mode: nil
312 # End:
314 # vi: set shiftwidth=2 tabstop=8 expandtab:
315 # :indentSize=2:tabSize=8:noTabs=true: