HACK: pinfo->private_data points to smb_info again
[wireshark-wip.git] / asn1 / lte-rrc / lte-rrc.cnf
blob4abe251ce54b9ecb9475cf8a99160659a8a2142c
1 # lte-rrc.cnf
2 # lte-rrc conformation file
3 # Copyright 2008 Vincent Helfre, 2009-2013 Pascal Quantin
4 # $Id$
6 #.OPT
7 PER
8 UNALIGNED
9 #.END
11 #.USE_VALS_EXT
12 BandclassCDMA2000
13 DRX-Config/setup/drx-InactivityTimer
14 Q-OffsetRange
15 RRM-Config/ue-InactiveTime
16 SupportedBandUTRA-FDD
17 T-PollRetransmit
18 T-Reordering
19 T-StatusProhibit
21 #.EXPORTS
22 HandoverCommand
23 HandoverCommand_PDU
24 HandoverPreparationInformation
25 HandoverPreparationInformation_PDU
26 UERadioAccessCapabilityInformation
27 UERadioAccessCapabilityInformation_PDU
28 UE-EUTRA-Capability
29 UE-EUTRA-Capability_PDU
30 #.END
32 #.PDU_NEW
33 HandoverCommand
34 HandoverPreparationInformation
35 UERadioAccessCapabilityInformation
36 BCCH-BCH-Message             @bcch.bch
37 BCCH-DL-SCH-Message          @bcch.dl.sch
38 MCCH-Message                 @mcch
39 PCCH-Message                 @pcch
40 DL-CCCH-Message              @dl.ccch
41 DL-DCCH-Message              @dl.dcch
42 UL-CCCH-Message              @ul.ccch
43 UL-DCCH-Message              @ul.dcch
44 UECapabilityInformation      @ue_cap_info
45 UE-EUTRA-Capability          @ue_eutra_cap
46 #.END
48 #.OMIT_ASSIGNMENT
49 # Get rid of unused code warnings
50 VarShortMAC-Input
51 VarMeasConfig
52 VarMeasReportList
53 VarMeasReport
54 CellsTriggeredList
55 VarConnEstFailReport-r11
56 VarLogMeasConfig-r10
57 VarLogMeasReport-r10
58 LogMeasInfoList2-r10
59 VarRLF-Report-r10
60 VarLogMeasConfig-r11
61 VarLogMeasReport-r11
62 VarRLF-Report-r11
64 #.MAKE_ENUM
65 RAT-Type TYPE_PREFIX
66 Handover/targetRAT-Type TYPE_PREFIX
67 SI-OrPSI-GERAN TYPE_PREFIX
69 #.FN_HDR UL-DCCH-Message
70   actx->pinfo->link_dir = P2P_DIR_UL;
72 #.FN_HDR DL-DCCH-Message
73   actx->pinfo->link_dir = P2P_DIR_DL;
75 #.FN_BODY DedicatedInfoNAS VAL_PTR = &nas_eps_tvb
76   tvbuff_t *nas_eps_tvb=NULL;
77   proto_tree *subtree;
78 %(DEFAULT_BODY)s
79   if ((nas_eps_tvb)&&(nas_eps_handle)) {
80     subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_dedicatedInfoNAS);
81     call_dissector(nas_eps_handle, nas_eps_tvb, actx->pinfo, subtree);
82   }
84 #.FN_BODY UE-CapabilityRAT-Container
85   /* Initialise to invalid value */
86   private_data_set_rat_type(actx, 0xFF);
87 %(DEFAULT_BODY)s
89 #.FN_BODY RAT-Type VAL_PTR = &rat_type
90   guint32 rat_type;
91 %(DEFAULT_BODY)s
92   private_data_set_rat_type(actx, (guint8)rat_type);
94 #RAT-Type ::=                                           ENUMERATED {
95 #                                                                               eutra, utra, geran-cs, geran-ps, cdma2000-1XRTT,
96 #                                                                               spare3, spare2, spare1, ...}
97 # ueCapabilityRAT-Container
98 # Container for the UE capabilities of the indicated RAT. The encoding is defined in the specification of each RAT:
99 # For E-UTRA: the encoding of UE capabilities is defined in IE UE-EUTRA-Capability.
100 # For UTRA: the octet string contains the INTER RAT HANDOVER INFO message defined in TS 25.331 [19].
101 # For GERAN CS: the octet string contains the concatenated string of the Mobile Station Classmark 2 and Mobile
102 # Station Classmark 3. The first 5 octets correspond to Mobile Station Classmark 2 and the following octets correspond
103 # to Mobile Station Classmark 3. The Mobile Station Classmark 2 is formatted as 'TLV' and is coded in the same way as
104 # the Mobile Station Classmark 2 information element in TS 24.008 [49]. The first octet is the Mobile station classmark 2
105 # IEI and its value shall be set to 33H. The second octet is the Length of mobile station classmark 2 and its value shall
106 # be set to 3. The octet 3 contains the first octet of the value part of the Mobile Station Classmark 2 information element,
107 # the octet 4 contains the second octet of the value part of the Mobile Station Classmark 2 information element and so
108 # on. For each of these octets, the first/ leftmost/ most significant bit of the octet contains b8 of the corresponding octet
109 # of the Mobile Station Classmark 2. The Mobile Station Classmark 3 is formatted as 'V' and is coded in the same way
110 # as the value part in the Mobile station classmark 3 information element in TS 24.008 [49]. The sixth octet of this octet
111 # string contains octet 1 of the value part of Mobile station classmark 3, the seventh of octet of this octet string contains
112 # octet 2 of the value part of Mobile station classmark 3 and so on. Note.
113 # For GERAN PS: the encoding of UE capabilities is formatted as 'V' and is coded in the same way as the value part in
114 # the MS Radio Access Capability information element in TS 24.008 [49].
115 # For CDMA2000-1XRTT: the octet string contains the A21 Mobile Subscription Information and the encoding of this is
116 # defined in A.S0008 [33]. The A21 Mobile Subscription Information contains the supported CDMA2000 1xRTT band
117 # class and band sub-class information.
119 #.FN_BODY UE-CapabilityRAT-Container/ueCapabilityRAT-Container VAL_PTR = &ue_cap_tvb
120   tvbuff_t *ue_cap_tvb=NULL;
121 %(DEFAULT_BODY)s
123 #.FN_FTR UE-CapabilityRAT-Container/ueCapabilityRAT-Container
124 if(ue_cap_tvb){
125   guint32 length;
126   proto_item *item;
127   proto_tree *subtree, *subtree2;
128   guint8 byte;
129   subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_UE_CapabilityRAT_Container);
130   switch(private_data_get_rat_type(actx)){
131   case RAT_Type_eutra:
132     /* eutra */
133     dissect_lte_rrc_UE_EUTRA_Capability_PDU(ue_cap_tvb, actx->pinfo, subtree, NULL);
134     break;
135   case RAT_Type_utra:
136     /* utra */
137     dissect_rrc_InterRATHandoverInfo_PDU(ue_cap_tvb, actx->pinfo, subtree, NULL);
138     break;
139   case RAT_Type_geran_cs:
140     /* geran-cs */
141     /* Mobile Station Classmark 2 is formatted as TLV with the two first bytes set to 0x33 0x03 */
142     item = proto_tree_add_text(subtree, ue_cap_tvb, 0, 5, "Mobile Station Classmark 2");
143     subtree2 = proto_item_add_subtree(item, ett_lte_rrc_UE_CapabilityRAT_Container);
144     byte = tvb_get_guint8(ue_cap_tvb, 0);
145     if (byte != 0x33) {
146       expert_add_info_format(actx->pinfo, item, &ei_lte_rrc_unexpected_type_value,
147                              "Unexpected type value (found 0x%02X)", byte);
148     }
149     byte = tvb_get_guint8(ue_cap_tvb, 1);
150     if (byte != 0x03) {
151       expert_add_info_format(actx->pinfo, item, &ei_lte_rrc_unexpected_length_value,
152                              "Unexpected length value (found %d)", byte);
153     }
154     de_ms_cm_2(ue_cap_tvb, subtree2, actx->pinfo, 2, 3, NULL, 0);
155     /* Mobile Station Classmark 3 is formatted as V */
156     length = tvb_ensure_length_remaining(ue_cap_tvb, 5);
157     item = proto_tree_add_text(subtree, ue_cap_tvb, 5, length, "Mobile Station Classmark 3");
158     subtree2 = proto_item_add_subtree(item, ett_lte_rrc_UE_CapabilityRAT_Container);
159     de_ms_cm_3(ue_cap_tvb, subtree2, actx->pinfo, 5, length, NULL, 0);
160     break;
161   case RAT_Type_geran_ps:
162     /* geran-ps */
163     /* MS Radio Access Capability is formatted as V */
164     length = tvb_length(ue_cap_tvb);
165     item = proto_tree_add_text(subtree, ue_cap_tvb, 0, length, "MS Radio Access Capability");
166     subtree2 = proto_item_add_subtree(item, ett_lte_rrc_UE_CapabilityRAT_Container);
167     de_gmm_ms_radio_acc_cap(ue_cap_tvb, subtree2, actx->pinfo, 0, length, NULL, 0);
168     break;
169   case RAT_Type_cdma2000_1XRTT:
170     /* cdma2000-1XRTT */
171     /* dissection of "A21 Mobile Subscription Information" could be added to packet-ansi_a.c */
172     break;
173   default:
174     break;
175   }
178 #.FN_BODY UE-EUTRA-Capability/featureGroupIndicators VAL_PTR = &featureGroupIndicators_tvb
179   tvbuff_t *featureGroupIndicators_tvb=NULL;
180 %(DEFAULT_BODY)s
181   if(featureGroupIndicators_tvb){
182     /* Dissect featureGroupIndicators */
183     dissect_lte_rrc_featureGroupIndicators(featureGroupIndicators_tvb, actx);
184   }
186 #.FN_BODY UE-EUTRA-Capability-v1020-IEs/featureGroupIndRel10-r10 VAL_PTR = &featureGroupIndRel10_tvb
187   tvbuff_t *featureGroupIndRel10_tvb=NULL;
188 %(DEFAULT_BODY)s
189   if(featureGroupIndRel10_tvb){
190     /* Dissect featureGroupIndRel10-r10 */
191     dissect_lte_rrc_featureGroupIndRel10(featureGroupIndRel10_tvb, actx);
192   }
194 #.FN_BODY UE-EUTRA-Capability-v9a0-IEs/featureGroupIndRel9Add-r9 VAL_PTR = &featureGroupIndRel9Add_tvb
195   tvbuff_t *featureGroupIndRel9Add_tvb=NULL;
196 %(DEFAULT_BODY)s
197   if(featureGroupIndRel9Add_tvb){
198     /* Dissect featureGroupIndRel9Add-r9 */
199     dissect_lte_rrc_featureGroupIndRel9Add(featureGroupIndRel9Add_tvb, actx);
200   }
202 #.FN_BODY UE-EUTRA-CapabilityAddXDD-Mode-r9/featureGroupIndicators-r9 VAL_PTR = &featureGroupIndicators_tvb
203   tvbuff_t *featureGroupIndicators_tvb=NULL;
204 %(DEFAULT_BODY)s
205   if(featureGroupIndicators_tvb){
206     /* Dissect featureGroupIndicators-r9 */
207     dissect_lte_rrc_featureGroupIndicators(featureGroupIndicators_tvb, actx);
208   }
210 #.FN_BODY UE-EUTRA-CapabilityAddXDD-Mode-r9/featureGroupIndRel9Add-r9 VAL_PTR = &featureGroupIndRel9Add_tvb
211   tvbuff_t *featureGroupIndRel9Add_tvb=NULL;
212 %(DEFAULT_BODY)s
213   if(featureGroupIndRel9Add_tvb){
214     /* Dissect featureGroupIndRel9Add-r9 */
215     dissect_lte_rrc_featureGroupIndRel9Add(featureGroupIndRel9Add_tvb, actx);
216   }
218 #.FN_BODY UE-EUTRA-CapabilityAddXDD-Mode-v1060/featureGroupIndRel10-v1060 VAL_PTR = &featureGroupIndRel10_tvb
219   tvbuff_t *featureGroupIndRel10_tvb=NULL;
220 %(DEFAULT_BODY)s
221   if(featureGroupIndRel10_tvb){
222     /* Dissect featureGroupIndRel10-v1060 */
223     dissect_lte_rrc_featureGroupIndRel10(featureGroupIndRel10_tvb, actx);
224   }
226 #.FN_BODY Handover
227   /* Initialise to invalid value */
228   private_data_set_rat_target_type(actx, 0xFF);
229 %(DEFAULT_BODY)s
231 #.FN_BODY Handover/targetRAT-Type VAL_PTR = &target_rat_type
232   guint32 target_rat_type;
233 %(DEFAULT_BODY)s
234   private_data_set_rat_target_type(actx, (guint8)target_rat_type);
236 #.FN_BODY Handover/targetRAT-MessageContainer VAL_PTR = &target_rat_msg_cont_tvb
237   tvbuff_t *target_rat_msg_cont_tvb = NULL;
238 %(DEFAULT_BODY)s
239   if(target_rat_msg_cont_tvb){
240     guint8 byte;
241     proto_tree *subtree;
242     subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_targetRAT_MessageContainer);
243     switch (private_data_get_rat_target_type(actx)){
244     case T_targetRAT_Type_utra:
245       /* utra */
246       if (rrc_irat_ho_to_utran_cmd_handle)
247         call_dissector(rrc_irat_ho_to_utran_cmd_handle, target_rat_msg_cont_tvb, actx->pinfo, subtree);
248       break;
249     case T_targetRAT_Type_geran:
250       /* geran */
251       byte = tvb_get_guint8(target_rat_msg_cont_tvb, 0);
252       if (byte == 0x06) {
253         if (gsm_a_dtap_handle) {
254           call_dissector(gsm_a_dtap_handle, target_rat_msg_cont_tvb, actx->pinfo, subtree);
255         }
256       } else {
257         if (gsm_rlcmac_dl_handle) {
258           call_dissector(gsm_rlcmac_dl_handle, target_rat_msg_cont_tvb, actx->pinfo, subtree);
259         }
260       }
261       break;
262     case T_targetRAT_Type_cdma2000_1XRTT:
263       /* cdma2000-1XRTT */
264       break;
265     case T_targetRAT_Type_cdma2000_HRPD:
266       /* cdma2000-HRPD */
267       break;
268     default:
269       break;
270     }
271   }
273 #.FN_BODY Handover/nas-SecurityParamFromEUTRA VAL_PTR = &nas_sec_param_from_eutra_tvb
274   tvbuff_t *nas_sec_param_from_eutra_tvb = NULL;
275   guint32 length;
276   proto_tree *subtree;
278 %(DEFAULT_BODY)s
279   if (nas_sec_param_from_eutra_tvb) {
280     length = tvb_length(nas_sec_param_from_eutra_tvb);
281     subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_nas_SecurityParam);
282     de_emm_sec_par_from_eutra(nas_sec_param_from_eutra_tvb, subtree, actx->pinfo, 0, length, NULL, 0);
283   }
285 #.FN_BODY SecurityConfigHO/handoverType/interRAT/nas-SecurityParamToEUTRA VAL_PTR = &nas_sec_param_to_eutra_tvb
286   tvbuff_t *nas_sec_param_to_eutra_tvb = NULL;
287   guint32 length;
288   proto_tree *subtree;
290 %(DEFAULT_BODY)s
291   if (nas_sec_param_to_eutra_tvb) {
292     length = tvb_length(nas_sec_param_to_eutra_tvb);
293     subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_nas_SecurityParam);
294     de_emm_sec_par_to_eutra(nas_sec_param_to_eutra_tvb, subtree, actx->pinfo, 0, length, NULL, 0);
295   }
297 #.FN_BODY SI-OrPSI-GERAN/si
298   private_data_set_si_or_psi_geran(actx, (guint8)SI_OrPSI_GERAN_si); /* SI message */
299 %(DEFAULT_BODY)s
301 #.FN_BODY SI-OrPSI-GERAN/psi
302   private_data_set_si_or_psi_geran(actx, (guint8)SI_OrPSI_GERAN_psi); /* PSI message */
303 %(DEFAULT_BODY)s
305 #.FN_BODY CellInfoGERAN-r9/systemInformation-r9
306   private_data_set_si_or_psi_geran(actx, (guint8)SI_OrPSI_GERAN_si); /* SI message */
307 %(DEFAULT_BODY)s
309 #.FN_BODY SystemInfoListGERAN/_item VAL_PTR = &sys_info_list_tvb
310   tvbuff_t *sys_info_list_tvb = NULL;
311   proto_tree *subtree;
312 %(DEFAULT_BODY)s
313   if (sys_info_list_tvb) {
314     subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_siPsiSibContainer);
315     switch (private_data_get_si_or_psi_geran(actx)) {
316     case SI_OrPSI_GERAN_si:
317       /* SI message */
318       if (gsm_a_dtap_handle) {
319         call_dissector(gsm_a_dtap_handle, sys_info_list_tvb, actx->pinfo, subtree);
320       }
321       break;
322     case SI_OrPSI_GERAN_psi:
323       /* PSI message */
324       if (gsm_rlcmac_dl_handle) {
325         call_dissector(gsm_rlcmac_dl_handle, sys_info_list_tvb, actx->pinfo, subtree);
326       }
327       break;
328     default:
329       break;
330     }
331   }
333 #.FN_BODY SystemTimeInfoCDMA2000/cdma-SystemTime/asynchronousSystemTime VAL_PTR=&async_system_time_tvb
334   tvbuff_t *async_system_time_tvb = NULL;
335 %(DEFAULT_BODY)s
337 #.FN_FTR SystemTimeInfoCDMA2000/cdma-SystemTime/asynchronousSystemTime
338   if (async_system_time_tvb) {
339     guint64 bits;
340     nstime_t ts;
341     proto_tree *subtree;
342     subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_timeInfo);
343     bits = tvb_get_bits64(async_system_time_tvb, 0, 49, ENC_BIG_ENDIAN);
344     ts.secs = (time_t)((bits*8)/1228800) + 315964800; /* CDMA2000 epoch is 00:00:00 (midnight) UTC on 1980-01-06 */
345     ts.nsecs = (int)(((bits%153600)*8*1000000000)/1228800);
346     proto_tree_add_text(subtree, async_system_time_tvb, 0, -1, "CDMA  time: %s", abs_time_to_str(&ts, ABSOLUTE_TIME_UTC, FALSE));
347     proto_tree_add_text(subtree, async_system_time_tvb, 0, -1, "Local time: %s", abs_time_to_str(&ts, ABSOLUTE_TIME_LOCAL, TRUE));
348   }
350 #.FN_BODY SystemTimeInfoCDMA2000/cdma-SystemTime/synchronousSystemTime VAL_PTR=&sync_system_time_tvb
351   tvbuff_t *sync_system_time_tvb = NULL;
352 %(DEFAULT_BODY)s
354 #.FN_FTR SystemTimeInfoCDMA2000/cdma-SystemTime/synchronousSystemTime
355   if (sync_system_time_tvb) {
356     guint64 bits;
357     nstime_t ts;
358     proto_tree *subtree;
359     subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_timeInfo);
360     bits = tvb_get_bits64(sync_system_time_tvb, 0, 39, ENC_BIG_ENDIAN);
361     ts.secs = (time_t)(bits/100) + 315964800; /* CDMA2000 epoch is 00:00:00 (midnight) UTC on 1980-01-06 */
362     ts.nsecs = (int)(bits%100)*10000000;
363     proto_tree_add_text(subtree, sync_system_time_tvb, 0, -1, "CDMA  time: %s", abs_time_to_str(&ts, ABSOLUTE_TIME_UTC, FALSE));
364     proto_tree_add_text(subtree, sync_system_time_tvb, 0, -1, "Local time: %s", abs_time_to_str(&ts, ABSOLUTE_TIME_LOCAL, TRUE));
365   }
367 #.FN_BODY CellInfoUTRA-FDD-r9/utra-BCCH-Container-r9 VAL_PTR = &utra_bcch_cont_tvb
368   tvbuff_t *utra_bcch_cont_tvb = NULL;
369   proto_tree *subtree;
370 %(DEFAULT_BODY)s
371   if (utra_bcch_cont_tvb && rrc_sys_info_cont_handle) {
372     subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_siPsiSibContainer);
373     call_dissector(rrc_sys_info_cont_handle, utra_bcch_cont_tvb, actx->pinfo, subtree);
374   }
376 #.FN_BODY CellInfoUTRA-TDD-r9/utra-BCCH-Container-r9 VAL_PTR = &utra_bcch_cont_tvb
377   tvbuff_t *utra_bcch_cont_tvb = NULL;
378   proto_tree *subtree;
379 %(DEFAULT_BODY)s
380   if (utra_bcch_cont_tvb && rrc_sys_info_cont_handle) {
381     subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_siPsiSibContainer);
382     call_dissector(rrc_sys_info_cont_handle, utra_bcch_cont_tvb, actx->pinfo, subtree);
383   }
385 #.FN_BODY CellInfoUTRA-TDD-r10/utra-BCCH-Container-r10 VAL_PTR = &utra_bcch_cont_tvb
386   tvbuff_t *utra_bcch_cont_tvb = NULL;
387   proto_tree *subtree;
388 %(DEFAULT_BODY)s
389   if (utra_bcch_cont_tvb && rrc_sys_info_cont_handle) {
390     subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_siPsiSibContainer);
391     call_dissector(rrc_sys_info_cont_handle, utra_bcch_cont_tvb, actx->pinfo, subtree);
392   }
394 #.TYPE_ATTR
395 NeighCellConfig TYPE=FT_UINT8 DISPLAY=BASE_DEC STRINGS=VALS(lte_rrc_neighCellConfig_vals)
397 #.FN_BODY NeighCellConfig VAL_PTR = &neigh_cell_config_tvb HF_INDEX=-1
398   tvbuff_t *neigh_cell_config_tvb = NULL;
399 %(DEFAULT_BODY)s
401 #.FN_FTR NeighCellConfig
402   if (neigh_cell_config_tvb) {
403     actx->created_item = proto_tree_add_uint(tree, hf_index, neigh_cell_config_tvb, 0, 1, tvb_get_bits8(neigh_cell_config_tvb, 0, 2));
404   }
406 #.FN_BODY LocationInfo-r10/locationCoordinates-r10/ellipsoid-Point-r10 VAL_PTR = &ellipsoid_point_tvb
407   tvbuff_t *ellipsoid_point_tvb = NULL;
408 %(DEFAULT_BODY)s
409   if (ellipsoid_point_tvb) {
410     dissect_lpp_Ellipsoid_Point_PDU(ellipsoid_point_tvb, actx->pinfo, tree, NULL);
411   }
413 #.FN_BODY LocationInfo-r10/locationCoordinates-r10/ellipsoidPointWithAltitude-r10 VAL_PTR = &ellipsoid_point_with_alt_tvb
414   tvbuff_t *ellipsoid_point_with_alt_tvb = NULL;
415 %(DEFAULT_BODY)s
416   if (ellipsoid_point_with_alt_tvb) {
417     dissect_lpp_EllipsoidPointWithAltitude_PDU(ellipsoid_point_with_alt_tvb, actx->pinfo, tree, NULL);
418   }
420 #.FN_BODY LocationInfo-r10/locationCoordinates-r10/ellipsoidPointWithUncertaintyCircle-r11 VAL_PTR = &ellipsoid_point_with_uncert_circ_tvb
421   tvbuff_t *ellipsoid_point_with_uncert_circ_tvb = NULL;
422 %(DEFAULT_BODY)s
423   if (ellipsoid_point_with_uncert_circ_tvb) {
424     dissect_lpp_Ellipsoid_PointWithUncertaintyCircle_PDU(ellipsoid_point_with_uncert_circ_tvb, actx->pinfo, tree, NULL);
425   }
427 #.FN_BODY LocationInfo-r10/locationCoordinates-r10/ellipsoidPointWithUncertaintyEllipse-r11 VAL_PTR = &ellipsoid_point_with_uncert_ellipse_tvb
428   tvbuff_t *ellipsoid_point_with_uncert_ellipse_tvb = NULL;
429 %(DEFAULT_BODY)s
430   if (ellipsoid_point_with_uncert_ellipse_tvb) {
431     dissect_lpp_EllipsoidPointWithUncertaintyEllipse_PDU(ellipsoid_point_with_uncert_ellipse_tvb, actx->pinfo, tree, NULL);
432   }
434 #.FN_BODY LocationInfo-r10/locationCoordinates-r10/ellipsoidPointWithAltitudeAndUncertaintyEllipsoid-r11 VAL_PTR = &ellipsoid_point_with_alt_uncert_ellipsoid_tvb
435   tvbuff_t *ellipsoid_point_with_alt_uncert_ellipsoid_tvb = NULL;
436 %(DEFAULT_BODY)s
437   if (ellipsoid_point_with_alt_uncert_ellipsoid_tvb) {
438     dissect_lpp_EllipsoidPointWithAltitudeAndUncertaintyEllipsoid_PDU(ellipsoid_point_with_alt_uncert_ellipsoid_tvb, actx->pinfo, tree, NULL);
439   }
441 #.FN_BODY LocationInfo-r10/locationCoordinates-r10/ellipsoidArc-r11 VAL_PTR = &ellipsoid_arc_tvb
442   tvbuff_t *ellipsoid_arc_tvb = NULL;
443 %(DEFAULT_BODY)s
444   if (ellipsoid_arc_tvb) {
445     dissect_lpp_EllipsoidArc_PDU(ellipsoid_arc_tvb, actx->pinfo, tree, NULL);
446   }
448 #.FN_BODY LocationInfo-r10/locationCoordinates-r10/polygon-r11 VAL_PTR = &polygon_tvb
449   tvbuff_t *polygon_tvb = NULL;
450 %(DEFAULT_BODY)s
451   if (polygon_tvb) {
452     dissect_lpp_Polygon_PDU(polygon_tvb, actx->pinfo, tree, NULL);
453   }
455 #.FN_BODY LocationInfo-r10/horizontalVelocity-r10 VAL_PTR = &horizontal_velocity_tvb
456   tvbuff_t *horizontal_velocity_tvb = NULL;
457 %(DEFAULT_BODY)s
458   if (horizontal_velocity_tvb) {
459     dissect_lpp_HorizontalVelocity_PDU(horizontal_velocity_tvb, actx->pinfo, tree, NULL);
460   }
462 #.FN_BODY LocationInfo-r10/gnss-TOD-msec-r10 VAL_PTR = &gnss_tod_msec_tvb
463   tvbuff_t *gnss_tod_msec_tvb = NULL;
464 %(DEFAULT_BODY)s
465   if (gnss_tod_msec_tvb) {
466     asn1_ctx_t asn1_ctx;
467     asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, FALSE, actx->pinfo);
468     dissect_per_constrained_integer(gnss_tod_msec_tvb, 0, &asn1_ctx, tree, hf_index, 0U, 3599999U, NULL, FALSE);
469   }
471 #.FN_BODY AbsoluteTimeInfo-r10 VAL_PTR = &abs_time_info_tvb
472   tvbuff_t *abs_time_info_tvb = NULL;
473 %(DEFAULT_BODY)s
474 #.FN_FTR AbsoluteTimeInfo-r10
475   if (abs_time_info_tvb) {
476     const gchar *str;
477     proto_tree *subtree;
478     subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_absTimeInfo);
479     str = tvb_bcd_dig_to_wmem_packet_str(abs_time_info_tvb, 0, 6, NULL, FALSE);
480     proto_tree_add_text(subtree, abs_time_info_tvb, 0, 6, "%c%c-%c%c-%c%c %c%c:%c%c:%c%c", str[0], str[1],
481                         str[2], str[3], str[4], str[5], str[6], str[7], str[8], str[9], str[10], str[11]);
482   }
484 #.TYPE_ATTR
485 SystemInformationBlockType9/hnb-Name TYPE=FT_STRING DISPLAY=BASE_NONE
487 #.FN_BODY SystemInformationBlockType9/hnb-Name VAL_PTR=&hnb_name_tvb HF_INDEX=-1
488   tvbuff_t *hnb_name_tvb = NULL;
490 %(DEFAULT_BODY)s
491   actx->created_item = proto_tree_add_unicode_string(tree, hf_index, hnb_name_tvb, 0, -1,
492                                 tvb_get_string_enc(wmem_packet_scope(), hnb_name_tvb, 0, tvb_length(hnb_name_tvb), ENC_UTF_8 | ENC_NA));
494 #.TYPE_ATTR
495 SystemInformationBlockType10/messageIdentifier TYPE=FT_UINT16 DISPLAY=BASE_DEC|BASE_EXT_STRING STRINGS=&lte_rrc_messageIdentifier_vals_ext
497 #.FN_BODY SystemInformationBlockType10/messageIdentifier VAL_PTR=&msg_id_tvb HF_INDEX=-1
498   tvbuff_t *msg_id_tvb = NULL;
499 %(DEFAULT_BODY)s
501 #.FN_FTR SystemInformationBlockType10/messageIdentifier
502   if (msg_id_tvb) {
503     actx->created_item = proto_tree_add_item(tree, hf_index, msg_id_tvb, 0, 2, ENC_BIG_ENDIAN);
504   }
506 #.FN_BODY SystemInformationBlockType10/serialNumber VAL_PTR=&serial_nb_tvb
507   tvbuff_t *serial_nb_tvb = NULL;
508 %(DEFAULT_BODY)s
510 #.FN_FTR SystemInformationBlockType10/serialNumber
511   if (serial_nb_tvb) {
512     proto_tree *subtree;
513     subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_serialNumber);
514     proto_tree_add_item(subtree, hf_lte_rrc_serialNumber_gs, serial_nb_tvb, 0, 2, ENC_BIG_ENDIAN);
515     proto_tree_add_item(subtree, hf_lte_rrc_serialNumber_msg_code, serial_nb_tvb, 0, 2, ENC_BIG_ENDIAN);
516     proto_tree_add_item(subtree, hf_lte_rrc_serialNumber_upd_nb, serial_nb_tvb, 0, 2, ENC_BIG_ENDIAN);
517   }
519 #.FN_BODY SystemInformationBlockType10/warningType VAL_PTR=&warning_type_tvb
520   tvbuff_t *warning_type_tvb = NULL;
521 %(DEFAULT_BODY)s
523 #.FN_FTR SystemInformationBlockType10/warningType
524   if (warning_type_tvb) {
525     proto_tree *subtree;
526     subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_warningType);
527     proto_tree_add_item(subtree, hf_lte_rrc_warningType_value, warning_type_tvb, 0, 2, ENC_BIG_ENDIAN);
528     proto_tree_add_item(subtree, hf_lte_rrc_warningType_emergency_user_alert, warning_type_tvb, 0, 2, ENC_BIG_ENDIAN);
529     proto_tree_add_item(subtree, hf_lte_rrc_warningType_popup, warning_type_tvb, 0, 2, ENC_BIG_ENDIAN);
530   }
532 #.TYPE_ATTR
533 SystemInformationBlockType11/messageIdentifier TYPE=FT_UINT16 DISPLAY=BASE_DEC|BASE_EXT_STRING STRINGS=&lte_rrc_messageIdentifier_vals_ext
535 #.FN_BODY SystemInformationBlockType11/messageIdentifier VAL_PTR=&msg_id_tvb HF_INDEX=-1
536   tvbuff_t *msg_id_tvb = NULL;
537 %(DEFAULT_BODY)s
539 #.FN_FTR SystemInformationBlockType11/messageIdentifier
540   if (msg_id_tvb) {
541     private_data_set_message_identifier(actx, tvb_get_ntohs(msg_id_tvb, 0) << 16);
542     actx->created_item = proto_tree_add_item(tree, hf_index, msg_id_tvb, 0, 2, ENC_BIG_ENDIAN);
543   }
545 #.FN_BODY SystemInformationBlockType11/serialNumber VAL_PTR=&serial_nb_tvb
546   tvbuff_t *serial_nb_tvb = NULL;
547 %(DEFAULT_BODY)s
549 #.FN_FTR SystemInformationBlockType11/serialNumber
550   if (serial_nb_tvb) {
551     proto_tree *subtree;
552     private_data_set_message_identifier(actx,
553                                         private_data_get_message_identifier(actx) | tvb_get_ntohs(serial_nb_tvb, 0));
554     subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_serialNumber);
555     proto_tree_add_item(subtree, hf_lte_rrc_serialNumber_gs, serial_nb_tvb, 0, 2, ENC_BIG_ENDIAN);
556     proto_tree_add_item(subtree, hf_lte_rrc_serialNumber_msg_code, serial_nb_tvb, 0, 2, ENC_BIG_ENDIAN);
557     proto_tree_add_item(subtree, hf_lte_rrc_serialNumber_upd_nb, serial_nb_tvb, 0, 2, ENC_BIG_ENDIAN);
558   }
560 #.FN_BODY SystemInformationBlockType11/dataCodingScheme VAL_PTR=&data_coding_scheme_tvb
561   tvbuff_t *data_coding_scheme_tvb = NULL;
562 %(DEFAULT_BODY)s
564 #.FN_FTR SystemInformationBlockType11/dataCodingScheme
565   if (data_coding_scheme_tvb) {
566     proto_tree *subtree;
567     guint32 dataCodingScheme;
568     subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_dataCodingScheme);
569     dataCodingScheme = dissect_cbs_data_coding_scheme(data_coding_scheme_tvb, actx->pinfo, subtree, 0);
570     g_hash_table_insert(lte_rrc_etws_cmas_dcs_hash, GUINT_TO_POINTER((guint)private_data_get_message_identifier(actx)),
571                         GUINT_TO_POINTER(dataCodingScheme));
572   }
574 #.FN_BODY SystemInformationBlockType11/warningMessageSegment VAL_PTR=&warning_msg_seg_tvb
575   tvbuff_t *warning_msg_seg_tvb = NULL;
576   gpointer p_dcs;
577 %(DEFAULT_BODY)s
579 #.FN_FTR SystemInformationBlockType11/warningMessageSegment
580   p_dcs = g_hash_table_lookup(lte_rrc_etws_cmas_dcs_hash, GUINT_TO_POINTER((guint)private_data_get_message_identifier(actx)));
581   if (warning_msg_seg_tvb && p_dcs) {
582     proto_tree *subtree;
583     subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_warningMessageSegment);
584     dissect_lte_rrc_warningMessageSegment(warning_msg_seg_tvb, subtree, actx->pinfo, GPOINTER_TO_UINT(p_dcs));
585   }
587 #.TYPE_ATTR
588 SystemInformationBlockType12-r9/messageIdentifier-r9 TYPE=FT_UINT16 DISPLAY=BASE_DEC|BASE_EXT_STRING STRINGS=&lte_rrc_messageIdentifier_vals_ext
590 #.FN_BODY SystemInformationBlockType12-r9/messageIdentifier-r9 VAL_PTR=&msg_id_tvb HF_INDEX=-1
591   tvbuff_t *msg_id_tvb = NULL;
592 %(DEFAULT_BODY)s
594 #.FN_FTR SystemInformationBlockType12-r9/messageIdentifier-r9
595   if (msg_id_tvb) {
596     private_data_set_message_identifier(actx, tvb_get_ntohs(msg_id_tvb, 0) << 16);
597     actx->created_item = proto_tree_add_item(tree, hf_index, msg_id_tvb, 0, 2, ENC_BIG_ENDIAN);
598   }
600 #.FN_BODY SystemInformationBlockType12-r9/serialNumber-r9 VAL_PTR=&serial_nb_tvb
601   tvbuff_t *serial_nb_tvb = NULL;
602 %(DEFAULT_BODY)s
604 #.FN_FTR SystemInformationBlockType12-r9/serialNumber-r9
605   if (serial_nb_tvb) {
606     proto_tree *subtree;
607     private_data_set_message_identifier(actx,
608                                         private_data_get_message_identifier(actx) | tvb_get_ntohs(serial_nb_tvb, 0));
609     subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_serialNumber);
610     proto_tree_add_item(subtree, hf_lte_rrc_serialNumber_gs, serial_nb_tvb, 0, 2, ENC_BIG_ENDIAN);
611     proto_tree_add_item(subtree, hf_lte_rrc_serialNumber_msg_code, serial_nb_tvb, 0, 2, ENC_BIG_ENDIAN);
612     proto_tree_add_item(subtree, hf_lte_rrc_serialNumber_upd_nb, serial_nb_tvb, 0, 2, ENC_BIG_ENDIAN);
613   }
615 #.FN_BODY SystemInformationBlockType12-r9/dataCodingScheme-r9 VAL_PTR=&data_coding_scheme_tvb
616   tvbuff_t *data_coding_scheme_tvb = NULL;
617 %(DEFAULT_BODY)s
619 #.FN_FTR SystemInformationBlockType12-r9/dataCodingScheme-r9
620   if (data_coding_scheme_tvb) {
621     proto_tree *subtree;
622     guint32 dataCodingScheme;
623     subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_dataCodingScheme);
624     dataCodingScheme = dissect_cbs_data_coding_scheme(data_coding_scheme_tvb, actx->pinfo, subtree, 0);
625     g_hash_table_insert(lte_rrc_etws_cmas_dcs_hash, GUINT_TO_POINTER((guint)private_data_get_message_identifier(actx)),
626                         GUINT_TO_POINTER(dataCodingScheme));
627   }
629 #.FN_BODY SystemInformationBlockType12-r9/warningMessageSegment-r9 VAL_PTR=&warning_msg_seg_tvb
630   tvbuff_t *warning_msg_seg_tvb = NULL;
631   gpointer p_dcs;
632 %(DEFAULT_BODY)s
634 #.FN_FTR SystemInformationBlockType12-r9/warningMessageSegment-r9
635   p_dcs = g_hash_table_lookup(lte_rrc_etws_cmas_dcs_hash, GUINT_TO_POINTER((guint)private_data_get_message_identifier(actx)));
636   if (warning_msg_seg_tvb && p_dcs) {
637     proto_tree *subtree;
638     subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_warningMessageSegment);
639     dissect_lte_rrc_warningMessageSegment(warning_msg_seg_tvb, subtree, actx->pinfo, GPOINTER_TO_UINT(p_dcs));
640   }
642 #.TYPE_ATTR
643 SystemInformationBlockType16-r11/timeInfo-r11/dayLightSavingTime-r11 TYPE=FT_UINT8 DISPLAY=BASE_DEC STRINGS=VALS(lte_rrc_daylightSavingTime_vals)
645 #.FN_BODY SystemInformationBlockType16-r11/timeInfo-r11/dayLightSavingTime-r11 VAL_PTR=&daylight_saving_time_tvb HF_INDEX=-1
646   tvbuff_t *daylight_saving_time_tvb = NULL;
647 %(DEFAULT_BODY)s
649 #.FN_FTR SystemInformationBlockType16-r11/timeInfo-r11/dayLightSavingTime-r11
650   if (daylight_saving_time_tvb) {
651     actx->created_item = proto_tree_add_uint(tree, hf_index, daylight_saving_time_tvb, 0, 1, tvb_get_bits8(daylight_saving_time_tvb, 0, 2));
652   }
654 #.FN_BODY SystemInformationBlockType16-r11/timeInfo-r11/leapSeconds-r11
655 %(DEFAULT_BODY)s
656   proto_item_append_text(actx->created_item, "s");
658 #.TYPE_ATTR
659 SystemInformationBlockType16-r11/timeInfo-r11/localTimeOffset-r11 DISPLAY=BASE_CUSTOM STRINGS=&lte_rrc_localTimeOffset_fmt
661 #.TYPE_ATTR
662 SystemInformationBlockType16-r11/timeInfo-r11/timeInfoUTC-r11 TYPE = FT_UINT64
664 #.FN_BODY SystemInformationBlockType16-r11/timeInfo-r11/timeInfoUTC-r11 VAL_PTR=&timeInfo FN_VARIANT = _64b
665   guint64 timeInfo;
666   proto_tree *subtree;
667   nstime_t ts;
668   guint32 old_offset = offset;
669 %(DEFAULT_BODY)s
671 #.FN_FTR SystemInformationBlockType16-r11/timeInfo-r11/timeInfoUTC-r11
672   subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_timeInfo);
673   ts.secs = (time_t)(timeInfo/100)-2208988800U; /* epoch is 00:00:00 (midnight) UTC on 1900-01-01 */ 
674   ts.nsecs = (int)(timeInfo%100)*10000000;
675   proto_tree_add_text(subtree, tvb, old_offset>>3, (old_offset&0x07) ? 6 : 5,
676                       "UTC   time: %s", abs_time_to_str(&ts, ABSOLUTE_TIME_UTC, FALSE));
677   proto_tree_add_text(subtree, tvb, old_offset>>3, (old_offset&0x07) ? 6 : 5,
678                       "Local time: %s", abs_time_to_str(&ts, ABSOLUTE_TIME_LOCAL, TRUE));
680 #.FN_BODY RRCConnectionReject-r8-IEs/waitTime
681 %(DEFAULT_BODY)s
682   proto_item_append_text(actx->created_item, "s");
684 #.FN_BODY RRCConnectionReject-v1020-IEs/extendedWaitTime-r10
685 %(DEFAULT_BODY)s
686   proto_item_append_text(actx->created_item, "s");
688 #.FN_BODY RRCConnectionRelease-v1020-IEs/extendedWaitTime-r10
689 %(DEFAULT_BODY)s
690   proto_item_append_text(actx->created_item, "s");
692 #.TYPE_ATTR
693 SystemInformationBlockType1/cellSelectionInfo/q-RxLevMinOffset STRINGS=VALS(lte_rrc_q_RxLevMinOffset_vals)
695 #.FN_BODY CellSelectionInfo-v920/q-QualMinOffset-r9
696 %(DEFAULT_BODY)s
697   proto_item_append_text(actx->created_item, "dB");
699 #.TYPE_ATTR
700 RLF-Report-r9/eag_1/timeConnFailure-r10 DISPLAY=BASE_CUSTOM STRINGS=&lte_rrc_timeConnFailure_r10_fmt
702 #.FN_BODY LogMeasInfo-r10/relativeTimeStamp-r10
703 %(DEFAULT_BODY)s
704   proto_item_append_text(actx->created_item, "s");
706 #.FN_BODY TimeSinceFailure-r11
707 %(DEFAULT_BODY)s
708   proto_item_append_text(actx->created_item, "s");
710 #.TYPE_ATTR
711 CarrierFreqUTRA-FDD/q-RxLevMin DISPLAY=BASE_DEC|BASE_EXT_STRING STRINGS=&lte_rrc_utra_q_RxLevMin_vals_ext
713 #.TYPE_ATTR
714 CarrierFreqUTRA-TDD/q-RxLevMin DISPLAY=BASE_DEC|BASE_EXT_STRING STRINGS=&lte_rrc_utra_q_RxLevMin_vals_ext
716 #.FN_BODY CarrierFreqUTRA-FDD/p-MaxUTRA
717 %(DEFAULT_BODY)s
718   proto_item_append_text(actx->created_item, "dBm");
720 #.FN_BODY CarrierFreqUTRA-TDD/p-MaxUTRA
721 %(DEFAULT_BODY)s
722   proto_item_append_text(actx->created_item, "dBm");
724 #.FN_BODY CarrierFreqUTRA-FDD/q-QualMin
725 %(DEFAULT_BODY)s
726   proto_item_append_text(actx->created_item, "dB");
728 #.TYPE_ATTR
729 CarrierFreqsInfoGERAN/commonInfo/q-RxLevMin DISPLAY=BASE_DEC|BASE_EXT_STRING STRINGS=&lte_rrc_geran_q_RxLevMin_vals_ext
731 #.FN_BODY CarrierFreqsInfoGERAN/commonInfo/p-MaxGERAN
732 %(DEFAULT_BODY)s
733   proto_item_append_text(actx->created_item, "dBm");
735 #.TYPE_ATTR
736 CQI-ReportConfig/nomPDSCH-RS-EPRE-Offset STRINGS=VALS(lte_rrc_nomPDSCH_RS_EPRE_Offset_vals)
738 #.TYPE_ATTR
739 CQI-ReportConfig-r10/nomPDSCH-RS-EPRE-Offset STRINGS=VALS(lte_rrc_nomPDSCH_RS_EPRE_Offset_vals)
741 #.TYPE_ATTR
742 CQI-ReportConfigSCell-r10/nomPDSCH-RS-EPRE-Offset-r10 STRINGS=VALS(lte_rrc_nomPDSCH_RS_EPRE_Offset_vals)
744 #.FN_BODY MAC-MainConfig
745   /* Accumulate values in drx_config while dissecting DRX config.
746      Do this here rather than down in DRX-Config so that we will see
747      fields overwritten in the R11 extension */
748   drx_config_t *drx_config = private_data_get_drx_config(actx);
749 %(DEFAULT_BODY)s
750   if (drx_config->configured) {
751     mac_lte_info* p_mac_lte_info;
753     /* Verify that config is valid */
754     drx_check_config_sane(drx_config, actx);
756     /* Look for UE identifier */
757     p_mac_lte_info = (mac_lte_info *)p_get_proto_data(actx->pinfo->fd, proto_mac_lte, 0);
758     if (p_mac_lte_info != NULL) {
759       /* If found, configure MAC with DRX config */
760       set_mac_lte_drx_config(p_mac_lte_info->ueid, drx_config, actx->pinfo);
761     }
763     /* Clear out state */
764     drx_config->configured = FALSE;
765   }
768 #.FN_BODY MAC-MainConfig/eag_1/sr-ProhibitTimer-r9 VAL_PTR=&timer
769   guint32 timer;
770 %(DEFAULT_BODY)s
772 #.FN_FTR MAC-MainConfig/eag_1/sr-ProhibitTimer-r9
773   proto_item_append_text(actx->created_item, " SR period%s", (timer > 1) ? "s" : "");
775 #.FN_BODY PDSCH-ConfigCommon/referenceSignalPower
776 %(DEFAULT_BODY)s
777   proto_item_append_text(actx->created_item, "dBm");
779 #.FN_BODY P-Max
780 %(DEFAULT_BODY)s
781   proto_item_append_text(actx->created_item, "dBm");
783 #.FN_BODY SPS-ConfigUL/setup/p0-Persistent/p0-NominalPUSCH-Persistent
784 %(DEFAULT_BODY)s
785   proto_item_append_text(actx->created_item, "dBm");
787 #.FN_BODY SPS-ConfigUL/setup/p0-Persistent/p0-UE-PUSCH-Persistent
788 %(DEFAULT_BODY)s
789   proto_item_append_text(actx->created_item, "dB");
791 #.TYPE_ATTR
792 UplinkPowerControlCommon/deltaPreambleMsg3 STRINGS=VALS(lte_rrc_deltaPreambleMsg3_vals)
794 #.FN_BODY UplinkPowerControlCommon/p0-NominalPUSCH
795 %(DEFAULT_BODY)s
796   proto_item_append_text(actx->created_item, "dBm");
798 #.TYPE_ATTR
799 UplinkPowerControlCommonSCell-v11x0/deltaPreambleMsg3-r11 STRINGS=VALS(lte_rrc_deltaPreambleMsg3_vals)
801 #.FN_BODY UplinkPowerControlCommon/p0-NominalPUCCH
802 %(DEFAULT_BODY)s
803   proto_item_append_text(actx->created_item, "dBm");
805 #.FN_BODY UplinkPowerControlCommonSCell-r10/p0-NominalPUSCH-r10
806 %(DEFAULT_BODY)s
807   proto_item_append_text(actx->created_item, "dBm");
809 #.FN_BODY UplinkPowerControlDedicated/p0-UE-PUSCH
810 %(DEFAULT_BODY)s
811   proto_item_append_text(actx->created_item, "dB");
813 #.FN_BODY UplinkPowerControlDedicated/p0-UE-PUCCH
814 %(DEFAULT_BODY)s
815   proto_item_append_text(actx->created_item, "dB");
817 #.FN_BODY UplinkPowerControlDedicatedSCell-r10/p0-UE-PUSCH-r10
818 %(DEFAULT_BODY)s
819   proto_item_append_text(actx->created_item, "dB");
821 #.FN_BODY Q-QualMin-r9
822 %(DEFAULT_BODY)s
823   proto_item_append_text(actx->created_item, "dB");
825 #.TYPE_ATTR
826 Q-RxLevMin DISPLAY=BASE_DEC|BASE_EXT_STRING STRINGS=&lte_rrc_q_RxLevMin_vals_ext
828 #.FN_BODY Q-OffsetRangeInterRAT
829 %(DEFAULT_BODY)s
830   proto_item_append_text(actx->created_item, "dB");
832 #.TYPE_ATTR
833 ReselectionThreshold DISPLAY=BASE_DEC|BASE_EXT_STRING STRINGS=&lte_rrc_ReselectionThreshold_vals_ext
835 #.FN_BODY ReselectionThresholdQ-r9
836 %(DEFAULT_BODY)s
837   proto_item_append_text(actx->created_item, "dB");
839 #.FN_BODY T-Reselection
840 %(DEFAULT_BODY)s
841   proto_item_append_text(actx->created_item, "s");
843 #.TYPE_ATTR
844 Hysteresis DISPLAY=BASE_DEC|BASE_EXT_STRING STRINGS=&lte_rrc_Hysteresis_vals_ext
846 #.TYPE_RENAME
847 MeasConfig/s-Measure S_Measure
849 #.TYPE_ATTR
850 MeasConfig/s-Measure DISPLAY=BASE_DEC|BASE_EXT_STRING STRINGS=&lte_rrc_s_Measure_vals_ext
852 #.TYPE_ATTR
853 MeasResultGERAN/measResult/rssi DISPLAY=BASE_DEC|BASE_EXT_STRING STRINGS=&gsm_a_rr_rxlev_vals_ext
855 #.TYPE_ATTR
856 MeasResultUTRA/measResult/utra-EcN0 DISPLAY=BASE_DEC|BASE_EXT_STRING STRINGS=&lte_rrc_utra_EcN0_vals_ext
858 #.TYPE_ATTR
859 MeasResultUTRA/measResult/utra-RSCP DISPLAY=BASE_DEC|BASE_EXT_STRING STRINGS=&lte_rrc_utra_RSCP_vals_ext
861 #.TYPE_ATTR
862 ReportConfigEUTRA/triggerType/event/eventId/eventA3/a3-Offset DISPLAY=BASE_DEC|BASE_EXT_STRING STRINGS=&lte_rrc_a3_a6_Offset_vals_ext
864 #.TYPE_ATTR
865 ReportConfigEUTRA/triggerType/event/eventId/eventA6-r10/a6-Offset-r10 DISPLAY=BASE_DEC|BASE_EXT_STRING STRINGS=&lte_rrc_a3_a6_Offset_vals_ext
867 #.TYPE_RENAME
868 ThresholdEUTRA/threshold-RSRP Threshold_RSRP_Range
870 #.TYPE_ATTR
871 ThresholdEUTRA/threshold-RSRP DISPLAY=BASE_DEC|BASE_EXT_STRING STRINGS=&lte_rrc_threshold_RSRP_vals_ext
873 #.TYPE_RENAME
874 ThresholdEUTRA/threshold-RSRQ Threshold_RSRQ_Range
876 #.TYPE_ATTR
877 ThresholdEUTRA/threshold-RSRQ DISPLAY=BASE_DEC|BASE_EXT_STRING STRINGS=&lte_rrc_threshold_RSRQ_vals_ext
879 #.TYPE_ATTR
880 ThresholdGERAN DISPLAY=BASE_DEC|BASE_EXT_STRING STRINGS=&lte_rrc_thresholdGERAN_vals_ext
882 #.TYPE_RENAME
883 ThresholdUTRA/utra-RSCP Threshold_utra_RSRP
885 #.TYPE_ATTR
886 ThresholdUTRA/utra-RSCP DISPLAY=BASE_DEC|BASE_EXT_STRING STRINGS=&lte_rrc_thresholdUTRA_RSCP_vals_ext
888 #.TYPE_RENAME
889 ThresholdUTRA/utra-EcN0 Threshold_utra_EcN0
891 #.TYPE_ATTR
892 ThresholdUTRA/utra-EcN0 DISPLAY=BASE_DEC|BASE_EXT_STRING STRINGS=&lte_rrc_thresholdUTRA_EcN0_vals_ext
894 #.TYPE_ATTR
895 RSRP-Range DISPLAY=BASE_DEC|BASE_EXT_STRING STRINGS=&lte_rrc_RSRP_Range_vals_ext
897 #.TYPE_ATTR
898 RSRQ-Range DISPLAY=BASE_DEC|BASE_EXT_STRING STRINGS=&lte_rrc_RSRQ_Range_vals_ext
900 #.FN_BODY SoundingRS-UL-ConfigDedicated/setup/duration
901   actx->created_item = proto_tree_add_bits_item(tree, hf_index, tvb, offset, 1, ENC_BIG_ENDIAN);
902   offset++;
904 #.TYPE_ATTR
905 SoundingRS-UL-ConfigDedicated/setup/duration STRINGS=TFS(&lte_rrc_duration_val)
907 #.FN_HDR MasterInformationBlock
909   col_append_str(actx->pinfo->cinfo, COL_INFO, "MasterInformationBlock");
911 #.FN_HDR SystemInformation
913   col_append_str(actx->pinfo->cinfo, COL_INFO, "SystemInformation [ ");
915 #.FN_BODY SystemInformation
917 %(DEFAULT_BODY)s
918   col_append_str(actx->pinfo->cinfo, COL_INFO, "]");
920 #.FN_HDR SystemInformationBlockType1
922   col_append_str(actx->pinfo->cinfo, COL_INFO, "SystemInformationBlockType1");
924 #.FN_HDR SystemInformationBlockType2
926   col_append_str(actx->pinfo->cinfo, COL_INFO, "SIB2 ");
928 #.FN_HDR SystemInformationBlockType3
930   col_append_str(actx->pinfo->cinfo, COL_INFO, "SIB3 ");
932 #.FN_HDR SystemInformationBlockType4
934   col_append_str(actx->pinfo->cinfo, COL_INFO, "SIB4 ");
936 #.FN_HDR SystemInformationBlockType5
938   col_append_str(actx->pinfo->cinfo, COL_INFO, "SIB5 ");
940 #.FN_HDR SystemInformationBlockType6
942   col_append_str(actx->pinfo->cinfo, COL_INFO, "SIB6 ");
944 #.FN_HDR SystemInformationBlockType7
946   col_append_str(actx->pinfo->cinfo, COL_INFO, "SIB7 ");
948 #.FN_HDR SystemInformationBlockType8
950   col_append_str(actx->pinfo->cinfo, COL_INFO, "SIB8 ");
952 #.FN_HDR SystemInformationBlockType9
954   col_append_str(actx->pinfo->cinfo, COL_INFO, "SIB9 ");
956 #.FN_HDR SystemInformationBlockType10
958   col_append_str(actx->pinfo->cinfo, COL_INFO, "SIB10 ");
960 #.FN_HDR SystemInformationBlockType11
962   col_append_str(actx->pinfo->cinfo, COL_INFO, "SIB11 ");
964 #.FN_HDR SystemInformationBlockType12-r9
966   col_append_str(actx->pinfo->cinfo, COL_INFO, "SIB12 ");
968 #.FN_HDR SystemInformationBlockType13-r9
970   col_append_str(actx->pinfo->cinfo, COL_INFO, "SIB13 ");
972 #.FN_HDR SystemInformationBlockType14-r11
974   col_append_str(actx->pinfo->cinfo, COL_INFO, "SIB14 ");
976 #.FN_HDR SystemInformationBlockType15-r11
978   col_append_str(actx->pinfo->cinfo, COL_INFO, "SIB15 ");
980 #.FN_HDR SystemInformationBlockType16-r11
982   col_append_str(actx->pinfo->cinfo, COL_INFO, "SIB16 ");
984 #.FN_HDR MBSFNAreaConfiguration-r9
986   col_append_str(actx->pinfo->cinfo, COL_INFO, "MBSFNAreaConfiguration-r9");
988 #.FN_HDR MBMSCountingRequest-r10
990   col_append_str(actx->pinfo->cinfo, COL_INFO, "MBMSCountingRequest-r10");
992 #.FN_HDR Paging
994   col_append_str(actx->pinfo->cinfo, COL_INFO, "Paging");
996 #.FN_HDR RRCConnectionReestablishment
998   col_append_str(actx->pinfo->cinfo, COL_INFO, "RRCConnectionReestablishment");
1000 #.FN_HDR RRCConnectionReestablishmentReject
1002   col_append_str(actx->pinfo->cinfo, COL_INFO, "RRCConnectionReestablishmentReject");
1004 #.FN_HDR RRCConnectionReject
1006   col_append_str(actx->pinfo->cinfo, COL_INFO, "RRCConnectionReject");
1008 #.FN_HDR RRCConnectionSetup
1009   mac_lte_info* p_mac_lte_info;
1011   col_append_str(actx->pinfo->cinfo, COL_INFO, "RRCConnectionSetup");
1013 #.FN_HDR CSFBParametersResponseCDMA2000
1015   col_append_str(actx->pinfo->cinfo, COL_INFO, "CSFBParametersResponseCDMA2000");
1017 #.FN_HDR DLInformationTransfer
1019   col_append_str(actx->pinfo->cinfo, COL_INFO, "DLInformationTransfer");
1021 #.FN_HDR HandoverFromEUTRAPreparationRequest
1023   col_append_str(actx->pinfo->cinfo, COL_INFO, "HandoverFromEUTRAPreparationRequest");
1025 #.FN_HDR MobilityFromEUTRACommand
1027   col_append_str(actx->pinfo->cinfo, COL_INFO, "MobilityFromEUTRACommand");
1029 #.FN_HDR RRCConnectionReconfiguration
1031   col_append_str(actx->pinfo->cinfo, COL_INFO, "RRCConnectionReconfiguration");
1033 #.FN_HDR RRCConnectionRelease
1035   col_append_str(actx->pinfo->cinfo, COL_INFO, "RRCConnectionRelease");
1037 #.FN_HDR SecurityModeCommand
1039   col_append_str(actx->pinfo->cinfo, COL_INFO, "SecurityModeCommand");
1041 #.FN_HDR UECapabilityEnquiry
1043   col_append_str(actx->pinfo->cinfo, COL_INFO, "UECapabilityEnquiry");
1045 #.FN_HDR CounterCheck
1047   col_append_str(actx->pinfo->cinfo, COL_INFO, "CounterCheck");
1049 #.FN_HDR UEInformationRequest-r9
1051   col_append_str(actx->pinfo->cinfo, COL_INFO, "UEInformationRequest-r9");
1053 #.FN_HDR LoggedMeasurementConfiguration-r10
1055   col_append_str(actx->pinfo->cinfo, COL_INFO, "LoggedMeasurementConfiguration-r10");
1057 #.FN_HDR RNReconfiguration-r10
1059   col_append_str(actx->pinfo->cinfo, COL_INFO, "RNReconfiguration-r10");
1061 #.FN_HDR RRCConnectionReestablishmentRequest
1063   col_append_str(actx->pinfo->cinfo, COL_INFO, "RRCConnectionReestablishmentRequest");
1065 #.FN_HDR RRCConnectionRequest
1067   col_append_str(actx->pinfo->cinfo, COL_INFO, "RRCConnectionRequest");
1069 #.FN_HDR CSFBParametersRequestCDMA2000
1071   col_append_str(actx->pinfo->cinfo, COL_INFO, "CSFBParametersRequestCDMA2000");
1073 #.FN_HDR MeasurementReport
1075   col_append_str(actx->pinfo->cinfo, COL_INFO, "MeasurementReport");
1077 #.FN_HDR RRCConnectionReconfigurationComplete
1079   col_append_str(actx->pinfo->cinfo, COL_INFO, "RRCConnectionReconfigurationComplete");
1081 #.FN_HDR RRCConnectionReestablishmentComplete
1083   col_append_str(actx->pinfo->cinfo, COL_INFO, "RRCConnectionReestablishmentComplete");
1085 #.FN_HDR RRCConnectionSetupComplete
1087   col_append_str(actx->pinfo->cinfo, COL_INFO, "RRCConnectionSetupComplete");
1089 #.FN_HDR SecurityModeComplete
1091   col_append_str(actx->pinfo->cinfo, COL_INFO, "SecurityModeComplete");
1093 #.FN_HDR SecurityModeFailure
1095   col_append_str(actx->pinfo->cinfo, COL_INFO, "SecurityModeFailure");
1097 #.FN_HDR UECapabilityInformation
1099   col_append_str(actx->pinfo->cinfo, COL_INFO, "UECapabilityInformation");
1101 #.FN_HDR ULHandoverPreparationTransfer
1103   col_append_str(actx->pinfo->cinfo, COL_INFO, "ULHandoverPreparationTransfer");
1105 #.FN_HDR ULInformationTransfer
1107   col_append_str(actx->pinfo->cinfo, COL_INFO, "ULInformationTransfer");
1109 #.FN_HDR CounterCheckResponse
1111   col_append_str(actx->pinfo->cinfo, COL_INFO, "CounterCheckResponse");
1113 #.FN_HDR UEInformationResponse-r9
1115   col_append_str(actx->pinfo->cinfo, COL_INFO, "UEInformationResponse-r9");
1117 #.FN_HDR ProximityIndication-r9
1119   col_append_str(actx->pinfo->cinfo, COL_INFO, "ProximityIndication-r9");
1121 #.FN_HDR RNReconfigurationComplete-r10
1123   col_append_str(actx->pinfo->cinfo, COL_INFO, "RNReconfigurationComplete-r10");
1125 #.FN_HDR MBMSCountingResponse-r10
1127   col_append_str(actx->pinfo->cinfo, COL_INFO, "MBMSCountingResponse-r10");
1129 #.FN_HDR InterFreqRSTDMeasurementIndication-r10
1131   col_append_str(actx->pinfo->cinfo, COL_INFO, "InterFreqRSTDMeasurementIndication-r10");
1133 #.FN_HDR UEAssistanceInformation-r11
1135   col_append_str(actx->pinfo->cinfo, COL_INFO, "UEAssistanceInformation-r11");
1137 #.FN_HDR InDeviceCoexIndication-r11
1139   col_append_str(actx->pinfo->cinfo, COL_INFO, "InDeviceCoexIndication-r11");
1141 #.FN_HDR MBMSInterestIndication-r11
1143   col_append_str(actx->pinfo->cinfo, COL_INFO, "MBMSInterestIndication-r11");
1144   
1145 #.FN_BODY Paging/systemInfoModification
1146 %(DEFAULT_BODY)s
1147   col_append_str(actx->pinfo->cinfo, COL_INFO, " (systemInfoModification)");
1148   expert_add_info(actx->pinfo, actx->created_item, &ei_lte_rrc_sibs_changing);
1150 #.FN_BODY Paging/pagingRecordList
1151   /* Number of items is (last 3 bits of first byte and first bit of second) + 1 */
1152   guint16 number_of_records = ((tvb_get_ntohs(tvb, 0) >> 7) & 0x0f) + 1;
1153 %(DEFAULT_BODY)s
1154   col_append_fstr(actx->pinfo->cinfo, COL_INFO, " (%%u PagingRecords)", number_of_records);
1156 #.FN_BODY MasterInformationBlock/systemFrameNumber VAL_PTR=&value_tvb
1157   tvbuff_t *value_tvb;
1158   guint32 sfn;
1159 %(DEFAULT_BODY)s
1160   /* Show SFN in info column */
1161   sfn = tvb_get_guint8(value_tvb, 0);
1162   col_append_fstr(actx->pinfo->cinfo, COL_INFO, " (SFN=%%u)", sfn);
1163   
1164 #.FN_BODY SystemInformationBlockType1/systemInfoValueTag VAL_PTR=&value
1165   guint32 value;
1166 %(DEFAULT_BODY)s
1167   /* Track whether systemInfoValue has changed since last seen, indicating new SI config
1168      TODO: add link back to previous config and (if known) time since previous config
1169      was first seen */
1170   if (!actx->pinfo->fd->flags.visited) {
1171     if (system_info_value_current_set && (value != system_info_value_current)) {
1172       /* Add entry to the hash table.  Offset by one to distinguish 0 from lookup failure */
1173       g_hash_table_insert(lte_rrc_system_info_value_changed_hash, GUINT_TO_POINTER(actx->pinfo->fd->num),
1174                           GUINT_TO_POINTER(system_info_value_current+1));
1175     }
1176     system_info_value_current_set = TRUE;
1177     system_info_value_current = value;
1178   }
1179   else {
1180     /* Look up indication of changed info value from hash table */
1181     gpointer p_previous = g_hash_table_lookup(lte_rrc_system_info_value_changed_hash, GUINT_TO_POINTER(actx->pinfo->fd->num));
1182     if (p_previous != NULL) {
1183       /* Subtract one from stored result to get previous value */
1184       guint32 previous = GPOINTER_TO_UINT(p_previous) - 1;
1185       expert_add_info_format(actx->pinfo, actx->created_item, &ei_lte_rrc_si_info_value_changed,
1186                              "SI Info Value changed (now %%u, was %%u)", value, previous);
1187     }
1188   }
1190 #.FN_BODY Paging/etws-Indication
1191 %(DEFAULT_BODY)s
1192   col_append_str(actx->pinfo->cinfo, COL_INFO, " (ETWS)");
1193   expert_add_info(actx->pinfo, actx->created_item, &ei_lte_rrc_earthquake_warning_sys);
1195 #.FN_BODY Paging-v920-IEs/cmas-Indication-r9
1196 %(DEFAULT_BODY)s
1197   col_append_str(actx->pinfo->cinfo, COL_INFO, " (CMAS)");
1198   expert_add_info(actx->pinfo, actx->created_item, &ei_lte_rrc_commercial_mobile_alert_sys);
1200 #.FN_BODY DRB-ToAddMod
1201   struct mac_lte_info  *p_mac_lte_info;
1202   /* Get the struct and clear it out */
1203   drb_mapping_t *drb_mapping = private_data_get_drb_mapping(actx);
1204   memset(drb_mapping, 0, sizeof(*drb_mapping));
1205 %(DEFAULT_BODY)s
1206   /* Need UE identifier */
1207   p_mac_lte_info = (mac_lte_info *)p_get_proto_data(actx->pinfo->fd, proto_mac_lte, 0);
1208   if (p_mac_lte_info == NULL) {
1209     return offset;
1210   }
1211   else {
1212     drb_mapping->ueid = p_mac_lte_info->ueid;
1213   }
1215   /* Tell MAC about this mapping */
1216   set_mac_lte_channel_mapping(drb_mapping);
1218   /* Also tell RLC how many PDCP sequence number bits */
1219   if (drb_mapping->pdcp_sn_size_present) {
1220     set_rlc_lte_drb_pdcp_seqnum_length(drb_mapping->ueid,
1221                                        drb_mapping->drbid,
1222                                        drb_mapping->pdcp_sn_size);
1223   }
1225   /* Clear out the struct again */
1226   memset(&drb_mapping, 0, sizeof(drb_mapping));
1229 #.FN_BODY DRB-Identity VAL_PTR=&value
1230   guint32 value;
1231   drb_mapping_t *mapping = private_data_get_drb_mapping(actx);
1232 %(DEFAULT_BODY)s
1233   if (mapping != NULL) {
1234     mapping->drbid = (guint8)value;
1235   }
1237 #.FN_BODY RLC-Config VAL_PTR=&value
1238   guint32 value;
1239   drb_mapping_t *mapping = private_data_get_drb_mapping(actx);
1240 %(DEFAULT_BODY)s
1241   if (mapping != NULL) {
1242     mapping->rlcMode = (value==0) ? RLC_AM_MODE : RLC_UM_MODE;
1243     mapping->rlcMode_present = TRUE;
1245     if (mapping->rlcMode == RLC_AM_MODE) {
1246         mapping->pdcp_sn_size = 12;
1247         mapping->pdcp_sn_size_present = TRUE;
1248     }
1249   }
1251 #.FN_BODY DRB-ToAddMod/logicalChannelIdentity VAL_PTR=&value
1252   guint32 value;
1253   drb_mapping_t *mapping = private_data_get_drb_mapping(actx);
1254 %(DEFAULT_BODY)s
1255   if (mapping != NULL) {
1256     mapping->lcid = (guint8)value;
1257     mapping->lcid_present = TRUE;
1258   }
1260 #.FN_BODY SN-FieldLength VAL_PTR=&value
1261   guint32 value;
1262   drb_mapping_t *mapping = private_data_get_drb_mapping(actx);
1263 %(DEFAULT_BODY)s
1264   if (mapping != NULL) {
1265     mapping->um_sn_length = (value==0) ? 5 : 10;
1266     mapping->um_sn_length_present = TRUE;
1267   }
1269 #.FN_BODY LogicalChannelConfig/ul-SpecificParameters/priority VAL_PTR=&value
1270   guint32 value;
1271   drb_mapping_t *mapping = private_data_get_drb_mapping(actx);
1272 %(DEFAULT_BODY)s
1273   if (mapping != NULL) {
1274     mapping->ul_priority = value;
1275     mapping->ul_priority_present = TRUE;
1276   }
1278 #.FN_BODY PDCP-Config/rlc-UM/pdcp-SN-Size VAL_PTR=&value
1279   guint32 value;
1280   drb_mapping_t *mapping = private_data_get_drb_mapping(actx);
1281 %(DEFAULT_BODY)s
1282   if (mapping != NULL) {
1283     mapping->pdcp_sn_size = (value==0) ? 7 : 12;
1284     mapping->pdcp_sn_size_present = TRUE;
1285   }
1287 #.FN_BODY PDCP-Config/eag_2/pdcp-SN-Size-v1130
1288   drb_mapping_t *mapping = private_data_get_drb_mapping(actx);
1289 %(DEFAULT_BODY)s
1290   if (mapping != NULL) {
1291     mapping->pdcp_sn_size = 15;
1292     mapping->pdcp_sn_size_present = TRUE;
1293   }
1296 #.FN_BODY RACH-ConfigCommon/preambleInfo
1297 %(DEFAULT_BODY)s
1298   /* Initialise to invalid value */
1299   private_data_set_ra_preambles(actx, 0);
1301 #.FN_BODY RACH-ConfigCommon/preambleInfo/numberOfRA-Preambles VAL_PTR=&value
1302   guint value;
1303 %(DEFAULT_BODY)s
1304   /* This is mandatory, store value */
1305   private_data_set_ra_preambles(actx, value);
1307 #.FN_BODY RACH-ConfigCommon/preambleInfo/preamblesGroupAConfig/sizeOfRA-PreamblesGroupA VAL_PTR=&value
1308   guint ra_value, value;
1309 %(DEFAULT_BODY)s
1310   /* Retrived stored value for RA (both Group A & Group B) */
1311   ra_value = private_data_get_ra_preambles(actx);
1312   if (value > ra_value) {
1313     /* Something is wrong if A has more RAPIDs than A & B combined! */
1314     expert_add_info_format(actx->pinfo, actx->created_item, &ei_lte_rrc_too_many_group_a_rapids,
1315                                 "Group A size (%%s) > Total RA size (%%s)!",
1316                                 val_to_str_const(value, lte_rrc_T_sizeOfRA_PreamblesGroupA_vals, "Unknown"),
1317                                 val_to_str_const(ra_value, lte_rrc_T_numberOfRA_Preambles_vals, "Unknown"));
1319   }
1320   /* Reset again */
1321   private_data_set_ra_preambles(actx, 0);
1324 #.FN_BODY DRX-Config/setup/onDurationTimer VAL_PTR=&value
1325   guint32 value;
1326   drx_config_t* config = private_data_get_drx_config(actx);
1327 %(DEFAULT_BODY)s
1328   /* Set 'configured' state so that config can be examine once complete! */
1329   config->configured = TRUE;
1330   config->onDurationTimer = drx_lookup_onDurationTimer(value);
1332 #.FN_BODY DRX-Config/setup/drx-InactivityTimer VAL_PTR=&value
1333   guint32 value;
1334   drx_config_t* config = private_data_get_drx_config(actx);
1335 %(DEFAULT_BODY)s
1336   config->inactivityTimer = drx_lookup_inactivityTimer(value);
1338 #.FN_BODY DRX-Config/setup/drx-RetransmissionTimer VAL_PTR=&value
1339   guint32 value;
1340   drx_config_t* config = private_data_get_drx_config(actx);
1341 %(DEFAULT_BODY)s
1342   config->retransmissionTimer = drx_lookup_retransmissionTimer(value);
1344 #.FN_BODY DRX-Config/setup/longDRX-CycleStartOffset VAL_PTR=&value
1345   guint32 value;
1346   drx_config_t* config = private_data_get_drx_config(actx);
1347 %(DEFAULT_BODY)s
1348   config->longCycle = drx_lookup_longCycle(value);
1350 #.FN_BODY DRX-Config/setup/longDRX-CycleStartOffset/sf10 VAL_PTR=&value
1351   guint32 value;
1352   drx_config_t* config = private_data_get_drx_config(actx);
1353 %(DEFAULT_BODY)s
1354   config->cycleOffset = value;
1356 #.FN_BODY DRX-Config/setup/longDRX-CycleStartOffset/sf20 VAL_PTR=&value
1357   guint32 value;
1358   drx_config_t* config = private_data_get_drx_config(actx);
1359 %(DEFAULT_BODY)s
1360   config->cycleOffset = value;
1362 #.FN_BODY DRX-Config/setup/longDRX-CycleStartOffset/sf32 VAL_PTR=&value
1363   guint32 value;
1364   drx_config_t* config = private_data_get_drx_config(actx);
1365 %(DEFAULT_BODY)s
1366   config->cycleOffset = value;
1368 #.FN_BODY DRX-Config/setup/longDRX-CycleStartOffset/sf40 VAL_PTR=&value
1369   guint32 value;
1370   drx_config_t* config = private_data_get_drx_config(actx);
1371 %(DEFAULT_BODY)s
1372   config->cycleOffset = value;
1374 #.FN_BODY DRX-Config/setup/longDRX-CycleStartOffset/sf64 VAL_PTR=&value
1375   guint32 value;
1376   drx_config_t* config = private_data_get_drx_config(actx);
1377 %(DEFAULT_BODY)s
1378   config->cycleOffset = value;
1380 #.FN_BODY DRX-Config/setup/longDRX-CycleStartOffset/sf80 VAL_PTR=&value
1381   guint32 value;
1382   drx_config_t* config = private_data_get_drx_config(actx);
1383 %(DEFAULT_BODY)s
1384   config->cycleOffset = value;
1386 #.FN_BODY DRX-Config/setup/longDRX-CycleStartOffset/sf128 VAL_PTR=&value
1387   guint32 value;
1388   drx_config_t* config = private_data_get_drx_config(actx);
1389 %(DEFAULT_BODY)s
1390   config->cycleOffset = value;
1392 #.FN_BODY DRX-Config/setup/longDRX-CycleStartOffset/sf160 VAL_PTR=&value
1393   guint32 value;
1394   drx_config_t* config = private_data_get_drx_config(actx);
1395 %(DEFAULT_BODY)s
1396   config->cycleOffset = value;
1398 #.FN_BODY DRX-Config/setup/longDRX-CycleStartOffset/sf256 VAL_PTR=&value
1399   guint32 value;
1400   drx_config_t* config = private_data_get_drx_config(actx);
1401 %(DEFAULT_BODY)s
1402   config->cycleOffset = value;
1404 #.FN_BODY DRX-Config/setup/longDRX-CycleStartOffset/sf320 VAL_PTR=&value
1405   guint32 value;
1406   drx_config_t* config = private_data_get_drx_config(actx);
1407 %(DEFAULT_BODY)s
1408   config->cycleOffset = value;
1410 #.FN_BODY DRX-Config/setup/longDRX-CycleStartOffset/sf512 VAL_PTR=&value
1411   guint32 value;
1412   drx_config_t* config = private_data_get_drx_config(actx);
1413 %(DEFAULT_BODY)s
1414   config->cycleOffset = value;
1416 #.FN_BODY DRX-Config/setup/longDRX-CycleStartOffset/sf640 VAL_PTR=&value
1417   guint32 value;
1418   drx_config_t* config = private_data_get_drx_config(actx);
1419 %(DEFAULT_BODY)s
1420   config->cycleOffset = value;
1422 #.FN_BODY DRX-Config/setup/longDRX-CycleStartOffset/sf1024 VAL_PTR=&value
1423   guint32 value;
1424   drx_config_t* config = private_data_get_drx_config(actx);
1425 %(DEFAULT_BODY)s
1426   config->cycleOffset = value;
1428 #.FN_BODY DRX-Config/setup/longDRX-CycleStartOffset/sf1280 VAL_PTR=&value
1429   guint32 value;
1430   drx_config_t* config = private_data_get_drx_config(actx);
1431 %(DEFAULT_BODY)s
1432   config->cycleOffset = value;
1434 #.FN_BODY DRX-Config/setup/longDRX-CycleStartOffset/sf2048 VAL_PTR=&value
1435   guint32 value;
1436   drx_config_t* config = private_data_get_drx_config(actx);
1437 %(DEFAULT_BODY)s
1438   config->cycleOffset = value;
1440 #.FN_BODY DRX-Config/setup/longDRX-CycleStartOffset/sf2560 VAL_PTR=&value
1441   guint32 value;
1442   drx_config_t* config = private_data_get_drx_config(actx);
1443 %(DEFAULT_BODY)s
1444   config->cycleOffset = value;
1446 #.FN_BODY DRX-Config/setup/shortDRX/shortDRX-Cycle VAL_PTR=&value
1447   guint32 value;
1448   drx_config_t* config = private_data_get_drx_config(actx);
1449 %(DEFAULT_BODY)s
1450   config->shortCycleConfigured = TRUE;
1451   config->shortCycle = drx_lookup_shortCycle(value);
1453 #.FN_BODY DRX-Config/setup/shortDRX/drxShortCycleTimer VAL_PTR=&timer
1454   guint32 timer;
1455   drx_config_t* config = private_data_get_drx_config(actx);
1456 %(DEFAULT_BODY)s
1457   config->shortCycleTimer = timer;
1459 #.FN_FTR DRX-Config/setup/shortDRX/drxShortCycleTimer
1460   proto_item_append_text(actx->created_item, " shortDRX-Cycle%s", plurality(timer, "", "s"));
1462 #.FN_BODY DRX-Config-v1130/drx-RetransmissionTimer-v1130 VAL_PTR=&value
1463   guint32 value;
1464   drx_config_t* config = private_data_get_drx_config(actx);
1465 %(DEFAULT_BODY)s
1466   config->retransmissionTimer = 0;
1468 #.FN_BODY DRX-Config-v1130/longDRX-CycleStartOffset-v1130 VAL_PTR=&value
1469   guint32 value;
1470   drx_config_t* config = private_data_get_drx_config(actx);
1471 %(DEFAULT_BODY)s
1472   config->longCycle = drx_lookup_longCycle_v1130(value);
1474 #.FN_BODY DRX-Config-v1130/longDRX-CycleStartOffset-v1130/sf60-v1130 VAL_PTR=&value
1475   guint32 value;
1476   drx_config_t* config = private_data_get_drx_config(actx);
1477 %(DEFAULT_BODY)s
1478   config->cycleOffset = value;
1480 #.FN_BODY DRX-Config-v1130/longDRX-CycleStartOffset-v1130/sf70-v1130 VAL_PTR=&value
1481   guint32 value;
1482   drx_config_t* config = private_data_get_drx_config(actx);
1483 %(DEFAULT_BODY)s
1484   config->cycleOffset = value;
1486 #.FN_BODY DRX-Config-v1130/shortDRX-Cycle-v1130 VAL_PTR=&value
1487   guint32 value;
1488   drx_config_t* config = private_data_get_drx_config(actx);
1489 %(DEFAULT_BODY)s
1490   /* Presumably config->shortCycleConfigured will be set... */
1491   config->shortCycle = 4;
1493 #.FN_BODY DRX-Config/release
1494   mac_lte_info* p_mac_lte_info;
1495 %(DEFAULT_BODY)s
1496   /* Look for UE identifier */
1497   p_mac_lte_info = (mac_lte_info *)p_get_proto_data(actx->pinfo->fd, proto_mac_lte, 0);
1498   if (p_mac_lte_info != NULL) {
1499     /* If found, tell MAC to release DRX config */
1500     set_mac_lte_drx_config_release(p_mac_lte_info->ueid, actx->pinfo);
1501   }
1503 #.FN_BODY RRCConnectionSetup
1504   /* Look for UE identifier */
1505   p_mac_lte_info = (mac_lte_info *)p_get_proto_data(actx->pinfo->fd, proto_mac_lte, 0);
1506   if (p_mac_lte_info != NULL) {
1507     /* If found, tell MAC to release DRX config coming from a previous RRC connection */
1508     /* We do release the configuration here instead of RRC Connection Release message */
1509     /* as the UE could have locally dropped the previous RRC Connection */
1510     set_mac_lte_drx_config_release(p_mac_lte_info->ueid, actx->pinfo);
1511   }
1512 %(DEFAULT_BODY)s
1515 #.FN_BODY SecurityAlgorithmConfig
1516   pdcp_lte_info *p_pdcp_lte_info;
1517   pdcp_security_info_t *p_security_algorithms;
1518 %(DEFAULT_BODY)s
1519   p_security_algorithms = private_data_pdcp_security_algorithms(actx);
1520   p_security_algorithms->configuration_frame = actx->pinfo->fd->num;
1521   /* Look for UE identifier */
1522   p_pdcp_lte_info = (pdcp_lte_info *)p_get_proto_data(actx->pinfo->fd, proto_pdcp_lte, 0);
1523   if (p_pdcp_lte_info != NULL) {
1524     /* Configure algorithms */
1525     set_pdcp_lte_security_algorithms(p_pdcp_lte_info->ueid, p_security_algorithms);
1526   }
1528 #.FN_BODY SecurityAlgorithmConfig/cipheringAlgorithm VAL_PTR=&value
1529   guint32 value;
1530   pdcp_security_info_t *p_security_algorithms;
1531 %(DEFAULT_BODY)s
1532   p_security_algorithms = private_data_pdcp_security_algorithms(actx);
1533   p_security_algorithms->ciphering = (enum security_ciphering_algorithm_e)value;
1535 #.FN_BODY SecurityAlgorithmConfig/integrityProtAlgorithm VAL_PTR=&value
1536   guint32 value;
1537   pdcp_security_info_t *p_security_algorithms;
1538 %(DEFAULT_BODY)s
1539   p_security_algorithms = private_data_pdcp_security_algorithms(actx);
1540   p_security_algorithms->integrity = (enum security_integrity_algorithm_e)value;