aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/asn1/gprscdr/gprscdr.cnf
blob: 9318c20d83833cbe40be6ac1e0fa76200da576da (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
# gprscdr.cnf
# Anders Broman 2011

#.IMPORT ../gsm_map/gsm_map-exp.cnf

#.MODULE

#.OMIT_ASSIGNMENT
CalledNumber
CauseForTerm
ChargeIndicator
DataVolumeOctets
MscNo
SystemType
NodeAddress
ServiceContextID
ChangeLocationV651
SubscriberEquipmentNumber
SubscriberEquipmentType
Session-Id
PriorityType
MessageClass
InvolvedParty
# 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 = &parameter_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 = &parameter_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 = &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_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)
EPCQoSInformation/maxRequestedBandwithUL  TYPE = FT_UINT32  DISPLAY = BASE_DEC
EPCQoSInformation/maxRequestedBandwithDL  TYPE = FT_UINT32  DISPLAY = BASE_DEC
EPCQoSInformation/guaranteedBitrateUL  TYPE = FT_UINT32  DISPLAY = BASE_DEC
EPCQoSInformation/guaranteedBitrateDL  TYPE = FT_UINT32  DISPLAY = BASE_DEC
EPCQoSInformation/aPNAggregateMaxBitrateUL  TYPE = FT_UINT32  DISPLAY = BASE_DEC
EPCQoSInformation/aPNAggregateMaxBitrateDL  TYPE = FT_UINT32  DISPLAY = BASE_DEC
EPCQoSInformation/extendedMaxRequestedBWUL  TYPE = FT_UINT32  DISPLAY = BASE_DEC
EPCQoSInformation/extendedMaxRequestedBWDL  TYPE = FT_UINT32  DISPLAY = BASE_DEC
EPCQoSInformation/extendedGBRUL  TYPE = FT_UINT32  DISPLAY = BASE_DEC
EPCQoSInformation/extendedGBRDL  TYPE = FT_UINT32  DISPLAY = BASE_DEC
EPCQoSInformation/extendedAPNAMBRUL  TYPE = FT_UINT32  DISPLAY = BASE_DEC
EPCQoSInformation/extendedAPNAMBRDL  TYPE = FT_UINT32  DISPLAY = BASE_DEC
CSGId  TYPE = FT_UINT32  DISPLAY = BASE_DEC
RatingGroupId  TYPE = FT_UINT32  DISPLAY = BASE_DEC
#.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:
#