3 * Routines for GMR-1 BCCH dissection in wireshark.
4 * Copyright (c) 2011 Sylvain Munaut <tnt@246tNt.com>
7 * [1] ETSI TS 101 376-4-8 V1.3.1 - GMR-1 04.008
8 * [2] ETSI TS 101 376-4-8 V2.2.1 - GMPRS-1 04.008
9 * [3] ETSI TS 101 376-4-8 V3.1.1 - GMR-1 3G 44.008
13 * Wireshark - Network traffic analyzer
14 * By Gerald Combs <gerald@wireshark.org>
15 * Copyright 1998 Gerald Combs
17 * This program is free software; you can redistribute it and/or
18 * modify it under the terms of the GNU General Public License
19 * as published by the Free Software Foundation; either version 2
20 * of the License, or (at your option) any later version.
22 * This program is distributed in the hope that it will be useful,
23 * but WITHOUT ANY WARRANTY; without even the implied warranty of
24 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
25 * GNU General Public License for more details.
27 * You should have received a copy of the GNU General Public License
28 * along with this program; if not, write to the Free Software
29 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
35 #include <epan/packet.h>
36 #include <epan/wmem/wmem.h>
38 #include "packet-csn1.h"
41 /* GMR-1 BCCH proto */
42 static int proto_gmr1_bcch
= -1;
44 /* GMR-1 BCCH sub tree */
45 static gint ett_gmr1_bcch
= -1;
48 /* ------------------------------------------------------------------------ */
50 /* ------------------------------------------------------------------------ */
52 /* Segment 1A fields - [3] 11.5.2.66 */
53 static int hf_seg1a_class_2_version
= -1;
54 static int hf_seg1a_class_3_version
= -1;
56 static int hf_seg1a_syncinfo_sb_frame_ts_offset
= -1;
57 static int hf_seg1a_syncinfo_sb_symbol_offset
= -1;
58 static int hf_seg1a_syncinfo_sa_freq_offset
= -1;
60 static int hf_seg1a_rachctrl_max_retrans
= -1;
61 static int hf_seg1a_rachctrl_acc
[16] = { -1, -1, -1, -1, -1, -1, -1, -1,
62 -1, -1, -1, -1, -1, -1, -1, -1 };
63 static int hf_seg1a_rachctrl_cell_bar_access
= -1;
65 static int hf_seg1a_miscinfo_sb_reselection_hysteresis
= -1;
66 static int hf_seg1a_miscinfo_spare
= -1;
67 static int hf_seg1a_miscinfo_priority_access_ind
= -1;
69 static int hf_seg1a_gbch_present
= -1;
70 static int hf_seg1a_test_gs
= -1;
71 static int hf_seg1a_test_gs2
= -1;
72 static int hf_seg1a_spare1
= -1;
73 static int hf_seg1a_cell_bar_access_extension2
= -1;
74 static int hf_seg1a_spare2
= -1;
75 static int hf_seg1a_cell_bar_access_extension
= -1;
77 /* Segment 2A & 2Abis fields - [3] 11.5.2.67 / 11.5.2.68 */
78 static int hf_seg2a_class_4_version
= -1;
80 static int hf_seg2a_syncinfo_sa_sirfn_delay
= -1;
81 static int hf_seg2a_syncinfo_sa_bcch_stn
= -1;
82 static int hf_seg2a_syncinfo_superframe_num
= -1;
83 static int hf_seg2a_syncinfo_multiframe_num
= -1;
84 static int hf_seg2a_syncinfo_mffn_high_bit
= -1;
86 static int hf_seg2a_selcrit_rxlev_select_min
= -1;
88 static int hf_seg2a_miscinfo_sb_selection_power
= -1;
90 static int hf_seg2a_lainfo_sa_pch_config
= -1;
91 static int hf_seg2a_lainfo_sa_bach_config
= -1;
92 static int hf_seg2a_lainfo_rach_ts_offset
= -1;
93 static int hf_seg2a_lainfo_n_page_occurrences
= -1;
94 static int hf_seg2a_lainfo_imsi_attach_detach_ind
= -1;
95 static int hf_seg2a_lainfo_ecsc_indication
= -1;
96 static int hf_seg2a_lainfo_si_update_ind
= -1;
98 /* Segment 2B fields */
99 /* Segment 2Bbis fields */
101 /* Segment 3A fields - [1] 11.5.2.71 */
102 static int hf_seg3a_lai_mcc
= -1;
103 static int hf_seg3a_lai_mnc
= -1;
104 static int hf_seg3a_lai_lac
= -1;
105 static int hf_seg3a_lai_msc_id
= -1;
106 static int hf_seg3a_lai_spot_beam_id
= -1;
108 static int hf_seg3a_system_sat_id
= -1;
109 static int hf_seg3a_system_sys_id
= -1;
111 static int hf_seg3a_satpos_latitude
= -1;
112 static int hf_seg3a_satpos_longitude
= -1;
113 static int hf_seg3a_satpos_radius
= -1;
115 static int hf_seg3a_beam_latitude
= -1;
116 static int hf_seg3a_beam_longitude
= -1;
118 static int hf_seg3a_miscinfo_sb_reselection_timer
= -1;
120 static int hf_seg3a_spare
= -1;
122 /* Segment 3B fields */
123 /* Segment 3Bbis fields */
124 /* Segment 3C fields */
125 /* Segment 3D fields */
126 /* Segment 3E fields */
127 /* Segment 3Ebis fields */
128 /* Segment 3F fields */
129 /* Segment 3G fields */
130 /* Segment 3Gbis fields */
131 /* Segment 3H fields */
132 /* Segment 3I fields */
133 /* Segment 3J fields */
134 /* Segment 3Jbis fields */
135 /* Segment 3Kbis fields */
136 /* Segment 3L fields */
137 /* Segment 3M fields */
138 /* Segment 4A fields */
139 /* Segment 4B fields */
140 /* Segment 4C fields */
141 /* Segment 4D fields */
142 /* Segment 4E fields */
143 /* Segment 4F fields */
144 /* Segment 4G fields */
145 /* Segment 4H fields */
146 /* Segment 4I fields */
147 /* Segment 4J fields */
148 /* Segment 4K fields */
150 /* System Information fields [1] 10.1.31 & 10.1.32 */
151 static int hf_si_protocol_version
= -1;
152 static int hf_si_block_type
= -1;
153 static int hf_si_spare
= -1;
155 static int hf_si1_randomization_period
= -1;
158 /* ------------------------------------------------------------------------ */
159 /* CSN1 parsing structure */
160 /* ------------------------------------------------------------------------ */
162 /* Segments structures */
164 /* Segment 1A - [3] 11.5.2.66 */
166 guint8 SB_FRAME_TS_OFFSET
;
167 gint8 SB_SYMBOL_OFFSET
;
168 gint8 SA_FREQ_OFFSET
;
188 } Seg1A_AccessClasses_t
;
192 Seg1A_AccessClasses_t AccessClasses
;
193 guint8 CELL_BAR_ACCESS
;
194 } Seg1A_RACHCtrlParams_t
;
197 guint8 SB_RESELECTION_HYSTERESIS
;
199 guint8 PriorityAccessInd
;
203 guint8 Class_2_version
;
204 guint8 Class_3_version
;
205 Seg1A_SyncInfo_t SyncInfo
;
206 Seg1A_RACHCtrlParams_t RACHCtrlParams
;
207 Seg1A_MiscInfo_t MiscInfo
;
212 guint8 CELL_BAR_ACCESS_EXTENSION2
;
214 guint8 CELL_BAR_ACCESS_EXTENSION
;
217 /* Segment 2A & 2Abis - [3] 11.5.2.67 / 11.5.2.68 */
219 guint8 SA_SIRFN_DELAY
;
221 guint16 SuperframeNum
;
222 guint8 MultiframeNum
;
227 guint8 RXLEV_SELECT_MIN
;
228 } Seg2A_SelectionCriterion_t
;
231 guint8 SB_SELECTION_POWER
;
235 guint8 SA_PCH_CONFIG
;
236 guint8 SA_BACH_CONFIG
;
237 guint8 RACH_TS_OFFSET
;
238 guint8 N_Page_Occurrences
;
239 guint8 IMSI_attach_detach_ind
;
241 guint8 SI_update_ind
;
245 guint8 Class_4_version
;
246 Seg2A_SyncInfo_t SyncInfo
;
247 Seg2A_SelectionCriterion_t SelectionCriterion
;
248 Seg2A_MiscInfo_t MiscInfo
;
249 Seg2A_LAInfo_t LAInfo
;
253 guint8 Class_4_version
;
254 Seg2A_SyncInfo_t SyncInfo
;
255 Seg2A_SelectionCriterion_t SelectionCriterion
;
256 Seg2A_MiscInfo_t MiscInfo
;
257 Seg2A_LAInfo_t LAInfo
;
261 guint8 _dummy
; /* Remove when dissection is written */
265 guint8 _dummy
; /* Remove when dissection is written */
268 /* Segment 3A - [1] 11.5.2.71 */
273 guint8 MSC_ID
; /* splitted version of LAC */
274 guint16 Spot_Beam_ID
; /* splitted version of LAC */
286 } Seg3A_SatellitePosition_t
;
291 } Seg3A_BeamPosition_t
;
294 guint8 SB_RESELECTION_TIMER
;
299 Seg3A_System_t System
;
300 Seg3A_SatellitePosition_t SatellitePosition
;
301 Seg3A_BeamPosition_t BeamPosition
;
302 Seg3A_MiscInfo_t MiscInfo
;
307 guint8 _dummy
; /* Remove when dissection is written */
311 guint8 _dummy
; /* Remove when dissection is written */
315 guint8 _dummy
; /* Remove when dissection is written */
319 guint8 _dummy
; /* Remove when dissection is written */
323 guint8 _dummy
; /* Remove when dissection is written */
327 guint8 _dummy
; /* Remove when dissection is written */
331 guint8 _dummy
; /* Remove when dissection is written */
335 guint8 _dummy
; /* Remove when dissection is written */
339 guint8 _dummy
; /* Remove when dissection is written */
343 guint8 _dummy
; /* Remove when dissection is written */
347 guint8 _dummy
; /* Remove when dissection is written */
351 guint8 _dummy
; /* Remove when dissection is written */
355 guint8 _dummy
; /* Remove when dissection is written */
359 guint8 _dummy
; /* Remove when dissection is written */
363 guint8 _dummy
; /* Remove when dissection is written */
367 guint8 _dummy
; /* Remove when dissection is written */
371 guint8 _dummy
; /* Remove when dissection is written */
375 guint8 _dummy
; /* Remove when dissection is written */
379 guint8 _dummy
; /* Remove when dissection is written */
383 guint8 _dummy
; /* Remove when dissection is written */
387 guint8 _dummy
; /* Remove when dissection is written */
391 guint8 _dummy
; /* Remove when dissection is written */
395 guint8 _dummy
; /* Remove when dissection is written */
399 guint8 _dummy
; /* Remove when dissection is written */
403 guint8 _dummy
; /* Remove when dissection is written */
407 guint8 _dummy
; /* Remove when dissection is written */
411 guint8 _dummy
; /* Remove when dissection is written */
414 /* System informations structures */
416 /* System Information type 1 - [1] 10.1.31 */
418 guint8 Protocol_Version
;
420 guint8 Randomization_Period
;
422 } SI1_Block_Header_t
;
425 SI1_Block_Header_t Block_Header
;
426 Segment1A_t Segment1A
;
429 Segment2Abis_t Segment2Abis
;
430 Segment2Bbis_t Segment2Bbis
;
431 Segment3A_t Segment3A
;
432 Segment3Bbis_t Segment3Bbis
;
433 Segment3C_t Segment3C
;
434 Segment3D_t Segment3D
;
435 Segment3Ebis_t Segment3Ebis
;
436 Segment3F_t Segment3F
;
437 Segment3Gbis_t Segment3Gbis
;
438 Segment3H_t Segment3H
;
439 Segment3I_t Segment3I
;
440 Segment3Jbis_t Segment3Jbis
;
441 Segment3Kbis_t Segment3Kbis
;
442 Segment4A_t Segment4A
;
443 Segment4B_t Segment4B
;
444 Segment4C_t Segment4C
;
445 Segment4D_t Segment4D
;
446 Segment4E_t Segment4E
;
447 Segment4F_t Segment4F
;
448 Segment4G_t Segment4G
;
449 Segment4H_t Segment4H
;
450 Segment4I_t Segment4I
;
451 Segment4J_t Segment4J
;
452 Segment4K_t Segment4K
;
454 } SystemInformation1_t
;
456 /* System Information type 2 - [1] 10.1.32 */
458 guint8 Protocol_Version
;
461 } SI2_Block_Header_t
;
464 SI2_Block_Header_t Block_Header
;
467 Segment2A_t Segment2A
;
468 Segment2B_t Segment2B
;
469 Segment3B_t Segment3B
;
470 Segment3E_t Segment3E
;
471 Segment3G_t Segment3G
;
472 Segment3J_t Segment3J
;
474 } SystemInformation2_t
;
477 /* ------------------------------------------------------------------------ */
478 /* CSN1 parsing definitions */
479 /* ------------------------------------------------------------------------ */
483 /* Segment 1A - [3] 11.5.2.66 */
485 CSN_DESCR_BEGIN(Seg1A_SyncInfo_t
)
486 M_UINT (Seg1A_SyncInfo_t
, SB_FRAME_TS_OFFSET
, 5, &hf_seg1a_syncinfo_sb_frame_ts_offset
),
487 M_UINT (Seg1A_SyncInfo_t
, SB_SYMBOL_OFFSET
, 6, &hf_seg1a_syncinfo_sb_symbol_offset
),
488 M_UINT (Seg1A_SyncInfo_t
, SA_FREQ_OFFSET
, 8, &hf_seg1a_syncinfo_sa_freq_offset
),
489 CSN_DESCR_END (Seg1A_SyncInfo_t
)
492 CSN_DESCR_BEGIN(Seg1A_AccessClasses_t
)
493 M_UINT (Seg1A_AccessClasses_t
, AC15
, 1, &hf_seg1a_rachctrl_acc
[15]),
494 M_UINT (Seg1A_AccessClasses_t
, AC14
, 1, &hf_seg1a_rachctrl_acc
[14]),
495 M_UINT (Seg1A_AccessClasses_t
, AC13
, 1, &hf_seg1a_rachctrl_acc
[13]),
496 M_UINT (Seg1A_AccessClasses_t
, AC12
, 1, &hf_seg1a_rachctrl_acc
[12]),
497 M_UINT (Seg1A_AccessClasses_t
, AC11
, 1, &hf_seg1a_rachctrl_acc
[11]),
498 M_UINT (Seg1A_AccessClasses_t
, EC10
, 1, &hf_seg1a_rachctrl_acc
[10]),
499 M_UINT (Seg1A_AccessClasses_t
, AC9
, 1, &hf_seg1a_rachctrl_acc
[9]),
500 M_UINT (Seg1A_AccessClasses_t
, AC8
, 1, &hf_seg1a_rachctrl_acc
[8]),
501 M_UINT (Seg1A_AccessClasses_t
, AC7
, 1, &hf_seg1a_rachctrl_acc
[7]),
502 M_UINT (Seg1A_AccessClasses_t
, AC6
, 1, &hf_seg1a_rachctrl_acc
[6]),
503 M_UINT (Seg1A_AccessClasses_t
, AC5
, 1, &hf_seg1a_rachctrl_acc
[5]),
504 M_UINT (Seg1A_AccessClasses_t
, AC4
, 1, &hf_seg1a_rachctrl_acc
[4]),
505 M_UINT (Seg1A_AccessClasses_t
, AC3
, 1, &hf_seg1a_rachctrl_acc
[3]),
506 M_UINT (Seg1A_AccessClasses_t
, AC2
, 1, &hf_seg1a_rachctrl_acc
[2]),
507 M_UINT (Seg1A_AccessClasses_t
, AC1
, 1, &hf_seg1a_rachctrl_acc
[1]),
508 M_UINT (Seg1A_AccessClasses_t
, AC0
, 1, &hf_seg1a_rachctrl_acc
[0]),
509 CSN_DESCR_END (Seg1A_AccessClasses_t
)
512 CSN_DESCR_BEGIN(Seg1A_RACHCtrlParams_t
)
513 M_UINT (Seg1A_RACHCtrlParams_t
, Max_Retrans
, 2, &hf_seg1a_rachctrl_max_retrans
),
514 M_TYPE_LABEL (Seg1A_RACHCtrlParams_t
, AccessClasses
, Seg1A_AccessClasses_t
, "Access Classes"),
515 M_UINT (Seg1A_RACHCtrlParams_t
, CELL_BAR_ACCESS
, 1, &hf_seg1a_rachctrl_cell_bar_access
),
516 CSN_DESCR_END (Seg1A_RACHCtrlParams_t
)
519 CSN_DESCR_BEGIN(Seg1A_MiscInfo_t
)
520 M_UINT (Seg1A_MiscInfo_t
, SB_RESELECTION_HYSTERESIS
, 4, &hf_seg1a_miscinfo_sb_reselection_hysteresis
),
521 M_UINT (Seg1A_MiscInfo_t
, Spare
, 1, &hf_seg1a_miscinfo_spare
),
522 M_UINT (Seg1A_MiscInfo_t
, PriorityAccessInd
, 1, &hf_seg1a_miscinfo_priority_access_ind
),
523 CSN_DESCR_END (Seg1A_MiscInfo_t
)
526 CSN_DESCR_BEGIN(Segment1A_t
)
527 M_UINT (Segment1A_t
, Class_2_version
, 3, &hf_seg1a_class_2_version
),
528 M_UINT (Segment1A_t
, Class_3_version
, 4, &hf_seg1a_class_3_version
),
529 M_TYPE_LABEL (Segment1A_t
, SyncInfo
, Seg1A_SyncInfo_t
, "Synchronization Info Class 1"),
530 M_TYPE_LABEL (Segment1A_t
, RACHCtrlParams
, Seg1A_RACHCtrlParams_t
, "RACH Control Parameters"),
531 M_TYPE_LABEL (Segment1A_t
, MiscInfo
, Seg1A_MiscInfo_t
, "Misc Info Class 1"),
532 M_UINT (Segment1A_t
, GBCH_Present
, 1, &hf_seg1a_gbch_present
),
533 M_UINT (Segment1A_t
, Test_GS
, 1, &hf_seg1a_test_gs
),
534 M_UINT (Segment1A_t
, Test_GS2
, 1, &hf_seg1a_test_gs2
),
535 M_UINT (Segment1A_t
, Spare1
, 3, &hf_seg1a_spare1
),
536 M_UINT (Segment1A_t
, CELL_BAR_ACCESS_EXTENSION2
, 1, &hf_seg1a_cell_bar_access_extension2
),
537 M_UINT (Segment1A_t
, Spare2
, 5, &hf_seg1a_spare2
),
538 M_UINT (Segment1A_t
, CELL_BAR_ACCESS_EXTENSION
, 1, &hf_seg1a_cell_bar_access_extension
),
539 CSN_DESCR_END (Segment1A_t
)
541 /* Segment 2A & 2Abis - [1] 11.5.2.67 / 11.5.2.68 */
543 CSN_DESCR_BEGIN(Seg2A_SyncInfo_t
)
544 M_UINT (Seg2A_SyncInfo_t
, SA_SIRFN_DELAY
, 4, &hf_seg2a_syncinfo_sa_sirfn_delay
),
545 M_UINT (Seg2A_SyncInfo_t
, SA_BCCH_STN
, 5, &hf_seg2a_syncinfo_sa_bcch_stn
),
546 M_UINT (Seg2A_SyncInfo_t
, SuperframeNum
, 13, &hf_seg2a_syncinfo_superframe_num
),
547 M_UINT (Seg2A_SyncInfo_t
, MultiframeNum
, 2, &hf_seg2a_syncinfo_multiframe_num
),
548 M_UINT (Seg2A_SyncInfo_t
, MFFN_HighBit
, 1, &hf_seg2a_syncinfo_mffn_high_bit
),
549 CSN_DESCR_END (Seg2A_SyncInfo_t
)
552 CSN_DESCR_BEGIN(Seg2A_SelectionCriterion_t
)
553 M_UINT (Seg2A_SelectionCriterion_t
, RXLEV_SELECT_MIN
, 5, &hf_seg2a_selcrit_rxlev_select_min
),
554 CSN_DESCR_END (Seg2A_SelectionCriterion_t
)
557 CSN_DESCR_BEGIN(Seg2A_MiscInfo_t
)
558 M_UINT (Seg2A_MiscInfo_t
, SB_SELECTION_POWER
, 4, &hf_seg2a_miscinfo_sb_selection_power
),
559 CSN_DESCR_END (Seg2A_MiscInfo_t
)
562 CSN_DESCR_BEGIN(Seg2A_LAInfo_t
)
563 M_UINT (Seg2A_LAInfo_t
, SA_PCH_CONFIG
, 2, &hf_seg2a_lainfo_sa_pch_config
),
564 M_UINT (Seg2A_LAInfo_t
, SA_BACH_CONFIG
, 8, &hf_seg2a_lainfo_sa_bach_config
),
565 M_UINT (Seg2A_LAInfo_t
, RACH_TS_OFFSET
, 5, &hf_seg2a_lainfo_rach_ts_offset
),
566 M_UINT (Seg2A_LAInfo_t
, N_Page_Occurrences
, 2, &hf_seg2a_lainfo_n_page_occurrences
),
567 M_UINT (Seg2A_LAInfo_t
, IMSI_attach_detach_ind
, 1, &hf_seg2a_lainfo_imsi_attach_detach_ind
),
568 M_UINT (Seg2A_LAInfo_t
, ECSC_ind
, 1, &hf_seg2a_lainfo_ecsc_indication
),
569 M_UINT (Seg2A_LAInfo_t
, SI_update_ind
, 1, &hf_seg2a_lainfo_si_update_ind
),
570 CSN_DESCR_END (Seg2A_LAInfo_t
)
573 CSN_DESCR_BEGIN(Segment2A_t
)
574 M_FIXED_LABEL(Segment2A_t
, 2, 0x2, "= Class type: 2"),
575 M_FIXED_LABEL(Segment2A_t
, 4, 0x0, "= Segment type: A"),
576 M_UINT (Segment2A_t
, Class_4_version
, 3, &hf_seg2a_class_4_version
),
577 M_TYPE_LABEL (Segment2A_t
, SyncInfo
, Seg2A_SyncInfo_t
, "Synchronization Info Class 2"),
578 M_TYPE_LABEL (Segment2A_t
, SelectionCriterion
, Seg2A_SelectionCriterion_t
, "Selection Criterion"),
579 M_TYPE_LABEL (Segment2A_t
, MiscInfo
, Seg2A_MiscInfo_t
, "Misc Info Class 2"),
580 M_TYPE_LABEL (Segment2A_t
, LAInfo
, Seg2A_LAInfo_t
, "LA Info Class 2"),
581 CSN_DESCR_END (Segment2A_t
)
584 CSN_DESCR_BEGIN(Segment2Abis_t
)
585 M_FIXED_LABEL(Segment2Abis_t
, 2, 0x2, "= Class type: 2"),
586 M_FIXED_LABEL(Segment2Abis_t
, 4, 0x0, "= Segment type: Abis"),
587 M_UINT (Segment2Abis_t
, Class_4_version
, 3, &hf_seg2a_class_4_version
),
588 M_TYPE_LABEL (Segment2Abis_t
, SyncInfo
, Seg2A_SyncInfo_t
, "Synchronization Info Class 2"),
589 M_TYPE_LABEL (Segment2Abis_t
, SelectionCriterion
, Seg2A_SelectionCriterion_t
, "Selection Criterion"),
590 M_TYPE_LABEL (Segment2Abis_t
, MiscInfo
, Seg2A_MiscInfo_t
, "Misc Info Class 2"),
591 M_TYPE_LABEL (Segment2Abis_t
, LAInfo
, Seg2A_LAInfo_t
, "LA Info Class 2"),
592 CSN_DESCR_END (Segment2Abis_t
)
595 CSN_DESCR_BEGIN(Segment2B_t
)
596 M_FIXED_LABEL(Segment2B_t
, 2, 0x2, "= Class type: 2"),
597 M_FIXED_LABEL(Segment2B_t
, 4, 0x1, "= Segment type: B"),
598 CSN_DESCR_END (Segment2B_t
)
601 CSN_DESCR_BEGIN(Segment2Bbis_t
)
602 M_FIXED_LABEL(Segment2Bbis_t
, 2, 0x2, "= Class type: 2"),
603 M_FIXED_LABEL(Segment2Bbis_t
, 4, 0x1, "= Segment type: B bis"),
604 CSN_DESCR_END (Segment2Bbis_t
)
606 /* Segment 3A - [1] 11.5.2.71 */
608 Seg3A_LAI_Dissector(proto_tree
*tree _U_
, csnStream_t
* ar
, tvbuff_t
*tvb
, void* data
, int ett_csn1
)
610 Seg3A_LAI_t
*LAI
= (Seg3A_LAI_t
*)data
;
611 proto_item
*lac_item
;
612 proto_tree
*lac_tree
;
616 if (ar
->remaining_bits_len
< 5*8)
620 c
[i
] = tvb_get_bits8(tvb
, ar
->bit_offset
+ (i
<<3), 8);
622 LAI
->MCC
= (c
[0] & 0xf) * 100 + ((c
[0] & 0xf0) >> 4) * 10 + (c
[1] & 0xf);
623 LAI
->MNC
= (c
[2] & 0xf) * 10 + ((c
[2] & 0xf0) >> 4);
625 LAI
->LAC
= (c
[3] << 8) | c
[4];
626 LAI
->MSC_ID
= (LAI
->LAC
>> 10) & 0x3f;
627 LAI
->Spot_Beam_ID
= LAI
->LAC
& 0x03ff;
629 proto_tree_add_uint_bits_format_value(tree
, hf_seg3a_lai_mcc
, tvb
, ar
->bit_offset
, 16, (guint32
)LAI
->MCC
, "%d", LAI
->MCC
);
630 proto_tree_add_uint_bits_format_value(tree
, hf_seg3a_lai_mnc
, tvb
, ar
->bit_offset
+16, 8, (guint32
)LAI
->MNC
, "%d", LAI
->MNC
);
632 lac_item
= proto_tree_add_uint_bits_format_value(tree
, hf_seg3a_lai_lac
, tvb
, ar
->bit_offset
+24, 16, (guint32
)LAI
->LAC
, "0x%04x", LAI
->LAC
);
633 lac_tree
= proto_item_add_subtree(lac_item
, ett_csn1
);
635 proto_tree_add_uint_bits_format_value(lac_tree
, hf_seg3a_lai_msc_id
, tvb
, ar
->bit_offset
+24, 6, (guint32
)LAI
->MSC_ID
, "%d", LAI
->MSC_ID
);
636 proto_tree_add_uint_bits_format_value(lac_tree
, hf_seg3a_lai_spot_beam_id
, tvb
, ar
->bit_offset
+30, 10, (guint32
)LAI
->Spot_Beam_ID
, "%d", LAI
->Spot_Beam_ID
);
638 ar
->remaining_bits_len
-= 5*8;
639 ar
->bit_offset
+= 5*8;
645 CSN_DESCR_BEGIN(Seg3A_System_t
)
646 M_UINT (Seg3A_System_t
, Satellite_ID
, 2, &hf_seg3a_system_sat_id
),
647 M_UINT (Seg3A_System_t
, System_ID
, 4, &hf_seg3a_system_sys_id
),
648 CSN_DESCR_END (Seg3A_System_t
)
651 CSN_DESCR_BEGIN(Seg3A_SatellitePosition_t
)
652 M_UINT (Seg3A_SatellitePosition_t
, Latitude
, 8, &hf_seg3a_satpos_latitude
),
653 M_UINT (Seg3A_SatellitePosition_t
, Longitude
, 12, &hf_seg3a_satpos_longitude
),
654 M_UINT (Seg3A_SatellitePosition_t
, Radius
, 16, &hf_seg3a_satpos_radius
),
655 CSN_DESCR_END (Seg3A_SatellitePosition_t
)
658 CSN_DESCR_BEGIN(Seg3A_BeamPosition_t
)
659 M_UINT (Seg3A_BeamPosition_t
, Latitude
, 11, &hf_seg3a_beam_latitude
),
660 M_UINT (Seg3A_BeamPosition_t
, Longitude
, 12, &hf_seg3a_beam_longitude
),
661 CSN_DESCR_END (Seg3A_BeamPosition_t
)
664 CSN_DESCR_BEGIN(Seg3A_MiscInfo_t
)
665 M_UINT (Seg3A_MiscInfo_t
, SB_RESELECTION_TIMER
, 6, &hf_seg3a_miscinfo_sb_reselection_timer
),
666 CSN_DESCR_END (Seg3A_MiscInfo_t
)
669 CSN_DESCR_BEGIN(Segment3A_t
)
670 M_FIXED_LABEL(Segment3A_t
, 1, 0x0, "= Class type: 3"),
671 M_FIXED_LABEL(Segment3A_t
, 4, 0x0, "= Segment type: A"),
672 M_SERIALIZE (Segment3A_t
, LAI
, 0, Seg3A_LAI_Dissector
),
673 M_TYPE_LABEL (Segment3A_t
, System
, Seg3A_System_t
, "System"),
674 M_TYPE_LABEL (Segment3A_t
, SatellitePosition
, Seg3A_SatellitePosition_t
, "Satellite Position"),
675 M_TYPE_LABEL (Segment3A_t
, BeamPosition
, Seg3A_BeamPosition_t
, "Beam Center Position"),
676 M_TYPE_LABEL (Segment3A_t
, MiscInfo
, Seg3A_MiscInfo_t
, "Misc Info Class 3"),
677 M_UINT (Segment3A_t
, Spare
, 4, &hf_seg3a_spare
),
678 CSN_DESCR_END (Segment3A_t
)
681 CSN_DESCR_BEGIN(Segment3B_t
)
682 M_FIXED_LABEL(Segment3B_t
, 1, 0x0, "= Class type: 3"),
683 M_FIXED_LABEL(Segment3B_t
, 4, 0x1, "= Segment type: B"),
684 CSN_DESCR_END (Segment3B_t
)
687 CSN_DESCR_BEGIN(Segment3Bbis_t
)
688 M_FIXED_LABEL(Segment3Bbis_t
, 1, 0x0, "= Class type: 3"),
689 M_FIXED_LABEL(Segment3Bbis_t
, 4, 0x1, "= Segment type: B bis"),
690 CSN_DESCR_END (Segment3Bbis_t
)
693 CSN_DESCR_BEGIN(Segment3C_t
)
694 M_FIXED_LABEL(Segment3C_t
, 1, 0x0, "= Class type: 3"),
695 M_FIXED_LABEL(Segment3C_t
, 4, 0x2, "= Segment type: C"),
696 CSN_DESCR_END (Segment3C_t
)
699 CSN_DESCR_BEGIN(Segment3D_t
)
700 M_FIXED_LABEL(Segment3D_t
, 1, 0x0, "= Class type: 3"),
701 M_FIXED_LABEL(Segment3D_t
, 4, 0x3, "= Segment type: D"),
702 CSN_DESCR_END (Segment3D_t
)
705 CSN_DESCR_BEGIN(Segment3E_t
)
706 M_FIXED_LABEL(Segment3E_t
, 1, 0x0, "= Class type: 3"),
707 M_FIXED_LABEL(Segment3E_t
, 4, 0x4, "= Segment type: E"),
708 CSN_DESCR_END (Segment3E_t
)
711 CSN_DESCR_BEGIN(Segment3Ebis_t
)
712 M_FIXED_LABEL(Segment3Ebis_t
, 1, 0x0, "= Class type: 3"),
713 M_FIXED_LABEL(Segment3Ebis_t
, 4, 0x4, "= Segment type: E bis"),
714 CSN_DESCR_END (Segment3Ebis_t
)
717 CSN_DESCR_BEGIN(Segment3F_t
)
718 M_FIXED_LABEL(Segment3F_t
, 1, 0x0, "= Class type: 3"),
719 M_FIXED_LABEL(Segment3F_t
, 4, 0x5, "= Segment type: F"),
720 CSN_DESCR_END (Segment3F_t
)
723 CSN_DESCR_BEGIN(Segment3G_t
)
724 M_FIXED_LABEL(Segment3G_t
, 1, 0x0, "= Class type: 3"),
725 M_FIXED_LABEL(Segment3G_t
, 4, 0x6, "= Segment type: G"),
726 CSN_DESCR_END (Segment3G_t
)
729 CSN_DESCR_BEGIN(Segment3Gbis_t
)
730 M_FIXED_LABEL(Segment3Gbis_t
, 1, 0x0, "= Class type: 3"),
731 M_FIXED_LABEL(Segment3Gbis_t
, 4, 0x6, "= Segment type: G bis"),
732 CSN_DESCR_END (Segment3Gbis_t
)
735 CSN_DESCR_BEGIN(Segment3H_t
)
736 M_FIXED_LABEL(Segment3H_t
, 1, 0x0, "= Class type: 3"),
737 M_FIXED_LABEL(Segment3H_t
, 4, 0x7, "= Segment type: H"),
738 CSN_DESCR_END (Segment3H_t
)
741 CSN_DESCR_BEGIN(Segment3I_t
)
742 M_FIXED_LABEL(Segment3I_t
, 1, 0x0, "= Class type: 3"),
743 M_FIXED_LABEL(Segment3I_t
, 4, 0x9, "= Segment type: I"),
744 CSN_DESCR_END (Segment3I_t
)
747 CSN_DESCR_BEGIN(Segment3J_t
)
748 M_FIXED_LABEL(Segment3J_t
, 1, 0x0, "= Class type: 3"),
749 M_FIXED_LABEL(Segment3J_t
, 4, 0xa, "= Segment type: J"),
750 CSN_DESCR_END (Segment3J_t
)
753 CSN_DESCR_BEGIN(Segment3Jbis_t
)
754 M_FIXED_LABEL(Segment3Jbis_t
, 1, 0x0, "= Class type: 3"),
755 M_FIXED_LABEL(Segment3Jbis_t
, 4, 0xa, "= Segment type: J bis"),
756 CSN_DESCR_END (Segment3Jbis_t
)
759 CSN_DESCR_BEGIN(Segment3Kbis_t
)
760 M_FIXED_LABEL(Segment3Kbis_t
, 1, 0x0, "= Class type: 3"),
761 M_FIXED_LABEL(Segment3Kbis_t
, 4, 0xb, "= Segment type: K bis"),
762 CSN_DESCR_END (Segment3Kbis_t
)
765 CSN_DESCR_BEGIN(Segment3L_t
)
766 M_FIXED_LABEL(Segment3L_t
, 1, 0x0, "= Class type: 3"),
767 M_FIXED_LABEL(Segment3L_t
, 4, 0xc, "= Segment type: L"),
768 CSN_DESCR_END (Segment3L_t
)
771 CSN_DESCR_BEGIN(Segment3M_t
)
772 M_FIXED_LABEL(Segment3M_t
, 1, 0x0, "= Class type: 3"),
773 M_FIXED_LABEL(Segment3M_t
, 4, 0xd, "= Segment type: M"),
774 CSN_DESCR_END (Segment3M_t
)
777 CSN_DESCR_BEGIN(Segment4A_t
)
778 M_FIXED_LABEL(Segment4A_t
, 3, 0x6, "= Class type: 4"),
779 M_FIXED_LABEL(Segment4A_t
, 4, 0x0, "= Segment type: A"),
780 CSN_DESCR_END (Segment4A_t
)
783 CSN_DESCR_BEGIN(Segment4B_t
)
784 M_FIXED_LABEL(Segment4B_t
, 3, 0x6, "= Class type: 4"),
785 M_FIXED_LABEL(Segment4B_t
, 4, 0x1, "= Segment type: B"),
786 CSN_DESCR_END (Segment4B_t
)
789 CSN_DESCR_BEGIN(Segment4C_t
)
790 M_FIXED_LABEL(Segment4C_t
, 3, 0x6, "= Class type: 4"),
791 M_FIXED_LABEL(Segment4C_t
, 4, 0x2, "= Segment type: C"),
792 CSN_DESCR_END (Segment4C_t
)
795 CSN_DESCR_BEGIN(Segment4D_t
)
796 M_FIXED_LABEL(Segment4D_t
, 3, 0x6, "= Class type: 4"),
797 M_FIXED_LABEL(Segment4D_t
, 4, 0x3, "= Segment type: D"),
798 CSN_DESCR_END (Segment4D_t
)
801 CSN_DESCR_BEGIN(Segment4E_t
)
802 M_FIXED_LABEL(Segment4E_t
, 3, 0x6, "= Class type: 4"),
803 M_FIXED_LABEL(Segment4E_t
, 4, 0x4, "= Segment type: E"),
804 CSN_DESCR_END (Segment4E_t
)
807 CSN_DESCR_BEGIN(Segment4F_t
)
808 M_FIXED_LABEL(Segment4F_t
, 3, 0x6, "= Class type: 4"),
809 M_FIXED_LABEL(Segment4F_t
, 4, 0x5, "= Segment type: F"),
810 CSN_DESCR_END (Segment4F_t
)
813 CSN_DESCR_BEGIN(Segment4G_t
)
814 M_FIXED_LABEL(Segment4G_t
, 3, 0x6, "= Class type: 4"),
815 M_FIXED_LABEL(Segment4G_t
, 4, 0x6, "= Segment type: G"),
816 CSN_DESCR_END (Segment4G_t
)
819 CSN_DESCR_BEGIN(Segment4H_t
)
820 M_FIXED_LABEL(Segment4H_t
, 3, 0x6, "= Class type: 4"),
821 M_FIXED_LABEL(Segment4H_t
, 4, 0x7, "= Segment type: H"),
822 CSN_DESCR_END (Segment4H_t
)
825 CSN_DESCR_BEGIN(Segment4I_t
)
826 M_FIXED_LABEL(Segment4I_t
, 3, 0x6, "= Class type: 4"),
827 M_FIXED_LABEL(Segment4I_t
, 4, 0x8, "= Segment type: I"),
828 CSN_DESCR_END (Segment4I_t
)
831 CSN_DESCR_BEGIN(Segment4J_t
)
832 M_FIXED_LABEL(Segment4J_t
, 3, 0x6, "= Class type: 4"),
833 M_FIXED_LABEL(Segment4J_t
, 4, 0x9, "= Segment type: J"),
834 CSN_DESCR_END (Segment4J_t
)
837 CSN_DESCR_BEGIN(Segment4K_t
)
838 M_FIXED_LABEL(Segment4K_t
, 3, 0x6, "= Class type: 4"),
839 M_FIXED_LABEL(Segment4K_t
, 4, 0xa, "= Segment type: K"),
840 CSN_DESCR_END (Segment4K_t
)
843 /* System information */
845 /* System Information type 1 - [1] 10.1.31 */
848 CSN_DESCR_BEGIN(SI1_Block_Header_t
)
849 M_UINT (SI1_Block_Header_t
, Protocol_Version
, 4, &hf_si_protocol_version
),
850 M_UINT (SI1_Block_Header_t
, Block_Type
, 1, &hf_si_block_type
),
851 M_UINT (SI1_Block_Header_t
, Randomization_Period
, 2, &hf_si1_randomization_period
),
852 M_UINT (SI1_Block_Header_t
, Spare
, 1, &hf_si_spare
),
853 CSN_DESCR_END (SI1_Block_Header_t
)
856 CSN_ChoiceElement_t SI1_SegmentChoice
[] =
858 {6, 0x20, 1, M_TYPE_LABEL(SystemInformation1_t
, u
.Segment2Abis
, Segment2Abis_t
, "Segment 2A bis")},
859 {6, 0x21, 1, M_TYPE_LABEL(SystemInformation1_t
, u
.Segment2Bbis
, Segment2Bbis_t
, "Segment 2B bis")},
860 {5, 0x00, 1, M_TYPE_LABEL(SystemInformation1_t
, u
.Segment3A
, Segment3A_t
, "Segment 3A")},
861 {5, 0x01, 1, M_TYPE_LABEL(SystemInformation1_t
, u
.Segment3Bbis
, Segment3Bbis_t
, "Segment 3B bis")},
862 {5, 0x02, 1, M_TYPE_LABEL(SystemInformation1_t
, u
.Segment3C
, Segment3C_t
, "Segment 3C")},
863 {5, 0x03, 1, M_TYPE_LABEL(SystemInformation1_t
, u
.Segment3D
, Segment3D_t
, "Segment 3D")},
864 {5, 0x04, 1, M_TYPE_LABEL(SystemInformation1_t
, u
.Segment3Ebis
, Segment3Ebis_t
, "Segment 3E bis")},
865 {5, 0x05, 1, M_TYPE_LABEL(SystemInformation1_t
, u
.Segment3F
, Segment3F_t
, "Segment 3F")},
866 {5, 0x06, 1, M_TYPE_LABEL(SystemInformation1_t
, u
.Segment3Gbis
, Segment3Gbis_t
, "Segment 3G bis")},
867 {5, 0x07, 1, M_TYPE_LABEL(SystemInformation1_t
, u
.Segment3H
, Segment3H_t
, "Segment 3H")},
868 {5, 0x09, 1, M_TYPE_LABEL(SystemInformation1_t
, u
.Segment3I
, Segment3I_t
, "Segment 3I")},
869 {5, 0x0a, 1, M_TYPE_LABEL(SystemInformation1_t
, u
.Segment3Jbis
, Segment3Jbis_t
, "Segment 3J bis")},
870 {5, 0x0b, 1, M_TYPE_LABEL(SystemInformation1_t
, u
.Segment3Kbis
, Segment3Kbis_t
, "Segment 3K bis")},
871 {7, 0x60, 1, M_TYPE_LABEL(SystemInformation1_t
, u
.Segment4A
, Segment4A_t
, "Segment 4A")},
872 {7, 0x61, 1, M_TYPE_LABEL(SystemInformation1_t
, u
.Segment4B
, Segment4B_t
, "Segment 4B")},
873 {7, 0x62, 1, M_TYPE_LABEL(SystemInformation1_t
, u
.Segment4C
, Segment4C_t
, "Segment 4C")},
874 {7, 0x63, 1, M_TYPE_LABEL(SystemInformation1_t
, u
.Segment4D
, Segment4D_t
, "Segment 4D")},
875 {7, 0x64, 1, M_TYPE_LABEL(SystemInformation1_t
, u
.Segment4E
, Segment4E_t
, "Segment 4E")},
876 {7, 0x65, 1, M_TYPE_LABEL(SystemInformation1_t
, u
.Segment4F
, Segment4F_t
, "Segment 4F")},
877 {7, 0x66, 1, M_TYPE_LABEL(SystemInformation1_t
, u
.Segment4G
, Segment4G_t
, "Segment 4G")},
878 {7, 0x67, 1, M_TYPE_LABEL(SystemInformation1_t
, u
.Segment4H
, Segment4H_t
, "Segment 4H")},
879 {7, 0x68, 1, M_TYPE_LABEL(SystemInformation1_t
, u
.Segment4I
, Segment4I_t
, "Segment 4I")},
880 {7, 0x69, 1, M_TYPE_LABEL(SystemInformation1_t
, u
.Segment4J
, Segment4J_t
, "Segment 4J")},
881 {7, 0x6a, 1, M_TYPE_LABEL(SystemInformation1_t
, u
.Segment4K
, Segment4K_t
, "Segment 4K")},
882 {0, 0x00, 1, CSN_ERROR(SystemInformation1_t
, "Unknown segment !", -1)},
886 CSN_DESCR_BEGIN(SystemInformation1_t
)
887 M_TYPE_LABEL (SystemInformation1_t
, Block_Header
, SI1_Block_Header_t
, "Block Header"),
888 M_TYPE_LABEL (SystemInformation1_t
, Segment1A
, Segment1A_t
, "Segment 1A"),
889 M_CHOICE_IL (SystemInformation1_t
, SegmentType
, SI1_SegmentChoice
, ElementsOf(SI1_SegmentChoice
)),
890 CSN_DESCR_END (SystemInformation1_t
)
892 /* System Information type 2 - [1] 10.1.32 */
894 CSN_DESCR_BEGIN(SI2_Block_Header_t
)
895 M_UINT (SI2_Block_Header_t
, Protocol_Version
, 4, &hf_si_protocol_version
),
896 M_UINT (SI2_Block_Header_t
, Block_Type
, 1, &hf_si_block_type
),
897 M_UINT (SI2_Block_Header_t
, Spare
, 3, &hf_si_spare
),
898 CSN_DESCR_END (SI2_Block_Header_t
)
901 CSN_ChoiceElement_t SI2_SegmentChoice
[] =
903 {6, 0x20, 1, M_TYPE_LABEL(SystemInformation2_t
, u
.Segment2A
, Segment2A_t
, "Segment 2A")},
904 {6, 0x21, 1, M_TYPE_LABEL(SystemInformation2_t
, u
.Segment2B
, Segment2B_t
, "Segment 2B")},
905 {5, 0x01, 1, M_TYPE_LABEL(SystemInformation2_t
, u
.Segment3B
, Segment3B_t
, "Segment 3B")},
906 {5, 0x04, 1, M_TYPE_LABEL(SystemInformation2_t
, u
.Segment3E
, Segment3E_t
, "Segment 3E")},
907 {5, 0x06, 1, M_TYPE_LABEL(SystemInformation2_t
, u
.Segment3G
, Segment3G_t
, "Segment 3G")},
908 {5, 0x0a, 1, M_TYPE_LABEL(SystemInformation2_t
, u
.Segment3J
, Segment3J_t
, "Segment 3J")},
909 {0, 0x00, 1, CSN_ERROR(SystemInformation2_t
, "Unknown segment !", -1)},
913 CSN_DESCR_BEGIN(SystemInformation2_t
)
914 M_TYPE_LABEL (SystemInformation2_t
, Block_Header
, SI2_Block_Header_t
, "Block Header"),
915 M_CHOICE_IL (SystemInformation2_t
, SegmentType
, SI2_SegmentChoice
, ElementsOf(SI2_SegmentChoice
)),
916 CSN_DESCR_END (SystemInformation2_t
)
919 /* ------------------------------------------------------------------------ */
921 /* ------------------------------------------------------------------------ */
925 segx_half_db_value_fmt(gchar
*s
, guint32 v
)
927 g_snprintf(s
, ITEM_LABEL_LENGTH
, "%2.1f dB (%u)", v
* 0.5f
, v
);
930 /* Segment 1A - [3] 11.5.2.66 */
932 seg1a_syncinfo_sa_freq_offset_fmt(gchar
*s
, guint32 v
)
934 gint32 sv
= (gint32
)v
;
935 g_snprintf(s
, ITEM_LABEL_LENGTH
, "%d Hz (%d)", sv
* 5, sv
);
938 static const value_string seg1a_rachctrl_acc_vals
[] = {
939 { 0, "not barred (allowed)"},
940 { 1, "barred (not allowed)"},
944 static const value_string seg1a_rachctrl_cell_bar_access_vals
[] = {
945 { 0, "The cell is not barred"},
946 { 1, "The cell is barred"},
950 /* Segment 2A & 2Abis - [1] 11.5.2.67 & 11.5.2.68 */
951 static const value_string seg2a_lainfo_imsi_attach_detach_ind_vals
[] = {
952 { 0, "MESs shall NOT apply IMSI attach and detach procedure for this LA"},
953 { 1, "MESs shall apply IMSI attach and detach procedure for this LA"},
957 static const value_string seg2a_lainfo_ecsc_indication_vals
[] = {
958 { 0, "Early sending is explicitly prohibited"},
959 { 1, "Early sending is explicitly accepted"},
963 /* Segment 3A - [1] 11.5.2.71 */
965 seg3a_latitude_fmt(gchar
*s
, guint32 v
)
967 gint32 sv
= (gint32
)v
;
976 g_snprintf(s
, ITEM_LABEL_LENGTH
, "%.1f %c (%d)", sv
/ 10.0f
, c
, sv
);
980 seg3a_longitude_fmt(gchar
*s
, guint32 v
)
993 g_snprintf(s
, ITEM_LABEL_LENGTH
, "%.1f %c (%u)", sv
/ 10.0f
, c
, v
);
997 seg3a_satpos_radius_fmt(gchar
*s
, guint32 v
)
999 gint32 sv
= (gint32
)v
;
1000 gint32 a
= (42162 * 1000) + (sv
* 5);
1001 g_snprintf(s
, ITEM_LABEL_LENGTH
, "%.3lf km (%u)", a
/ 1000.0, sv
);
1005 seg3a_miscinfo_sb_reselection_timer_fmt(gchar
*s
, guint32 v
)
1007 g_snprintf(s
, ITEM_LABEL_LENGTH
, "%d minutes (%u)", v
*4, v
);
1010 /* System Information 1 - [1] 10.3.31 */
1011 static const value_string si1_randomization_period_vals
[] = {
1012 { 0, "7 frames after this SI block" },
1013 { 1, "15 frames after this SI block" },
1014 { 2, "23 frames after this SI block" },
1015 { 3, "31 frames after this SI block" },
1020 /* ------------------------------------------------------------------------ */
1021 /* Dissector code */
1022 /* ------------------------------------------------------------------------ */
1025 dissect_gmr1_bcch(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
)
1027 proto_item
*bcch_item
= NULL
;
1028 proto_tree
*bcch_tree
= NULL
;
1032 col_append_str(pinfo
->cinfo
, COL_INFO
, "(BCCH) ");
1034 is_si1
= tvb_get_bits8(tvb
, 0, 5) & 1;
1036 bcch_item
= proto_tree_add_protocol_format(
1037 tree
, proto_gmr1_bcch
, tvb
, 0, -1,
1038 "GMR-1 BCCH - System Information type %d", is_si1
? 1 : 2
1040 bcch_tree
= proto_item_add_subtree(bcch_item
, ett_gmr1_bcch
);
1042 csnStreamInit(&ar
, 0, tvb_length(tvb
)*8);
1046 SystemInformation1_t
*data
;
1047 data
= wmem_new(wmem_packet_scope(), SystemInformation1_t
);
1048 /* Initialize the type to the last element, which is an
1049 * "Unknown", in case the dissector bails before getting this
1051 data
->SegmentType
= array_length(SI1_SegmentChoice
) - 1;
1052 csnStreamDissector(bcch_tree
, &ar
, CSNDESCR(SystemInformation1_t
), tvb
, data
, ett_gmr1_bcch
);
1054 pinfo
->cinfo
, COL_INFO
,
1055 "System Information 1: Segment 1A, %s",
1056 SI1_SegmentChoice
[data
->SegmentType
].descr
.sz
1059 SystemInformation2_t
*data
;
1060 data
= wmem_new(wmem_packet_scope(), SystemInformation2_t
);
1061 /* Initialize the type to the last element, which is an
1062 * "Unknown", in case the dissector bails before getting this
1064 data
->SegmentType
= array_length(SI2_SegmentChoice
) - 1;
1065 csnStreamDissector(bcch_tree
, &ar
, CSNDESCR(SystemInformation2_t
), tvb
, data
, ett_gmr1_bcch
);
1067 pinfo
->cinfo
, COL_INFO
,
1068 "System Information 2: %s",
1069 SI2_SegmentChoice
[data
->SegmentType
].descr
.sz
1075 proto_register_gmr1_bcch(void)
1077 static hf_register_info hf
[] = {
1078 /* Segment 1A - [3] 11.5.2.66 */
1079 { &hf_seg1a_class_2_version
,
1080 { "Class 2 version", "gmr1.bcch.seg1a.class_2_version",
1081 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
1082 "Version number for current Class 2 information", HFILL
}
1084 { &hf_seg1a_class_3_version
,
1085 { "Class 3 version", "gmr1.bcch.seg1a.class_3_version",
1086 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
1087 "Version number for current Class 3 information", HFILL
}
1089 { &hf_seg1a_syncinfo_sb_frame_ts_offset
,
1090 { "SB_FRAME_TS_OFFSET", "gmr1.bcch.seg1a.syncinfo.sb_frame_ts_offset",
1091 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
1094 { &hf_seg1a_syncinfo_sb_symbol_offset
,
1095 { "SB_SYMBOL_OFFSET", "gmr1.bcch.seg1a.syncinfo.sb_symbol_offset",
1096 FT_INT8
, BASE_DEC
, NULL
, 0x00,
1099 { &hf_seg1a_syncinfo_sa_freq_offset
,
1100 { "SA_FREQ_OFFSET", "gmr1.bcch.seg1a.syncinfo.sa_freq_offset",
1101 FT_UINT8
, BASE_CUSTOM
, seg1a_syncinfo_sa_freq_offset_fmt
, 0x00,
1104 { &hf_seg1a_rachctrl_max_retrans
,
1105 { "Max Retrans", "gmr1.bcch.seg1a.rachctrl.max_retrans",
1106 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
1109 { &hf_seg1a_rachctrl_acc
[15],
1110 { "AC15", "gmr1.bcch.seg1a.rachctrl.ac15",
1111 FT_UINT8
, BASE_DEC
, VALS(seg1a_rachctrl_acc_vals
), 0x00,
1112 "Access Class 15 barred", HFILL
}
1114 { &hf_seg1a_rachctrl_acc
[14],
1115 { "AC14", "gmr1.bcch.seg1a.rachctrl.ac14",
1116 FT_UINT8
, BASE_DEC
, VALS(seg1a_rachctrl_acc_vals
), 0x00,
1117 "Access Class 14 barred", HFILL
}
1119 { &hf_seg1a_rachctrl_acc
[13],
1120 { "AC13", "gmr1.bcch.seg1a.rachctrl.ac13",
1121 FT_UINT8
, BASE_DEC
, VALS(seg1a_rachctrl_acc_vals
), 0x00,
1122 "Access Class 13 barred", HFILL
}
1124 { &hf_seg1a_rachctrl_acc
[12],
1125 { "AC12", "gmr1.bcch.seg1a.rachctrl.ac12",
1126 FT_UINT8
, BASE_DEC
, VALS(seg1a_rachctrl_acc_vals
), 0x00,
1127 "Access Class 12 barred", HFILL
}
1129 { &hf_seg1a_rachctrl_acc
[11],
1130 { "AC11", "gmr1.bcch.seg1a.rachctrl.ac11",
1131 FT_UINT8
, BASE_DEC
, VALS(seg1a_rachctrl_acc_vals
), 0x00,
1132 "Access Class 11 barred", HFILL
}
1134 { &hf_seg1a_rachctrl_acc
[10],
1135 { "EC10", "gmr1.bcch.seg1a.rachctrl.ac10",
1136 FT_UINT8
, BASE_DEC
, VALS(seg1a_rachctrl_acc_vals
), 0x00,
1137 "Emergency Class 10 barred", HFILL
}
1139 { &hf_seg1a_rachctrl_acc
[9],
1140 { "AC9", "gmr1.bcch.seg1a.rachctrl.ac9",
1141 FT_UINT8
, BASE_DEC
, VALS(seg1a_rachctrl_acc_vals
), 0x00,
1142 "Access Class 9 barred", HFILL
}
1144 { &hf_seg1a_rachctrl_acc
[8],
1145 { "AC8", "gmr1.bcch.seg1a.rachctrl.ac8",
1146 FT_UINT8
, BASE_DEC
, VALS(seg1a_rachctrl_acc_vals
), 0x00,
1147 "Access Class 8 barred", HFILL
}
1149 { &hf_seg1a_rachctrl_acc
[7],
1150 { "AC7", "gmr1.bcch.seg1a.rachctrl.ac7",
1151 FT_UINT8
, BASE_DEC
, VALS(seg1a_rachctrl_acc_vals
), 0x00,
1152 "Access Class 7 barred", HFILL
}
1154 { &hf_seg1a_rachctrl_acc
[6],
1155 { "AC6", "gmr1.bcch.seg1a.rachctrl.ac6",
1156 FT_UINT8
, BASE_DEC
, VALS(seg1a_rachctrl_acc_vals
), 0x00,
1157 "Access Class 6 barred", HFILL
}
1159 { &hf_seg1a_rachctrl_acc
[5],
1160 { "AC5", "gmr1.bcch.seg1a.rachctrl.ac5",
1161 FT_UINT8
, BASE_DEC
, VALS(seg1a_rachctrl_acc_vals
), 0x00,
1162 "Access Class 5 barred", HFILL
}
1164 { &hf_seg1a_rachctrl_acc
[4],
1165 { "AC4", "gmr1.bcch.seg1a.rachctrl.ac4",
1166 FT_UINT8
, BASE_DEC
, VALS(seg1a_rachctrl_acc_vals
), 0x00,
1167 "Access Class 4 barred", HFILL
}
1169 { &hf_seg1a_rachctrl_acc
[3],
1170 { "AC3", "gmr1.bcch.seg1a.rachctrl.ac3",
1171 FT_UINT8
, BASE_DEC
, VALS(seg1a_rachctrl_acc_vals
), 0x00,
1172 "Access Class 3 barred", HFILL
}
1174 { &hf_seg1a_rachctrl_acc
[2],
1175 { "AC2", "gmr1.bcch.seg1a.rachctrl.ac2",
1176 FT_UINT8
, BASE_DEC
, VALS(seg1a_rachctrl_acc_vals
), 0x00,
1177 "Access Class 2 barred", HFILL
}
1179 { &hf_seg1a_rachctrl_acc
[1],
1180 { "AC1", "gmr1.bcch.seg1a.rachctrl.ac1",
1181 FT_UINT8
, BASE_DEC
, VALS(seg1a_rachctrl_acc_vals
), 0x00,
1182 "Access Class 1 barred", HFILL
}
1184 { &hf_seg1a_rachctrl_acc
[0],
1185 { "AC0", "gmr1.bcch.seg1a.rachctrl.ac0",
1186 FT_UINT8
, BASE_DEC
, VALS(seg1a_rachctrl_acc_vals
), 0x00,
1187 "Access Class 0 barred", HFILL
}
1189 { &hf_seg1a_rachctrl_cell_bar_access
,
1190 { "CELL_BAR_ACCESS", "gmr1.bcch.seg1a.rachctrl.cell_bar_access",
1191 FT_UINT8
, BASE_DEC
, VALS(seg1a_rachctrl_cell_bar_access_vals
), 0x00,
1194 { &hf_seg1a_miscinfo_sb_reselection_hysteresis
,
1195 { "SB_RESELECTION_HYSTERESIS", "gmr1.bcch.seg1a.miscinfo.sb_reselection_hysteresis",
1196 FT_UINT8
, BASE_CUSTOM
, segx_half_db_value_fmt
, 0x00,
1199 { &hf_seg1a_miscinfo_spare
,
1200 { "Spare", "gmr1.bcch.seg1a.miscinfo.spare",
1201 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
1204 { &hf_seg1a_miscinfo_priority_access_ind
,
1205 { "Priority Access Ind", "gmr1.bcch.seg1a.miscinfo.priority_access_ind",
1206 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
1207 "Reserved for future use", HFILL
}
1209 { &hf_seg1a_gbch_present
,
1210 { "GBCH Present", "gmr1.bcch.seg1a.gbch_present",
1211 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
1214 { &hf_seg1a_test_gs
,
1215 { "Test GS", "gmr1.bcch.seg1a.test_gs",
1216 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
1219 { &hf_seg1a_test_gs2
,
1220 { "Test GS2", "gmr1.bcch.seg1a.test_gs2",
1221 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
1225 { "Spare", "gmr1.bcch.seg1a.spare1",
1226 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
1229 { &hf_seg1a_cell_bar_access_extension2
,
1230 { "CELL_BAR_ACCESS_EXTENSION2", "gmr1.bcch.seg1a.cell_bar_access_extension2",
1231 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
1235 { "Spare", "gmr1.bcch.seg1a.spare2",
1236 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
1239 { &hf_seg1a_cell_bar_access_extension
,
1240 { "CELL_BAR_ACCESS_EXTENSION", "gmr1.bcch.seg1a.cell_bar_access_extension",
1241 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
1245 /* Segment 2A - [1] 11.5.2.67 */
1246 { &hf_seg2a_class_4_version
,
1247 { "Class 4 version", "gmr1.bcch.seg2a.class_4_version",
1248 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
1249 "Version number for current Class 4 information", HFILL
}
1251 { &hf_seg2a_syncinfo_sa_sirfn_delay
,
1252 { "SA_SIRFN_DELAY", "gmr1.bcch.seg2a.syncinfo.sa_sirfn_delay",
1253 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
1254 "Delay of system information relative to superframe", HFILL
}
1256 { &hf_seg2a_syncinfo_sa_bcch_stn
,
1257 { "SA_BCCH_STN", "gmr1.bcch.seg2a.syncinfo.sa_bcch_stn",
1258 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
1259 "Starting timeslot number", HFILL
}
1261 { &hf_seg2a_syncinfo_superframe_num
,
1262 { "Superframe Number", "gmr1.bcch.seg2a.syncinfo.superframe_num",
1263 FT_UINT16
, BASE_DEC
, NULL
, 0x00,
1266 { &hf_seg2a_syncinfo_multiframe_num
,
1267 { "Multiframe Number", "gmr1.bcch.seg2a.syncinfo.multiframe_num",
1268 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
1269 "Multiframe number in a superframe", HFILL
}
1271 { &hf_seg2a_syncinfo_mffn_high_bit
,
1272 { "MFFN high bit", "gmr1.bcch.seg2a.syncinfo.mffn_high_bit",
1273 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
1274 "High bit of the TDMA FN in a multiframe", HFILL
}
1276 { &hf_seg2a_selcrit_rxlev_select_min
,
1277 { "RXLEV_SELECT_MIN", "gmr1.bcch.seg2a.selcrit.rxlev_select_min",
1278 FT_UINT8
, BASE_CUSTOM
, segx_half_db_value_fmt
, 0x00,
1279 "Adjustment to threshold to camp-on system", HFILL
}
1281 { &hf_seg2a_miscinfo_sb_selection_power
,
1282 { "SB_SELECTION_POWER", "gmr1.bcch.seg2a.miscinfo.sb_selection_power",
1283 FT_UINT8
, BASE_CUSTOM
, segx_half_db_value_fmt
, 0x00,
1286 { &hf_seg2a_lainfo_sa_pch_config
,
1287 { "SA_PCH_CONFIG", "gmr1.bcch.seg2a.lainfo.sa_pch_config",
1288 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
1289 "Paging group configuration information", HFILL
}
1291 { &hf_seg2a_lainfo_sa_bach_config
,
1292 { "SA_BACH_CONFIG", "gmr1.bcch.seg2a.lainfo.sa_bach_config",
1293 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
1294 "Alerting group configuration information", HFILL
}
1296 { &hf_seg2a_lainfo_rach_ts_offset
,
1297 { "RACH_TS_OFFSET", "gmr1.bcch.seg2a.lainfo.rach_ts_offset",
1298 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
1299 "Start of RACH window with respect to BCCH", HFILL
}
1301 { &hf_seg2a_lainfo_n_page_occurrences
,
1302 { "N Page Occurrences", "gmr1.bcch.seg2a.lainfo.n_page_occurrences",
1303 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
1304 "Number of times a page shall be retransmitted after the initial transmission", HFILL
}
1306 { &hf_seg2a_lainfo_imsi_attach_detach_ind
,
1307 { "IMSI attach-detach ind", "gmr1.bcch.seg2a.lainfo.imsi_attach_detach_ind",
1308 FT_UINT8
, BASE_DEC
, VALS(seg2a_lainfo_imsi_attach_detach_ind_vals
), 0x00,
1309 "Should MESs apply IMSI attach and detach procedure for this LA", HFILL
}
1311 { &hf_seg2a_lainfo_ecsc_indication
,
1312 { "ECSC indication", "gmr1.bcch.seg2a.lainfo.ecsc_indication",
1313 FT_UINT8
, BASE_DEC
, VALS(seg2a_lainfo_ecsc_indication_vals
), 0x00,
1314 "Early Classmark Sending Control", HFILL
}
1316 { &hf_seg2a_lainfo_si_update_ind
,
1317 { "SI update ind", "gmr1.bcch.seg2a.lainfo.si_update_ind",
1318 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
1319 "Flag for BACH reorganization. Value changes after each reorganization", HFILL
}
1322 /* Segment 3A - [1] 11.5.2.71 */
1323 { &hf_seg3a_lai_mcc
,
1324 { "Mobile Country Code (MCC)", "gmr1.bcch.seg3a.lai.mcc",
1325 FT_UINT16
, BASE_DEC
, NULL
, 0x00,
1328 { &hf_seg3a_lai_mnc
,
1329 { "Mobile Network Code (MNC)", "gmr1.bcch.seg3a.lai.mnc",
1330 FT_UINT16
, BASE_DEC
, NULL
, 0x00,
1333 { &hf_seg3a_lai_lac
,
1334 { "Location Area Code (LAC)", "gmr1.bcch.seg3a.lai.lac",
1335 FT_UINT16
, BASE_HEX
, NULL
, 0x00,
1338 { &hf_seg3a_lai_msc_id
,
1339 { "MSC ID", "gmr1.bcch.seg3a.lai.msc_id",
1340 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
1343 { &hf_seg3a_lai_spot_beam_id
,
1344 { "Spot Beam ID", "gmr1.bcch.seg3a.lai.spot_beam_id",
1345 FT_UINT16
, BASE_DEC
, NULL
, 0x00,
1348 { &hf_seg3a_system_sat_id
,
1349 { "Satellite ID", "gmr1.bcch.seg3a.system.sat_id",
1350 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
1353 { &hf_seg3a_system_sys_id
,
1354 { "System ID", "gmr1.bcch.seg3a.system.sys_id",
1355 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
1358 { &hf_seg3a_satpos_latitude
,
1359 { "Latitude", "gmr1.bcch.seg3a.satpos.latitude",
1360 FT_INT8
, BASE_CUSTOM
, seg3a_latitude_fmt
, 0x00,
1363 { &hf_seg3a_satpos_longitude
,
1364 { "Longitude", "gmr1.bcch.seg3a.satpos.longitude",
1365 FT_UINT16
, BASE_CUSTOM
, seg3a_longitude_fmt
, 0x00,
1368 { &hf_seg3a_satpos_radius
,
1369 { "Radius", "gmr1.bcch.seg3a.satpos.radius",
1370 FT_INT16
, BASE_CUSTOM
, seg3a_satpos_radius_fmt
, 0x00,
1373 { &hf_seg3a_beam_latitude
,
1374 { "Latitude", "gmr1.bcch.seg3a.beam.latitude",
1375 FT_INT16
, BASE_CUSTOM
, seg3a_latitude_fmt
, 0x00,
1378 { &hf_seg3a_beam_longitude
,
1379 { "Longitude", "gmr1.bcch.seg3a.beam.longitude",
1380 FT_UINT16
, BASE_CUSTOM
, seg3a_longitude_fmt
, 0x00,
1383 { &hf_seg3a_miscinfo_sb_reselection_timer
,
1384 { "SB_RESELECTION_TIMER", "gmr1.bcch.seg3a.sb_reselection_timer",
1385 FT_UINT8
, BASE_CUSTOM
, seg3a_miscinfo_sb_reselection_timer_fmt
, 0x00,
1389 { "Spare", "gmr1.bcch.seg3a.spare",
1390 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
1394 /* System Information fields - [1] 10.1.31 & 10.1.32 */
1395 { &hf_si_protocol_version
,
1396 { "Protocol version", "gmr1.bcch.si.protocol_version",
1397 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
1400 { &hf_si_block_type
,
1401 { "Block Type", "gmr1.bcch.si.block_type",
1402 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
1406 { "Spare", "gmr1.bcch.si.spare",
1407 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
1410 { &hf_si1_randomization_period
,
1411 { "Randomization Period", "gmr1.bcch.si.randomization_period",
1412 FT_UINT8
, BASE_DEC
, VALS(si1_randomization_period_vals
), 0x00,
1417 static gint
*ett
[] = {
1421 proto_gmr1_bcch
= proto_register_protocol("GEO-Mobile Radio (1) BCCH", "GMR-1 BCCH", "gmr1.bcch");
1423 proto_register_field_array(proto_gmr1_bcch
, hf
, array_length(hf
));
1424 proto_register_subtree_array(ett
, array_length(ett
));
1426 register_dissector("gmr1_bcch", dissect_gmr1_bcch
, proto_gmr1_bcch
);
1430 * Editor modelines - http://www.wireshark.org/tools/modelines.html
1435 * indent-tabs-mode: t
1438 * vi: set shiftwidth=8 tabstop=8 noexpandtab:
1439 * :indentSize=8:tabSize=8:noTabs=false: