1 /* packet-dvb-s2-table.c
2  * Routines for DVB-RCS2 Table dissection
3  * Copyright 2015-2020, Thales Alenia Space
4  * Copyright 2015-2020, Viveris Technologies <adrien.destugues@opensource.viveris.fr>
5  *
6  * Wireshark - Network traffic analyzer
7  * By Gerald Combs <gerald@wireshark.org>
8  * Copyright 1998 Gerald Combs
9  *
10  * This program is free software; you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License as published by
12  * the Free Software Foundation; either version 2 of the License, or
13  * (at your option) any later version.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU General Public License for more details.
19  *
20  * You should have received a copy of the GNU General Public License along
21  * with this program; if not, write to the Free Software Foundation, Inc.,
22  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
23  */
24 
25 #include "config.h"
26 
27 #include <glib.h>
28 #include <epan/packet.h>
29 #include <epan/prefs.h>
30 #include <epan/etypes.h>
31 #include <stdio.h>
32 #include "packet-snmp.h"
33 
34 void proto_register_dvb_s2_table(void);
35 void proto_reg_handoff_dvb_s2_table(void);
36 
37 
38 /* preferences */
39 #define DVB_S2_RCS_TABLE_DECODING      0
40 #define DVB_S2_RCS2_TABLE_DECODING     1
41 
42 static gint dvb_s2_rcs_version = DVB_S2_RCS2_TABLE_DECODING;
43 
44 /* Initialize the protocol and registered fields */
45 static int proto_dvb_s2_table = -1;
46 static int hf_dvb_s2_table_id = -1;
47 static int hf_dvb_s2_table_section = -1;
48 static int hf_dvb_s2_table_private = -1;
49 static int hf_dvb_s2_table_reserved = -1;
50 static int hf_dvb_s2_table_msb_len = -1;
51 static int hf_dvb_s2_table_lsb_len = -1;
52 static int hf_dvb_s2_table_network_interactive_id = -1;
53 static int hf_dvb_s2_table_reserved2 = -1;
54 static int hf_dvb_s2_table_version_number = -1;
55 static int hf_dvb_s2_table_current_next_indicator = -1;
56 static int hf_dvb_s2_table_section_number = -1;
57 static int hf_dvb_s2_table_last_section_number = -1;
58 
59 static int hf_dvb_s2_table_smt_id = -1;
60 static int hf_dvb_s2_table_smt_section_syntax_indicator = -1;
61 static int hf_dvb_s2_table_smt_futur_use = -1;
62 static int hf_dvb_s2_table_smt_reserved = -1;
63 static int hf_dvb_s2_table_smt_section_length = -1;
64 static int hf_dvb_s2_table_smt_esn0 = -1;
65 static int hf_dvb_s2_table_smt_modcod = -1;
66 
67 /* DSM-CC header */
68 static int hf_dvb_s2_section_syntax_indic = -1;
69 static int hf_dvb_s2_private_indicator = -1;
70 static int hf_dvb_s2_reserved_1 = -1;
71 static int hf_dvb_s2_section_length = -1;
72 static int hf_dvb_s2_mac_addres_6 = -1;
73 static int hf_dvb_s2_mac_addres_5 = -1;
74 static int hf_dvb_s2_mac_addres_4 = -1;
75 static int hf_dvb_s2_mac_addres_3 = -1;
76 static int hf_dvb_s2_mac_addres_2 = -1;
77 static int hf_dvb_s2_mac_addres_1 = -1;
78 static int hf_dvb_s2_reserved_2 = -1;
79 static int hf_dvb_s2_payload_scrambling_control = -1;
80 static int hf_dvb_s2_address_scrambling_control = -1;
81 static int hf_dvb_s2_LLC_SNAP_flag = -1;
82 static int hf_dvb_s2_current_next_indicator = -1;
83 static int hf_dvb_s2_section_number = -1;
84 static int hf_dvb_s2_last_section_number = -1;
85 
86 /* SCT */
87 static int hf_dvb_s2_table_superframe_loop_count = -1;
88 static int hf_dvb_s2_table_superframe = -1;
89 static int hf_dvb_s2_table_sf_sequence = -1;
90 static int hf_dvb_s2_table_sf_id = -1;
91 static int hf_dvb_s2_table_sf_large_timing_uncertaintly_flag = -1;
92 static int hf_dvb_s2_table_sf_uplink_polarization = -1;
93 static int hf_dvb_s2_table_sf_absolute_time = -1;
94 static int hf_dvb_s2_table_sf_duration = -1;
95 static int hf_dvb_s2_table_sf_centre_frequency = -1;
96 static int hf_dvb_s2_table_sf_count = -1;
97 static int hf_dvb_s2_table_sf_frame_loop_count = -1;
98 static int hf_dvb_s2_table_sf_frame = -1;
99 static int hf_dvb_s2_table_sf_frame_type = -1;
100 static int hf_dvb_s2_table_sf_frame_id = -1;
101 static int hf_dvb_s2_table_sf_frame_start_time = -1;
102 static int hf_dvb_s2_table_sf_frame_centre_frequency_offset = -1;
103 /* TIM */
104 static int hf_dvb_s2_table_rcst_status = -1;
105 static int hf_dvb_s2_table_network_status = -1;
106 static int hf_dvb_s2_table_desc_loop_count = -1;
107 /* TBTP */
108 static int hf_dvb_s2_tbtp_group_id = -1;
109 static int hf_dvb_s2_tbtp_superframe_count = -1;
110 static int hf_dvb_s2_tbtp_frame_loop_count = -1;
111 static int hf_dvb_s2_tbtp_sf_frame = -1;
112 static int hf_dvb_s2_tbtp_frame_number = -1;
113 static int hf_dvb_s2_tbtp_btb_loop_count = -1;
114 static int hf_dvb_s2_tbtp_btp = -1;
115 static int hf_dvb_s2_tbtp_multiple_channel_flag = -1;
116 static int hf_dvb_s2_tbtp_assignment_type = -1;
117 static int hf_dvb_s2_tbtp_frame_vbdc_queue_empty_flag = -1;
118 static int hf_dvb_s2_tbtp_start_slot = -1;
119 static int hf_dvb_s2_tbtp_channel_id = -1;
120 static int hf_dvb_s2_tbtp_logon_id = -1;
121 static int hf_dvb_s2_tbtp_assignment_count = -1;
122 /* TBTP2 */
123 static int hf_dvb_s2_table_group_id = -1;
124 static int hf_dvb_s2_table_assign_context = -1;
125 static int hf_dvb_s2_table_superframe_count = -1;
126 static int hf_dvb_s2_table_assign_format = -1;
127 static int hf_dvb_s2_table_frame_loop_count = -1;
128 static int hf_dvb_s2_table_frame_number = -1;
129 static int hf_dvb_s2_table_frame_assign_offset = -1;
130 static int hf_dvb_s2_table_frame_assign_loop_count = -1;
131 static int hf_dvb_s2_table_frame_assignment = -1;
132 static int hf_dvb_s2_table_frame_assign_id48 = -1;
133 static int hf_dvb_s2_table_frame_assign_id8 = -1;
134 static int hf_dvb_s2_table_frame_assign_id16 = -1;
135 static int hf_dvb_s2_table_frame_assign_id24 = -1;
136 static int hf_dvb_s2_table_frame_dynamic_tx_type = -1;
137 /* CMT */
138 static int hf_dvb_s2_table_entry_loop_count = -1;
139 static int hf_dvb_s2_table_entry = -1;
140 static int hf_dvb_s2_table_entry_login_id = -1;
141 /* TMST2 */
142 static int hf_dvb_s2_table_common_sytem_margin = -1;
143 static int hf_dvb_s2_table_tx_mode_count = -1;
144 static int hf_dvb_s2_table_tx_mode = -1;
145 static int hf_dvb_s2_table_tx_mode_frame_length = -1;
146 static int hf_dvb_s2_table_tx_mode_pilot_symbols = -1;
147 static int hf_dvb_s2_table_tx_mode_modcod = -1;
148 static int hf_dvb_s2_table_tx_mode_modcod_system_margin = -1;
149 static int hf_dvb_s2_table_tx_mode_isi = -1;
150 /* FCT2 */
151 static int hf_dvb_s2_table_frame_type_loop_count = -1;
152 static int hf_dvb_s2_table_frame_type_branch = -1;
153 static int hf_dvb_s2_table_frame_type = -1;
154 static int hf_dvb_s2_table_frame_type_frame_duration = -1;
155 static int hf_dvb_s2_table_frame_type_tx_format_class = -1;
156 static int hf_dvb_s2_table_frame_type_btu_duration = -1;
157 static int hf_dvb_s2_table_frame_type_btu_carrier_bw = -1;
158 static int hf_dvb_s2_table_frame_type_btu_symbol_rate = -1;
159 static int hf_dvb_s2_table_frame_type_time_unit_count = -1;
160 static int hf_dvb_s2_table_frame_type_grid_repeat_count = -1;
161 static int hf_dvb_s2_table_frame_type_grid_frequency_offset = -1;
162 static int hf_dvb_s2_table_frame_type_section_loop_count = -1;
163 static int hf_dvb_s2_table_frame_type_section = -1;
164 static int hf_dvb_s2_table_frame_type_section_default_tx_type = -1;
165 static int hf_dvb_s2_table_frame_type_section_fix_acc_method = -1;
166 static int hf_dvb_s2_table_frame_type_section_repeat_count= -1;
167 /* FCT */
168 static int hf_dvb_s2_table_frame_ID_loop_count = -1;
169 static int hf_dvb_s2_table_frame_ID_branch = -1;
170 static int hf_dvb_s2_table_frame_ID = -1;
171 static int hf_dvb_s2_table_frame_ID_frame_duration = -1;
172 static int hf_dvb_s2_table_frame_ID_total_timeslot_count = -1;
173 static int hf_dvb_s2_table_frame_ID_start_timeslot_number = -1;
174 static int hf_dvb_s2_table_frame_ID_timeslot_loop_count = -1;
175 static int hf_dvb_s2_table_frame_ID_timeslot = -1;
176 static int hf_dvb_s2_table_frame_ID_timeslot_timeslot_frequency_offset = -1;
177 static int hf_dvb_s2_table_frame_ID_timeslot_timeslot_time_offset = -1;
178 static int hf_dvb_s2_table_frame_ID_timeslot_timeslot_id = -1;
179 static int hf_dvb_s2_table_frame_ID_timeslot_repeat_count = -1;
180 /* BCT */
181 static int hf_dvb_s2_table_tx_type_loop_count = -1;
182 static int hf_dvb_s2_table_tx_type_branch = -1;
183 static int hf_dvb_s2_table_tx_type = -1;
184 static int hf_dvb_s2_table_tx_type_tx_content_type = -1;
185 static int hf_dvb_s2_table_tx_type_tx_format_class = -1;
186 static int hf_dvb_s2_table_tx_type_tx_format_data_length = -1;
187 static int hf_dvb_s2_table_tx_type_tx_format_data = -1;
188 /* BCT Common Tx */
189 static int hf_dvb_s2_table_tx_type_tx_block_size = -1;
190 static int hf_dvb_s2_table_tx_type_threshold_es_n0 = -1;
191 static int hf_dvb_s2_table_tx_type_payload_size = -1;
192 static int hf_dvb_s2_table_tx_type_modulation_scheme = -1;
193 static int hf_dvb_s2_table_tx_type_p = -1;
194 static int hf_dvb_s2_table_tx_type_q0 = -1;
195 static int hf_dvb_s2_table_tx_type_q1 = -1;
196 static int hf_dvb_s2_table_tx_type_q2 = -1;
197 static int hf_dvb_s2_table_tx_type_q3 = -1;
198 static int hf_dvb_s2_table_tx_type_y_period = -1;
199 static int hf_dvb_s2_table_tx_type_w_period = -1;
200 static int hf_dvb_s2_table_tx_type_y_pattern = -1;
201 static int hf_dvb_s2_table_tx_type_y_pattern_bit = -1;
202 static int hf_dvb_s2_table_tx_type_w_pattern = -1;
203 static int hf_dvb_s2_table_tx_type_w_pattern_bit = -1;
204 static int hf_dvb_s2_table_tx_type_preamble_len = -1;
205 static int hf_dvb_s2_table_tx_type_postamble_len = -1;
206 static int hf_dvb_s2_table_tx_type_pilot_period = -1;
207 static int hf_dvb_s2_table_tx_type_pilot_block_len = -1;
208 static int hf_dvb_s2_table_tx_type_pilot_sum = -1;
209 static int hf_dvb_s2_table_tx_type_uw_symbol = -1;
210 static int hf_dvb_s2_table_tx_type_uw_symbol_unit = -1;
211 static int hf_dvb_s2_table_tx_type_uw_symbol_qpsk = -1;
212 static int hf_dvb_s2_table_tx_type_uw_symbol_8psk = -1;
213 static int hf_dvb_s2_table_tx_type_uw_symbol_16qam = -1;
214 static int hf_dvb_s2_table_tx_type_waveform_id = -1;
215 static int hf_dvb_s2_table_tx_type_tx_start_offset = -1;
216 /* BCT LM Tx */
217 static int hf_dvb_s2_table_tx_type_tx_start_offset_1 = -1;
218 static int hf_dvb_s2_table_tx_type_tx_start_offset_2 = -1;
219 /* BCT CPM Tx */
220 static int hf_dvb_s2_table_tx_type_modulation_mh = -1;
221 static int hf_dvb_s2_table_tx_type_modulation_ph = -1;
222 static int hf_dvb_s2_table_tx_type_modulation_type = -1;
223 static int hf_dvb_s2_table_tx_type_alpha_rc = -1;
224 static int hf_dvb_s2_table_tx_type_code_rate = -1;
225 static int hf_dvb_s2_table_tx_type_constraint_length_k = -1;
226 static int hf_dvb_s2_table_tx_type_uw_length = -1;
227 static int hf_dvb_s2_table_tx_type_nbr_uw_segments = -1;
228 static int hf_dvb_s2_table_tx_type_uw_segment = -1;
229 static int hf_dvb_s2_table_tx_type_uw_segment_start = -1;
230 static int hf_dvb_s2_table_tx_type_uw_segment_length = -1;
231 static int hf_dvb_s2_table_tx_type_param_interleaver = -1;
232 static int hf_dvb_s2_table_tx_type_n = -1;
233 static int hf_dvb_s2_table_tx_type_s = -1;
234 static int hf_dvb_s2_table_tx_type_p_interleaver = -1;
235 static int hf_dvb_s2_table_tx_type_n1_12 = -1;
236 static int hf_dvb_s2_table_tx_type_k1_12 = -1;
237 static int hf_dvb_s2_table_tx_type_K2_12 = -1;
238 static int hf_dvb_s2_table_tx_type_K3_12 = -1;
239 static int hf_dvb_s2_table_tx_type_pi_i = -1;
240 /* SPT */
241 static int hf_dvb_s2_table_satellite_loop_count = -1;
242 static int hf_dvb_s2_table_satellite = -1;
243 static int hf_dvb_s2_table_satellite_id = -1;
244 static int hf_dvb_s2_table_satellite_x_coordinate = -1;
245 static int hf_dvb_s2_table_satellite_y_coordinate = -1;
246 static int hf_dvb_s2_table_satellite_z_coordinate = -1;
247 /* NIT - RMT */
248 static int hf_dvb_s2_table_network_descriptors_length = -1;
249 static int hf_dvb_s2_table_multiplex_streams_spec_length = -1;
250 static int hf_dvb_s2_table_multiplex = -1;
251 static int hf_dvb_s2_table_multiplex_forward_multiplex = -1;
252 static int hf_dvb_s2_table_multiplex_reward_multiplex = -1;
253 static int hf_dvb_s2_table_multiplex_original_network_id = -1;
254 static int hf_dvb_s2_table_multiplex_transport_descriptors_length = -1;
255 /* TDT */
256 static int hf_dvb_s2_reserved_future_use = -1;
257 static int hf_dvb_s2_reserved_tdt = -1;
258 static int hf_dvb_s2_tdt_date = -1;
259 static int hf_dvb_s2_tdt_hour = -1;
260 static int hf_dvb_s2_tdt_minute = -1;
261 static int hf_dvb_s2_tdt_second = -1;
262 /* MMT2 */
263 static int hf_dvb_s2_table_svn_number = -1;
264 static int hf_dvb_s2_table_svn_prefix_size = -1;
265 static int hf_dvb_s2_table_pt_count = -1;
266 static int hf_dvb_s2_table_protocol = -1;
267 static int hf_dvb_s2_table_pt_protocol_type = -1;
268 static int hf_dvb_s2_table_pt_address_size = -1;
269 static int hf_dvb_s2_table_pt_mapping_sections = -1;
270 static int hf_dvb_s2_table_pt_mapping_section = -1;
271 static int hf_dvb_s2_table_pt_ms_inclusion_start = -1;
272 static int hf_dvb_s2_table_pt_ms_inclusion_end = -1;
273 static int hf_dvb_s2_table_pt_ms_exclusions = -1;
274 static int hf_dvb_s2_table_pt_ms_exclusion = -1;
275 static int hf_dvb_s2_table_pt_ms_exclusion_start = -1;
276 static int hf_dvb_s2_table_pt_ms_exclusion_end = -1;
277 static int hf_dvb_s2_table_pt_ms_mac24_base = -1;
278 static int hf_dvb_s2_table_pt_ms_mcast_prefix_size = -1;
279 
280 /* Descriptors */
281 static int hf_dvb_s2_table_descriptor = -1;
282 static int hf_dvb_s2_table_desc_tag = -1;
283 static int hf_dvb_s2_table_desc_length = -1;
284 static int hf_dvb_s2_table_nnd_char = -1;
285 /* Linkage Descriptor */
286 static int hf_dvb_s2_table_ld_fm_id = -1;
287 static int hf_dvb_s2_table_ld_on_id = -1;
288 static int hf_dvb_s2_table_ld_rm_id = -1;
289 static int hf_dvb_s2_table_ld_service_id = -1;
290 static int hf_dvb_s2_table_ld_linkage_type = -1;
291 static int hf_dvb_s2_table_ld_ho_type = -1;
292 static int hf_dvb_s2_table_ld_reserved_future_use = -1;
293 static int hf_dvb_s2_table_ld_origin_type = -1;
294 static int hf_dvb_s2_table_ld_network_id = -1;
295 static int hf_dvb_s2_table_ld_initial_service_id = -1;
296 static int hf_dvb_s2_table_ld_target_event_id = -1;
297 static int hf_dvb_s2_table_ld_target_listed = -1;
298 static int hf_dvb_s2_table_ld_event_simulcast = -1;
299 static int hf_dvb_s2_table_ld_reserved = -1;
300 static int hf_dvb_s2_table_ld_private_data = -1;
301 static int hf_dvb_s2_table_ld_population_id_loop_count = -1;
302 static int hf_dvb_s2_table_ld_population_id_base = -1;
303 static int hf_dvb_s2_table_ld_population_id_mask = -1;
304 
305 /* Satellite Return Link Descriptor */
306 static int hf_dvb_s2_table_srld_satellite_id = -1;
307 static int hf_dvb_s2_table_srld_beam_id = -1;
308 static int hf_dvb_s2_table_srld_gateway_id = -1;
309 static int hf_dvb_s2_table_srld_reserved = -1;
310 static int hf_dvb_s2_table_srld_orbital_position = -1;
311 static int hf_dvb_s2_table_srld_west_east_flag = -1;
312 static int hf_dvb_s2_table_srld_superframe_sequence = -1;
313 static int hf_dvb_s2_table_srld_tx_frequency_offset = -1;
314 static int hf_dvb_s2_table_srld_zero_frequency_offset = -1;
315 static int hf_dvb_s2_table_srld_private_data = -1;
316 /* Logon Initialize Descriptor */
317 static int hf_dvb_s2_table_lid_group_id = -1;
318 static int hf_dvb_s2_table_lid_logon_id = -1;
319 static int hf_dvb_s2_table_lid_continuous_carrier = -1;
320 static int hf_dvb_s2_table_lid_security_handshake = -1;
321 static int hf_dvb_s2_table_lid_prefix_flag = -1;
322 static int hf_dvb_s2_table_lid_data_unit_label_flag = -1;
323 static int hf_dvb_s2_table_lid_mini_slot_flag = -1;
324 static int hf_dvb_s2_table_lid_contention_based_mini_slot_flag = -1;
325 static int hf_dvb_s2_table_lid_capacity_type_flag = -1;
326 static int hf_dvb_s2_table_lid_traffic_burst_type = -1;
327 static int hf_dvb_s2_table_lid_connectivity = -1;
328 static int hf_dvb_s2_table_lid_return_vpi = -1;
329 static int hf_dvb_s2_table_lid_return_vci = -1;
330 static int hf_dvb_s2_table_lid_return_signalling_vpi = -1;
331 static int hf_dvb_s2_table_lid_return_signalling_vci = -1;
332 static int hf_dvb_s2_table_lid_forward_signalling_vpi = -1;
333 static int hf_dvb_s2_table_lid_forward_signalling_vci = -1;
334 static int hf_dvb_s2_table_lid_return_trf_pid = -1;
335 static int hf_dvb_s2_table_lid_return_ctrl_mngm_pid = -1;
336 static int hf_dvb_s2_table_lid_cra_level = -1;
337 static int hf_dvb_s2_table_lid_vbdc_max = -1;
338 static int hf_dvb_s2_table_lid_rbdc_max = -1;
339 static int hf_dvb_s2_table_lid_rbdc_timeout = -1;
340 /* Forward Interaction Path Descriptor */
341 static int hf_dvb_s2_table_fipd_original_network_id = -1;
342 static int hf_dvb_s2_table_fipd_transport_stream_id = -1;
343 static int hf_dvb_s2_table_fipd_pid_loop_count = -1;
344 static int hf_dvb_s2_table_fipd_pid = -1;
345 /* Return Interaction Path Descriptor */
346 static int hf_dvb_s2_table_ripd_continuous_carrier = -1;
347 static int hf_dvb_s2_table_ripd_network_routing_label_loop_count = -1;
348 static int hf_dvb_s2_table_ripd_allocation_desallocation_flag = -1;
349 static int hf_dvb_s2_table_ripd_pid_flag = -1;
350 static int hf_dvb_s2_table_ripd_pid_loop_count = -1;
351 static int hf_dvb_s2_table_ripd_pid = -1;
352 static int hf_dvb_s2_table_ripd_vpi_vci_flag = -1;
353 static int hf_dvb_s2_table_ripd_vpi_vci_loop_count = -1;
354 static int hf_dvb_s2_table_ripd_vpi = -1;
355 static int hf_dvb_s2_table_ripd_vci = -1;
356 static int hf_dvb_s2_table_ripd_route_id_flag = -1;
357 static int hf_dvb_s2_table_ripd_route_id_loop_count = -1;
358 static int hf_dvb_s2_table_ripd_route_id = -1;
359 static int hf_dvb_s2_table_ripd_channel_id = -1;
360 static int hf_dvb_s2_desc_network_routing = -1;
361 /* Correction Control Descriptor */
362 static int hf_dvb_s2_table_corcd_acq_response_timeout = -1;
363 static int hf_dvb_s2_table_corcd_sync_response_timeout = -1;
364 static int hf_dvb_s2_table_corcd_acq_max_losses = -1;
365 static int hf_dvb_s2_table_corcd_sync_max_losses = -1;
366 /* Contention Control Descriptor */
367 static int hf_dvb_s2_table_concd_superframe_id = -1;
368 static int hf_dvb_s2_table_concd_csc_response_timeout = -1;
369 static int hf_dvb_s2_table_concd_csc_max_losses = -1;
370 static int hf_dvb_s2_table_concd_max_time_before_retry = -1;
371 
372 /* Control assign descriptor */
373 static int hf_dvb_s2_table_desc_sync_achieved_time_threshold = -1;
374 static int hf_dvb_s2_table_desc_max_sync_tries = -1;
375 static int hf_dvb_s2_table_desc_sync_achieved_freq_threshold = -1;
376 static int hf_dvb_s2_table_desc_ctrl_start_superframe_count = -1;
377 static int hf_dvb_s2_table_desc_ctrl_frame_nbr = -1;
378 static int hf_dvb_s2_table_desc_ctrl_repeat_period = -1;
379 static int hf_dvb_s2_table_desc_ctrl_timeslot_nbr = -1;
380 static int hf_dvb_s2_table_desc_sync_start_superframe = -1;
381 static int hf_dvb_s2_table_desc_sync_frame_nbr = -1;
382 static int hf_dvb_s2_table_desc_sync_repeat_period = -1;
383 static int hf_dvb_s2_table_desc_sync_slot_nbr = -1;
384 /* Correction message descriptor */
385 static int hf_dvb_s2_table_desc_time_correct_flag = -1;
386 static int hf_dvb_s2_table_desc_power_correct_flag = -1;
387 static int hf_dvb_s2_table_desc_freq_correct_flag = -1;
388 static int hf_dvb_s2_table_desc_slot_type = -1;
389 static int hf_dvb_s2_table_desc_burst_time_scaling = -1;
390 static int hf_dvb_s2_table_desc_burst_time_correct = -1;
391 static int hf_dvb_s2_table_desc_power_ctrl_flag = -1;
392 static int hf_dvb_s2_table_desc_power_correction = -1;
393 static int hf_dvb_s2_table_desc_power_esn0 = -1;
394 static int hf_dvb_s2_table_desc_freq_correction = -1;
395 /* Correction message extension descriptor */
396 static int hf_dvb_s2_table_desc_slot_nbr = -1;
397 static int hf_dvb_s2_table_desc_sf_sequence = -1;
398 static int hf_dvb_s2_table_desc_frame_number = -1;
399 /* Logon response descriptor */
400 static int hf_dvb_s2_table_desc_keep_id_after_logoff = -1;
401 static int hf_dvb_s2_table_desc_power_ctrl_mode = -1;
402 static int hf_dvb_s2_table_desc_rcst_access_status = -1;
403 static int hf_dvb_s2_table_desc_logon_id = -1;
404 static int hf_dvb_s2_table_desc_lowest_assign_id = -1;
405 static int hf_dvb_s2_table_desc_assign_id_count = -1;
406 static int hf_dvb_s2_table_desc_unicast_mac24_count = -1;
407 /* Satellite Forward Link Descriptor */
408 static int hf_dvb_s2_table_sfld_satellite_id = -1;
409 static int hf_dvb_s2_table_sfld_beam_id = -1;
410 static int hf_dvb_s2_table_sfld_ncc_id = -1;
411 static int hf_dvb_s2_table_sfld_multiplex_usage = -1;
412 static int hf_dvb_s2_table_sfld_local_multiplex_id = -1;
413 static int hf_dvb_s2_table_sfld_frequency = -1;
414 static int hf_dvb_s2_table_sfld_orbital_position = -1;
415 static int hf_dvb_s2_table_sfld_west_east_flag = -1;
416 static int hf_dvb_s2_table_sfld_polarization = -1;
417 static int hf_dvb_s2_table_sfld_transmission_standard = -1;
418 static int hf_dvb_s2_table_sfld_scrambling_sequence_selector = -1;
419 static int hf_dvb_s2_table_sfld_roll_off = -1;
420 static int hf_dvb_s2_table_sfld_symbol_rate = -1;
421 static int hf_dvb_s2_table_sfld_fec_inner = -1;
422 static int hf_dvb_s2_table_sfld_input_stream_identifier = -1;
423 static int hf_dvb_s2_table_sfld_reserved_for_forward_spreading = -1;
424 static int hf_dvb_s2_table_sfld_scrambling_sequence_index = -1;
425 static int hf_dvb_s2_table_sfld_private_data = -1;
426 static int hf_dvb_s2_table_sfld_ncr_private_data = -1;
427 static int hf_dvb_s2_table_sfld_ncr_base_private_data = -1;
428 static int hf_dvb_s2_table_sfld_ncr_ext_private_data = -1;
429 
430 static int hf_dvb_s2_table_mac24 = -1;
431 static int hf_dvb_s2_table_mac24_prefix_size = -1;
432 static int hf_dvb_s2_table_mac24_unicast = -1;
433 static int hf_dvb_s2_table_mac24_mcast_mapping_method = -1;
434 static int hf_dvb_s2_table_mac24_mcast_ip_version_ind_pres = -1;
435 static int hf_dvb_s2_table_mac24_mcast_synthesis_field_size = -1;
436 static int hf_dvb_s2_table_desc_default_svn_number = -1;
437 static int hf_dvb_s2_table_desc_reserved = -1;
438 /* Lower layer service descriptor */
439 static int hf_dvb_s2_table_desc_default_ctrl_random_interval = -1;
440 static int hf_dvb_s2_table_desc_dynamic_rate_persistence = -1;
441 static int hf_dvb_s2_table_desc_volume_backlog_persistence = -1;
442 static int hf_dvb_s2_table_desc_lls_count = -1;
443 static int hf_dvb_s2_table_desc_rc_count = -1;
444 static int hf_dvb_s2_table_desc_ra_ac_count = -1;
445 
446 static int hf_dvb_s2_table_lls = -1;
447 static int hf_dvb_s2_table_lls_index = -1;
448 static int hf_dvb_s2_table_lls_random_access = -1;
449 static int hf_dvb_s2_table_lls_dedicated_access = -1;
450 static int hf_dvb_s2_table_lls_nominal_rc_index = -1;
451 static int hf_dvb_s2_table_lls_nominal_da_ac_index = -1;
452 static int hf_dvb_s2_table_lls_conditional_demand_rc_map = -1;
453 static int hf_dvb_s2_table_lls_conditional_scheduler_da_ac_map = -1;
454 static int hf_dvb_s2_table_lls_nominal_ra_ac_index = -1;
455 static int hf_dvb_s2_table_lls_conditional_scheduler_ra_ac_map = -1;
456 
457 /* Mobility Control descriptor */
458 static int hf_dvb_s2_table_mc_command_value = -1;
459 static int hf_dvb_s2_table_mc_command_parameter = -1;
460 
461 static int hf_dvb_s2_table_lsvd_group_count = -1;
462 static int hf_dvb_s2_table_lsvd_oui = -1;
463 static int hf_dvb_s2_table_lsvd_mcast_address = -1;
464 static int hf_dvb_s2_table_lsvd_mcast_port = -1;
465 static int hf_dvb_s2_table_lsvd_version_field_length = -1;
466 static int hf_dvb_s2_table_lsvd_version_bytes = -1;
467 
468 static int hf_dvb_s2_table_rc = -1;
469 static int hf_dvb_s2_table_rc_index = -1;
470 static int hf_dvb_s2_table_rc_constant_assignment_provided = -1;
471 static int hf_dvb_s2_table_rc_volume_allowed = -1;
472 static int hf_dvb_s2_table_rc_rbdc_allowed = -1;
473 static int hf_dvb_s2_table_rc_maximum_service_rate = -1;
474 static int hf_dvb_s2_table_rc_minimum_service_rate = -1;
475 static int hf_dvb_s2_table_rc_constant_service_rate = -1;
476 static int hf_dvb_s2_table_rc_maximum_backlog = -1;
477 
478 static int hf_dvb_s2_table_ra_ac = -1;
479 static int hf_dvb_s2_table_ra_ac_index = -1;
480 static int hf_dvb_s2_table_ra_ac_max_unique_payload_per_block = -1;
481 static int hf_dvb_s2_table_ra_ac_max_consecutive_block_accessed = -1;
482 static int hf_dvb_s2_table_ra_ac_min_idle_block = -1;
483 static int hf_dvb_s2_table_ra_ac_defaults_field_size = -1;
484 static int hf_dvb_s2_table_ra_ac_defaults_for_ra_load_control = -1;
485 
486 static int hf_dvb_s2_table_crc32 = -1;
487 
488 /* Initialize the subtree pointers */
489 static gint ett_dvb_s2_hdr_table_network_routing = -1;
490 static gint ett_dvb_s2_hdr_table = -1;
491 static gint ett_dvb_s2_hdr_table_sf = -1;
492 static gint ett_dvb_s2_hdr_table_sf_frame = -1;
493 static gint ett_dvb_s2_hdr_table_desc = -1;
494 static gint ett_dvb_s2_hdr_table_frame = -1;
495 static gint ett_dvb_s2_hdr_table_frame_assign = -1;
496 static gint ett_dvb_s2_hdr_table_entry = -1;
497 static gint ett_dvb_s2_hdr_table_mac24 = -1;
498 static gint ett_dvb_s2_hdr_table_frametype = -1;
499 static gint ett_dvb_s2_hdr_table_frame_ID = -1;
500 static gint ett_dvb_s2_hdr_table_frame_ID_timeslot = -1;
501 static gint ett_dvb_s2_hdr_table_frametype_section = -1;
502 static gint ett_dvb_s2_hdr_table_lls = -1;
503 static gint ett_dvb_s2_hdr_table_rc = -1;
504 static gint ett_dvb_s2_hdr_table_raac = -1;
505 static gint ett_dvb_s2_hdr_table_txmode = -1;
506 static gint ett_dvb_s2_hdr_table_txtype = -1;
507 static gint ett_dvb_s2_hdr_table_txtype_ypattern = -1;
508 static gint ett_dvb_s2_hdr_table_txtype_wpattern = -1;
509 static gint ett_dvb_s2_hdr_table_txtype_uwsymbol = -1;
510 static gint ett_dvb_s2_hdr_table_txtype_uwsegment = -1;
511 static gint ett_dvb_s2_hdr_table_satellite = -1;
512 static gint ett_dvb_s2_hdr_table_multiplex = -1;
513 static gint ett_dvb_s2_hdr_table_pt = -1;
514 static gint ett_dvb_s2_hdr_table_pt_ms = -1;
515 static gint ett_dvb_s2_hdr_table_pt_ms_exclusion = -1;
516 static gint ett_dvb_s2_hdr_tbtp_frame = -1;
517 static gint ett_dvb_s2_hdr_tbtp_frame_btp = -1;
518 
519 static const value_string table_modcods[] = {
520     { 0, "DUMMY PLFRAME"},
521     { 1, "QPSK 1/4"},
522     { 2, "QPSK 1/3"},
523     { 3, "QPSK 2/5"},
524     { 4, "QPSK 1/2"},
525     { 5, "QPSK 3/5"},
526     { 6, "QPSK 2/3"},
527     { 7, "QPSK 3/4"},
528     { 8, "QPSK 4/5"},
529     { 9, "QPSK 5/6"},
530     {10, "QPSK 8/9"},
531     {11, "QPSK 9/10"},
532     {12, "8PSK 3/5"},
533     {13, "8PSK 2/3"},
534     {14, "8PSK 3/4"},
535     {15, "8PSK 5/6"},
536     {16, "8PSK 8/9"},
537     {17, "8PSK 9/10"},
538     {18, "16APSK 2/3"},
539     {19, "16APSK 3/4"},
540     {20, "16APSK 4/5"},
541     {21, "16APSK 5/6"},
542     {22, "16APSK 8/9"},
543     {23, "16APSK 9/10"},
544     {24, "32APSK 3/4"},
545     {25, "32APSK 4/5"},
546     {26, "32APSK 5/6"},
547     {27, "32APSK 8/9"},
548     {28, "32APSK 9/10"},
549     {29, "reserved"},
550     {30, "reserved"},
551     {31, "reserved"},
552     { 0, NULL}
553 };
554 
555 #define DVB_S2_TABLE_SECTION_MASK 0x80
556 #define DVB_S2_TABLE_PRIVATE_MASK 0x40
557 #define DVB_S2_TABLE_RESERVED_MASK 0x30
558 #define DVB_S2_TABLE_MSB_LEN_MASK 0x0F
559 #define DVB_S2_TABLE_RESERVED2_MASK 0xC0
560 #define DVB_S2_TABLE_VERSION_NUMBER_MASK 0x3E
561 #define DVB_S2_TABLE_CURRENT_NEXT_INDICATOR_MASK 0x01
562 
563 #define DVB_S2_TABLE_SECTION_SYNTAX_INDIC_MASK 0x80
564 #define DVB_S2_TABLE_PRIVATE_INDICATOR_MASK 0x40
565 #define DVB_S2_TABLE_RESERVED_ONE_MASK 0x30
566 #define DVB_S2_TABLE_SECTION_LENGTH_MASK 0x0FFF
567 #define DVB_S2_TABLE_RESERVED_TWO_MASK 0xC0
568 #define DVB_S2_TABLE_PAYLOAD_SCRAMBLING_MASK 0x30
569 #define DVB_S2_TABLE_ADDRESS_SCRAMBLING_MASK 0x0C
570 #define DVB_S2_TABLE_LLC_SNAP_MASK 0x02
571 
572 #define DVB_S2_TABLE_SMT_SECTION_INDICATOR_MASK 0x8000
573 #define DVB_S2_TABLE_SMT_FUTUR_USE_MASK 0x4000
574 #define DVB_S2_TABLE_SMT_RESERVED_MASK 0x3000
575 #define DVB_S2_TABLE_SMT_SECTION_LENGTH_MASK 0x0FFF
576 
577 #define DVB_S2_TABLE_SCT_LARGE_TIMING_FLAG_MASK 0x80
578 #define DVB_S2_TABLE_SCT_UPLINK_POLARIZATION_MASK 0x03
579 #define DVB_S2_TABLE_SCT_START_TIME_BASE_MASK 0x8000
580 #define DVB_S2_TABLE_SCT_START_TIME_EXT_MASK 0x01FF
581 #define DVB_S2_TABLE_SCT_FRAME_LOOP_COUNT_MASK 0x1F
582 #define DVB_S2_TABLE_TBTP_BTP_LOOP_COUNT_MASK 0x07FF
583 #define DVB_S2_TABLE_TBTP_FRAME_NUMBER_MASK 0x1F
584 #define DVB_S2_TABLE_TBTP_MULTIPLE_CHANNEL_FLAG_MASK 0x80
585 #define DVB_S2_TABLE_TBTP_ASSIGNMENT_TYPE_MASK 0x60
586 #define DVB_S2_TABLE_TBTP_VBDC_FLAG_MASK 0x10
587 #define DVB_S2_TABLE_TBTP_START_SLOT_MASK 0x07FF
588 
589 #define DVB_S2_TABLE_FRAME_TYPE_SECTION_FAM_MASK 0xC
590 #define DVB_S2_TABLE_FRAME_ID_TOT_TIME_COUNT_MASK 0x07FF
591 #define DVB_S2_TABLE_NETWORK_DESC_LENGTH_MASK 0x0FFF
592 #define DVB_S2_TABLE_MULTIPLEX_STREAMS_LENGTH_MASK 0x0FFF
593 #define DVB_S2_TABLE_MULTIPLEX_TRANSPORT_DESC_LENGTH_MASK 0x0FFF
594 #define DVB_S2_TABLE_SVN_PREFIX_SIZE_MASK 0x1F
595 #define DVB_S2_TABLE_PT_MS_MCAST_PREFIX_SIZE_MASK 0x1F
596 #define DVB_S2_TABLE_TX_TYPE_TX_START_OFFSET_MASK 0x000FFFFF
597 #define DVB_S2_TABLE_TX_TYPE_QX_MASK 0x0F
598 #define DVB_S2_TABLE_TX_TYPE_W_Y_PERIOD_MASK 0x1F
599 #define DVB_S2_TABLE_TX_TYPE_PILOT_PERIOD_MASK 0x0FFF
600 #define DVB_S2_TABLE_TX_TYPE_W_Y_PATTERN_BIT_MASK 0x80
601 #define DVB_S2_TABLE_TX_TYPE_MODULATION_MH_MASK 0xE0
602 #define DVB_S2_TABLE_TX_TYPE_MODULATION_PH_MASK 0x1C
603 #define DVB_S2_TABLE_TX_TYPE_MODULATION_TYPE_MASK 0x01
604 #define DVB_S2_TABLE_TX_TYPE_CODE_RATE_MASK 0x1C
605 #define DVB_S2_TABLE_TX_TYPE_CONSTRAINT_LENGTH_K_MASK 0x01
606 #define DVB_S2_TABLE_TX_TYPE_PARAM_INTERLEAVER_MASK 0x01
607 #define DVB_S2_TABLE_TX_TYPE_N_MASK 0xFFF0
608 #define DVB_S2_TABLE_TX_TYPE_S_MASK 0x0FC0
609 #define DVB_S2_TABLE_TX_TYPE_P_MASK 0x3FF0
610 #define DVB_S2_TABLE_TX_TYPE_N1_12_MASK 0x0FF8
611 #define DVB_S2_TABLE_TX_TYPE_K1_12_MASK 0x07FC
612 #define DVB_S2_TABLE_TX_TYPE_K2_12_MASK 0x03FE
613 #define DVB_S2_TABLE_TX_TYPE_K3_12_MASK 0x01FF
614 #define DVB_S2_TABLE_TX_TYPE_UW_SYMBOL_QPSK_MASK 0xC0
615 #define DVB_S2_TABLE_TX_TYPE_UW_SYMBOL_8PSK_MASK 0xE0
616 #define DVB_S2_TABLE_TX_TYPE_UW_SYMBOL_16QAM_MASK 0xF0
617 
618 #define DVB_S2_TABLE_DESC_TIME_CORRECT_FLAG_MASK 0x80
619 #define DVB_S2_TABLE_DESC_POWER_CORRECT_FLAG_MASK 0x40
620 #define DVB_S2_TABLE_DESC_FREQ_CORRECT_FLAG_MASK 0x20
621 #define DVB_S2_TABLE_DESC_SLOT_TYPE_MASK 0x18
622 #define DVB_S2_TABLE_DESC_BURST_TIME_SCALING_MASK 0x7
623 #define DVB_S2_TABLE_DESC_POWER_CTRL_FLAG_MASK 0x80
624 #define DVB_S2_TABLE_DESC_POWER_CORRECTION_MASK 0x7F
625 #define DVB_S2_TABLE_DESC_KEEP_ID_AFTER_LOGOFF_MASK 0x40
626 #define DVB_S2_TABLE_DESC_POWER_CTRLMODE_MASK 0x30
627 #define DVB_S2_TABLE_DESC_RCST_ACCESS_STATUS_MASK 0x0F
628 #define DVB_S2_TABLE_DESC_ASSIGN_ID_COUNT_MASK 0xF0
629 #define DVB_S2_TABLE_DESC_UNICAST_MAC24_COUNT_MASK 0x0F
630 #define DVB_S2_TABLE_DESC_LLS_COUNT_MASK 0x0F
631 #define DVB_S2_TABLE_DESC_RC_COUNT_MASK 0x0F
632 #define DVB_S2_TABLE_DESC_RA_AC_COUNT_MASK 0x0F
633 #define DVB_S2_TABLE_DESC_CTRL_TIMESLOT_NBR_MASK 0x07FF
634 #define DVB_S2_TABLE_DESC_SYNC_FRAME_NBR_MASK 0x07FF
635 #define DVB_S2_TABLE_DESC_PID_LOOP_COUNT 0x0F
636 
637 #define DVB_S2_TABLE_DESC_HAND_OVER_TYPE_MASK 0xF0
638 #define DVB_S2_TABLE_DESC_ORIGIN_TYPE_MASK 0x01
639 #define DVB_S2_TABLE_DESC_RESERVED_FOR_FUTURE_USE_MASK 0x0E
640 #define DVB_S2_TABLE_DESC_CAPCITY_TYPE_FLAG_MASK 0x40
641 #define DVB_S2_TABLE_DESC_TRAFFIC_BURST_TYPE_MASK 0x20
642 #define DVB_S2_TABLE_DESC_CONNECTIVITY_MASK 0x10
643 #define DVB_S2_TABLE_DESC_TRANSMISSION_STANDARD_MASK 0x18
644 #define DVB_S2_TABLE_DESC_SCRAMBLING_SEQUENCE_SELECTOR_MASK 0x04
645 
646 #define DVB_S2_TABLE_DESC_NETWORK_ROUTING_LABEL 0x0F
647 #define DVB_S2_TABLE_DESC_PID_FLAG_MASK 0x01
648 #define DVB_S2_TABLE_DESC_VPI_VCI_FLAG_MASK 0x01
649 #define DVB_S2_TABLE_DESC_ROUTE_ID_FLAG_MASK 0x01
650 
651 #define DVB_S2_TABLE_RA_AC_INDEX_MASK 0x0F
652 #define DVB_S2_TABLE_RC_RBDC_ALLOWED_MASK 0x01
653 #define DVB_S2_TABLE_RC_VOLUME_ALLOWED_MASK 0x02
654 #define DVB_S2_TABLE_RC_CONSTANT_ASSIGN_MASK 0x04
655 #define DVB_S2_TABLE_RC_INDEX_MASK 0xF0
656 #define DVB_S2_TABLE_LLS_NOMINAL_RA_AC_INDEX_MASK 0x0F
657 #define DVB_S2_TABLE_LLS_NOMINAL_DA_AC_INDEX_MASK 0x0F
658 #define DVB_S2_TABLE_LLS_NOMINAL_RC_INDEX_MASK 0xF0
659 #define DVB_S2_TABLE_LLS_DEDICATED_ACCESS_MASK 0x01
660 #define DVB_S2_TABLE_LLS_RANDOM_ACCESS_MASK 0x02
661 #define DVB_S2_TABLE_LLS_INDEX_MASK 0x3C
662 
663 #define DVB_S2_TABLE_MAC24_PREFIX_SIZE_MASK 0x1F
664 #define DVB_S2_TABLE_MAC24_MAPPING_METHOD_MASK 0x40
665 #define DVB_S2_TABLE_MAC24_MCAST_IP_VERSION_IND_PRES_MASK 0x20
666 #define DVB_S2_TABLE_MAC24_MCAST_SYNTHESIS_FIELD_SIZE_MASK 0x1F
667 
668 #define DVB_S2_TABLE_TX_MODE_FRAME_LENGTH_MASK 0xC0
669 #define DVB_S2_TABLE_TX_MODE_PILOT_SYMBOLS_MASK 0x20
670 #define DVB_S2_TABLE_TX_MODE_MODCOD_MASK 0x1F
671 
672 #define DVB_S2_TABLE_ENTRY_SIZE 8
673 #define DVB_S2_TABLE_TX_MODE_SIZE 3
674 #define DVB_S2_TABLE_SAT_SIZE 13
675 #define DVB_S2_TABLE_TX_TYPE_UW_SEGMENT_SIZE 3
676 
677 #define DVB_S2_TABLE_PAT 0x00
678 #define DVB_S2_TABLE_CAT 0x01
679 #define DVB_S2_TABLE_PMT 0x02
680 #define DVB_S2_TABLE_NIT 0x40
681 #define DVB_S2_TABLE_RMT 0x41
682 #define DVB_S2_TABLE_SDT 0x42
683 #define DVB_S2_TABLE_TDT 0x70
684 #define DVB_S2_TABLE_SCT 0xA0
685 #define DVB_S2_TABLE_FCT 0xA1
686 #define DVB_S2_TABLE_TCT 0xA2
687 #define DVB_S2_TABLE_SPT 0xA3
688 #define DVB_S2_TABLE_CMT 0xA4
689 #define DVB_S2_TABLE_TBTP 0xA5
690 #define DVB_S2_TABLE_PCR 0xA6
691 #define DVB_S2_TABLE_TMST 0xAA
692 #define DVB_S2_TABLE_TCTE 0xAB
693 #define DVB_S2_TABLE_FCT2 0xAB
694 #define DVB_S2_TABLE_BCT 0xAC
695 #define DVB_S2_TABLE_TBTP2 0xAD
696 #define DVB_S2_TABLE_TMST2 0xAE
697 #define DVB_S2_TABLE_FAT 0xAF
698 #define DVB_S2_TABLE_TIM 0xB0
699 #define DVB_S2_TABLE_MMT2 0xB2
700 #define DVB_S2_TABLE_MMT 0xC0
701 #define DVB_S2_TABLE_SMT 0x80
702 #define DVB_S2_TABLE_TIMB 0xFE
703 
704 #define DVB_S2_NCR_SIZE 6
705 
706 static const value_string tabletype[] = {
707     {DVB_S2_TABLE_PAT, "PAT"}, /**< Program Association Table */
708     {DVB_S2_TABLE_CAT, "CAT"}, /**< Conditional Access Table */
709     {DVB_S2_TABLE_PMT, "PMT"}, /**< Program Map Table */
710     {DVB_S2_TABLE_NIT, "NIT"}, /**< Network Information Table */
711     {DVB_S2_TABLE_RMT, "RMT"}, /**< RCS Mapping Table */
712     {DVB_S2_TABLE_SDT, "SDT"}, /**< Service Description Table */
713     {DVB_S2_TABLE_TDT, "TDT"}, /**< Time and Date Table */
714     {DVB_S2_TABLE_SCT, "SCT"}, /**< Superframe Composition Table */
715     {DVB_S2_TABLE_FCT, "FCT"}, /**< Frame Composition Table */
716     {DVB_S2_TABLE_TCT, "TCT"}, /**< Timeslot Composition Table*/
717     {DVB_S2_TABLE_SPT, "SPT"}, /**< Satellite Position Table */
718     {DVB_S2_TABLE_CMT, "CMT"}, /**< Correction Message Table */
719     {DVB_S2_TABLE_TBTP, "TBTP"}, /**< Terminal Burst Time Plan Table */
720     {DVB_S2_TABLE_PCR, "PCR"}, /**< PCR Packet Payload */
721     {DVB_S2_TABLE_TMST, "TMST"}, /**< Transmission Mode Support Table */
722     {DVB_S2_TABLE_TCTE, "TCTE(RCS)-FCT2(RCS2)"}, /**< Timeslot Composition Table extended */
723 //    {DVB_S2_TABLE_FCT2, "FCT2"}, /**< Frame Composition Table RCS2 */
724     {DVB_S2_TABLE_BCT, "BCT"}, /**< Broadcast Configuration Table RCS2 */
725     {DVB_S2_TABLE_TBTP2, "TBTP2"}, /**< Terminal Burst Time Plan Table RCS2 */
726     {DVB_S2_TABLE_TMST2, "TMST2"}, /**< Transmission Mode Support Table RCS2 */
727     {DVB_S2_TABLE_FAT, "FAT"}, /**< Fast Access Table RCS2 */
728     {DVB_S2_TABLE_TIM, "TIM"}, /**< Terminal Information Message Table */
729     {DVB_S2_TABLE_MMT, "MMT"}, /**< Multicast Mapping Table */
730     {DVB_S2_TABLE_MMT2, "MMT2"}, /**< Multicast Mapping Table RCS2*/
731     {DVB_S2_TABLE_SMT, "SMT"}, /**< Signal Measurement Table */
732     {DVB_S2_TABLE_TIMB, "TIMB"}, /**< Broadcast TIM, for internal use only */
733     {0, NULL}
734 };
735 
736 #define DVB_S2_TABLE_DESC_CTRL_ASSIGN 0xA4
737 #define DVB_S2_TABLE_DESC_CORRECTION_MSG 0xA1
738 #define DVB_S2_TABLE_DESC_CORRECTION_MSG_EXT 0xB1
739 #define DVB_S2_TABLE_DESC_LOGON_RESPONSE 0xB9
740 #define DVB_S2_TABLE_DESC_LOWER_LAYER_SERVICE 0xBB
741 
742 #define DVB_S2_TABLE_DESC_NETWORK_NAME 0x40
743 #define DVB_S2_TABLE_DESC_LINKAGE 0x4A
744 #define DVB_S2_TABLE_DESC_SATELLITE_RETURN_LINK 0xA9
745 #define DVB_S2_TABLE_DESC_LOGON_INITIALIZE 0xA2
746 #define DVB_S2_TABLE_DESC_FORWARD_INTERACTION_PATH 0xAD
747 #define DVB_S2_TABLE_DESC_RETURN_INTERACTION_PATH 0xAE
748 #define DVB_S2_TABLE_DESC_NETWORK_LAYER_INFO 0xA0
749 #define DVB_S2_TABLE_DESC_CORRECTION_CONTROL 0xAC
750 #define DVB_S2_TABLE_DESC_CONTENTION_CONTROL 0xAB
751 #define DVB_S2_TABLE_DESC_SATELLITE_FORWARD_LINK 0xA8
752 #define DVB_S2_TABLE_DESC_MOBILITY_CONTROL 0xB0
753 #define DVB_S2_TABLE_DESC_LOWEST_SOFTWARE_VERSION 0xC5
754 
755 static const value_string table_desc_type[] = {
756     {DVB_S2_TABLE_DESC_LINKAGE, "Linkage_descriptor"},
757     {DVB_S2_TABLE_DESC_LOGON_INITIALIZE, "Logon Initialize Descriptor"},
758     {DVB_S2_TABLE_DESC_NETWORK_LAYER_INFO, "Network_layer_info_descriptor"},
759     {DVB_S2_TABLE_DESC_CORRECTION_MSG, "Correction_message_descriptor"},
760     {DVB_S2_TABLE_DESC_CTRL_ASSIGN, "SYNC_assign_descriptor (RCS) - control_assign_descriptor (RCS2)"},
761     {0xA6, "Echo_value_descriptor"},
762     {0xA7, "RCS_content_descriptor"},
763     {DVB_S2_TABLE_DESC_SATELLITE_FORWARD_LINK, "Satellite_forward_link_descriptor"},
764     {DVB_S2_TABLE_DESC_SATELLITE_RETURN_LINK, "Satellite_return_link_descriptor"},
765     {DVB_S2_TABLE_DESC_CONTENTION_CONTROL, "Contention_Control_descriptor (RCS) - logon_contention_descriptor (RCS2)"},
766     {DVB_S2_TABLE_DESC_CORRECTION_CONTROL, "Correction_Control_descriptor"},
767     {DVB_S2_TABLE_DESC_FORWARD_INTERACTION_PATH, "Forward Interaction Path Descriptor"},
768     {DVB_S2_TABLE_DESC_RETURN_INTERACTION_PATH, "Return Interaction Path Descriptor"},
769     {0xB0, "Mobility_control_descriptor"},
770     {DVB_S2_TABLE_DESC_CORRECTION_MSG_EXT, "Correction_message_extension_descriptor"},
771     {0xB2, "Return_Transmission_Modes_descriptor"},
772     {0xB5, "Implementation_type_descriptor"},
773     {0xB6, "LL_FEC_identifier_descriptor"},
774     {0xB7, "Frame_payload_format_descriptor"},
775     {0xB8, "Pointing_alignment_support_descriptor"},
776     {DVB_S2_TABLE_DESC_LOGON_RESPONSE, "Logon_response_descriptor"},
777     {0xBA, "DHCP_option_descriptor"},
778     {DVB_S2_TABLE_DESC_LOWER_LAYER_SERVICE, "lower_layer_service_descriptor"},
779     {0xBC, "TRANSEC_message_descriptor"},
780     {0xBD, "Forward_link_streams_descriptor"},
781     {0xBE, "Logon_Security_descriptor"},
782     {0xBF, "Transmission_offset_descriptor"},
783     {0xC0, "Random_assess_load_control_descriptor"},
784     {0xC1, "CLI_instruction_descriptor"},
785     {0xC2, "random_access_traffic_method_descriptor"},
786     {0xC4, "higher_layers_initialize_descriptor"},
787     {0xC5, "lowest_sw_version_descriptor"},
788     {0xC6, "Mesh_system_descriptor"},
789     {0xC7, "Extension_protocol_descriptor"},
790     {0xC8, "Continuous_carrier_control_descriptor"},
791     {DVB_S2_TABLE_DESC_NETWORK_NAME, "Network Name Descriptor"},
792     {0, NULL}
793 };
794 
795 static const value_string table_uplinkPolarization[] = {
796     {0, "linear - horizontal"},
797     {1, "linear - vertical"},
798     {2, "circular - left"},
799     {3, "circular - right"},
800     {0, NULL}
801 };
802 
803 #define DVB_S2_TABLE_TXFORMAT_LMBT 0x1
804 #define DVB_S2_TABLE_TXFORMAT_CPMBT 0x2
805 #define DVB_S2_TABLE_TXFORMAT_CT 0x3
806 #define DVB_S2_TABLE_TXFORMAT_SSLMBT 0x4
807 static const value_string table_frameType_txFormatClass[] = {
808     {0, "Reserved"},
809     {DVB_S2_TABLE_TXFORMAT_LMBT, "Linear Modulation Burst Transmission"},
810     {DVB_S2_TABLE_TXFORMAT_CPMBT, "Continuous Phase Modulation Burst Transmission"},
811     {DVB_S2_TABLE_TXFORMAT_CT, "Continuous Transmission"},
812     {DVB_S2_TABLE_TXFORMAT_SSLMBT, "Spread-Spectrum Linear Modulation Burst Transmission"},
813     {0, NULL}
814 };
815 
816 static const value_string table_assignContext[] = {
817     {0, "All traffic context"},
818     {1, "Transparent star traffic"},
819     {2, "Logon"},
820     {3, "Transparent mesh traffic"},
821     {4, "Continuous carrier"},
822     {0, NULL}
823 };
824 
825 
826 static const value_string table_timeslotContent[] = {
827     {0, "Traffic"},
828     {1, "Logon"},
829     {2, "Reserved"},
830     {3, "Control"},
831     {0, NULL}
832 };
833 
834 static const value_string table_txType_contentType[] = {
835     {0, "Reserved"},
836     {1, "Logon payload"},
837     {2, "Control payload"},
838     {3, "Traffic and control payload"},
839     {4, "Traffic payload"},
840     {0, NULL}
841 };
842 
843 #define DVB_S2_TABLE_MODULATION_SCHEME_BPSK 0x0
844 #define DVB_S2_TABLE_MODULATION_SCHEME_QPSK 0x1
845 #define DVB_S2_TABLE_MODULATION_SCHEME_8PSK 0x2
846 #define DVB_S2_TABLE_MODULATION_SCHEME_16QAM 0x3
847 #define DVB_S2_TABLE_MODULATION_SCHEME_PI2BPSK 0x5
848 static const value_string table_txType_modulationScheme[] = {
849     {DVB_S2_TABLE_MODULATION_SCHEME_BPSK, "Reserved (BPSK)"},
850     {DVB_S2_TABLE_MODULATION_SCHEME_QPSK, "QPSK"},
851     {DVB_S2_TABLE_MODULATION_SCHEME_8PSK, "8PSK"},
852     {DVB_S2_TABLE_MODULATION_SCHEME_16QAM, "16QAM"},
853     {4, "Reserved"},
854     {DVB_S2_TABLE_MODULATION_SCHEME_PI2BPSK, "pi/2-BPSK"},
855     {0, NULL}
856 };
857 
858 static const value_string table_txType_modulationType[] = {
859     {0, "Quaternary - Linear mapping"},
860     {1, "Quaternary - Gray mapping"},
861     {0, NULL}
862 };
863 
864 static const value_string table_txType_codeRate[] = {
865     {0, "1/2"},
866     {1, "2/3"},
867     {2, "4/5"},
868     {3, "6/7"},
869     {0, NULL}
870 };
871 
872 static const value_string table_txType_constraintLengthK[] = {
873     {0, "3"},
874     {1, "4"},
875     {0, NULL}
876 };
877 
878 static const value_string table_mobility_command_value[] = {
879     {0x0000, "No Command"},
880     {0x0001, "Execute Forward And Return Link Handover"},
881     {0x0002, "Execute Forward Link Handover"},
882     {0x0003, "Execute Return Link Handover"},
883     {0x0005, "Send Transmitter Status Report"},
884     {0x0006, "Send Position Report"},
885     {0x0007, "Maximum NCR Time"},
886     {0, NULL}
887 };
888 
889 #define DVB_S2_TABLE_HEADER_LEN     8
890 #define DVB_S2_TABLE_HEADER_RCS2_LEN 4
891 #define DVB_S2_TABLE_CRC32_LEN 4
892 #define DVB_S2_TABLE_SCT_FRAME_LEN  8
893 
894 /* *** Code to actually dissect the packets *** */
dissect_dvb_s2_table_correct_msg(tvbuff_t * tvb,int cur_off,proto_tree * dvb_s2_hdr_table_tree)895 static int dissect_dvb_s2_table_correct_msg(tvbuff_t *tvb, int cur_off, proto_tree *dvb_s2_hdr_table_tree)
896 {
897     int new_off = 0;
898     guint8 time_correction_flag, frequency_correction_flag, power_correction_flag, power_control_flag;
899 
900     time_correction_flag =  tvb_get_guint8(tvb, cur_off + new_off) & DVB_S2_TABLE_DESC_TIME_CORRECT_FLAG_MASK;
901     frequency_correction_flag =  tvb_get_guint8(tvb, cur_off + new_off) & DVB_S2_TABLE_DESC_FREQ_CORRECT_FLAG_MASK;
902     power_correction_flag =  tvb_get_guint8(tvb, cur_off + new_off) & DVB_S2_TABLE_DESC_POWER_CORRECT_FLAG_MASK;
903     proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_desc_time_correct_flag, tvb, cur_off + new_off, 1, ENC_NA);
904     proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_desc_power_correct_flag, tvb, cur_off + new_off, 1, ENC_NA);
905     proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_desc_freq_correct_flag, tvb, cur_off + new_off, 1, ENC_NA);
906     proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_desc_slot_type, tvb, cur_off + new_off, 1, ENC_NA);
907     proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_desc_burst_time_scaling, tvb, cur_off + new_off, 1, ENC_NA);
908     new_off += 1;
909     if(time_correction_flag)
910     {
911         proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_desc_burst_time_correct, tvb, cur_off + new_off, 1, ENC_NA);
912         new_off += 1;
913     }
914     if(power_correction_flag)
915     {
916         power_control_flag = tvb_get_guint8(tvb, cur_off + new_off) & DVB_S2_TABLE_DESC_POWER_CTRL_FLAG_MASK;
917         proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_desc_power_ctrl_flag, tvb, cur_off + new_off, 1, ENC_NA);
918         if(power_control_flag)
919             proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_desc_power_correction, tvb, cur_off + new_off, 1, ENC_NA);
920         else
921             proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_desc_power_esn0, tvb, cur_off + new_off, 1, ENC_NA);
922         new_off += 1;
923     }
924     if(frequency_correction_flag)
925     {
926         proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_desc_freq_correction, tvb, cur_off + new_off, 2, ENC_NA);
927         new_off += 2;
928     }
929 
930     return new_off;
931 }
932 
933 
dissect_dvb_s2_table_desc(tvbuff_t * tvb,int cur_off,proto_tree * dvb_s2_hdr_table_tree,int desc_loop_count,int table_id,packet_info * pinfo)934 static int dissect_dvb_s2_table_desc(tvbuff_t *tvb, int cur_off, proto_tree *dvb_s2_hdr_table_tree, int desc_loop_count, int table_id, packet_info *pinfo)
935 {
936 
937     int cur_desc, lls_size, rc_size, raac_size, new_off = 0;
938     int start_off = 0;
939     int linkage_type = 0;
940     guint32 hand_over_type = 0;
941     guint32 origin_type = 0;
942     int remaning_data = 0;
943     int capacity_type_flag = 0;
944     int traffic_burst_type = 0;
945     int connectivity = 0;
946     int pid_loop_count = 0;
947     int k = 0;
948     int network_routing_label_loop_count = 0;
949     int pid_flag = 0;
950     int j = 0;
951     int vpi_vci_flag = 0;
952     int vpi_vci_loop_count = 0;
953     int i = 0;
954     int l = 0;
955     int route_id_flag = 0;
956     int route_id_loop_count = 0;
957     int population_id_loop_count = 0;
958     int transmission_standard = 0;
959     int scrambling_sequence_selector = 0;
960     int group_count = 0;
961     int version_length = 0;
962 
963     guint8 desc_tag, desc_length;
964     proto_tree *dvb_s2_hdr_table_desc_tree, *dvb_s2_hdr_table_mac24_tree, *dvb_s2_hdr_table_lls_tree,
965                *dvb_s2_hdr_table_rc_tree, *dvb_s2_hdr_table_raac_tree, *dvb_s2_hdr_table_network_routing_tree;
966     proto_item *ti;
967 
968     guint8 mac24_count, cur_mac24, lls_count, cur_lls, rc_count, cur_rc, raac_count, cur_raac;
969     guint8 dedicated_access, random_access, constant_assign_provided, volume_allowed, defaults_field_size;
970 
971     for(cur_desc=0 ; cur_desc<=desc_loop_count ; cur_desc++)
972     {
973         desc_length = tvb_get_guint8(tvb, cur_off + new_off + 1);
974         ti = proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_descriptor, tvb, cur_off + new_off, desc_length + 2, ENC_NA);
975         dvb_s2_hdr_table_desc_tree = proto_item_add_subtree(ti, ett_dvb_s2_hdr_table_desc);
976         desc_tag = tvb_get_guint8(tvb, cur_off + new_off);
977         proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_desc_tag, tvb, cur_off + new_off, 1, ENC_NA);
978         new_off += 1;
979         proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_desc_length, tvb, cur_off + new_off, 1, ENC_NA);
980         new_off += 1;
981         switch(desc_tag){
982             case(DVB_S2_TABLE_DESC_CTRL_ASSIGN):
983                 proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_desc_sync_achieved_time_threshold, tvb, cur_off + new_off, 1, ENC_NA);
984                 new_off += 1;
985                 proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_desc_max_sync_tries, tvb, cur_off + new_off, 1, ENC_NA);
986                 new_off += 1;
987                 proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_desc_sync_achieved_freq_threshold, tvb, cur_off + new_off, 2, ENC_NA);
988                 new_off += 2;
989                 if (dvb_s2_rcs_version == DVB_S2_RCS_TABLE_DECODING)
990                 {
991                     proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_desc_sync_start_superframe, tvb, cur_off + new_off, 2, ENC_NA);
992                     new_off += 2;
993                     proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_desc_sync_frame_nbr, tvb, cur_off + new_off, 1, ENC_NA);
994                     new_off += 1;
995                     proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_desc_sync_repeat_period, tvb, cur_off + new_off, 2, ENC_NA);
996                     new_off += 2;
997                     proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_desc_sync_slot_nbr, tvb, cur_off + new_off, 2, ENC_NA);
998                     new_off += 2;
999                 }
1000                 if (dvb_s2_rcs_version == DVB_S2_RCS2_TABLE_DECODING)
1001                 {
1002                     proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_desc_ctrl_start_superframe_count, tvb, cur_off + new_off, 2, ENC_NA);
1003                     new_off += 2;
1004                     proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_desc_ctrl_frame_nbr, tvb, cur_off + new_off, 1, ENC_NA);
1005                     new_off += 1;
1006                     proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_desc_ctrl_repeat_period, tvb, cur_off + new_off, 2, ENC_NA);
1007                     new_off += 2;
1008                     proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_desc_ctrl_timeslot_nbr, tvb, cur_off + new_off, 2, ENC_NA);
1009                     new_off += 2;
1010                 }
1011                 break;
1012             case(DVB_S2_TABLE_DESC_CORRECTION_MSG):
1013                 new_off += dissect_dvb_s2_table_correct_msg(tvb, cur_off + new_off, dvb_s2_hdr_table_desc_tree);
1014                 break;
1015             case(DVB_S2_TABLE_DESC_CORRECTION_MSG_EXT):
1016                 proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_desc_sf_sequence, tvb, cur_off + new_off, 1, ENC_NA);
1017                 new_off += 1;
1018                 proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_sf_count, tvb, cur_off + new_off, 2, ENC_NA);
1019                 new_off += 2;
1020                 proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_desc_frame_number, tvb, cur_off + new_off, 1, ENC_NA);
1021                 new_off += 1;
1022                 proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_desc_slot_nbr, tvb, cur_off + new_off, 2, ENC_NA);
1023                 new_off += 2;
1024                 break;
1025             case(DVB_S2_TABLE_DESC_LOGON_RESPONSE):
1026                 proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_desc_keep_id_after_logoff, tvb, cur_off + new_off, 1, ENC_NA);
1027                 proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_desc_power_ctrl_mode, tvb, cur_off + new_off, 1, ENC_NA);
1028                 proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_desc_rcst_access_status, tvb, cur_off + new_off, 1, ENC_NA);
1029                 new_off += 1;
1030                 proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_group_id, tvb, cur_off + new_off, 1, ENC_NA);
1031                 new_off += 1;
1032                 proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_desc_logon_id, tvb, cur_off + new_off, 2, ENC_NA);
1033                 new_off += 2;
1034                 proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_desc_lowest_assign_id, tvb, cur_off + new_off, 3, ENC_NA);
1035                 new_off += 3;
1036                 mac24_count = tvb_get_guint8(tvb, cur_off + new_off) & DVB_S2_TABLE_DESC_UNICAST_MAC24_COUNT_MASK;
1037                 proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_desc_assign_id_count, tvb, cur_off + new_off, 1, ENC_NA);
1038                 proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_desc_unicast_mac24_count, tvb, cur_off + new_off, 1, ENC_NA);
1039                 new_off += 1;
1040                 for(cur_mac24=0 ; cur_mac24<mac24_count ; cur_mac24++)
1041                 {
1042                     ti = proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_mac24, tvb, cur_off + new_off, 5, ENC_NA);
1043                     dvb_s2_hdr_table_mac24_tree = proto_item_add_subtree(ti, ett_dvb_s2_hdr_table_desc);
1044                     proto_tree_add_item(dvb_s2_hdr_table_mac24_tree, hf_dvb_s2_table_mac24_prefix_size, tvb, cur_off + new_off, 1, ENC_NA);
1045                     new_off += 1;
1046                     proto_tree_add_item(dvb_s2_hdr_table_mac24_tree, hf_dvb_s2_table_mac24_unicast, tvb, cur_off + new_off, 3, ENC_NA);
1047                     new_off += 3;
1048                     proto_tree_add_item(dvb_s2_hdr_table_mac24_tree, hf_dvb_s2_table_mac24_mcast_mapping_method, tvb, cur_off + new_off, 1, ENC_NA);
1049                     proto_tree_add_item(dvb_s2_hdr_table_mac24_tree, hf_dvb_s2_table_mac24_mcast_ip_version_ind_pres, tvb, cur_off + new_off, 1, ENC_NA);
1050                     proto_tree_add_item(dvb_s2_hdr_table_mac24_tree, hf_dvb_s2_table_mac24_mcast_synthesis_field_size, tvb, cur_off + new_off, 1, ENC_NA);
1051                     new_off += 1;
1052                 }
1053                 proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_desc_default_svn_number, tvb, cur_off + new_off, 2, ENC_NA);
1054                 new_off += 2;
1055                 proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_desc_reserved, tvb, cur_off + new_off, 1, ENC_NA);
1056                 new_off += 1;
1057                 break;
1058             case(DVB_S2_TABLE_DESC_LOWER_LAYER_SERVICE):
1059                 proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_desc_default_ctrl_random_interval, tvb, cur_off + new_off, 1, ENC_NA);
1060                 new_off += 1;
1061                 proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_desc_dynamic_rate_persistence, tvb, cur_off + new_off, 1, ENC_NA);
1062                 new_off += 1;
1063                 proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_desc_volume_backlog_persistence, tvb, cur_off + new_off, 1, ENC_NA);
1064                 new_off += 1;
1065                 lls_count = tvb_get_guint8(tvb, cur_off + new_off) & DVB_S2_TABLE_DESC_LLS_COUNT_MASK;
1066                 proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_desc_lls_count, tvb, cur_off + new_off, 1, ENC_NA);
1067                 new_off += 1;
1068                 for(cur_lls=0 ; cur_lls<lls_count ; cur_lls++)
1069                 {
1070                     dedicated_access = tvb_get_guint8(tvb, cur_off + new_off) & DVB_S2_TABLE_LLS_DEDICATED_ACCESS_MASK;
1071                     random_access = tvb_get_guint8(tvb, cur_off + new_off) & DVB_S2_TABLE_LLS_RANDOM_ACCESS_MASK;
1072                     lls_size=1;
1073                     if(dedicated_access) lls_size += 5;
1074                     if(random_access) lls_size += 2;
1075                     ti = proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_lls, tvb, cur_off + new_off, lls_size, ENC_NA);
1076                     dvb_s2_hdr_table_lls_tree = proto_item_add_subtree(ti, ett_dvb_s2_hdr_table_desc);
1077                     proto_tree_add_item(dvb_s2_hdr_table_lls_tree, hf_dvb_s2_table_lls_index, tvb, cur_off + new_off, 1, ENC_NA);
1078                     proto_tree_add_item(dvb_s2_hdr_table_lls_tree, hf_dvb_s2_table_lls_random_access, tvb, cur_off + new_off, 1, ENC_NA);
1079                     proto_tree_add_item(dvb_s2_hdr_table_lls_tree, hf_dvb_s2_table_lls_dedicated_access, tvb, cur_off + new_off, 1, ENC_NA);
1080                     new_off += 1;
1081                     if(dedicated_access)
1082                     {
1083                         proto_tree_add_item(dvb_s2_hdr_table_lls_tree, hf_dvb_s2_table_lls_nominal_rc_index, tvb, cur_off + new_off, 1, ENC_NA);
1084                         proto_tree_add_item(dvb_s2_hdr_table_lls_tree, hf_dvb_s2_table_lls_nominal_da_ac_index, tvb, cur_off + new_off, 1, ENC_NA);
1085                         new_off += 1;
1086                         proto_tree_add_item(dvb_s2_hdr_table_lls_tree, hf_dvb_s2_table_lls_conditional_demand_rc_map, tvb, cur_off + new_off, 2, ENC_NA);
1087                         new_off += 2;
1088                         proto_tree_add_item(dvb_s2_hdr_table_lls_tree, hf_dvb_s2_table_lls_conditional_scheduler_da_ac_map, tvb, cur_off + new_off, 2, ENC_NA);
1089                         new_off += 2;
1090                     }
1091                     if(random_access)
1092                     {
1093                         proto_tree_add_item(dvb_s2_hdr_table_lls_tree, hf_dvb_s2_table_lls_nominal_ra_ac_index, tvb, cur_off + new_off, 1, ENC_NA);
1094                         new_off += 1;
1095                         proto_tree_add_item(dvb_s2_hdr_table_lls_tree, hf_dvb_s2_table_lls_conditional_scheduler_ra_ac_map, tvb, cur_off + new_off, 1, ENC_NA);
1096                         new_off += 1;
1097                     }
1098                 }
1099                 rc_count = tvb_get_guint8(tvb, cur_off + new_off) & DVB_S2_TABLE_DESC_RC_COUNT_MASK;
1100                 proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_desc_rc_count, tvb, cur_off + new_off, 1, ENC_NA);
1101                 new_off += 1;
1102                 for(cur_rc=0 ; cur_rc<rc_count ; cur_rc++)
1103                 {
1104                     constant_assign_provided = tvb_get_guint8(tvb, cur_off + new_off) & DVB_S2_TABLE_RC_CONSTANT_ASSIGN_MASK;
1105                     volume_allowed = tvb_get_guint8(tvb, cur_off + new_off) & DVB_S2_TABLE_RC_VOLUME_ALLOWED_MASK;
1106                     rc_size=5;
1107                     if(constant_assign_provided) rc_size += 2;
1108                     if(volume_allowed) rc_size += 1;
1109                     ti = proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_rc, tvb, cur_off + new_off, rc_size, ENC_NA);
1110                     dvb_s2_hdr_table_rc_tree = proto_item_add_subtree(ti, ett_dvb_s2_hdr_table_desc);
1111                     proto_tree_add_item(dvb_s2_hdr_table_rc_tree, hf_dvb_s2_table_rc_index, tvb, cur_off + new_off, 1, ENC_NA);
1112                     proto_tree_add_item(dvb_s2_hdr_table_rc_tree, hf_dvb_s2_table_rc_constant_assignment_provided, tvb, cur_off + new_off, 1, ENC_NA);
1113                     proto_tree_add_item(dvb_s2_hdr_table_rc_tree, hf_dvb_s2_table_rc_volume_allowed, tvb, cur_off + new_off, 1, ENC_NA);
1114                     proto_tree_add_item(dvb_s2_hdr_table_rc_tree, hf_dvb_s2_table_rc_rbdc_allowed, tvb, cur_off + new_off, 1, ENC_NA);
1115                     new_off += 1;
1116                     proto_tree_add_item(dvb_s2_hdr_table_rc_tree, hf_dvb_s2_table_rc_maximum_service_rate, tvb, cur_off + new_off, 2, ENC_NA);
1117                     new_off += 2;
1118                     proto_tree_add_item(dvb_s2_hdr_table_rc_tree, hf_dvb_s2_table_rc_minimum_service_rate, tvb, cur_off + new_off, 2, ENC_NA);
1119                     new_off += 2;
1120                     if(constant_assign_provided)
1121                     {
1122                         proto_tree_add_item(dvb_s2_hdr_table_rc_tree, hf_dvb_s2_table_rc_constant_service_rate, tvb, cur_off + new_off, 2, ENC_NA);
1123                         new_off += 2;
1124                     }
1125                     if(volume_allowed)
1126                     {
1127                         proto_tree_add_item(dvb_s2_hdr_table_rc_tree, hf_dvb_s2_table_rc_maximum_backlog, tvb, cur_off + new_off, 1, ENC_NA);
1128                         new_off += 1;
1129                     }
1130                 }
1131                 raac_count = tvb_get_guint8(tvb, cur_off + new_off) & DVB_S2_TABLE_DESC_RA_AC_COUNT_MASK;
1132                 proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_desc_ra_ac_count, tvb, cur_off + new_off, 1, ENC_NA);
1133                 new_off += 1;
1134                 for(cur_raac=0 ; cur_raac<raac_count ; cur_raac++)
1135                 {
1136                     defaults_field_size = tvb_get_guint8(tvb, cur_off + new_off + 4);
1137                     raac_size = 5 + defaults_field_size;
1138                     ti = proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_ra_ac, tvb, cur_off + new_off, raac_size, ENC_NA);
1139                     dvb_s2_hdr_table_raac_tree = proto_item_add_subtree(ti, ett_dvb_s2_hdr_table_desc);
1140                     proto_tree_add_item(dvb_s2_hdr_table_raac_tree, hf_dvb_s2_table_ra_ac_index, tvb, cur_off + new_off, 1, ENC_NA);
1141                     new_off += 1;
1142                     proto_tree_add_item(dvb_s2_hdr_table_raac_tree, hf_dvb_s2_table_ra_ac_max_unique_payload_per_block, tvb, cur_off + new_off, 1, ENC_NA);
1143                     new_off += 1;
1144                     proto_tree_add_item(dvb_s2_hdr_table_raac_tree, hf_dvb_s2_table_ra_ac_max_consecutive_block_accessed, tvb, cur_off + new_off, 1, ENC_NA);
1145                     new_off += 1;
1146                     proto_tree_add_item(dvb_s2_hdr_table_raac_tree, hf_dvb_s2_table_ra_ac_min_idle_block, tvb, cur_off + new_off, 1, ENC_NA);
1147                     new_off += 1;
1148                     proto_tree_add_item(dvb_s2_hdr_table_raac_tree, hf_dvb_s2_table_ra_ac_defaults_field_size, tvb, cur_off + new_off, 1, ENC_NA);
1149                     new_off += 1;
1150                     proto_tree_add_item(dvb_s2_hdr_table_raac_tree, hf_dvb_s2_table_ra_ac_defaults_for_ra_load_control,
1151                                         tvb, cur_off + new_off, defaults_field_size, ENC_NA);
1152                     new_off += defaults_field_size;
1153                 }
1154                 break;
1155             case (DVB_S2_TABLE_DESC_NETWORK_NAME):
1156                 proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_nnd_char, tvb, cur_off + new_off, desc_length, ENC_NA);
1157                 new_off += desc_length;
1158                 break;
1159             case (DVB_S2_TABLE_DESC_LINKAGE):
1160                 start_off = new_off;
1161                 proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_ld_fm_id, tvb, cur_off + new_off, 2, ENC_NA);
1162                 new_off += 2;
1163                 linkage_type = tvb_get_guint8(tvb, cur_off + new_off + 4);
1164                 if (linkage_type == 0x82 || linkage_type == 0x81) {
1165                         proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_ld_rm_id, tvb, cur_off + new_off, 2, ENC_NA);
1166                 } else {
1167                         proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_ld_on_id, tvb, cur_off + new_off, 2, ENC_NA);
1168                 }
1169                 new_off += 2;
1170                 proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_ld_service_id, tvb, cur_off + new_off, 2, ENC_NA);
1171                 new_off += 2;
1172                 proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_ld_linkage_type, tvb, cur_off + new_off, 1, ENC_NA);
1173                 new_off += 1;
1174                 if (linkage_type == 0x08) {
1175                     proto_tree_add_item_ret_uint(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_ld_ho_type, tvb, cur_off + new_off, 1, ENC_NA, &hand_over_type);
1176                     proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_ld_reserved_future_use, tvb, cur_off + new_off, 1, ENC_NA);
1177                     proto_tree_add_item_ret_uint(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_ld_origin_type, tvb, cur_off + new_off, 1, ENC_NA, &origin_type);
1178                     new_off += 1;
1179                     if ((hand_over_type == 0x01) || (hand_over_type == 0x02) || (hand_over_type == 0x03)) {
1180                         proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_ld_network_id, tvb, cur_off + new_off, 2, ENC_NA);
1181                         new_off += 2;
1182                     }
1183 
1184                     if (origin_type == 0x00) {
1185                         proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_ld_initial_service_id, tvb, cur_off + new_off, 2, ENC_NA);
1186                         new_off += 2;
1187                     }
1188                 }
1189 
1190                 if (linkage_type == 0x0D) {
1191                     proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_ld_target_event_id, tvb, cur_off + new_off, 2, ENC_NA);
1192                     new_off += 2;
1193                     proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_ld_target_listed, tvb, cur_off + new_off, 1, ENC_NA);
1194                     proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_ld_event_simulcast, tvb, cur_off + new_off, 1, ENC_NA);
1195                     proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_ld_reserved, tvb, cur_off + new_off, 1, ENC_NA);
1196                     new_off += 1;
1197                 }
1198 
1199                 if (linkage_type == 0x82 || linkage_type == 0x81) {
1200                     proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_ld_network_id, tvb, cur_off + new_off, 2, ENC_NA);
1201                     new_off += 2;
1202                     population_id_loop_count = tvb_get_guint8(tvb, cur_off + new_off);
1203                     proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_ld_population_id_loop_count, tvb, cur_off + new_off, 1, ENC_NA);
1204                     new_off += 1;
1205                     for (i = 0 ; i <= population_id_loop_count ; i++) {
1206                         proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_ld_population_id_base, tvb, cur_off + new_off, 2, ENC_NA);
1207                         new_off += 2;
1208                         proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_ld_population_id_mask, tvb, cur_off + new_off, 2, ENC_NA);
1209                         new_off += 2;
1210                     }
1211                 }
1212 
1213                 remaning_data = desc_length - (new_off - start_off);
1214                 if (remaning_data > 0 ) {
1215                     proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_ld_private_data, tvb, cur_off + new_off, remaning_data, ENC_NA);
1216                     new_off += remaning_data;
1217                 }
1218 
1219                 break;
1220             case (DVB_S2_TABLE_DESC_SATELLITE_RETURN_LINK):
1221                 start_off = new_off;
1222                 proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_srld_satellite_id, tvb, cur_off + new_off, 1, ENC_NA);
1223                 new_off += 1;
1224                 proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_srld_beam_id, tvb, cur_off + new_off, 2, ENC_NA);
1225                 new_off += 2;
1226                 proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_srld_gateway_id, tvb, cur_off + new_off, 1, ENC_NA);
1227                 new_off += 1;
1228                 proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_srld_reserved, tvb, cur_off + new_off, 1, ENC_NA);
1229                 new_off += 1;
1230                 proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_srld_orbital_position, tvb, cur_off + new_off, 2, ENC_NA);
1231                 new_off += 2;
1232                 proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_srld_west_east_flag, tvb, cur_off + new_off, 1, ENC_NA);
1233                 new_off += 1;
1234                 proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_srld_superframe_sequence, tvb, cur_off + new_off, 1, ENC_NA);
1235                 new_off += 1;
1236                 if (table_id == DVB_S2_TABLE_TIM) {
1237                     proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_srld_tx_frequency_offset, tvb, cur_off + new_off, 3, ENC_NA);
1238                 } else {
1239                     proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_srld_zero_frequency_offset, tvb, cur_off + new_off, 3, ENC_NA);
1240                 }
1241                 new_off += 3;
1242                 remaning_data = desc_length - (new_off - start_off);
1243                 if (remaning_data > 0 ) {
1244                     proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_srld_private_data, tvb, cur_off + new_off, remaning_data, ENC_NA);
1245                     new_off += remaning_data;
1246                 }
1247                 break;
1248             case (DVB_S2_TABLE_DESC_LOGON_INITIALIZE):
1249                 proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_lid_group_id, tvb, cur_off + new_off, 1, ENC_NA);
1250                 new_off += 1;
1251                 proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_lid_logon_id, tvb, cur_off + new_off, 2, ENC_NA);
1252                 new_off += 2;
1253                 proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_lid_continuous_carrier, tvb, cur_off + new_off, 1, ENC_NA);
1254                 proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_lid_security_handshake, tvb, cur_off + new_off, 1, ENC_NA);
1255                 proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_lid_prefix_flag, tvb, cur_off + new_off, 1, ENC_NA);
1256                 proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_lid_data_unit_label_flag, tvb, cur_off + new_off, 1, ENC_NA);
1257                 proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_lid_mini_slot_flag, tvb, cur_off + new_off, 1, ENC_NA);
1258                 proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_lid_contention_based_mini_slot_flag, tvb, cur_off + new_off, 1, ENC_NA);
1259                 new_off += 1;
1260                 capacity_type_flag = tvb_get_guint8(tvb, cur_off + new_off) & DVB_S2_TABLE_DESC_CAPCITY_TYPE_FLAG_MASK;
1261                 proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_lid_capacity_type_flag, tvb, cur_off + new_off, 1, ENC_NA);
1262                 traffic_burst_type = tvb_get_guint8(tvb, cur_off + new_off) & DVB_S2_TABLE_DESC_TRAFFIC_BURST_TYPE_MASK;
1263                 proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_lid_traffic_burst_type, tvb, cur_off + new_off, 1, ENC_NA);
1264                 if (traffic_burst_type == 0) {
1265                     connectivity = tvb_get_guint8(tvb, cur_off + new_off) & DVB_S2_TABLE_DESC_CONNECTIVITY_MASK;
1266                     proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_lid_connectivity, tvb, cur_off + new_off, 1, ENC_NA);
1267                     if (connectivity == 0) {
1268                         new_off += 1;
1269                         proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_lid_return_vpi, tvb, cur_off + new_off, 1, ENC_NA);
1270                         new_off += 1;
1271                         proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_lid_return_vci, tvb, cur_off + new_off, 2, ENC_NA);
1272                         new_off += 2;
1273                     } else {
1274                         new_off += 1;
1275                         proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_lid_return_signalling_vpi, tvb, cur_off + new_off, 1, ENC_NA);
1276                         new_off += 1;
1277                         proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_lid_return_signalling_vci, tvb, cur_off + new_off, 2, ENC_NA);
1278                         new_off += 3;
1279                         proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_lid_forward_signalling_vpi, tvb, cur_off + new_off, 1, ENC_NA);
1280                         new_off += 1;
1281                         proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_lid_forward_signalling_vci, tvb, cur_off + new_off, 2, ENC_NA);
1282                         new_off += 2;
1283                     }
1284                 } else {
1285                     proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_lid_return_trf_pid, tvb, cur_off + new_off, 2, ENC_NA);
1286                     new_off += 2;
1287                     proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_lid_return_ctrl_mngm_pid, tvb, cur_off + new_off, 2, ENC_NA);
1288                     new_off += 2;
1289                 }
1290                 if (capacity_type_flag == 0) {
1291                     proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_lid_cra_level, tvb, cur_off + new_off, 3, ENC_NA);
1292                     new_off += 3;
1293                     proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_lid_vbdc_max, tvb, cur_off + new_off, 2, ENC_NA);
1294                     new_off += 2;
1295                     proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_lid_rbdc_max, tvb, cur_off + new_off, 3, ENC_NA);
1296                     new_off += 3;
1297                     proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_lid_rbdc_timeout, tvb, cur_off + new_off, 2, ENC_NA);
1298                     new_off += 2;
1299                 }
1300                 break;
1301             case (DVB_S2_TABLE_DESC_FORWARD_INTERACTION_PATH):
1302                 start_off = new_off;
1303                 remaning_data = desc_length - (new_off - start_off);
1304                 while (remaning_data > 0) {
1305                     proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_fipd_original_network_id, tvb, cur_off + new_off, 2, ENC_NA);
1306                     new_off += 2;
1307                     proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_fipd_transport_stream_id, tvb, cur_off + new_off, 2, ENC_NA);
1308                     new_off += 2;
1309                     pid_loop_count = tvb_get_guint8(tvb, cur_off + new_off) & DVB_S2_TABLE_DESC_PID_LOOP_COUNT;
1310                     proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_fipd_pid_loop_count, tvb, cur_off + new_off, 1, ENC_NA);
1311                     new_off += 1;
1312                     for (k = 0 ; k <= pid_loop_count ; k++) {
1313                         proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_fipd_pid, tvb, cur_off + new_off, 2, ENC_NA);
1314                         new_off += 2;
1315                     }
1316                     remaning_data = desc_length - (new_off - start_off);
1317                 }
1318                 break;
1319             case (DVB_S2_TABLE_DESC_RETURN_INTERACTION_PATH):
1320                 proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_ripd_continuous_carrier, tvb, cur_off + new_off, 1, ENC_NA);
1321                 network_routing_label_loop_count = tvb_get_guint8(tvb, cur_off + new_off) & DVB_S2_TABLE_DESC_NETWORK_ROUTING_LABEL;
1322                 proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_ripd_network_routing_label_loop_count, tvb, cur_off + new_off, 1, ENC_NA);
1323                 new_off += 1;
1324                 for (k = 0 ; k <= network_routing_label_loop_count ; k++) {
1325                     ti = proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_desc_network_routing, tvb, cur_off + new_off, -1, ENC_NA);
1326                     dvb_s2_hdr_table_network_routing_tree = proto_item_add_subtree(ti, ett_dvb_s2_hdr_table_network_routing);
1327                     proto_tree_add_item(dvb_s2_hdr_table_network_routing_tree, hf_dvb_s2_table_ripd_allocation_desallocation_flag, tvb, cur_off + new_off, 1, ENC_NA);
1328                     pid_flag = tvb_get_guint8(tvb, cur_off + new_off) & DVB_S2_TABLE_DESC_PID_FLAG_MASK;
1329                     proto_tree_add_item(dvb_s2_hdr_table_network_routing_tree, hf_dvb_s2_table_ripd_pid_flag, tvb, cur_off + new_off, 1, ENC_NA);
1330                     new_off += 1;
1331                     if (pid_flag == 1) {
1332                         pid_loop_count = tvb_get_guint8(tvb, cur_off + new_off);
1333                         proto_tree_add_item(dvb_s2_hdr_table_network_routing_tree, hf_dvb_s2_table_ripd_pid_loop_count, tvb, cur_off + new_off, 1, ENC_NA);
1334                         new_off += 1;
1335                         for (j = 0 ; j <= pid_loop_count ; j++) {
1336                             proto_tree_add_item(dvb_s2_hdr_table_network_routing_tree, hf_dvb_s2_table_ripd_pid, tvb, cur_off + new_off, 2, ENC_NA);
1337                             new_off += 2;
1338                         }
1339                     }
1340                     vpi_vci_flag = tvb_get_guint8(tvb, cur_off + new_off) & DVB_S2_TABLE_DESC_VPI_VCI_FLAG_MASK;
1341                     proto_tree_add_item(dvb_s2_hdr_table_network_routing_tree, hf_dvb_s2_table_ripd_vpi_vci_flag, tvb, cur_off + new_off, 1, ENC_NA);
1342                     new_off += 1;
1343                     if (vpi_vci_flag == 1) {
1344                         vpi_vci_loop_count = tvb_get_guint8(tvb, cur_off + new_off);
1345                         proto_tree_add_item(dvb_s2_hdr_table_network_routing_tree, hf_dvb_s2_table_ripd_vpi_vci_loop_count, tvb, cur_off + new_off, 1, ENC_NA);
1346                         new_off += 1;
1347                         for (i = 0 ; i <= vpi_vci_loop_count ; i++) {
1348                             proto_tree_add_item(dvb_s2_hdr_table_network_routing_tree, hf_dvb_s2_table_ripd_vpi, tvb, cur_off + new_off, 1, ENC_NA);
1349                             new_off += 1;
1350                             proto_tree_add_item(dvb_s2_hdr_table_network_routing_tree, hf_dvb_s2_table_ripd_vci, tvb, cur_off + new_off, 2, ENC_NA);
1351                             new_off += 2;
1352                         }
1353                     }
1354                     route_id_flag = tvb_get_guint8(tvb, cur_off + new_off) & DVB_S2_TABLE_DESC_ROUTE_ID_FLAG_MASK;
1355                     proto_tree_add_item(dvb_s2_hdr_table_network_routing_tree, hf_dvb_s2_table_ripd_route_id_flag, tvb, cur_off + new_off, 1, ENC_NA);
1356                     new_off += 1;
1357                     if (route_id_flag == 1) {
1358                         route_id_loop_count = tvb_get_guint8(tvb, cur_off + new_off);
1359                         proto_tree_add_item(dvb_s2_hdr_table_network_routing_tree, hf_dvb_s2_table_ripd_route_id_loop_count, tvb, cur_off + new_off, 1, ENC_NA);
1360                         new_off += 1;
1361                         for (l = 0 ; l <= route_id_loop_count ; l ++) {
1362                             proto_tree_add_item(dvb_s2_hdr_table_network_routing_tree, hf_dvb_s2_table_ripd_route_id, tvb, cur_off + new_off, 2, ENC_NA);
1363                             new_off += 2;
1364                         }
1365                     }
1366                     proto_tree_add_item(dvb_s2_hdr_table_network_routing_tree, hf_dvb_s2_table_ripd_channel_id, tvb, cur_off + new_off, 1, ENC_NA);
1367                     new_off += 1;
1368                 }
1369                 break;
1370             case (DVB_S2_TABLE_DESC_NETWORK_LAYER_INFO):
1371                 dissect_snmp_pdu(tvb, cur_off + new_off, pinfo, dvb_s2_hdr_table_desc_tree, 1, ett_dvb_s2_hdr_table_desc, FALSE);
1372                 new_off += desc_length;
1373                 break;
1374             case (DVB_S2_TABLE_DESC_CORRECTION_CONTROL):
1375                 proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_corcd_acq_response_timeout, tvb, cur_off + new_off, 4, ENC_NA);
1376                 new_off += 4;
1377                 proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_corcd_sync_response_timeout, tvb, cur_off + new_off, 4, ENC_NA);
1378                 new_off += 4;
1379                 proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_corcd_acq_max_losses, tvb, cur_off + new_off, 1, ENC_NA);
1380                 new_off += 1;
1381                 proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_corcd_sync_max_losses, tvb, cur_off + new_off, 1, ENC_NA);
1382                 new_off += 1;
1383                 break;
1384             case (DVB_S2_TABLE_DESC_CONTENTION_CONTROL):
1385                 proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_concd_superframe_id, tvb, cur_off + new_off, 1, ENC_NA);
1386                 new_off += 1;
1387                 proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_concd_csc_response_timeout, tvb, cur_off + new_off, 4, ENC_NA);
1388                 new_off += 4;
1389                 proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_concd_csc_max_losses, tvb, cur_off + new_off, 1, ENC_NA);
1390                 new_off += 1;
1391                 proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_concd_max_time_before_retry, tvb, cur_off + new_off, 4, ENC_NA);
1392                 new_off += 4;
1393                 break;
1394             case (DVB_S2_TABLE_DESC_SATELLITE_FORWARD_LINK):
1395                 start_off = new_off;
1396                 proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_sfld_satellite_id, tvb, cur_off + new_off, 1, ENC_NA);
1397                 new_off += 1;
1398                 proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_sfld_beam_id, tvb, cur_off + new_off, 2, ENC_NA);
1399                 new_off += 2;
1400                 proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_sfld_ncc_id, tvb, cur_off + new_off, 1, ENC_NA);
1401                 new_off += 1;
1402                 proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_sfld_multiplex_usage, tvb, cur_off + new_off, 1, ENC_NA);
1403                 proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_sfld_local_multiplex_id, tvb, cur_off + new_off, 1, ENC_NA);
1404                 new_off += 1;
1405                 proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_sfld_frequency, tvb, cur_off + new_off, 4, ENC_NA);
1406                 new_off += 4;
1407                 proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_sfld_orbital_position, tvb, cur_off + new_off, 2, ENC_NA);
1408                 new_off += 2;
1409                 transmission_standard = (tvb_get_guint8(tvb, cur_off + new_off) & DVB_S2_TABLE_DESC_TRANSMISSION_STANDARD_MASK) /8;
1410                 proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_sfld_west_east_flag, tvb, cur_off + new_off, 1, ENC_NA);
1411                 proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_sfld_polarization, tvb, cur_off + new_off, 1, ENC_NA);
1412                 proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_sfld_transmission_standard, tvb, cur_off + new_off, 1, ENC_NA);
1413                 if (transmission_standard == 0) {
1414                     new_off += 1;
1415                 } else if (transmission_standard == 1 || transmission_standard == 2) {
1416                     scrambling_sequence_selector = tvb_get_guint8(tvb, cur_off + new_off) & DVB_S2_TABLE_DESC_SCRAMBLING_SEQUENCE_SELECTOR_MASK;
1417                     proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_sfld_scrambling_sequence_selector, tvb, cur_off + new_off, 1, ENC_NA);
1418                     proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_sfld_roll_off, tvb, cur_off + new_off, 1, ENC_NA);
1419                     new_off += 1;
1420                 }
1421                 proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_sfld_symbol_rate, tvb, cur_off + new_off, 3, ENC_NA);
1422                 new_off += 3;
1423                 if (transmission_standard == 0) {
1424                     proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_sfld_fec_inner, tvb, cur_off + new_off, 1, ENC_NA);
1425                     new_off += 1;
1426                 } else if (transmission_standard == 1 || transmission_standard == 2) {
1427                     proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_sfld_input_stream_identifier, tvb, cur_off + new_off, 1, ENC_NA);
1428                     new_off += 1;
1429                     if (scrambling_sequence_selector == 0) {
1430                         proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_sfld_reserved_for_forward_spreading, tvb, cur_off + new_off, 1, ENC_NA);
1431                         proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_sfld_scrambling_sequence_index, tvb, cur_off + new_off, 3, ENC_NA);
1432                         new_off += 3;
1433                     }
1434                 }
1435                 remaning_data = desc_length - (new_off - start_off);
1436                 if (remaning_data > 0 ) {
1437                     if (table_id == DVB_S2_TABLE_TIMB && remaning_data == DVB_S2_NCR_SIZE) {
1438                         proto_tree *dvb_s2_hdr_table_ncr_subtree;
1439                         proto_item *ti_ncr;
1440                         ti_ncr = proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_sfld_ncr_private_data, tvb, cur_off + new_off, 6, ENC_NA);
1441                         dvb_s2_hdr_table_ncr_subtree = proto_item_add_subtree(ti_ncr, ett_dvb_s2_hdr_table_desc);
1442 
1443                         proto_tree_add_bits_item(dvb_s2_hdr_table_ncr_subtree, hf_dvb_s2_table_sfld_ncr_base_private_data, tvb, (cur_off + new_off) * 8, 33, ENC_NA);
1444                         proto_tree_add_item(dvb_s2_hdr_table_ncr_subtree, hf_dvb_s2_table_sfld_ncr_ext_private_data, tvb, cur_off + new_off + 4, 2, ENC_NA);
1445                     } else {
1446                         proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_sfld_private_data, tvb, cur_off + new_off, remaning_data, ENC_NA);
1447                     }
1448                     new_off += remaning_data;
1449                 }
1450 
1451                 break;
1452             case (DVB_S2_TABLE_DESC_MOBILITY_CONTROL):
1453                 proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_mc_command_value, tvb, cur_off + new_off, 2, ENC_NA);
1454                 new_off += 2;
1455                 proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_mc_command_parameter, tvb, cur_off + new_off, 2, ENC_NA);
1456                 new_off += 2;
1457                 break;
1458             case (DVB_S2_TABLE_DESC_LOWEST_SOFTWARE_VERSION):
1459                 group_count = tvb_get_guint8(tvb, cur_off + new_off);
1460                 proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_lsvd_group_count, tvb, cur_off + new_off, 1, ENC_NA);
1461                 new_off += 1;
1462                 for (k = 0 ; k < group_count ; k++) {
1463                         proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_lsvd_oui, tvb, cur_off + new_off, 3, ENC_NA);
1464                         new_off += 3;
1465                         proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_lsvd_mcast_address, tvb, cur_off + new_off, 4, ENC_NA);
1466                         new_off += 4;
1467                         proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_lsvd_mcast_port, tvb, cur_off + new_off, 2, ENC_NA);
1468                         new_off += 2;
1469                         version_length = tvb_get_guint8(tvb, cur_off + new_off);
1470                         proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_lsvd_version_field_length, tvb, cur_off + new_off, 1, ENC_NA);
1471                         new_off += 1;
1472                         proto_tree_add_item(dvb_s2_hdr_table_desc_tree, hf_dvb_s2_table_lsvd_version_bytes, tvb, cur_off + new_off, version_length, ENC_NA);
1473                         new_off += version_length;
1474                 }
1475                 break;
1476             default:
1477                 new_off += desc_length;
1478                 break;
1479         }
1480     }
1481 
1482     return new_off;
1483 }
1484 
dissect_dvb_s2_table_sct(tvbuff_t * tvb,int cur_off,proto_tree * dvb_s2_hdr_table_tree)1485 static int dissect_dvb_s2_table_sct(tvbuff_t *tvb, int cur_off, proto_tree *dvb_s2_hdr_table_tree)
1486 {
1487     int sf_start_offset, new_off = 0;
1488     guint8      superframe_loop_count, frame_loop_count;
1489     int         cur_sf, cur_frame;
1490     proto_item *ti, *tf;
1491 
1492     proto_tree  *dvb_s2_hdr_table_sf_tree, *dvb_s2_hdr_table_sf_frame_tree;
1493 
1494     superframe_loop_count = tvb_get_guint8(tvb, cur_off + new_off);
1495     proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_superframe_loop_count, tvb, cur_off + new_off, 1, ENC_NA);
1496     new_off += 1;
1497 
1498     for(cur_sf=0 ; cur_sf<=superframe_loop_count ; cur_sf++)
1499     {
1500         sf_start_offset = new_off;
1501         ti = proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_superframe, tvb, cur_off + new_off, -1, ENC_NA);
1502         dvb_s2_hdr_table_sf_tree = proto_item_add_subtree(ti, ett_dvb_s2_hdr_table_sf);
1503         if (dvb_s2_rcs_version == DVB_S2_RCS_TABLE_DECODING)
1504             proto_tree_add_item(dvb_s2_hdr_table_sf_tree, hf_dvb_s2_table_sf_id, tvb, cur_off + new_off, 1, ENC_NA);
1505         else if (dvb_s2_rcs_version == DVB_S2_RCS2_TABLE_DECODING)
1506             proto_tree_add_item(dvb_s2_hdr_table_sf_tree, hf_dvb_s2_table_sf_sequence, tvb, cur_off + new_off, 1, ENC_NA);
1507         new_off += 1;
1508         proto_tree_add_item(dvb_s2_hdr_table_sf_tree, hf_dvb_s2_table_sf_large_timing_uncertaintly_flag, tvb, cur_off + new_off, 1, ENC_NA);
1509         proto_tree_add_item(dvb_s2_hdr_table_sf_tree, hf_dvb_s2_table_sf_uplink_polarization, tvb, cur_off + new_off, 1, ENC_NA);
1510         new_off += 1;
1511         proto_tree_add_item(dvb_s2_hdr_table_sf_tree, hf_dvb_s2_table_sf_absolute_time , tvb, cur_off + new_off, 6, ENC_NA);
1512         new_off += 6;
1513         proto_tree_add_item(dvb_s2_hdr_table_sf_tree, hf_dvb_s2_table_sf_duration, tvb, cur_off + new_off, 4, ENC_NA);
1514         new_off += 4;
1515         proto_tree_add_item(dvb_s2_hdr_table_sf_tree, hf_dvb_s2_table_sf_centre_frequency, tvb, cur_off + new_off, 4, ENC_NA);
1516         new_off += 4;
1517         proto_tree_add_item(dvb_s2_hdr_table_sf_tree, hf_dvb_s2_table_sf_count, tvb, cur_off + new_off, 2, ENC_NA);
1518         new_off += 2;
1519         frame_loop_count = tvb_get_guint8(tvb, cur_off + new_off) & DVB_S2_TABLE_SCT_FRAME_LOOP_COUNT_MASK;
1520         proto_tree_add_item(dvb_s2_hdr_table_sf_tree, hf_dvb_s2_table_sf_frame_loop_count, tvb, cur_off + new_off, 1, ENC_NA);
1521         new_off += 1;
1522 
1523         for(cur_frame=0 ; cur_frame<=frame_loop_count ; cur_frame++)
1524         {
1525             tf = proto_tree_add_item(dvb_s2_hdr_table_sf_tree, hf_dvb_s2_table_sf_frame, tvb, cur_off + new_off,
1526                                       DVB_S2_TABLE_SCT_FRAME_LEN, ENC_NA);
1527             dvb_s2_hdr_table_sf_frame_tree = proto_item_add_subtree(tf, ett_dvb_s2_hdr_table_sf_frame);
1528             if (dvb_s2_rcs_version == DVB_S2_RCS_TABLE_DECODING)
1529                 proto_tree_add_item(dvb_s2_hdr_table_sf_frame_tree, hf_dvb_s2_table_sf_frame_id, tvb, cur_off + new_off, 1, ENC_NA);
1530             if (dvb_s2_rcs_version == DVB_S2_RCS2_TABLE_DECODING)
1531                 proto_tree_add_item(dvb_s2_hdr_table_sf_frame_tree, hf_dvb_s2_table_sf_frame_type, tvb, cur_off + new_off, 1, ENC_NA);
1532             new_off += 1;
1533             proto_tree_add_item(dvb_s2_hdr_table_sf_frame_tree, hf_dvb_s2_table_sf_frame_start_time, tvb, cur_off + new_off, 4, ENC_NA);
1534             new_off += 4;
1535             proto_tree_add_item(dvb_s2_hdr_table_sf_frame_tree, hf_dvb_s2_table_sf_frame_centre_frequency_offset, tvb, cur_off + new_off, 3, ENC_NA);
1536             new_off += 3;
1537         }
1538         proto_item_set_len(ti, new_off - sf_start_offset);
1539     }
1540     if (dvb_s2_rcs_version == DVB_S2_RCS_TABLE_DECODING)
1541     {
1542         proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_crc32, tvb, cur_off + new_off, 4, ENC_NA);
1543         new_off += 4;
1544     }
1545 
1546     return new_off;
1547 }
1548 
dissect_dvb_s2_table_tim(tvbuff_t * tvb,int cur_off,proto_tree * dvb_s2_hdr_table_tree,gboolean isUnicast,packet_info * pinfo)1549 static int dissect_dvb_s2_table_tim(tvbuff_t *tvb, int cur_off, proto_tree *dvb_s2_hdr_table_tree, gboolean isUnicast, packet_info *pinfo)
1550 {
1551     int desc_loop_count, new_off = 0;
1552     int table_id = 0;
1553 
1554     if(isUnicast) {
1555         table_id = DVB_S2_TABLE_TIM;
1556         proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_rcst_status, tvb, cur_off + new_off, 1, ENC_NA);
1557     } else {
1558         table_id = DVB_S2_TABLE_TIMB;
1559         proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_network_status, tvb, cur_off + new_off, 1, ENC_NA);
1560     }
1561     new_off += 1;
1562     proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_desc_loop_count, tvb, cur_off + new_off, 1, ENC_NA);
1563     desc_loop_count = tvb_get_guint8(tvb, cur_off + new_off);
1564     new_off += 1;
1565 
1566     new_off += dissect_dvb_s2_table_desc(tvb, cur_off + new_off, dvb_s2_hdr_table_tree, desc_loop_count, table_id, pinfo);
1567 
1568     if (dvb_s2_rcs_version == DVB_S2_RCS_TABLE_DECODING)
1569     {
1570         proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_crc32, tvb, cur_off + new_off, 4, ENC_NA);
1571         new_off += 4;
1572     }
1573 
1574     return new_off;
1575 }
1576 
1577 
dissect_dvb_s2_table_tbtp(tvbuff_t * tvb,int cur_off,proto_tree * dvb_s2_hdr_table_tree,guint16 table_len)1578 static int dissect_dvb_s2_table_tbtp(tvbuff_t *tvb, int cur_off, proto_tree *dvb_s2_hdr_table_tree, guint16 table_len)
1579 {
1580     int frame_loop_count, frame_start_offset, btp_start_offset, cur_frame, btp_loop_count, btp, new_off = 0;
1581     guint8 multiple_channel_flag = 0;
1582     proto_item *ti, *tf;
1583     proto_tree *dvb_s2_hdr_tbtp_frame_tree, *dvb_s2_hdr_tbtp_frame_btp_tree;
1584     proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_tbtp_group_id, tvb, cur_off + new_off, 1, ENC_NA);
1585     new_off += 1;
1586     proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_tbtp_superframe_count, tvb, cur_off + new_off, 2, ENC_NA);
1587     new_off += 2;
1588     frame_loop_count = tvb_get_guint8(tvb, cur_off + new_off) & DVB_S2_TABLE_SCT_FRAME_LOOP_COUNT_MASK;
1589     proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_tbtp_frame_loop_count, tvb, cur_off + new_off, 1, ENC_NA);
1590     new_off += 1;
1591     for(cur_frame=0 ; cur_frame<=frame_loop_count ; cur_frame++)
1592     {
1593         frame_start_offset = new_off;
1594         ti = proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_tbtp_sf_frame, tvb, cur_off + new_off, -1, ENC_NA);
1595         dvb_s2_hdr_tbtp_frame_tree = proto_item_add_subtree(ti, ett_dvb_s2_hdr_tbtp_frame);
1596 
1597         proto_tree_add_item(dvb_s2_hdr_tbtp_frame_tree, hf_dvb_s2_tbtp_frame_number, tvb, cur_off + new_off, 1, ENC_NA);
1598         new_off += 1;
1599         btp_loop_count = tvb_get_ntohs(tvb, cur_off + new_off) & DVB_S2_TABLE_TBTP_BTP_LOOP_COUNT_MASK;
1600         proto_tree_add_item(dvb_s2_hdr_tbtp_frame_tree, hf_dvb_s2_tbtp_btb_loop_count, tvb, cur_off + new_off, 2, ENC_NA);
1601         new_off += 2;
1602         for(btp=0 ; btp<=btp_loop_count ; btp++)
1603         {
1604             btp_start_offset = new_off;
1605             tf = proto_tree_add_item(dvb_s2_hdr_tbtp_frame_tree, hf_dvb_s2_tbtp_btp, tvb, cur_off + new_off, -1, ENC_NA);
1606             dvb_s2_hdr_tbtp_frame_btp_tree = proto_item_add_subtree(tf, ett_dvb_s2_hdr_tbtp_frame_btp);
1607             proto_tree_add_item(dvb_s2_hdr_tbtp_frame_btp_tree, hf_dvb_s2_tbtp_logon_id, tvb, cur_off + new_off, 2, ENC_NA);
1608             new_off += 2;
1609             multiple_channel_flag = tvb_get_guint8(tvb, cur_off + new_off) & 0x80;
1610             proto_tree_add_item(dvb_s2_hdr_tbtp_frame_btp_tree, hf_dvb_s2_tbtp_multiple_channel_flag, tvb, cur_off + new_off, 1, ENC_NA);
1611             proto_tree_add_item(dvb_s2_hdr_tbtp_frame_btp_tree, hf_dvb_s2_tbtp_assignment_type, tvb, cur_off + new_off, 1, ENC_NA);
1612             proto_tree_add_item(dvb_s2_hdr_tbtp_frame_btp_tree, hf_dvb_s2_tbtp_frame_vbdc_queue_empty_flag, tvb, cur_off + new_off, 1, ENC_NA);
1613             proto_tree_add_item(dvb_s2_hdr_tbtp_frame_btp_tree, hf_dvb_s2_tbtp_start_slot, tvb, cur_off + new_off, 2, ENC_NA);
1614             new_off += 2;
1615             if (multiple_channel_flag) {
1616                 proto_tree_add_item(dvb_s2_hdr_tbtp_frame_btp_tree, hf_dvb_s2_tbtp_channel_id, tvb, cur_off + new_off, 1, ENC_NA);
1617                 new_off += 1;
1618             }
1619             proto_tree_add_item(dvb_s2_hdr_tbtp_frame_btp_tree, hf_dvb_s2_tbtp_assignment_count, tvb, cur_off + new_off, 1, ENC_NA);
1620             new_off += 1;
1621             proto_item_set_len(tf, new_off - btp_start_offset);
1622         }
1623         proto_item_set_len(ti, new_off - frame_start_offset);
1624     }
1625 
1626     if (dvb_s2_rcs_version == DVB_S2_RCS_TABLE_DECODING)
1627     {
1628         proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_crc32, tvb, cur_off + new_off, 4, ENC_NA);
1629     }
1630 
1631     return (table_len - DVB_S2_TABLE_HEADER_RCS2_LEN);
1632 }
1633 
1634 
dissect_dvb_s2_table_tbtp2(tvbuff_t * tvb,int cur_off,proto_tree * dvb_s2_hdr_table_tree,guint16 table_len)1635 static int dissect_dvb_s2_table_tbtp2(tvbuff_t *tvb, int cur_off, proto_tree *dvb_s2_hdr_table_tree, guint16 table_len)
1636 {
1637     int frame_loop_count, frame_start_offset, assign_start_offset, cur_frame, cur_assign, new_off = 0;
1638     guint16 assignment_loop_count;
1639     guint8 assignment_format = 0;
1640     proto_item *ti, *tf;
1641     proto_tree *dvb_s2_hdr_table_frame_tree, *dvb_s2_hdr_table_frame_assign_tree;
1642 
1643     proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_group_id, tvb, cur_off + new_off, 1, ENC_NA);
1644     new_off += 1;
1645     proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_sf_sequence, tvb, cur_off + new_off, 1, ENC_NA);
1646     new_off += 1;
1647     proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_assign_context, tvb, cur_off + new_off, 1, ENC_NA);
1648     new_off += 1;
1649     proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_superframe_count, tvb, cur_off + new_off, 1, ENC_NA);
1650     new_off += 1;
1651     assignment_format = tvb_get_guint8(tvb, cur_off + new_off);
1652     proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_assign_format, tvb, cur_off + new_off, 1, ENC_NA);
1653     new_off += 1;
1654     frame_loop_count = tvb_get_guint8(tvb, cur_off + new_off);
1655     proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_frame_loop_count, tvb, cur_off + new_off, 1, ENC_NA);
1656     new_off += 1;
1657 
1658     for(cur_frame=0 ; cur_frame<=frame_loop_count ; cur_frame++)
1659     {
1660         frame_start_offset = new_off;
1661         ti = proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_sf_frame, tvb, cur_off + new_off, -1, ENC_NA);
1662         dvb_s2_hdr_table_frame_tree = proto_item_add_subtree(ti, ett_dvb_s2_hdr_table_frame);
1663         proto_tree_add_item(dvb_s2_hdr_table_frame_tree, hf_dvb_s2_table_frame_number, tvb, cur_off + new_off, 1, ENC_NA);
1664         new_off += 1;
1665         proto_tree_add_item(dvb_s2_hdr_table_frame_tree,hf_dvb_s2_table_frame_assign_offset, tvb, cur_off + new_off, 2, ENC_NA);
1666         new_off += 2;
1667         assignment_loop_count = tvb_get_ntohs(tvb, cur_off + new_off);
1668         proto_tree_add_item(dvb_s2_hdr_table_frame_tree, hf_dvb_s2_table_frame_assign_loop_count, tvb, cur_off + new_off, 2, ENC_NA);
1669         new_off += 2;
1670         for(cur_assign=0 ; cur_assign<=assignment_loop_count ; cur_assign++)
1671         {
1672             assign_start_offset = new_off;
1673             tf = proto_tree_add_item(dvb_s2_hdr_table_frame_tree, hf_dvb_s2_table_frame_assignment, tvb, cur_off + new_off, -1, ENC_NA);
1674             dvb_s2_hdr_table_frame_assign_tree = proto_item_add_subtree(tf, ett_dvb_s2_hdr_table_frame_assign);
1675             switch (assignment_format) {
1676                 case 0 :
1677                     proto_tree_add_item(dvb_s2_hdr_table_frame_assign_tree, hf_dvb_s2_table_frame_assign_id48, tvb, cur_off + new_off, 6, ENC_NA);
1678                     new_off += 6;
1679                     break;
1680                 case 1 :
1681                     proto_tree_add_item(dvb_s2_hdr_table_frame_assign_tree, hf_dvb_s2_table_frame_assign_id8, tvb, cur_off + new_off, 1, ENC_NA);
1682                     new_off += 1;
1683                     break;
1684                 case 2 :
1685                     proto_tree_add_item(dvb_s2_hdr_table_frame_assign_tree, hf_dvb_s2_table_frame_assign_id16, tvb, cur_off + new_off, 2, ENC_NA);
1686                     new_off += 2;
1687                     break;
1688                 case 3 :
1689                     proto_tree_add_item(dvb_s2_hdr_table_frame_assign_tree, hf_dvb_s2_table_frame_assign_id24, tvb, cur_off + new_off, 3, ENC_NA);
1690                     new_off += 3;
1691                     break;
1692                 case 10 :
1693                     proto_tree_add_item(dvb_s2_hdr_table_frame_assign_tree, hf_dvb_s2_table_frame_dynamic_tx_type, tvb, cur_off + new_off, 1, ENC_NA);
1694                     new_off += 1;
1695                     proto_tree_add_item(dvb_s2_hdr_table_frame_assign_tree, hf_dvb_s2_table_frame_assign_id8, tvb, cur_off + new_off, 1, ENC_NA);
1696                     new_off += 1;
1697                     break;
1698                 case 11 :
1699                     proto_tree_add_item(dvb_s2_hdr_table_frame_assign_tree, hf_dvb_s2_table_frame_dynamic_tx_type, tvb, cur_off + new_off, 1, ENC_NA);
1700                     new_off += 1;
1701                     proto_tree_add_item(dvb_s2_hdr_table_frame_assign_tree, hf_dvb_s2_table_frame_assign_id16, tvb, cur_off + new_off, 2, ENC_NA);
1702                     new_off += 2;
1703                     break;
1704                 case 12 :
1705                     proto_tree_add_item(dvb_s2_hdr_table_frame_assign_tree, hf_dvb_s2_table_frame_dynamic_tx_type, tvb, cur_off + new_off, 1, ENC_NA);
1706                     new_off += 1;
1707                     proto_tree_add_item(dvb_s2_hdr_table_frame_assign_tree, hf_dvb_s2_table_frame_assign_id24, tvb, cur_off + new_off, 3, ENC_NA);
1708                     new_off += 3;
1709                     break;
1710             }
1711             proto_item_set_len(tf, new_off - assign_start_offset);
1712         }
1713         proto_item_set_len(ti, new_off - frame_start_offset);
1714     }
1715     return (table_len - DVB_S2_TABLE_HEADER_RCS2_LEN);
1716 }
1717 
dissect_dvb_s2_table_cmt(tvbuff_t * tvb,int cur_off,proto_tree * dvb_s2_hdr_table_tree)1718 static int dissect_dvb_s2_table_cmt(tvbuff_t *tvb, int cur_off, proto_tree *dvb_s2_hdr_table_tree)
1719 {
1720     int entry_loop_count, cur_entry, entry_start_offset, new_off = 0;
1721     proto_item *ti;
1722     proto_tree  *dvb_s2_hdr_table_entry_tree;
1723 
1724     entry_loop_count = tvb_get_guint8(tvb, cur_off + new_off);
1725     proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_entry_loop_count, tvb, cur_off + new_off, 1, ENC_NA);
1726     new_off += 1;
1727 
1728     for(cur_entry=0 ; cur_entry<=entry_loop_count ; cur_entry++)
1729     {
1730         entry_start_offset = new_off;
1731         ti = proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_entry, tvb, cur_off + new_off, -1, ENC_NA);
1732         dvb_s2_hdr_table_entry_tree = proto_item_add_subtree(ti, ett_dvb_s2_hdr_table_entry);
1733         proto_tree_add_item(dvb_s2_hdr_table_entry_tree, hf_dvb_s2_table_group_id, tvb, cur_off + new_off, 1, ENC_NA);
1734         new_off += 1;
1735         proto_tree_add_item(dvb_s2_hdr_table_entry_tree, hf_dvb_s2_table_entry_login_id, tvb, cur_off + new_off, 2, ENC_NA);
1736         new_off += 2;
1737 
1738         new_off += dissect_dvb_s2_table_correct_msg(tvb, cur_off + new_off, dvb_s2_hdr_table_entry_tree);
1739         proto_item_set_len(ti, new_off - entry_start_offset);
1740     }
1741 
1742     if (dvb_s2_rcs_version == DVB_S2_RCS_TABLE_DECODING)
1743     {
1744         proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_crc32, tvb, cur_off + new_off, 4, ENC_NA);
1745         new_off += 4;
1746     }
1747 
1748     return new_off;
1749 }
1750 
dissect_dvb_s2_table_tmst(tvbuff_t * tvb,int cur_off,proto_tree * dvb_s2_hdr_table_tree)1751 static int dissect_dvb_s2_table_tmst(tvbuff_t *tvb, int cur_off, proto_tree *dvb_s2_hdr_table_tree)
1752 {
1753     int txmode_count, cur_txmode, new_off = 0;
1754     proto_item *ti;
1755     proto_tree  *dvb_s2_hdr_table_txmode_tree;
1756 
1757     txmode_count = tvb_get_guint8(tvb, cur_off + new_off);
1758     proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_tx_mode_count, tvb, cur_off + new_off, 1, ENC_NA);
1759     new_off += 1;
1760 
1761     for(cur_txmode=0 ; cur_txmode<txmode_count ; cur_txmode++)
1762     {
1763         ti = proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_tx_mode, tvb, cur_off + new_off, DVB_S2_TABLE_TX_MODE_SIZE, ENC_NA);
1764         dvb_s2_hdr_table_txmode_tree = proto_item_add_subtree(ti, ett_dvb_s2_hdr_table_txmode);
1765         proto_tree_add_item(dvb_s2_hdr_table_txmode_tree, hf_dvb_s2_table_tx_mode_frame_length, tvb, cur_off + new_off, 1, ENC_NA);
1766         proto_tree_add_item(dvb_s2_hdr_table_txmode_tree, hf_dvb_s2_table_tx_mode_pilot_symbols, tvb, cur_off + new_off, 1, ENC_NA);
1767         proto_tree_add_item(dvb_s2_hdr_table_txmode_tree, hf_dvb_s2_table_tx_mode_modcod, tvb, cur_off + new_off, 1, ENC_NA);
1768         new_off += 1;
1769     }
1770 
1771     if (dvb_s2_rcs_version == DVB_S2_RCS_TABLE_DECODING)
1772     {
1773         proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_crc32, tvb, cur_off + new_off, 4, ENC_NA);
1774         new_off += 4;
1775     }
1776     return new_off;
1777 }
1778 
dissect_dvb_s2_table_tmst2(tvbuff_t * tvb,int cur_off,proto_tree * dvb_s2_hdr_table_tree)1779 static int dissect_dvb_s2_table_tmst2(tvbuff_t *tvb, int cur_off, proto_tree *dvb_s2_hdr_table_tree)
1780 {
1781     int txmode_count, cur_txmode, new_off = 0;
1782     proto_item *ti;
1783     proto_tree  *dvb_s2_hdr_table_txmode_tree;
1784 
1785     proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_common_sytem_margin, tvb, cur_off + new_off, 1, ENC_NA);
1786     new_off += 1;
1787     txmode_count = tvb_get_guint8(tvb, cur_off + new_off);
1788     proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_tx_mode_count, tvb, cur_off + new_off, 1, ENC_NA);
1789     new_off += 1;
1790 
1791     for(cur_txmode=0 ; cur_txmode<txmode_count ; cur_txmode++)
1792     {
1793         ti = proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_tx_mode, tvb, cur_off + new_off, DVB_S2_TABLE_TX_MODE_SIZE, ENC_NA);
1794         dvb_s2_hdr_table_txmode_tree = proto_item_add_subtree(ti, ett_dvb_s2_hdr_table_txmode);
1795         proto_tree_add_item(dvb_s2_hdr_table_txmode_tree, hf_dvb_s2_table_tx_mode_frame_length, tvb, cur_off + new_off, 1, ENC_NA);
1796         proto_tree_add_item(dvb_s2_hdr_table_txmode_tree, hf_dvb_s2_table_tx_mode_pilot_symbols, tvb, cur_off + new_off, 1, ENC_NA);
1797         proto_tree_add_item(dvb_s2_hdr_table_txmode_tree, hf_dvb_s2_table_tx_mode_modcod, tvb, cur_off + new_off, 1, ENC_NA);
1798         new_off += 1;
1799         proto_tree_add_item(dvb_s2_hdr_table_txmode_tree, hf_dvb_s2_table_tx_mode_modcod_system_margin, tvb, cur_off + new_off, 1, ENC_NA);
1800         new_off += 1;
1801         proto_tree_add_item(dvb_s2_hdr_table_txmode_tree, hf_dvb_s2_table_tx_mode_isi, tvb, cur_off + new_off, 1, ENC_NA);
1802         new_off += 1;
1803     }
1804     return new_off;
1805 }
1806 
dissect_dvb_s2_table_bct(tvbuff_t * tvb,int cur_off,proto_tree * dvb_s2_hdr_table_tree)1807 static int dissect_dvb_s2_table_bct(tvbuff_t *tvb, int cur_off, proto_tree *dvb_s2_hdr_table_tree)
1808 {
1809     int txtype_count, cur_txtype, tx_format_data_length, uw_symbol_len, cur_uwsymbol, uwsegment_count, cur_uwsegment, cur_period, cpm_offset, new_off = 0;
1810     proto_item *ti;
1811     proto_tree  *dvb_s2_hdr_table_txtype_tree, *dvb_s2_hdr_table_txtype_uwsegment_tree,
1812                 *dvb_s2_hdr_table_txtype_ypattern_tree, *dvb_s2_hdr_table_txtype_wpattern_tree,
1813                 *dvb_s2_hdr_table_txtype_uwsymbol_tree;
1814     guint8 tx_format, tx_type, y_period, w_period, modulation_scheme, param_interleaver;
1815 
1816     txtype_count = tvb_get_guint8(tvb, cur_off + new_off);
1817     proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_tx_type_loop_count, tvb, cur_off + new_off, 1, ENC_NA);
1818     new_off += 1;
1819 
1820     for(cur_txtype=0 ; cur_txtype<txtype_count ; cur_txtype++)
1821     {
1822         tx_format_data_length = tvb_get_guint8(tvb, cur_off + new_off + 3);
1823         ti = proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_tx_type_branch, tvb, cur_off + new_off, tx_format_data_length + 4, ENC_NA);
1824         dvb_s2_hdr_table_txtype_tree = proto_item_add_subtree(ti, ett_dvb_s2_hdr_table_txtype);
1825         tx_type = tvb_get_guint8(tvb, cur_off + new_off);
1826         proto_tree_add_item(dvb_s2_hdr_table_txtype_tree, hf_dvb_s2_table_tx_type, tvb, cur_off + new_off, 1, ENC_NA);
1827         new_off += 1;
1828         proto_tree_add_item(dvb_s2_hdr_table_txtype_tree, hf_dvb_s2_table_tx_type_tx_content_type, tvb, cur_off + new_off, 1, ENC_NA);
1829         new_off += 1;
1830         tx_format = tvb_get_guint8(tvb, cur_off + new_off);
1831         proto_tree_add_item(dvb_s2_hdr_table_txtype_tree, hf_dvb_s2_table_tx_type_tx_format_class, tvb, cur_off + new_off, 1, ENC_NA);
1832         new_off += 1;
1833         proto_tree_add_item(dvb_s2_hdr_table_txtype_tree, hf_dvb_s2_table_tx_type_tx_format_data_length, tvb, cur_off + new_off, 1, ENC_NA);
1834         new_off += 1;
1835         switch(tx_format)
1836         {
1837             case DVB_S2_TABLE_TXFORMAT_LMBT :
1838                 proto_tree_add_item(dvb_s2_hdr_table_txtype_tree, hf_dvb_s2_table_tx_type_tx_block_size, tvb, cur_off + new_off, 1, ENC_NA);
1839                 new_off += 1;
1840                 proto_tree_add_item(dvb_s2_hdr_table_txtype_tree, hf_dvb_s2_table_tx_type_threshold_es_n0, tvb, cur_off + new_off, 1, ENC_NA);
1841                 new_off += 1;
1842                 proto_tree_add_item(dvb_s2_hdr_table_txtype_tree, hf_dvb_s2_table_tx_type_tx_start_offset_1, tvb, cur_off + new_off, 1, ENC_NA);
1843                 new_off += 1;
1844                 proto_tree_add_item(dvb_s2_hdr_table_txtype_tree, hf_dvb_s2_table_tx_type_tx_start_offset_2, tvb, cur_off + new_off, 3, ENC_NA);
1845                 new_off += 3;
1846                 if(tx_type > 127)
1847                 {
1848                     proto_tree_add_item(dvb_s2_hdr_table_txtype_tree, hf_dvb_s2_table_tx_type_payload_size, tvb, cur_off + new_off, 2, ENC_NA);
1849                     new_off += 2;
1850                     modulation_scheme = tvb_get_guint8(tvb, cur_off + new_off);
1851                     proto_tree_add_item(dvb_s2_hdr_table_txtype_tree, hf_dvb_s2_table_tx_type_modulation_scheme, tvb, cur_off + new_off, 1, ENC_NA);
1852                     new_off += 1;
1853                     proto_tree_add_item(dvb_s2_hdr_table_txtype_tree, hf_dvb_s2_table_tx_type_p, tvb, cur_off + new_off, 1, ENC_NA);
1854                     new_off += 1;
1855                     proto_tree_add_item(dvb_s2_hdr_table_txtype_tree, hf_dvb_s2_table_tx_type_q0, tvb, cur_off + new_off, 1, ENC_NA);
1856                     new_off += 1;
1857                     proto_tree_add_item(dvb_s2_hdr_table_txtype_tree, hf_dvb_s2_table_tx_type_q1, tvb, cur_off + new_off, 1, ENC_NA);
1858                     new_off += 1;
1859                     proto_tree_add_item(dvb_s2_hdr_table_txtype_tree, hf_dvb_s2_table_tx_type_q2, tvb, cur_off + new_off, 1, ENC_NA);
1860                     new_off += 1;
1861                     proto_tree_add_item(dvb_s2_hdr_table_txtype_tree, hf_dvb_s2_table_tx_type_q3, tvb, cur_off + new_off, 1, ENC_NA);
1862                     new_off += 1;
1863                     y_period = tvb_get_guint8(tvb, cur_off + new_off) & DVB_S2_TABLE_TX_TYPE_W_Y_PERIOD_MASK;
1864                     proto_tree_add_item(dvb_s2_hdr_table_txtype_tree, hf_dvb_s2_table_tx_type_y_period, tvb, cur_off + new_off, 1, ENC_NA);
1865                     new_off += 1;
1866                     w_period = tvb_get_guint8(tvb, cur_off + new_off) & DVB_S2_TABLE_TX_TYPE_W_Y_PERIOD_MASK;
1867                     proto_tree_add_item(dvb_s2_hdr_table_txtype_tree, hf_dvb_s2_table_tx_type_w_period, tvb, cur_off + new_off, 1, ENC_NA);
1868                     new_off += 1;
1869                     ti = proto_tree_add_item(dvb_s2_hdr_table_txtype_tree, hf_dvb_s2_table_tx_type_y_pattern, tvb, cur_off + new_off, y_period, ENC_NA);
1870                     dvb_s2_hdr_table_txtype_ypattern_tree = proto_item_add_subtree(ti, ett_dvb_s2_hdr_table_txtype_ypattern);
1871                     for(cur_period=0 ; cur_period<y_period ; cur_period++)
1872                     {
1873                         proto_tree_add_item(dvb_s2_hdr_table_txtype_ypattern_tree, hf_dvb_s2_table_tx_type_y_pattern_bit, tvb, cur_off + new_off, 1, ENC_NA);
1874                         new_off += 1;
1875                     }
1876                     ti = proto_tree_add_item(dvb_s2_hdr_table_txtype_tree, hf_dvb_s2_table_tx_type_w_pattern, tvb, cur_off + new_off, w_period, ENC_NA);
1877                     dvb_s2_hdr_table_txtype_wpattern_tree = proto_item_add_subtree(ti, ett_dvb_s2_hdr_table_txtype_wpattern);
1878                     for(cur_period=0 ; cur_period<w_period ; cur_period++)
1879                     {
1880                         proto_tree_add_item(dvb_s2_hdr_table_txtype_wpattern_tree, hf_dvb_s2_table_tx_type_w_pattern_bit, tvb, cur_off + new_off, 1, ENC_NA);
1881                         new_off += 1;
1882                     }
1883                     uw_symbol_len = 0;
1884                     uw_symbol_len += tvb_get_guint8(tvb, cur_off + new_off);
1885                     proto_tree_add_item(dvb_s2_hdr_table_txtype_tree, hf_dvb_s2_table_tx_type_preamble_len, tvb, cur_off + new_off, 1, ENC_NA);
1886                     new_off += 1;
1887                     uw_symbol_len += tvb_get_guint8(tvb, cur_off + new_off);
1888                     proto_tree_add_item(dvb_s2_hdr_table_txtype_tree, hf_dvb_s2_table_tx_type_postamble_len, tvb, cur_off + new_off, 1, ENC_NA);
1889                     new_off += 1;
1890                     proto_tree_add_item(dvb_s2_hdr_table_txtype_tree, hf_dvb_s2_table_tx_type_pilot_period, tvb, cur_off + new_off, 2, ENC_NA);
1891                     new_off += 2;
1892                     uw_symbol_len += tvb_get_guint8(tvb, cur_off + new_off);
1893                     proto_tree_add_item(dvb_s2_hdr_table_txtype_tree, hf_dvb_s2_table_tx_type_pilot_block_len, tvb, cur_off + new_off, 1, ENC_NA);
1894                     new_off += 1;
1895                     proto_tree_add_item(dvb_s2_hdr_table_txtype_tree, hf_dvb_s2_table_tx_type_pilot_sum, tvb, cur_off + new_off, 1, ENC_NA);
1896                     new_off += 1;
1897                     ti = proto_tree_add_item(dvb_s2_hdr_table_txtype_tree, hf_dvb_s2_table_tx_type_uw_symbol, tvb, cur_off + new_off, uw_symbol_len, ENC_NA);
1898                     dvb_s2_hdr_table_txtype_uwsymbol_tree = proto_item_add_subtree(ti, ett_dvb_s2_hdr_table_txtype_uwsymbol);
1899                     for(cur_uwsymbol=0 ; cur_uwsymbol<uw_symbol_len ; cur_uwsymbol++)
1900                     {
1901                         switch(modulation_scheme)
1902                         {
1903                             case DVB_S2_TABLE_MODULATION_SCHEME_QPSK:
1904                                 proto_tree_add_item(dvb_s2_hdr_table_txtype_uwsymbol_tree, hf_dvb_s2_table_tx_type_uw_symbol_qpsk,
1905                                                     tvb, cur_off + new_off, 1, ENC_NA);
1906                                 new_off += 1;
1907                                 break;
1908                             case DVB_S2_TABLE_MODULATION_SCHEME_8PSK:
1909                                 proto_tree_add_item(dvb_s2_hdr_table_txtype_uwsymbol_tree, hf_dvb_s2_table_tx_type_uw_symbol_8psk,
1910                                                     tvb, cur_off + new_off, 1, ENC_NA);
1911                                 new_off += 1;
1912                                 break;
1913                             case DVB_S2_TABLE_MODULATION_SCHEME_16QAM:
1914                                 proto_tree_add_item(dvb_s2_hdr_table_txtype_uwsymbol_tree, hf_dvb_s2_table_tx_type_uw_symbol_16qam,
1915                                                     tvb, cur_off + new_off, 1, ENC_NA);
1916                                 new_off += 1;
1917                                 break;
1918                             default:
1919                                 proto_tree_add_item(dvb_s2_hdr_table_txtype_uwsymbol_tree, hf_dvb_s2_table_tx_type_uw_symbol_unit,
1920                                                     tvb, cur_off + new_off, 1, ENC_NA);
1921                                 new_off += 1;
1922                                 break;
1923                         }
1924                     }
1925                }
1926                 else
1927                 {
1928                     proto_tree_add_item(dvb_s2_hdr_table_txtype_tree, hf_dvb_s2_table_tx_type_waveform_id, tvb, cur_off + new_off, 1, ENC_NA);
1929                     new_off += 1;
1930                 }
1931                 break;
1932             case DVB_S2_TABLE_TXFORMAT_CPMBT :
1933                 cpm_offset = new_off;
1934                 proto_tree_add_item(dvb_s2_hdr_table_txtype_tree, hf_dvb_s2_table_tx_type_tx_block_size, tvb, cur_off + new_off, 1, ENC_NA);
1935                 new_off += 1;
1936                 proto_tree_add_item(dvb_s2_hdr_table_txtype_tree, hf_dvb_s2_table_tx_type_threshold_es_n0, tvb, cur_off + new_off, 1, ENC_NA);
1937                 new_off += 1;
1938                 proto_tree_add_item(dvb_s2_hdr_table_txtype_tree, hf_dvb_s2_table_tx_type_tx_start_offset, tvb, cur_off + new_off, 4, ENC_NA);
1939                 new_off += 4;
1940                 if(tx_type > 127)
1941                 {
1942                     proto_tree_add_item(dvb_s2_hdr_table_txtype_tree, hf_dvb_s2_table_tx_type_modulation_mh, tvb, cur_off + new_off, 1, ENC_NA);
1943                     proto_tree_add_item(dvb_s2_hdr_table_txtype_tree, hf_dvb_s2_table_tx_type_modulation_ph, tvb, cur_off + new_off, 1, ENC_NA);
1944                     proto_tree_add_item(dvb_s2_hdr_table_txtype_tree, hf_dvb_s2_table_tx_type_modulation_type, tvb, cur_off + new_off, 1, ENC_NA);
1945                     new_off += 1;
1946                     proto_tree_add_item(dvb_s2_hdr_table_txtype_tree, hf_dvb_s2_table_tx_type_alpha_rc, tvb, cur_off + new_off, 1, ENC_NA);
1947                     new_off += 1;
1948                     proto_tree_add_item(dvb_s2_hdr_table_txtype_tree, hf_dvb_s2_table_tx_type_code_rate, tvb, cur_off + new_off, 1, ENC_NA);
1949                     proto_tree_add_item(dvb_s2_hdr_table_txtype_tree, hf_dvb_s2_table_tx_type_constraint_length_k, tvb, cur_off + new_off, 1, ENC_NA);
1950                     new_off += 1;
1951                     uw_symbol_len = ( tvb_get_guint8(tvb, cur_off + new_off) * 2 ) / 8 + 1;
1952                     proto_tree_add_item(dvb_s2_hdr_table_txtype_tree, hf_dvb_s2_table_tx_type_uw_length, tvb, cur_off + new_off, 1, ENC_NA);
1953                     new_off += 1;
1954                     proto_tree_add_item(dvb_s2_hdr_table_txtype_tree, hf_dvb_s2_table_tx_type_uw_symbol, tvb, cur_off + new_off, uw_symbol_len, ENC_NA);
1955                     new_off += uw_symbol_len;
1956                     uwsegment_count = tvb_get_guint8(tvb, cur_off + new_off);
1957                     proto_tree_add_item(dvb_s2_hdr_table_txtype_tree, hf_dvb_s2_table_tx_type_nbr_uw_segments, tvb, cur_off + new_off, 1, ENC_NA);
1958                     new_off += 1;
1959                     for(cur_uwsegment=0 ; cur_uwsegment<uwsegment_count ; cur_uwsegment++)
1960                     {
1961                         ti = proto_tree_add_item(dvb_s2_hdr_table_txtype_tree, hf_dvb_s2_table_tx_type_uw_segment, tvb, cur_off + new_off,
1962                                                  DVB_S2_TABLE_TX_TYPE_UW_SEGMENT_SIZE, ENC_NA);
1963                         dvb_s2_hdr_table_txtype_uwsegment_tree = proto_item_add_subtree(ti, ett_dvb_s2_hdr_table_txtype_uwsegment);
1964                         proto_tree_add_item(dvb_s2_hdr_table_txtype_uwsegment_tree, hf_dvb_s2_table_tx_type_uw_segment_start, tvb, cur_off + new_off, 2, ENC_NA);
1965                         new_off += 2;
1966                         proto_tree_add_item(dvb_s2_hdr_table_txtype_uwsegment_tree, hf_dvb_s2_table_tx_type_uw_segment_length, tvb, cur_off + new_off, 1, ENC_NA);
1967                         new_off += 1;
1968                     }
1969                     param_interleaver = tvb_get_guint8(tvb, cur_off + new_off);
1970                     proto_tree_add_item(dvb_s2_hdr_table_txtype_tree, hf_dvb_s2_table_tx_type_param_interleaver, tvb, cur_off + new_off, 1, ENC_NA);
1971                     new_off += 1;
1972                     if(param_interleaver)
1973                     {
1974                         proto_tree_add_item(dvb_s2_hdr_table_txtype_tree, hf_dvb_s2_table_tx_type_n, tvb, cur_off + new_off, 1, ENC_NA);
1975                         new_off += 1;
1976                         proto_tree_add_item(dvb_s2_hdr_table_txtype_tree, hf_dvb_s2_table_tx_type_s, tvb, cur_off + new_off, 1, ENC_NA);
1977                         new_off += 1;
1978                         proto_tree_add_item(dvb_s2_hdr_table_txtype_tree, hf_dvb_s2_table_tx_type_p_interleaver, tvb, cur_off + new_off, 1, ENC_NA);
1979                         new_off += 1;
1980                         proto_tree_add_item(dvb_s2_hdr_table_txtype_tree, hf_dvb_s2_table_tx_type_n1_12, tvb, cur_off + new_off, 1, ENC_NA);
1981                         new_off += 1;
1982                         proto_tree_add_item(dvb_s2_hdr_table_txtype_tree, hf_dvb_s2_table_tx_type_k1_12, tvb, cur_off + new_off, 1, ENC_NA);
1983                         new_off += 1;
1984                         proto_tree_add_item(dvb_s2_hdr_table_txtype_tree, hf_dvb_s2_table_tx_type_K2_12, tvb, cur_off + new_off, 1, ENC_NA);
1985                         new_off += 1;
1986                         proto_tree_add_item(dvb_s2_hdr_table_txtype_tree, hf_dvb_s2_table_tx_type_K3_12, tvb, cur_off + new_off, 1, ENC_NA);
1987                         new_off += 1;
1988                     }
1989                     else
1990                     {
1991                         proto_tree_add_item(dvb_s2_hdr_table_txtype_tree, hf_dvb_s2_table_tx_type_pi_i, tvb, cur_off + new_off,
1992                                             tx_format_data_length - (new_off - cpm_offset), ENC_NA);
1993                         new_off += tx_format_data_length - (new_off - cpm_offset);
1994                     }
1995                 }
1996                 break;
1997             case DVB_S2_TABLE_TXFORMAT_CT :
1998             case DVB_S2_TABLE_TXFORMAT_SSLMBT :
1999             default :
2000                 proto_tree_add_item(dvb_s2_hdr_table_txtype_tree, hf_dvb_s2_table_tx_type_tx_format_data, tvb, cur_off + new_off, tx_format_data_length, ENC_NA);
2001                 new_off += tx_format_data_length;
2002                 break;
2003         }
2004     }
2005     return new_off;
2006 }
2007 
dissect_dvb_s2_table_fat(tvbuff_t * tvb,int cur_off,proto_tree * dvb_s2_hdr_table_tree,packet_info * pinfo)2008 static int dissect_dvb_s2_table_fat(tvbuff_t *tvb, int cur_off, proto_tree *dvb_s2_hdr_table_tree, packet_info *pinfo)
2009 {
2010     int desc_loop_count, new_off = 0;
2011 
2012     proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_desc_loop_count, tvb, cur_off + new_off, 1, ENC_NA);
2013     desc_loop_count = tvb_get_guint8(tvb, cur_off + new_off);
2014     new_off += 1;
2015 
2016     new_off += dissect_dvb_s2_table_desc(tvb, cur_off + new_off, dvb_s2_hdr_table_tree, desc_loop_count, DVB_S2_TABLE_FAT, pinfo);
2017 
2018     return new_off;
2019 }
2020 
dissect_dvb_s2_table_fct2(tvbuff_t * tvb,int cur_off,proto_tree * dvb_s2_hdr_table_tree)2021 static int dissect_dvb_s2_table_fct2(tvbuff_t *tvb, int cur_off, proto_tree *dvb_s2_hdr_table_tree)
2022 {
2023     int frametype_count, cur_frametype, frame_type_start_off, gridrepeat_count, cur_gridrepeat, section_count, cur_section, new_off = 0;
2024     proto_item *ti, *tf;
2025     proto_tree  *dvb_s2_hdr_table_frametype_tree, *dvb_s2_hdr_table_frametype_section_tree;
2026 
2027     frametype_count = tvb_get_guint8(tvb, cur_off + new_off);
2028     proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_frame_type_loop_count, tvb, cur_off + new_off, 1, ENC_NA);
2029     new_off += 1;
2030 
2031     for(cur_frametype=0 ; cur_frametype<=frametype_count ; cur_frametype++)
2032     {
2033         frame_type_start_off = new_off;
2034         ti = proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_frame_type_branch, tvb, cur_off + new_off, -1, ENC_NA);
2035         dvb_s2_hdr_table_frametype_tree = proto_item_add_subtree(ti, ett_dvb_s2_hdr_table_frametype);
2036         proto_tree_add_item(dvb_s2_hdr_table_frametype_tree, hf_dvb_s2_table_frame_type, tvb, cur_off + new_off, 1, ENC_NA);
2037         new_off += 1;
2038         proto_tree_add_item(dvb_s2_hdr_table_frametype_tree, hf_dvb_s2_table_frame_type_frame_duration, tvb, cur_off + new_off, 4, ENC_NA);
2039         new_off += 4;
2040         proto_tree_add_item(dvb_s2_hdr_table_frametype_tree, hf_dvb_s2_table_frame_type_tx_format_class, tvb, cur_off + new_off, 1, ENC_NA);
2041         new_off += 1;
2042         proto_tree_add_item(dvb_s2_hdr_table_frametype_tree, hf_dvb_s2_table_frame_type_btu_duration, tvb, cur_off + new_off, 3, ENC_NA);
2043         new_off += 3;
2044         proto_tree_add_item(dvb_s2_hdr_table_frametype_tree, hf_dvb_s2_table_frame_type_btu_carrier_bw, tvb, cur_off + new_off, 3, ENC_NA);
2045         new_off += 3;
2046         proto_tree_add_item(dvb_s2_hdr_table_frametype_tree, hf_dvb_s2_table_frame_type_btu_symbol_rate, tvb, cur_off + new_off, 3, ENC_NA);
2047         new_off += 3;
2048         proto_tree_add_item(dvb_s2_hdr_table_frametype_tree, hf_dvb_s2_table_frame_type_time_unit_count, tvb, cur_off + new_off, 2, ENC_NA);
2049         new_off += 2;
2050         gridrepeat_count = tvb_get_guint8(tvb, cur_off + new_off);
2051         proto_tree_add_item(dvb_s2_hdr_table_frametype_tree, hf_dvb_s2_table_frame_type_grid_repeat_count, tvb, cur_off + new_off, 1, ENC_NA);
2052         new_off += 1;
2053         for(cur_gridrepeat=0 ; cur_gridrepeat<gridrepeat_count ; cur_gridrepeat++)
2054         {
2055             proto_tree_add_item(dvb_s2_hdr_table_frametype_tree, hf_dvb_s2_table_frame_type_grid_frequency_offset, tvb, cur_off + new_off, 3, ENC_NA);
2056             new_off += 3;
2057         }
2058         section_count = tvb_get_guint8(tvb, cur_off + new_off);
2059         proto_tree_add_item(dvb_s2_hdr_table_frametype_tree, hf_dvb_s2_table_frame_type_section_loop_count, tvb, cur_off + new_off, 1, ENC_NA);
2060         new_off += 1;
2061         for(cur_section=0 ; cur_section<=section_count ; cur_section++)
2062         {
2063             tf = proto_tree_add_item(dvb_s2_hdr_table_frametype_tree, hf_dvb_s2_table_frame_type_section, tvb, cur_off + new_off, 4, ENC_NA);
2064             dvb_s2_hdr_table_frametype_section_tree = proto_item_add_subtree(tf, ett_dvb_s2_hdr_table_frametype_section);
2065             proto_tree_add_item(dvb_s2_hdr_table_frametype_section_tree, hf_dvb_s2_table_frame_type_section_default_tx_type, tvb, cur_off + new_off, 1, ENC_NA);
2066             new_off += 1;
2067             proto_tree_add_item(dvb_s2_hdr_table_frametype_section_tree, hf_dvb_s2_table_frame_type_section_fix_acc_method, tvb, cur_off + new_off, 1, ENC_NA);
2068             new_off += 1;
2069             proto_tree_add_item(dvb_s2_hdr_table_frametype_section_tree, hf_dvb_s2_table_frame_type_section_repeat_count, tvb, cur_off + new_off, 2, ENC_NA);
2070             new_off += 2;
2071         }
2072         proto_item_set_len(ti, new_off - frame_type_start_off);
2073     }
2074 
2075     return new_off;
2076 }
2077 
dissect_dvb_s2_table_fct(tvbuff_t * tvb,int cur_off,proto_tree * dvb_s2_hdr_table_tree)2078 static int dissect_dvb_s2_table_fct(tvbuff_t *tvb, int cur_off, proto_tree *dvb_s2_hdr_table_tree)
2079 {
2080     int frame_ID_count, cur_frame_ID, frame_type_start_off, timeslot_loop_count, cur_timeslot, new_off = 0;
2081     proto_item *ti, *tf;
2082     proto_tree  *dvb_s2_hdr_table_frame_ID_tree, *dvb_s2_hdr_table_frame_ID_timeslot_tree;
2083 
2084     frame_ID_count = tvb_get_guint8(tvb, cur_off + new_off);
2085     proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_frame_ID_loop_count, tvb, cur_off + new_off, 1, ENC_NA);
2086     new_off += 1;
2087     for(cur_frame_ID=0 ; cur_frame_ID<=frame_ID_count ; cur_frame_ID++)
2088     {
2089         frame_type_start_off = new_off;
2090         ti = proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_frame_ID_branch, tvb, cur_off + new_off, -1, ENC_NA);
2091         dvb_s2_hdr_table_frame_ID_tree = proto_item_add_subtree(ti, ett_dvb_s2_hdr_table_frame_ID);
2092         proto_tree_add_item(dvb_s2_hdr_table_frame_ID_tree, hf_dvb_s2_table_frame_ID, tvb, cur_off + new_off, 1, ENC_NA);
2093         new_off += 1;
2094         proto_tree_add_item(dvb_s2_hdr_table_frame_ID_tree, hf_dvb_s2_table_frame_ID_frame_duration, tvb, cur_off + new_off, 4, ENC_NA);
2095         new_off += 4;
2096         proto_tree_add_item(dvb_s2_hdr_table_frame_ID_tree, hf_dvb_s2_table_frame_ID_total_timeslot_count, tvb, cur_off + new_off, 2, ENC_NA);
2097         new_off += 2;
2098         proto_tree_add_item(dvb_s2_hdr_table_frame_ID_tree, hf_dvb_s2_table_frame_ID_start_timeslot_number, tvb, cur_off + new_off, 2, ENC_NA);
2099         new_off += 2;
2100         timeslot_loop_count = tvb_get_guint8(tvb, cur_off + new_off);
2101         proto_tree_add_item(dvb_s2_hdr_table_frame_ID_tree, hf_dvb_s2_table_frame_ID_timeslot_loop_count, tvb, cur_off + new_off, 1, ENC_NA);
2102         new_off += 1;
2103         for(cur_timeslot=0 ; cur_timeslot<=timeslot_loop_count ; cur_timeslot++)
2104         {
2105             tf = proto_tree_add_item(dvb_s2_hdr_table_frame_ID_tree, hf_dvb_s2_table_frame_ID_timeslot, tvb, cur_off + new_off, 9, ENC_NA);
2106             dvb_s2_hdr_table_frame_ID_timeslot_tree = proto_item_add_subtree(tf, ett_dvb_s2_hdr_table_frame_ID_timeslot);
2107             proto_tree_add_item(dvb_s2_hdr_table_frame_ID_timeslot_tree, hf_dvb_s2_table_frame_ID_timeslot_timeslot_frequency_offset, tvb, cur_off + new_off, 3, ENC_NA);
2108             new_off += 3;
2109             proto_tree_add_item(dvb_s2_hdr_table_frame_ID_timeslot_tree, hf_dvb_s2_table_frame_ID_timeslot_timeslot_time_offset, tvb, cur_off + new_off, 4, ENC_NA);
2110             new_off += 4;
2111             proto_tree_add_item(dvb_s2_hdr_table_frame_ID_timeslot_tree, hf_dvb_s2_table_frame_ID_timeslot_timeslot_id, tvb, cur_off + new_off, 1, ENC_NA);
2112             new_off += 1;
2113             proto_tree_add_item(dvb_s2_hdr_table_frame_ID_timeslot_tree, hf_dvb_s2_table_frame_ID_timeslot_repeat_count, tvb, cur_off + new_off, 1, ENC_NA);
2114             new_off += 1;
2115         }
2116         proto_item_set_len(ti, new_off - frame_type_start_off);
2117     }
2118     if (dvb_s2_rcs_version == DVB_S2_RCS_TABLE_DECODING)
2119     {
2120         proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_crc32, tvb, cur_off + new_off, 4, ENC_NA);
2121         new_off += 4;
2122     }
2123     return new_off;
2124 }
2125 
dissect_dvb_s2_table_spt(tvbuff_t * tvb,int cur_off,proto_tree * dvb_s2_hdr_table_tree)2126 static int dissect_dvb_s2_table_spt(tvbuff_t *tvb, int cur_off, proto_tree *dvb_s2_hdr_table_tree)
2127 {
2128     int satellite_count, cur_satellite, new_off = 0;
2129     proto_item *ti;
2130     proto_tree  *dvb_s2_hdr_table_satellite_tree;
2131 
2132     satellite_count = tvb_get_guint8(tvb, cur_off + new_off);
2133     proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_satellite_loop_count, tvb, cur_off + new_off, 1, ENC_NA);
2134     new_off += 1;
2135 
2136     for(cur_satellite=0 ; cur_satellite<=satellite_count ; cur_satellite++)
2137     {
2138         ti = proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_satellite, tvb, cur_off + new_off, DVB_S2_TABLE_SAT_SIZE, ENC_NA);
2139         dvb_s2_hdr_table_satellite_tree = proto_item_add_subtree(ti, ett_dvb_s2_hdr_table_satellite);
2140         proto_tree_add_item(dvb_s2_hdr_table_satellite_tree, hf_dvb_s2_table_satellite_id, tvb, cur_off + new_off, 1, ENC_NA);
2141         new_off += 1;
2142         proto_tree_add_item(dvb_s2_hdr_table_satellite_tree, hf_dvb_s2_table_satellite_x_coordinate, tvb, cur_off + new_off, 4, ENC_NA);
2143         new_off += 4;
2144         proto_tree_add_item(dvb_s2_hdr_table_satellite_tree, hf_dvb_s2_table_satellite_y_coordinate, tvb, cur_off + new_off, 4, ENC_NA);
2145         new_off += 4;
2146         proto_tree_add_item(dvb_s2_hdr_table_satellite_tree, hf_dvb_s2_table_satellite_z_coordinate, tvb, cur_off + new_off, 4, ENC_NA);
2147         new_off += 4;
2148     }
2149     if (dvb_s2_rcs_version == DVB_S2_RCS_TABLE_DECODING)
2150     {
2151         proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_crc32, tvb, cur_off + new_off, 4, ENC_NA);
2152         new_off += 4;
2153     }
2154     return new_off;
2155 }
2156 
dissect_dvb_s2_table_smt(tvbuff_t * tvb,int cur_off,proto_tree * dvb_s2_hdr_table_tree)2157 static int dissect_dvb_s2_table_smt(tvbuff_t *tvb, int cur_off, proto_tree *dvb_s2_hdr_table_tree)
2158 {
2159     int new_off = 0;
2160 
2161     proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_smt_id, tvb, cur_off + new_off, 1, ENC_NA);
2162     new_off += 1;
2163     proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_smt_section_syntax_indicator, tvb, cur_off + new_off, 2, ENC_NA);
2164     proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_smt_futur_use, tvb, cur_off + new_off, 2, ENC_NA);
2165     proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_smt_reserved, tvb, cur_off + new_off, 2, ENC_NA);
2166     proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_smt_section_length, tvb, cur_off + new_off, 2, ENC_NA);
2167     new_off += 2;
2168     proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_smt_esn0, tvb, cur_off + new_off, 2, ENC_NA);
2169     new_off += 2;
2170     proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_smt_modcod, tvb, cur_off + new_off, 1, ENC_NA);
2171     new_off += 1;
2172     proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_crc32, tvb, cur_off + new_off, DVB_S2_TABLE_CRC32_LEN, ENC_NA);
2173     new_off += 4;
2174 
2175     return new_off;
2176 }
2177 
dissect_dvb_s2_table_nit_rmt(tvbuff_t * tvb,int cur_off,proto_tree * dvb_s2_hdr_table_tree,guint8 table_id,packet_info * pinfo)2178 static int dissect_dvb_s2_table_nit_rmt(tvbuff_t *tvb, int cur_off, proto_tree *dvb_s2_hdr_table_tree, guint8 table_id, packet_info *pinfo)
2179 {
2180     int desc_off, desc_count, max_multiplex_off, mux_start_off, new_off = 0;
2181     guint16 network_descriptors_length, multiplex_streams_spec_length, transport_descriptors_length;
2182     proto_item *ti;
2183     proto_tree  *dvb_s2_hdr_table_multiplex_tree;
2184 
2185     network_descriptors_length = tvb_get_ntohs(tvb, cur_off + new_off) & DVB_S2_TABLE_NETWORK_DESC_LENGTH_MASK;
2186     proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_network_descriptors_length, tvb, cur_off + new_off, 2, ENC_NA);
2187     new_off += 2;
2188     //proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_network_descriptors, tvb, cur_off + new_off, network_descriptors_length, ENC_NA);
2189     //new_off += network_descriptors_length;
2190 
2191     /* calculate descriptors_count */
2192     desc_off=0;
2193     for(desc_count=0 ; desc_off<network_descriptors_length ; desc_count++){
2194         desc_off += tvb_get_guint8(tvb, cur_off + new_off + desc_off + 1) + 2;
2195     }
2196 
2197     new_off += dissect_dvb_s2_table_desc(tvb, cur_off + new_off, dvb_s2_hdr_table_tree, desc_count - 1, table_id, pinfo);
2198 
2199     multiplex_streams_spec_length = tvb_get_ntohs(tvb, cur_off + new_off) & DVB_S2_TABLE_MULTIPLEX_STREAMS_LENGTH_MASK;
2200     proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_multiplex_streams_spec_length, tvb, cur_off + new_off, 2, ENC_NA);
2201     new_off += 2;
2202     //proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_multiplex_streams_spec, tvb, cur_off + new_off, multiplex_streams_spec_length, ENC_NA);
2203     //new_off += multiplex_streams_spec_length;
2204 
2205     max_multiplex_off = new_off + multiplex_streams_spec_length;
2206     while(new_off < max_multiplex_off)
2207     {
2208         mux_start_off = new_off;
2209         ti = proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_multiplex, tvb, cur_off + new_off, -1, ENC_NA);
2210         dvb_s2_hdr_table_multiplex_tree = proto_item_add_subtree(ti, ett_dvb_s2_hdr_table_multiplex);
2211         proto_tree_add_item(dvb_s2_hdr_table_multiplex_tree, hf_dvb_s2_table_multiplex_forward_multiplex, tvb, cur_off + new_off, 2, ENC_NA);
2212         new_off += 2;
2213         if(table_id == DVB_S2_TABLE_NIT)
2214         {
2215             proto_tree_add_item(dvb_s2_hdr_table_multiplex_tree, hf_dvb_s2_table_multiplex_original_network_id, tvb, cur_off + new_off, 2, ENC_NA);
2216             new_off += 2;
2217         }
2218         else
2219         {
2220             proto_tree_add_item(dvb_s2_hdr_table_multiplex_tree, hf_dvb_s2_table_multiplex_reward_multiplex, tvb, cur_off + new_off, 2, ENC_NA);
2221             new_off += 2;
2222         }
2223         transport_descriptors_length = tvb_get_ntohs(tvb, cur_off + new_off) & DVB_S2_TABLE_MULTIPLEX_TRANSPORT_DESC_LENGTH_MASK;
2224         proto_tree_add_item(dvb_s2_hdr_table_multiplex_tree, hf_dvb_s2_table_multiplex_transport_descriptors_length, tvb, cur_off + new_off, 2, ENC_NA);
2225         new_off += 2;
2226         /* calculate descriptors_count */
2227         desc_off=0;
2228         for(desc_count=0 ; desc_off<transport_descriptors_length ; desc_count++)
2229             desc_off += tvb_get_guint8(tvb, cur_off + new_off + desc_off + 1) + 2;
2230         new_off += dissect_dvb_s2_table_desc(tvb, cur_off + new_off, dvb_s2_hdr_table_multiplex_tree, desc_count - 1, table_id, pinfo);
2231         proto_item_set_len(ti, new_off - mux_start_off);
2232     }
2233 
2234     if (dvb_s2_rcs_version == DVB_S2_RCS_TABLE_DECODING)
2235     {
2236         proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_crc32, tvb, cur_off + new_off, 4, ENC_NA);
2237         new_off += 4;
2238     }
2239 
2240     return new_off;
2241 }
2242 
dissect_dvb_s2_table_mmt2(tvbuff_t * tvb,int cur_off,proto_tree * dvb_s2_hdr_table_tree)2243 static int dissect_dvb_s2_table_mmt2(tvbuff_t *tvb, int cur_off, proto_tree *dvb_s2_hdr_table_tree)
2244 {
2245     int protocol_count, cur_protocol, pt_start_off, ms_count, cur_ms, ms_start_off, exclusion_count, cur_exclusion, new_off = 0;
2246     proto_item *ti_pt, *ti_ms, *ti_exc;
2247     proto_tree  *dvb_s2_hdr_table_protocol_tree, *dvb_s2_hdr_table_protocol_ms_tree, *dvb_s2_hdr_table_protocol_ms_excl_tree;
2248     guint8 address_size;
2249 
2250     proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_svn_number, tvb, cur_off + new_off, 2, ENC_NA);
2251     new_off += 2;
2252     proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_svn_prefix_size, tvb, cur_off + new_off, 1, ENC_NA);
2253     new_off += 1;
2254     protocol_count = tvb_get_guint8(tvb, cur_off + new_off);
2255     proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_pt_count, tvb, cur_off + new_off, 1, ENC_NA);
2256     new_off += 1;
2257 
2258     for(cur_protocol=0 ; cur_protocol<=protocol_count ; cur_protocol++)
2259     {
2260         pt_start_off = new_off;
2261         ti_pt = proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_protocol, tvb, cur_off + new_off, -1, ENC_NA);
2262         dvb_s2_hdr_table_protocol_tree = proto_item_add_subtree(ti_pt, ett_dvb_s2_hdr_table_pt);
2263         proto_tree_add_item(dvb_s2_hdr_table_protocol_tree, hf_dvb_s2_table_pt_protocol_type, tvb, cur_off + new_off, 2, ENC_NA);
2264         new_off += 1;
2265         address_size = tvb_get_guint8(tvb, cur_off + new_off);
2266         proto_tree_add_item(dvb_s2_hdr_table_protocol_tree, hf_dvb_s2_table_pt_address_size, tvb, cur_off + new_off, 1, ENC_NA);
2267         new_off += 1;
2268         ms_count = tvb_get_guint8(tvb, cur_off + new_off);
2269         proto_tree_add_item(dvb_s2_hdr_table_protocol_tree, hf_dvb_s2_table_pt_mapping_sections, tvb, cur_off + new_off, 1, ENC_NA);
2270         new_off += 1;
2271         for(cur_ms=0 ; cur_ms<=ms_count ; cur_ms++)
2272         {
2273             ms_start_off = new_off;
2274             ti_ms = proto_tree_add_item(dvb_s2_hdr_table_protocol_tree, hf_dvb_s2_table_pt_mapping_section, tvb, cur_off + new_off, -1, ENC_NA);
2275             dvb_s2_hdr_table_protocol_ms_tree = proto_item_add_subtree(ti_ms, ett_dvb_s2_hdr_table_pt_ms);
2276             proto_tree_add_item(dvb_s2_hdr_table_protocol_ms_tree, hf_dvb_s2_table_pt_ms_inclusion_start, tvb, cur_off + new_off, address_size, ENC_NA);
2277             new_off += address_size;
2278             proto_tree_add_item(dvb_s2_hdr_table_protocol_ms_tree, hf_dvb_s2_table_pt_ms_inclusion_end, tvb, cur_off + new_off, address_size, ENC_NA);
2279             new_off += address_size;
2280             exclusion_count = tvb_get_guint8(tvb, cur_off + new_off);
2281             proto_tree_add_item(dvb_s2_hdr_table_protocol_ms_tree, hf_dvb_s2_table_pt_ms_exclusions, tvb, cur_off + new_off, 1, ENC_NA);
2282             new_off += 1;
2283             for(cur_exclusion=0 ; cur_exclusion<=exclusion_count ; cur_exclusion++)
2284             {
2285                 ti_exc = proto_tree_add_item(dvb_s2_hdr_table_protocol_ms_tree, hf_dvb_s2_table_pt_ms_exclusion, tvb, cur_off + new_off, 2 * address_size, ENC_NA);
2286                 dvb_s2_hdr_table_protocol_ms_excl_tree = proto_item_add_subtree(ti_exc, ett_dvb_s2_hdr_table_pt_ms_exclusion);
2287                 proto_tree_add_item(dvb_s2_hdr_table_protocol_ms_excl_tree, hf_dvb_s2_table_pt_ms_exclusion_start, tvb, cur_off + new_off, address_size, ENC_NA);
2288                 new_off += address_size;
2289                 proto_tree_add_item(dvb_s2_hdr_table_protocol_ms_excl_tree, hf_dvb_s2_table_pt_ms_exclusion_end, tvb, cur_off + new_off, address_size, ENC_NA);
2290                 new_off += address_size;
2291             }
2292             proto_tree_add_item(dvb_s2_hdr_table_protocol_ms_tree, hf_dvb_s2_table_pt_ms_mac24_base, tvb, cur_off + new_off, 3, ENC_NA);
2293             new_off += 3;
2294             proto_tree_add_item(dvb_s2_hdr_table_protocol_ms_tree, hf_dvb_s2_table_pt_ms_mcast_prefix_size, tvb, cur_off + new_off, 1, ENC_NA);
2295             new_off += 1;
2296             proto_item_set_len(ti_ms, new_off - ms_start_off);
2297         }
2298         proto_item_set_len(ti_pt, new_off - pt_start_off);
2299     }
2300     return new_off;
2301 }
2302 
dissect_dvb_s2_table(tvbuff_t * tvb,packet_info * pinfo,proto_tree * tree,void * data _U_)2303 static int dissect_dvb_s2_table(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
2304 {
2305     int         new_off                      = 0;
2306     int         cur_off                      = 0;
2307     guint16     data_len                     = 0;
2308     guint8      table_id                     = 0;
2309     guint8      mac_1 = 0;
2310     guint8      mac_2 = 0;
2311     guint8      mac_3 = 0;
2312     guint8      mac_4 = 0;
2313     guint8      mac_5 = 0;
2314     guint8      mac_6 = 0;
2315     gboolean    dvb_s2_isUnicast         = TRUE;
2316 
2317     proto_item *ti = NULL;
2318     proto_tree *dvb_s2_hdr_table_tree;
2319 
2320     ti = proto_tree_add_item(tree, proto_dvb_s2_table, tvb, 0, -1, ENC_NA);
2321     dvb_s2_hdr_table_tree = proto_item_add_subtree(ti, ett_dvb_s2_hdr_table);
2322     table_id = tvb_get_guint8(tvb, cur_off + new_off);
2323     col_append_str(pinfo->cinfo, COL_INFO, val_to_str_const(table_id, tabletype, "Unknown table id" ));
2324     col_append_str(pinfo->cinfo, COL_INFO, " ");
2325     proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_id, tvb, cur_off + new_off, 1, ENC_NA);
2326     new_off += 1;
2327 
2328     /* parse GSE table structure header for all RCS2 tables */
2329     if (dvb_s2_rcs_version == DVB_S2_RCS2_TABLE_DECODING) {
2330         proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_network_interactive_id, tvb, cur_off + new_off, 2, ENC_NA);
2331         new_off += 2;
2332         proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_reserved2, tvb, cur_off + new_off, 1, ENC_NA);
2333         proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_version_number, tvb, cur_off + new_off, 1, ENC_NA);
2334         proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_current_next_indicator, tvb, cur_off + new_off, 1, ENC_NA);
2335         new_off += 1;
2336     }
2337 
2338     if (table_id == DVB_S2_TABLE_TDT) {
2339         /* parse TDT */
2340         /* parse DSM-CC header only for RCS */
2341         if (dvb_s2_rcs_version == DVB_S2_RCS_TABLE_DECODING) {
2342             proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_section_syntax_indic, tvb, cur_off + new_off, 1, ENC_NA);
2343             proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_reserved_future_use, tvb, cur_off + new_off, 1, ENC_NA);
2344             proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_reserved_tdt, tvb, cur_off + new_off, 1, ENC_NA);
2345             proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_section_length, tvb, cur_off + new_off, 1, ENC_NA);
2346             new_off += 2;
2347         }
2348         /* parse the TDT table itself for both RCS and RCS2 */
2349         proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_tdt_date, tvb, cur_off + new_off, 2, ENC_NA);
2350         new_off += 2;
2351         proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_tdt_hour, tvb, cur_off + new_off, 1, ENC_NA);
2352         new_off += 1;
2353         proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_tdt_minute, tvb, cur_off + new_off, 1, ENC_NA);
2354         new_off += 1;
2355         proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_tdt_second, tvb, cur_off + new_off, 1, ENC_NA);
2356         new_off += 1;
2357     }else if (table_id == DVB_S2_TABLE_TIM && dvb_s2_rcs_version == DVB_S2_RCS_TABLE_DECODING) {
2358         /* parse TIMu with DSM-CC header only for RCS */
2359         /* parse DSM-CC header */
2360         proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_section_syntax_indic, tvb, cur_off + new_off, 1, ENC_NA);
2361         proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_private_indicator, tvb, cur_off + new_off, 1, ENC_NA);
2362         proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_reserved_1, tvb, cur_off + new_off, 1, ENC_NA);
2363         proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_section_length , tvb, cur_off + new_off, 2, ENC_NA);
2364         new_off +=2;
2365         mac_6 = tvb_get_guint8(tvb, cur_off + new_off);
2366         proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_mac_addres_6 , tvb, cur_off + new_off, 1, ENC_NA);
2367         new_off +=1;
2368         mac_5 = tvb_get_guint8(tvb, cur_off + new_off);
2369         proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_mac_addres_5 , tvb, cur_off + new_off, 1, ENC_NA);
2370         new_off +=1;
2371         proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_reserved_2, tvb, cur_off + new_off, 1, ENC_NA);
2372         proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_payload_scrambling_control, tvb, cur_off + new_off, 1, ENC_NA);
2373         proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_address_scrambling_control, tvb, cur_off + new_off, 1, ENC_NA);
2374         proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_LLC_SNAP_flag, tvb, cur_off + new_off, 1, ENC_NA);
2375         proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_current_next_indicator, tvb, cur_off + new_off, 1, ENC_NA);
2376         new_off +=1;
2377         proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_section_number , tvb, cur_off + new_off, 1, ENC_NA);
2378         new_off +=1;
2379         proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_last_section_number , tvb, cur_off + new_off, 1, ENC_NA);
2380         new_off +=1;
2381         mac_4 = tvb_get_guint8(tvb, cur_off + new_off);
2382         proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_mac_addres_4 , tvb, cur_off + new_off, 1, ENC_NA);
2383         new_off +=1;
2384         mac_3 = tvb_get_guint8(tvb, cur_off + new_off);
2385         proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_mac_addres_3 , tvb, cur_off + new_off, 1, ENC_NA);
2386         new_off +=1;
2387         mac_2 = tvb_get_guint8(tvb, cur_off + new_off);
2388         proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_mac_addres_2 , tvb, cur_off + new_off, 1, ENC_NA);
2389         new_off +=1;
2390         mac_1 = tvb_get_guint8(tvb, cur_off + new_off);
2391         proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_mac_addres_1 , tvb, cur_off + new_off, 1, ENC_NA);
2392         new_off +=1;
2393         if ((mac_1 == 0xff) && (mac_2 == 0xff) && (mac_3 == 0xff) && (mac_4 == 0xff) && (mac_5 == 0xff) && (mac_6 == 0xff)) {
2394             table_id = DVB_S2_TABLE_TIMB;
2395         }
2396     } else {
2397         /* parse SI section header only for RCS tables
2398          * (except TIMu and TDT that use DSM-CC instead) */
2399         if (dvb_s2_rcs_version == DVB_S2_RCS_TABLE_DECODING)
2400         {
2401             proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_section, tvb, cur_off + new_off, 1, ENC_NA);
2402             proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_private, tvb, cur_off + new_off, 1, ENC_NA);
2403             proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_reserved, tvb, cur_off + new_off, 1, ENC_NA);
2404             proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_msb_len, tvb, cur_off + new_off, 1, ENC_NA);
2405             new_off += 1;
2406             proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_lsb_len, tvb, cur_off + new_off, 1, ENC_NA);
2407             new_off += 1;
2408             proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_network_interactive_id, tvb, cur_off + new_off, 2, ENC_NA);
2409             new_off += 2;
2410             proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_reserved2, tvb, cur_off + new_off, 1, ENC_NA);
2411             proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_version_number, tvb, cur_off + new_off, 1, ENC_NA);
2412             proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_current_next_indicator, tvb, cur_off + new_off, 1, ENC_NA);
2413             new_off += 1;
2414             proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_section_number, tvb, cur_off + new_off, 1, ENC_NA);
2415             new_off += 1;
2416             proto_tree_add_item(dvb_s2_hdr_table_tree, hf_dvb_s2_table_last_section_number, tvb, cur_off + new_off, 1, ENC_NA);
2417             new_off += 1;
2418         }
2419     }
2420 
2421     if (dvb_s2_rcs_version == DVB_S2_RCS_TABLE_DECODING)
2422         data_len = tvb_captured_length(tvb);
2423     else if (dvb_s2_rcs_version == DVB_S2_RCS2_TABLE_DECODING)
2424         data_len = tvb_captured_length(tvb);
2425 
2426     switch (table_id) {
2427         case DVB_S2_TABLE_SMT:
2428             dissect_dvb_s2_table_smt(tvb, cur_off + new_off, dvb_s2_hdr_table_tree);
2429             break;
2430         case DVB_S2_TABLE_SCT:
2431             dissect_dvb_s2_table_sct(tvb, cur_off + new_off, dvb_s2_hdr_table_tree);
2432             break;
2433         case DVB_S2_TABLE_TIMB:
2434             dissect_dvb_s2_table_tim(tvb, cur_off + new_off, dvb_s2_hdr_table_tree, !dvb_s2_isUnicast, pinfo);
2435             break;
2436         case DVB_S2_TABLE_TIM:
2437             dissect_dvb_s2_table_tim(tvb, cur_off + new_off, dvb_s2_hdr_table_tree, dvb_s2_isUnicast, pinfo);
2438             break;
2439         case DVB_S2_TABLE_TBTP2:
2440             dissect_dvb_s2_table_tbtp2(tvb, cur_off + new_off, dvb_s2_hdr_table_tree, data_len);
2441             break;
2442         case DVB_S2_TABLE_TBTP:
2443             dissect_dvb_s2_table_tbtp(tvb, cur_off + new_off, dvb_s2_hdr_table_tree, data_len);
2444             break;
2445         case DVB_S2_TABLE_CMT:
2446             dissect_dvb_s2_table_cmt(tvb, cur_off + new_off, dvb_s2_hdr_table_tree);
2447             break;
2448         case DVB_S2_TABLE_FAT:
2449             dissect_dvb_s2_table_fat(tvb, cur_off + new_off, dvb_s2_hdr_table_tree, pinfo);
2450             break;
2451         case DVB_S2_TABLE_FCT:
2452             dissect_dvb_s2_table_fct(tvb, cur_off + new_off, dvb_s2_hdr_table_tree);
2453             break;
2454         case DVB_S2_TABLE_TMST2:
2455             dissect_dvb_s2_table_tmst2(tvb, cur_off + new_off, dvb_s2_hdr_table_tree);
2456             break;
2457         case DVB_S2_TABLE_TMST:
2458             dissect_dvb_s2_table_tmst(tvb, cur_off + new_off, dvb_s2_hdr_table_tree);
2459             break;
2460         case DVB_S2_TABLE_TCTE:
2461             if (dvb_s2_rcs_version == DVB_S2_RCS2_TABLE_DECODING)
2462             {
2463                 dissect_dvb_s2_table_fct2(tvb, cur_off + new_off, dvb_s2_hdr_table_tree);
2464             }
2465             break;
2466         case DVB_S2_TABLE_BCT:
2467             dissect_dvb_s2_table_bct(tvb, cur_off + new_off, dvb_s2_hdr_table_tree);
2468             break;
2469         case DVB_S2_TABLE_SPT:
2470             dissect_dvb_s2_table_spt(tvb, cur_off + new_off, dvb_s2_hdr_table_tree);
2471             break;
2472         case DVB_S2_TABLE_NIT:
2473         case DVB_S2_TABLE_RMT:
2474             dissect_dvb_s2_table_nit_rmt(tvb, cur_off + new_off, dvb_s2_hdr_table_tree, table_id, pinfo);
2475             break;
2476         case DVB_S2_TABLE_MMT2:
2477             dissect_dvb_s2_table_mmt2(tvb, cur_off + new_off, dvb_s2_hdr_table_tree);
2478             break;
2479         case DVB_S2_TABLE_TDT:
2480             /* already parsed above */
2481             break;
2482         case DVB_S2_TABLE_PAT:
2483         case DVB_S2_TABLE_CAT:
2484         case DVB_S2_TABLE_PMT:
2485         case DVB_S2_TABLE_SDT:
2486         case DVB_S2_TABLE_TCT:
2487         case DVB_S2_TABLE_PCR:
2488         case DVB_S2_TABLE_MMT:
2489             break;
2490     }
2491     if (dvb_s2_rcs_version == DVB_S2_RCS_TABLE_DECODING)
2492         new_off += data_len - DVB_S2_TABLE_HEADER_LEN;
2493     else if (dvb_s2_rcs_version == DVB_S2_RCS2_TABLE_DECODING)
2494         new_off += data_len - DVB_S2_TABLE_HEADER_RCS2_LEN;
2495 
2496     return new_off;
2497 }
2498 
2499 /* Register the protocol with Wireshark */
proto_register_dvb_s2_table(void)2500 void proto_register_dvb_s2_table(void)
2501 {
2502     module_t *dvb_s2_table_module;
2503 
2504     /* DVB-S2 Table */
2505     static hf_register_info hf_table[] = {
2506         {&hf_dvb_s2_table_id, {
2507                 "Table ID", "dvb-s2_table.id",
2508                 FT_UINT8, BASE_HEX, VALS(tabletype), 0x0,
2509                 NULL, HFILL}
2510         },
2511         {&hf_dvb_s2_table_section, {
2512                 "Table Section", "dvb-s2_table.section",
2513                 FT_UINT8, BASE_HEX, NULL, DVB_S2_TABLE_SECTION_MASK,
2514                 NULL, HFILL}
2515         },
2516         {&hf_dvb_s2_table_private, {
2517                 "Table private indicator", "dvb-s2_table.private_indicator",
2518                 FT_UINT8, BASE_HEX, NULL, DVB_S2_TABLE_PRIVATE_MASK,
2519                 NULL, HFILL}
2520         },
2521         {&hf_dvb_s2_table_reserved, {
2522                 "Table reserved field", "dvb-s2_table.reserved",
2523                 FT_UINT8, BASE_HEX, NULL, DVB_S2_TABLE_RESERVED_MASK,
2524                 NULL, HFILL}
2525         },
2526         {&hf_dvb_s2_table_msb_len, {
2527                 "Table length MSB", "dvb-s2_table.len.msb",
2528                 FT_UINT8, BASE_DEC, NULL, DVB_S2_TABLE_MSB_LEN_MASK,
2529                 NULL, HFILL}
2530         },
2531         {&hf_dvb_s2_table_lsb_len, {
2532                 "Table length LSB", "dvb-s2_table.len.lsb",
2533                 FT_UINT8, BASE_DEC, NULL, 0x0,
2534                 NULL, HFILL}
2535         },
2536         {&hf_dvb_s2_table_network_interactive_id, {
2537                 "Table network interactive id", "dvb-s2_table.network_interactive_id",
2538                 FT_UINT16, BASE_DEC, NULL, 0x0,
2539                 NULL, HFILL}
2540         },
2541         {&hf_dvb_s2_table_reserved2, {
2542                 "Table reserved field 2", "dvb-s2_table.reserved2",
2543                 FT_UINT8, BASE_HEX, NULL, DVB_S2_TABLE_RESERVED2_MASK,
2544                 NULL, HFILL}
2545         },
2546         {&hf_dvb_s2_table_version_number, {
2547                 "Table version number", "dvb-s2_table.version_number",
2548                 FT_UINT8, BASE_DEC, NULL, DVB_S2_TABLE_VERSION_NUMBER_MASK,
2549                 NULL, HFILL}
2550         },
2551         {&hf_dvb_s2_table_current_next_indicator, {
2552                 "Table current next indicator", "dvb-s2_table.current_next_indicator",
2553                 FT_UINT8, BASE_DEC, NULL, DVB_S2_TABLE_CURRENT_NEXT_INDICATOR_MASK,
2554                 NULL, HFILL}
2555         },
2556         {&hf_dvb_s2_table_section_number, {
2557                 "Table section number", "dvb-s2_table.section_number",
2558                 FT_UINT8, BASE_DEC, NULL, 0x0,
2559                 NULL, HFILL}
2560         },
2561         {&hf_dvb_s2_table_last_section_number, {
2562                 "Table last section number", "dvb-s2_table.len",
2563                 FT_UINT8, BASE_DEC, NULL, 0x0,
2564                 NULL, HFILL}
2565         },
2566         {&hf_dvb_s2_table_smt_id, {
2567                 "Table ID", "dvb-s2_table.id",
2568                 FT_UINT8, BASE_HEX, VALS(tabletype), 0x0,
2569                 NULL, HFILL}
2570         },
2571         {&hf_dvb_s2_table_smt_section_syntax_indicator, {
2572                 "Table section", "dvb-s2_table.section",
2573                 FT_UINT16, BASE_HEX, NULL, DVB_S2_TABLE_SMT_SECTION_INDICATOR_MASK,
2574                 NULL, HFILL}
2575         },
2576         {&hf_dvb_s2_table_smt_futur_use, {
2577                 "Table future use", "dvb-s2_table.future_use",
2578                 FT_UINT16, BASE_HEX, NULL, DVB_S2_TABLE_SMT_FUTUR_USE_MASK,
2579                 NULL, HFILL}
2580         },
2581         {&hf_dvb_s2_table_smt_reserved, {
2582                 "Table reserved", "dvb-s2_table.reserved",
2583                 FT_UINT16, BASE_HEX, NULL, DVB_S2_TABLE_SMT_RESERVED_MASK,
2584                 NULL, HFILL}
2585         },
2586         {&hf_dvb_s2_table_smt_section_length, {
2587                 "Table section length", "dvb-s2_table.section_length",
2588                 FT_UINT16, BASE_DEC, NULL, DVB_S2_TABLE_SMT_SECTION_LENGTH_MASK,
2589                 NULL, HFILL}
2590         },
2591         {&hf_dvb_s2_table_smt_esn0, {
2592                 "Table Es/N0", "dvb-s2_table.esn0",
2593                 FT_UINT16, BASE_DEC, NULL, 0x0,
2594                 NULL, HFILL}
2595         },
2596         {&hf_dvb_s2_table_smt_modcod, {
2597                 "Table modcod", "dvb-s2_table.modcod",
2598                 FT_UINT8, BASE_DEC, NULL, 0x0,
2599                 NULL, HFILL}
2600         },
2601 
2602 /* DSM-CC */
2603         {&hf_dvb_s2_section_syntax_indic, {
2604                 "Table section syntax indicator", "dvb-s2_table.section_syntax_indic",
2605                 FT_UINT8, BASE_DEC, NULL, DVB_S2_TABLE_SECTION_SYNTAX_INDIC_MASK,
2606                 NULL, HFILL}
2607         },
2608         {&hf_dvb_s2_private_indicator, {
2609                 "Table private indicator", "dvb-s2_table.private_indicator",
2610                 FT_UINT8, BASE_DEC, NULL, DVB_S2_TABLE_PRIVATE_INDICATOR_MASK,
2611                 NULL, HFILL}
2612         },
2613         {&hf_dvb_s2_reserved_1, {
2614                 "Table reserved field 1", "dvb-s2_table.reserved_1",
2615                 FT_UINT8, BASE_DEC, NULL, DVB_S2_TABLE_RESERVED_ONE_MASK,
2616                 NULL, HFILL}
2617         },
2618         {&hf_dvb_s2_section_length, {
2619                 "Table section length", "dvb-s2_table.section_length",
2620                 FT_UINT16, BASE_DEC, NULL, DVB_S2_TABLE_SECTION_LENGTH_MASK,
2621                 NULL, HFILL}
2622         },
2623         {&hf_dvb_s2_mac_addres_6, {
2624                 "Table MAC address 6", "dvb-s2_table.mac_address_6",
2625                 FT_UINT8, BASE_HEX, NULL, 0x0,
2626                 NULL, HFILL}
2627         },
2628         {&hf_dvb_s2_mac_addres_5, {
2629                 "Table MAC address 5", "dvb-s2_table.mac_address_5",
2630                 FT_UINT8, BASE_HEX, NULL, 0x0,
2631                 NULL, HFILL}
2632         },
2633         {&hf_dvb_s2_mac_addres_4, {
2634                 "Table MAC address 4", "dvb-s2_table.mac_address_4",
2635                 FT_UINT8, BASE_HEX, NULL, 0x0,
2636                 NULL, HFILL}
2637         },
2638         {&hf_dvb_s2_mac_addres_3, {
2639                 "Table MAC address 3", "dvb-s2_table.mac_address_3",
2640                 FT_UINT8, BASE_HEX, NULL, 0x0,
2641                 NULL, HFILL}
2642         },
2643         {&hf_dvb_s2_mac_addres_2, {
2644                 "Table MAC address 2", "dvb-s2_table.mac_address_2",
2645                 FT_UINT8, BASE_HEX, NULL, 0x0,
2646                 NULL, HFILL}
2647         },
2648         {&hf_dvb_s2_mac_addres_1, {
2649                 "Table MAC address 1", "dvb-s2_table.mac_address_1",
2650                 FT_UINT8, BASE_HEX, NULL, 0x0,
2651                 NULL, HFILL}
2652         },
2653         {&hf_dvb_s2_reserved_2, {
2654                 "Table reserved field 2", "dvb-s2_table.reserved_2",
2655                 FT_UINT8, BASE_DEC, NULL, DVB_S2_TABLE_RESERVED_TWO_MASK,
2656                 NULL, HFILL}
2657         },
2658         {&hf_dvb_s2_payload_scrambling_control, {
2659                 "Table payload scrambling control", "dvb-s2_table.payload_scrambling_control",
2660                 FT_UINT8, BASE_DEC, NULL, DVB_S2_TABLE_PAYLOAD_SCRAMBLING_MASK,
2661                 NULL, HFILL}
2662         },
2663         {&hf_dvb_s2_address_scrambling_control, {
2664                 "Table address scrambling control", "dvb-s2_table.address_scrambling_control",
2665                 FT_UINT8, BASE_DEC, NULL, DVB_S2_TABLE_ADDRESS_SCRAMBLING_MASK,
2666                 NULL, HFILL}
2667         },
2668         {&hf_dvb_s2_LLC_SNAP_flag, {
2669                 "Table LLC SNAP flag", "dvb-s2_table.LLC_SNAP_flag",
2670                 FT_UINT8, BASE_DEC, NULL, DVB_S2_TABLE_LLC_SNAP_MASK,
2671                 NULL, HFILL}
2672         },
2673         {&hf_dvb_s2_current_next_indicator, {
2674                 "Table current next indicator", "dvb-s2_table.current_next_indicator",
2675                 FT_UINT8, BASE_DEC, NULL, DVB_S2_TABLE_CURRENT_NEXT_INDICATOR_MASK,
2676                 NULL, HFILL}
2677         },
2678         {&hf_dvb_s2_section_number, {
2679                 "Table section number", "dvb-s2_table.section_number",
2680                 FT_UINT8, BASE_DEC, NULL, 0x0,
2681                 NULL, HFILL}
2682         },
2683         {&hf_dvb_s2_last_section_number, {
2684                 "Table last section number", "dvb-s2_table.last_section_number",
2685                 FT_UINT8, BASE_DEC, NULL, 0x0,
2686                 NULL, HFILL}
2687         },
2688 
2689 /* SCT */
2690         {&hf_dvb_s2_table_superframe_loop_count, {
2691                 "Table superframe loop count", "dvb-s2_table.superframe_loop_count",
2692                 FT_UINT8, BASE_DEC, NULL, 0x0,
2693                 NULL, HFILL}
2694         },
2695         {&hf_dvb_s2_table_superframe, {
2696                 "Superframe", "dvb-s2_table.superframe",
2697                 FT_BYTES, BASE_NONE, NULL, 0x0,
2698                 "Superframe definition", HFILL}
2699         },
2700         {&hf_dvb_s2_table_sf_sequence, {
2701                 "Superframe sequence", "dvb-s2_table.sf.sequence",
2702                 FT_UINT8, BASE_HEX, NULL, 0x0,
2703                 NULL, HFILL}
2704         },
2705         {&hf_dvb_s2_table_sf_id, {
2706                 "Superframe id", "dvb-s2_table.sf.id",
2707                 FT_UINT8, BASE_HEX, NULL, 0x0,
2708                 NULL, HFILL}
2709         },
2710         {&hf_dvb_s2_table_sf_large_timing_uncertaintly_flag, {
2711                 "Superframe large timing uncertainty flag", "dvb-s2_table.sf.large_timing_uncertainty_flag",
2712                 FT_UINT8, BASE_HEX, NULL, DVB_S2_TABLE_SCT_LARGE_TIMING_FLAG_MASK,
2713                 NULL, HFILL}
2714         },
2715         {&hf_dvb_s2_table_sf_uplink_polarization, {
2716                 "Superframe uplink polarization", "dvb-s2_table.sf.uplink_polarization",
2717                 FT_UINT8, BASE_HEX, VALS(table_uplinkPolarization), DVB_S2_TABLE_SCT_UPLINK_POLARIZATION_MASK,
2718                 NULL, HFILL}
2719         },
2720         {&hf_dvb_s2_table_sf_absolute_time, {
2721                 "Superframe absolute time (NCR format)", "dvb-s2_table.sf.absolute",
2722                 FT_BYTES, BASE_NONE, NULL, 0x0,
2723                 NULL, HFILL}
2724         },
2725         {&hf_dvb_s2_table_sf_duration, {
2726                 "Superframe duration", "dvb-s2_table.sf.duration",
2727                 FT_UINT32, BASE_DEC, NULL, 0x0,
2728                 NULL, HFILL}
2729         },
2730         {&hf_dvb_s2_table_sf_centre_frequency, {
2731                 "Superframe center frequency", "dvb-s2_table.sf.center_frequency",
2732                 FT_UINT32, BASE_DEC, NULL, 0x0,
2733                 NULL, HFILL}
2734         },
2735         {&hf_dvb_s2_table_sf_count, {
2736                 "Superframe count", "dvb-s2_table.sf.count",
2737                 FT_UINT16, BASE_DEC, NULL, 0x0,
2738                 NULL, HFILL}
2739         },
2740         {&hf_dvb_s2_table_sf_frame_loop_count, {
2741                 "Superframe frame loop count", "dvb-s2_table.sf.frame_loop_count",
2742                 FT_UINT8, BASE_DEC, NULL, DVB_S2_TABLE_SCT_FRAME_LOOP_COUNT_MASK,
2743                 NULL, HFILL}
2744         },
2745         {&hf_dvb_s2_table_sf_frame, {
2746                 "Frame", "dvb-s2_table.sf.frame",
2747                 FT_BYTES, BASE_NONE, NULL, 0x0,
2748                 "Frame definition", HFILL}
2749         },
2750         {&hf_dvb_s2_table_sf_frame_type, {
2751                 "Frame type", "dvb-s2_table.sf.frame.type",
2752                 FT_UINT8, BASE_DEC, NULL, 0x0,
2753                 NULL, HFILL}
2754         },
2755         {&hf_dvb_s2_table_sf_frame_id, {
2756                 "Frame id", "dvb-s2_table.sf.frame.id",
2757                 FT_UINT8, BASE_DEC, NULL, 0x0,
2758                 NULL, HFILL}
2759         },
2760         {&hf_dvb_s2_table_sf_frame_start_time, {
2761                 "Frame start time", "dvb-s2_table.sf.frame.start_time",
2762                 FT_UINT32, BASE_DEC, NULL, 0x0,
2763                 NULL, HFILL}
2764         },
2765         {&hf_dvb_s2_table_sf_frame_centre_frequency_offset, {
2766                 "Frame center frequency offset", "dvb-s2_table.sf.frame.center_frequency_offset",
2767                 FT_INT24, BASE_DEC, NULL, 0x0,
2768                 NULL, HFILL}
2769         },
2770 /* TIM */
2771         {&hf_dvb_s2_table_rcst_status, {
2772                 "Table RCST status", "dvb-s2_table.rcst_status",
2773                 FT_UINT8, BASE_HEX, NULL, 0x0,
2774                 NULL, HFILL}
2775         },
2776         {&hf_dvb_s2_table_network_status, {
2777                 "Table network status", "dvb-s2_table.network_status",
2778                 FT_UINT8, BASE_HEX, NULL, 0x0,
2779                 NULL, HFILL}
2780         },
2781         {&hf_dvb_s2_table_desc_loop_count, {
2782                 "Table descriptor loop count", "dvb-s2_table.desc_loop_count",
2783                 FT_UINT8, BASE_DEC, NULL, 0x0,
2784                 NULL, HFILL}
2785         },
2786 /* TBTP */
2787         {&hf_dvb_s2_tbtp_group_id, {
2788                 "Group ID", "dvb-s2_table.group_id",
2789                 FT_UINT8, BASE_HEX, NULL, 0x0,
2790                 NULL, HFILL}
2791         },
2792         {&hf_dvb_s2_tbtp_superframe_count, {
2793                 "Superframe count", "dvb-s2_table.superframe_count",
2794                 FT_UINT16, BASE_DEC, NULL, 0x0,
2795                 NULL, HFILL}
2796         },
2797         {&hf_dvb_s2_tbtp_frame_loop_count, {
2798                 "Frame loop count", "dvb-s2_table.frame_loop_count",
2799                 FT_UINT8, BASE_DEC, NULL, DVB_S2_TABLE_SCT_FRAME_LOOP_COUNT_MASK,
2800                 NULL, HFILL}
2801         },
2802         {&hf_dvb_s2_tbtp_sf_frame, {
2803                 "Frame", "dvb-s2_table.frame_branch",
2804                 FT_BYTES, BASE_NONE, NULL, 0x0,
2805                 NULL, HFILL}
2806         },
2807         {&hf_dvb_s2_tbtp_frame_number, {
2808                 "Frame number", "dvb-s2_table.frame.number",
2809                 FT_UINT8, BASE_DEC, NULL, DVB_S2_TABLE_TBTP_FRAME_NUMBER_MASK,
2810                 NULL, HFILL}
2811         },
2812         {&hf_dvb_s2_tbtp_btb_loop_count, {
2813                 "Btp loop count", "dvb-s2_table.frame.btp_loop_count",
2814                 FT_UINT16, BASE_DEC, NULL, DVB_S2_TABLE_TBTP_BTP_LOOP_COUNT_MASK,
2815                 NULL, HFILL}
2816         },
2817         {&hf_dvb_s2_tbtp_assignment_count, {
2818                 "Assignment count", "dvb-s2_table.frame.btp.assignment_count",
2819                 FT_UINT8, BASE_DEC, NULL, 0x0,
2820                 NULL, HFILL}
2821         },
2822         {&hf_dvb_s2_tbtp_btp, {
2823                 "BTP", "dvb-s2_table.frame.btp_branch",
2824                 FT_BYTES, BASE_NONE, NULL, 0x0,
2825                 NULL, HFILL}
2826         },
2827         {&hf_dvb_s2_tbtp_logon_id, {
2828                 "Logon Id", "dvb-s2_table.frame.btp.logon_id",
2829                 FT_UINT16, BASE_DEC, NULL, 0x0,
2830                 NULL, HFILL}
2831         },
2832         {&hf_dvb_s2_tbtp_multiple_channel_flag, {
2833                 "Multiple channel flag", "dvb-s2_table.frame.btp.multiple_channel_flag",
2834                 FT_UINT8, BASE_DEC, NULL, DVB_S2_TABLE_TBTP_MULTIPLE_CHANNEL_FLAG_MASK,
2835                 NULL, HFILL}
2836         },
2837         {&hf_dvb_s2_tbtp_assignment_type, {
2838                 "Assignment type", "dvb-s2_table.frame.btp.assignment_type",
2839                 FT_UINT8, BASE_DEC, NULL, DVB_S2_TABLE_TBTP_ASSIGNMENT_TYPE_MASK,
2840                 NULL, HFILL}
2841         },
2842         {&hf_dvb_s2_tbtp_frame_vbdc_queue_empty_flag, {
2843                 "VBDC queue empty flag", "dvb-s2_table.frame.btp.vbdc_queue_empty_flag",
2844                 FT_UINT8, BASE_DEC, NULL, DVB_S2_TABLE_TBTP_VBDC_FLAG_MASK,
2845                 NULL, HFILL}
2846         },
2847         {&hf_dvb_s2_tbtp_start_slot, {
2848                 "Start slot", "dvb-s2_table.frame.btp.start_slot",
2849                 FT_UINT16, BASE_DEC, NULL, DVB_S2_TABLE_TBTP_START_SLOT_MASK,
2850                 NULL, HFILL}
2851         },
2852         {&hf_dvb_s2_tbtp_channel_id, {
2853                 "Channel id", "dvb-s2_table.frame.btp.channel_id",
2854                 FT_UINT8, BASE_DEC, NULL, 0x0,
2855                 NULL, HFILL}
2856         },
2857 /* TBTP2 */
2858         {&hf_dvb_s2_table_group_id, {
2859                 "Table Group ID", "dvb-s2_table.group_id",
2860                 FT_UINT8, BASE_HEX, NULL, 0x0,
2861                 NULL, HFILL}
2862         },
2863         {&hf_dvb_s2_table_assign_context, {
2864                 "Table assignment context", "dvb-s2_table.assign_context",
2865                 FT_UINT8, BASE_HEX, VALS(table_assignContext), 0x0,
2866                 NULL, HFILL}
2867         },
2868         {&hf_dvb_s2_table_superframe_count, {
2869                 "Superframe count", "dvb-s2_table.superframe_count",
2870                 FT_UINT8, BASE_DEC, NULL, 0x0,
2871                 NULL, HFILL}
2872         },
2873         {&hf_dvb_s2_table_assign_format, {
2874                 "Table assignment Format", "dvb-s2_table.assign_format",
2875                 FT_UINT8, BASE_DEC, NULL, 0x0,
2876                 NULL, HFILL}
2877         },
2878         {&hf_dvb_s2_table_frame_loop_count, {
2879                 "Table frame loop count", "dvb-s2_table.frame_loop_count",
2880                 FT_UINT8, BASE_DEC, NULL, 0x0,
2881                 NULL, HFILL}
2882         },
2883         {&hf_dvb_s2_table_frame_number, {
2884                 "Frame number", "dvb-s2_table.frame.number",
2885                 FT_UINT8, BASE_DEC, NULL, 0x0,
2886                 NULL, HFILL}
2887         },
2888         {&hf_dvb_s2_table_frame_assign_offset, {
2889                 "Frame assignment offset", "dvb-s2_table.frame.assign_offset",
2890                 FT_UINT16, BASE_DEC, NULL, 0x0,
2891                 NULL, HFILL}
2892         },
2893         {&hf_dvb_s2_table_frame_assign_loop_count, {
2894                 "Frame assignment loop count", "dvb-s2_table.frame.assign_loop_count",
2895                 FT_UINT16, BASE_DEC, NULL, 0x0,
2896                 NULL, HFILL}
2897         },
2898         {&hf_dvb_s2_table_frame_assignment, {
2899                 "Frame assignment", "dvb-s2_table.frame.assignment",
2900                 FT_BYTES, BASE_NONE, NULL, 0x0,
2901                 NULL, HFILL}
2902         },
2903         {&hf_dvb_s2_table_frame_assign_id8, {
2904                 "Frame assignment ID", "dvb-s2_table.frame.assign_id8",
2905                 FT_UINT8, BASE_HEX, NULL, 0x0,
2906                 NULL, HFILL}
2907         },
2908         {&hf_dvb_s2_table_frame_assign_id16, {
2909                 "Frame assignment ID", "dvb-s2_table.frame.assign_id16",
2910                 FT_UINT16, BASE_HEX, NULL, 0x0,
2911                 NULL, HFILL}
2912         },
2913         {&hf_dvb_s2_table_frame_assign_id24, {
2914                 "Frame assignment ID", "dvb-s2_table.frame.assign_id24",
2915                 FT_UINT24, BASE_HEX, NULL, 0x0,
2916                 NULL, HFILL}
2917         },
2918         {&hf_dvb_s2_table_frame_assign_id48, {
2919                 "Frame assignment ID", "dvb-s2_table.frame.assign_id48",
2920                 FT_BYTES, BASE_NONE, NULL, 0x0,
2921                 NULL, HFILL}
2922         },
2923         {&hf_dvb_s2_table_frame_dynamic_tx_type, {
2924                 "Frame dynamic tx_type", "dvb-s2_table.frame.dynamic_tx_type",
2925                 FT_UINT8, BASE_HEX, NULL, 0x0,
2926                 NULL, HFILL}
2927         },
2928 /* CMT */
2929         {&hf_dvb_s2_table_entry_loop_count, {
2930                 "Table entry loop count", "dvb-s2_table.entry_loop_count",
2931                 FT_UINT8, BASE_DEC, NULL, 0x0,
2932                 NULL, HFILL}
2933         },
2934         {&hf_dvb_s2_table_entry, {
2935                 "Entry Correction Message", "dvb-s2_table.entry",
2936                 FT_BYTES, BASE_NONE, NULL, 0x0,
2937                 NULL, HFILL}
2938         },
2939         {&hf_dvb_s2_table_entry_login_id, {
2940                 "Entry login ID", "dvb-s2_table.entry.login_id",
2941                 FT_UINT16, BASE_HEX, NULL, 0x0,
2942                 NULL, HFILL}
2943         },
2944 /* TMST2 */
2945         {&hf_dvb_s2_table_common_sytem_margin, {
2946                 "Table common system margin", "dvb-s2_table.common_system_margin",
2947                 FT_UINT8, BASE_DEC, NULL, 0x0,
2948                 NULL, HFILL}
2949         },
2950         {&hf_dvb_s2_table_tx_mode_count, {
2951                 "Table transmission mode count", "dvb-s2_table.tx_mode_count",
2952                 FT_UINT8, BASE_DEC, NULL, 0x0,
2953                 NULL, HFILL}
2954         },
2955         {&hf_dvb_s2_table_tx_mode, {
2956                 "Transmission mode", "dvb-s2_table.tx_mode",
2957                 FT_BYTES, BASE_NONE, NULL, 0x0,
2958                 NULL, HFILL}
2959         },
2960         {&hf_dvb_s2_table_tx_mode_frame_length, {
2961                 "tx mode frame length", "dvb-s2_table.tx_mode.frame_length",
2962                 FT_UINT8, BASE_HEX, NULL, DVB_S2_TABLE_TX_MODE_FRAME_LENGTH_MASK,
2963                 NULL, HFILL}
2964         },
2965         {&hf_dvb_s2_table_tx_mode_pilot_symbols, {
2966                 "tx mode pilot_symbols", "dvb-s2_table.tx_mode.pilot_symbols",
2967                 FT_UINT8, BASE_HEX, NULL, DVB_S2_TABLE_TX_MODE_PILOT_SYMBOLS_MASK,
2968                 NULL, HFILL}
2969         },
2970         {&hf_dvb_s2_table_tx_mode_modcod, {
2971                 "tx mode MODCOD", "dvb-s2_table.tx_mode.modcod",
2972                 FT_UINT8, BASE_HEX, VALS(table_modcods), DVB_S2_TABLE_TX_MODE_MODCOD_MASK,
2973                 NULL, HFILL}
2974         },
2975         {&hf_dvb_s2_table_tx_mode_modcod_system_margin, {
2976                 "tx mode modcod system margin", "dvb-s2_table.tx_mode.modcod_system_margin",
2977                 FT_UINT8, BASE_DEC, NULL, 0x0,
2978                 NULL, HFILL}
2979         },
2980         {&hf_dvb_s2_table_tx_mode_isi, {
2981                 "tx mode ISI", "dvb-s2_table.tx_mode.isi",
2982                 FT_UINT8, BASE_HEX, NULL, 0x0,
2983                 NULL, HFILL}
2984         },
2985 /* FCT2 */
2986         {&hf_dvb_s2_table_frame_type_loop_count, {
2987                 "Table frame type loop count", "dvb-s2_table.frame_type_loop_count",
2988                 FT_UINT8, BASE_DEC, NULL, 0x0,
2989                 NULL, HFILL}
2990         },
2991         {&hf_dvb_s2_table_frame_type_branch, {
2992                 "Frame type", "dvb-s2_table.frame_type_branch",
2993                 FT_BYTES, BASE_NONE, NULL, 0x0,
2994                 NULL, HFILL}
2995         },
2996         {&hf_dvb_s2_table_frame_type, {
2997                 "Frame type", "dvb-s2_table.frame_type.id",
2998                 FT_UINT8, BASE_HEX, NULL, 0x0,
2999                 NULL, HFILL}
3000         },
3001         {&hf_dvb_s2_table_frame_type_frame_duration, {
3002                 "Frame type frame duration", "dvb-s2_table.frame_type.frame_duration",
3003                 FT_UINT32, BASE_DEC, NULL, 0x0,
3004                 NULL, HFILL}
3005         },
3006         {&hf_dvb_s2_table_frame_type_tx_format_class, {
3007                 "Frame type tx format class", "dvb-s2_table.frame_type.tx_format_class",
3008                 FT_UINT8, BASE_HEX, VALS(table_frameType_txFormatClass), 0x0,
3009                 NULL, HFILL}
3010         },
3011         {&hf_dvb_s2_table_frame_type_btu_duration, {
3012                 "Frame type btu duration", "dvb-s2_table.frame_type.btu_duration",
3013                 FT_UINT24, BASE_DEC, NULL, 0x0,
3014                 NULL, HFILL}
3015         },
3016         {&hf_dvb_s2_table_frame_type_btu_carrier_bw, {
3017                 "Frame type btu carrier bw", "dvb-s2_table.frame_type.btu_carrier_bw",
3018                 FT_UINT24, BASE_DEC, NULL, 0x0,
3019                 NULL, HFILL}
3020         },
3021         {&hf_dvb_s2_table_frame_type_btu_symbol_rate, {
3022                 "Frame type btu symbol rate", "dvb-s2_table.frame_type.btu_symbol_rate",
3023                 FT_UINT24, BASE_DEC, NULL, 0x0,
3024                 NULL, HFILL}
3025         },
3026         {&hf_dvb_s2_table_frame_type_time_unit_count, {
3027                 "Frame type time unit count", "dvb-s2_table.frame_type.time_unit_count",
3028                 FT_UINT16, BASE_DEC, NULL, 0x0,
3029                 NULL, HFILL}
3030         },
3031         {&hf_dvb_s2_table_frame_type_grid_repeat_count, {
3032                 "Frame type grid repeat count", "dvb-s2_table.frame_type.grid_repeat_count",
3033                 FT_UINT8, BASE_DEC, NULL, 0x0,
3034                 NULL, HFILL}
3035         },
3036         {&hf_dvb_s2_table_frame_type_grid_frequency_offset, {
3037                 "Frame type grid frequency offset", "dvb-s2_table.frame_type.grid_frequency_offset",
3038                 FT_INT24, BASE_DEC, NULL, 0x0,
3039                 NULL, HFILL}
3040         },
3041         {&hf_dvb_s2_table_frame_type_section_loop_count, {
3042                 "Frame type section loop count", "dvb-s2_table.frame_type.section_loop_count",
3043                 FT_UINT8, BASE_DEC, NULL, 0x0,
3044                 NULL, HFILL}
3045         },
3046         {&hf_dvb_s2_table_frame_type_section, {
3047                 "Section", "dvb-s2_table.frame_type.section",
3048                 FT_BYTES, BASE_NONE, NULL, 0x0,
3049                 NULL, HFILL}
3050         },
3051         {&hf_dvb_s2_table_frame_type_section_default_tx_type, {
3052                 "Section default tx type", "dvb-s2_table.frame_type.section.default_tx_type",
3053                 FT_UINT8, BASE_HEX, NULL, 0x0,
3054                 NULL, HFILL}
3055         },
3056         {&hf_dvb_s2_table_frame_type_section_fix_acc_method, {
3057                 "Section fixed access method", "dvb-s2_table.frame_type.section.fixed_access_method",
3058                 FT_UINT8, BASE_HEX, NULL, DVB_S2_TABLE_FRAME_TYPE_SECTION_FAM_MASK,
3059                 NULL, HFILL}
3060         },
3061         {&hf_dvb_s2_table_frame_type_section_repeat_count, {
3062                 "Section repeat count", "dvb-s2_table.frame_type.section.repeat_count",
3063                 FT_UINT16, BASE_DEC, NULL, 0x0,
3064                 NULL, HFILL}
3065         },
3066 /* FCT */
3067         {&hf_dvb_s2_table_frame_ID_loop_count, {
3068                 "Frame loop count", "dvb-s2_table.frame_ID_loop_count",
3069                 FT_UINT8, BASE_DEC, NULL, 0x0,
3070                 NULL, HFILL}
3071         },
3072         {&hf_dvb_s2_table_frame_ID_branch, {
3073                 "Frame", "dvb-s2_table.frame_ID_branch",
3074                 FT_BYTES, BASE_NONE, NULL, 0x0,
3075                 NULL, HFILL}
3076         },
3077         {&hf_dvb_s2_table_frame_ID, {
3078                 "Frame ID", "dvb-s2_table.frame_ID.frame_ID.id",
3079                 FT_UINT8, BASE_DEC, NULL, 0x0,
3080                 NULL, HFILL}
3081         },
3082         {&hf_dvb_s2_table_frame_ID_frame_duration, {
3083                 "Frame duration", "dvb-s2_table.frame_ID.frame_duration",
3084                 FT_UINT32, BASE_DEC, NULL, 0x0,
3085                 NULL, HFILL}
3086         },
3087         {&hf_dvb_s2_table_frame_ID_total_timeslot_count, {
3088                 "Frame timeslot count", "dvb-s2_table.frame_ID.total_timeslot_count",
3089                 FT_UINT16, BASE_DEC, NULL, DVB_S2_TABLE_FRAME_ID_TOT_TIME_COUNT_MASK,
3090                 NULL, HFILL}
3091         },
3092         {&hf_dvb_s2_table_frame_ID_start_timeslot_number, {
3093                 "Frame timeslot start number", "dvb-s2_table.frame_ID.start_timeslot_number",
3094                 FT_UINT16, BASE_DEC, NULL, DVB_S2_TABLE_FRAME_ID_TOT_TIME_COUNT_MASK,
3095                 NULL, HFILL}
3096         },
3097         {&hf_dvb_s2_table_frame_ID_timeslot_loop_count, {
3098                 "Frame timeslot loop count", "dvb-s2_table.frame_ID.timeslot_loop_count",
3099                 FT_UINT8, BASE_DEC, NULL, 0x0,
3100                 NULL, HFILL}
3101         },
3102         {&hf_dvb_s2_table_frame_ID_timeslot, {
3103                 "Frame timeslot", "dvb-s2_table.frame_ID.timeslot",
3104                 FT_BYTES, BASE_NONE, NULL, 0x0,
3105                 NULL, HFILL}
3106         },
3107         {&hf_dvb_s2_table_frame_ID_timeslot_timeslot_frequency_offset, {
3108                 "Frame timeslot frequency offset", "dvb-s2_table.frame_ID.timeslot.frequency_offset",
3109                 FT_INT24, BASE_DEC, NULL, 0x0,
3110                 NULL, HFILL}
3111         },
3112         {&hf_dvb_s2_table_frame_ID_timeslot_timeslot_time_offset, {
3113                 "Frame timeslot time offset", "dvb-s2_table.frame_ID.timeslot.time_offset",
3114                 FT_UINT32, BASE_DEC, NULL, 0x0,
3115                 NULL, HFILL}
3116         },
3117         {&hf_dvb_s2_table_frame_ID_timeslot_timeslot_id, {
3118                 "Frame timeslot id", "dvb-s2_table.frame_ID.timeslot.id",
3119                 FT_UINT8, BASE_DEC, NULL, 0x0,
3120                 NULL, HFILL}
3121         },
3122         {&hf_dvb_s2_table_frame_ID_timeslot_repeat_count, {
3123                 "Frame timeslot repeat count", "dvb-s2_table.frame_ID.timeslot.repeat_count",
3124                 FT_UINT8, BASE_DEC, NULL, 0x0,
3125                 NULL, HFILL}
3126         },
3127 /* BCT */
3128         {&hf_dvb_s2_table_tx_type_loop_count, {
3129                 "Table tx type loop count", "dvb-s2_table.tx_type_loop_count",
3130                 FT_UINT8, BASE_DEC, NULL, 0x0,
3131                 NULL, HFILL}
3132         },
3133         {&hf_dvb_s2_table_tx_type_branch, {
3134                 "Tx type", "dvb-s2_table.tx_type",
3135                 FT_BYTES, BASE_NONE, NULL, 0x0,
3136                 NULL, HFILL}
3137         },
3138         {&hf_dvb_s2_table_tx_type, {
3139                 "Tx type", "dvb-s2_table.tx_type.id",
3140                 FT_UINT8, BASE_HEX, NULL, 0x0,
3141                 NULL, HFILL}
3142         },
3143         {&hf_dvb_s2_table_tx_type_tx_content_type, {
3144                 "Tx type tx content type", "dvb-s2_table.tx_type.tx_content_type",
3145                 FT_UINT8, BASE_HEX, VALS(table_txType_contentType), 0x0,
3146                 NULL, HFILL}
3147         },
3148         {&hf_dvb_s2_table_tx_type_tx_format_class, {
3149                 "Tx type tx format class", "dvb-s2_table.tx_type.tx_format_class",
3150                 FT_UINT8, BASE_HEX, VALS(table_frameType_txFormatClass), 0x0,
3151                 NULL, HFILL}
3152         },
3153         {&hf_dvb_s2_table_tx_type_tx_format_data_length, {
3154                 "Tx type tx format data length", "dvb-s2_table.tx_type.tx_format_data_length",
3155                 FT_UINT8, BASE_HEX, NULL, 0x0,
3156                 NULL, HFILL}
3157         },
3158         {&hf_dvb_s2_table_tx_type_tx_format_data, {
3159                 "Tx type format data", "dvb-s2_table.tx_type.format_data",
3160                 FT_BYTES, BASE_NONE, NULL, 0x0,
3161                 NULL, HFILL}
3162         },
3163 /* BCT Common Tx*/
3164         {&hf_dvb_s2_table_tx_type_tx_block_size, {
3165                 "Tx type tx block size", "dvb-s2_table.tx_type.tx_block_size",
3166                 FT_UINT8, BASE_DEC, NULL, 0x0,
3167                 NULL, HFILL}
3168         },
3169         {&hf_dvb_s2_table_tx_type_threshold_es_n0, {
3170                 "Tx type threshold Es/N0", "dvb-s2_table.tx_type.threshold_es_n0",
3171                 FT_UINT8, BASE_DEC, NULL, 0x0,
3172                 NULL, HFILL}
3173         },
3174         {&hf_dvb_s2_table_tx_type_payload_size, {
3175                 "Tx type payload size", "dvb-s2_table.tx_type.payload_size",
3176                 FT_UINT16, BASE_DEC, NULL, 0x0,
3177                 NULL, HFILL}
3178         },
3179         {&hf_dvb_s2_table_tx_type_modulation_scheme, {
3180                 "Tx type modulation scheme", "dvb-s2_table.tx_type.modulation_scheme",
3181                 FT_UINT8, BASE_HEX, VALS(table_txType_modulationScheme), 0x0,
3182                 NULL, HFILL}
3183         },
3184         {&hf_dvb_s2_table_tx_type_p, {
3185                 "Tx type P", "dvb-s2_table.tx_type.p",
3186                 FT_UINT8, BASE_HEX, NULL, 0x0,
3187                 "Tx type P permutation parameter", HFILL}
3188         },
3189         {&hf_dvb_s2_table_tx_type_q0, {
3190                 "Tx type Q0", "dvb-s2_table.tx_type.q0",
3191                 FT_UINT8, BASE_HEX, NULL, DVB_S2_TABLE_TX_TYPE_QX_MASK,
3192                 "Tx type Q0 permutation parameter", HFILL}
3193         },
3194         {&hf_dvb_s2_table_tx_type_q1, {
3195                 "Tx type Q1", "dvb-s2_table.tx_type.q1",
3196                 FT_UINT8, BASE_HEX, NULL, DVB_S2_TABLE_TX_TYPE_QX_MASK,
3197                 "Tx type Q1 permutation parameter", HFILL}
3198         },
3199         {&hf_dvb_s2_table_tx_type_q2, {
3200                 "Tx type Q2", "dvb-s2_table.tx_type.q2",
3201                 FT_UINT8, BASE_HEX, NULL, DVB_S2_TABLE_TX_TYPE_QX_MASK,
3202                 "Tx type Q2 permutation parameter", HFILL}
3203         },
3204         {&hf_dvb_s2_table_tx_type_q3, {
3205                 "Tx type Q3", "dvb-s2_table.tx_type.q3",
3206                 FT_UINT8, BASE_HEX, NULL, DVB_S2_TABLE_TX_TYPE_QX_MASK,
3207                 "Tx type Q3 permutation parameter", HFILL}
3208         },
3209         {&hf_dvb_s2_table_tx_type_y_period, {
3210                 "Tx type Y period", "dvb-s2_table.tx_type.y_period",
3211                 FT_UINT8, BASE_DEC, NULL, DVB_S2_TABLE_TX_TYPE_W_Y_PERIOD_MASK,
3212                 NULL, HFILL}
3213         },
3214         {&hf_dvb_s2_table_tx_type_w_period, {
3215                 "Tx type W period", "dvb-s2_table.tx_type.w_period",
3216                 FT_UINT8, BASE_DEC, NULL, DVB_S2_TABLE_TX_TYPE_W_Y_PERIOD_MASK,
3217                 NULL, HFILL}
3218         },
3219         {&hf_dvb_s2_table_tx_type_y_pattern, {
3220                 "Y patterns", "dvb-s2_table.tx_type.y_pattern",
3221                 FT_BYTES, BASE_NONE, NULL, 0x0,
3222                 NULL, HFILL}
3223         },
3224         {&hf_dvb_s2_table_tx_type_y_pattern_bit, {
3225                 "Y pattern bit", "dvb-s2_table.tx_type.y_pattern_bit",
3226                 FT_UINT8, BASE_HEX, NULL, DVB_S2_TABLE_TX_TYPE_W_Y_PATTERN_BIT_MASK,
3227                 NULL, HFILL}
3228         },
3229         {&hf_dvb_s2_table_tx_type_w_pattern, {
3230                 "W patterns", "dvb-s2_table.tx_type.w_pattern",
3231                 FT_BYTES, BASE_NONE, NULL, 0x0,
3232                 NULL, HFILL}
3233         },
3234         {&hf_dvb_s2_table_tx_type_w_pattern_bit, {
3235                 "W pattern bit", "dvb-s2_table.tx_type.w_pattern_bit",
3236                 FT_UINT8, BASE_HEX, NULL, DVB_S2_TABLE_TX_TYPE_W_Y_PATTERN_BIT_MASK,
3237                 NULL, HFILL}
3238         },
3239         {&hf_dvb_s2_table_tx_type_preamble_len, {
3240                 "Tx type preamble len", "dvb-s2_table.tx_type.preamble_len",
3241                 FT_UINT8, BASE_DEC, NULL, 0x0,
3242                 NULL, HFILL}
3243         },
3244         {&hf_dvb_s2_table_tx_type_postamble_len, {
3245                 "Tx type postamble len", "dvb-s2_table.tx_type.postamble_len",
3246                 FT_UINT8, BASE_DEC, NULL, 0x0,
3247                 NULL, HFILL}
3248         },
3249         {&hf_dvb_s2_table_tx_type_pilot_period, {
3250                 "Tx type pilot period", "dvb-s2_table.tx_type.pilot_period",
3251                 FT_UINT16, BASE_DEC, NULL, DVB_S2_TABLE_TX_TYPE_PILOT_PERIOD_MASK,
3252                 NULL, HFILL}
3253         },
3254         {&hf_dvb_s2_table_tx_type_pilot_block_len, {
3255                 "Tx type pilot block length", "dvb-s2_table.tx_type.pilot_block_len",
3256                 FT_UINT8, BASE_DEC, NULL, 0x0,
3257                 NULL, HFILL}
3258         },
3259         {&hf_dvb_s2_table_tx_type_pilot_sum, {
3260                 "Tx type pilot sum", "dvb-s2_table.tx_type.pilot_sum",
3261                 FT_UINT8, BASE_DEC, NULL, 0x0,
3262                 NULL, HFILL}
3263         },
3264         {&hf_dvb_s2_table_tx_type_uw_symbol, {
3265                 "Tx type UW symbols", "dvb-s2_table.tx_type.uw_symbol",
3266                 FT_BYTES, BASE_NONE, NULL, 0x0,
3267                 NULL, HFILL}
3268         },
3269         {&hf_dvb_s2_table_tx_type_uw_symbol_unit, {
3270                 "UW symbol unit", "dvb-s2_table.tx_type.uw_symbol_unit",
3271                 FT_UINT8, BASE_HEX, NULL, 0x0,
3272                 NULL, HFILL}
3273         },
3274         {&hf_dvb_s2_table_tx_type_uw_symbol_qpsk, {
3275                 "UW symbol QPSK", "dvb-s2_table.tx_type.uw_symbol_qpsk",
3276                 FT_UINT8, BASE_HEX, NULL, DVB_S2_TABLE_TX_TYPE_UW_SYMBOL_QPSK_MASK,
3277                 NULL, HFILL}
3278         },
3279         {&hf_dvb_s2_table_tx_type_uw_symbol_8psk, {
3280                 "UW symbol 8PSK", "dvb-s2_table.tx_type.uw_symbol_8psk",
3281                 FT_UINT8, BASE_HEX, NULL, DVB_S2_TABLE_TX_TYPE_UW_SYMBOL_8PSK_MASK,
3282                 NULL, HFILL}
3283         },
3284         {&hf_dvb_s2_table_tx_type_uw_symbol_16qam, {
3285                 "UW symbol 16QAM", "dvb-s2_table.tx_type.uw_symbol_16qam",
3286                 FT_UINT8, BASE_HEX, NULL, DVB_S2_TABLE_TX_TYPE_UW_SYMBOL_16QAM_MASK,
3287                 NULL, HFILL}
3288         },
3289         {&hf_dvb_s2_table_tx_type_waveform_id, {
3290                 "Tx type waveform id", "dvb-s2_table.tx_type.waveform_id",
3291                 FT_UINT8, BASE_HEX, NULL, 0x0,
3292                 NULL, HFILL}
3293         },
3294         {&hf_dvb_s2_table_tx_type_tx_start_offset, {
3295                 "Tx type tx start offset 1", "dvb-s2_table.tx_type.tx_start_offset",
3296                 FT_UINT32, BASE_DEC, NULL, DVB_S2_TABLE_TX_TYPE_TX_START_OFFSET_MASK,
3297                 NULL, HFILL}
3298         },
3299 /* BCT LM Tx*/
3300         {&hf_dvb_s2_table_tx_type_tx_start_offset_1, {
3301                 "Tx type tx start offset 1", "dvb-s2_table.tx_type.tx_start_offset_1",
3302                 FT_UINT8, BASE_DEC, NULL, 0x0,
3303                 NULL, HFILL}
3304         },
3305         {&hf_dvb_s2_table_tx_type_tx_start_offset_2, {
3306                 "Tx type tx start offset 1", "dvb-s2_table.tx_type.tx_start_offset_1",
3307                 FT_UINT24, BASE_DEC, NULL, DVB_S2_TABLE_TX_TYPE_TX_START_OFFSET_MASK,
3308                 NULL , HFILL}
3309         },
3310 /* BCT CPM Tx */
3311         {&hf_dvb_s2_table_tx_type_modulation_mh, {
3312                 "Tx type modulation mh", "dvb-s2_table.tx_type.modulation_mh",
3313                 FT_UINT8, BASE_DEC, NULL, DVB_S2_TABLE_TX_TYPE_MODULATION_MH_MASK,
3314                 NULL, HFILL}
3315         },
3316         {&hf_dvb_s2_table_tx_type_modulation_ph, {
3317                 "Tx type modulation ph", "dvb-s2_table.tx_type.modulation_ph",
3318                 FT_UINT8, BASE_DEC, NULL, DVB_S2_TABLE_TX_TYPE_MODULATION_PH_MASK,
3319                 NULL, HFILL}
3320         },
3321         {&hf_dvb_s2_table_tx_type_modulation_type, {
3322                 "Tx type modulation type", "dvb-s2_table.tx_type.modulation_type",
3323                 FT_UINT8, BASE_DEC, VALS(table_txType_modulationType), DVB_S2_TABLE_TX_TYPE_MODULATION_TYPE_MASK,
3324                 NULL, HFILL}
3325         },
3326         {&hf_dvb_s2_table_tx_type_alpha_rc, {
3327                 "Tx type alpha_rc", "dvb-s2_table.tx_type.alpha_rc",
3328                 FT_UINT8, BASE_DEC, NULL, 0x0,
3329                 NULL, HFILL}
3330         },
3331         {&hf_dvb_s2_table_tx_type_code_rate, {
3332                 "Tx type code rate", "dvb-s2_table.tx_type.code_rate",
3333                 FT_UINT8, BASE_HEX, VALS(table_txType_codeRate), DVB_S2_TABLE_TX_TYPE_CODE_RATE_MASK,
3334                 NULL, HFILL}
3335         },
3336         {&hf_dvb_s2_table_tx_type_constraint_length_k, {
3337                 "Tx type constraint length K", "dvb-s2_table.tx_type.constraint_length_k",
3338                 FT_UINT8, BASE_HEX, VALS(table_txType_constraintLengthK), DVB_S2_TABLE_TX_TYPE_CONSTRAINT_LENGTH_K_MASK,
3339                 NULL, HFILL}
3340         },
3341         {&hf_dvb_s2_table_tx_type_uw_length, {
3342                 "Tx type UW length", "dvb-s2_table.tx_type.uw_length",
3343                 FT_UINT8, BASE_DEC, NULL, 0x0,
3344                 NULL, HFILL}
3345         },
3346         {&hf_dvb_s2_table_tx_type_nbr_uw_segments, {
3347                 "Tx type number UW segments", "dvb-s2_table.tx_type.nbr_uw_segments",
3348                 FT_UINT8, BASE_DEC, NULL, 0x0,
3349                 NULL, HFILL}
3350         },
3351         {&hf_dvb_s2_table_tx_type_uw_segment, {
3352                 "UW segment", "dvb-s2_table.tx_type.uw_segment",
3353                 FT_BYTES, BASE_NONE, NULL, 0x0,
3354                 NULL, HFILL}
3355         },
3356         {&hf_dvb_s2_table_tx_type_uw_segment_start, {
3357                 "UW segment start", "dvb-s2_table.tx_type.uw_segment.start",
3358                 FT_UINT16, BASE_DEC, NULL, 0x0,
3359                 NULL, HFILL}
3360         },
3361         {&hf_dvb_s2_table_tx_type_uw_segment_length, {
3362                 "UW segment length", "dvb-s2_table.tx_type.uw_segment.length",
3363                 FT_UINT8, BASE_DEC, NULL, 0x0,
3364                 NULL, HFILL}
3365         },
3366         {&hf_dvb_s2_table_tx_type_param_interleaver, {
3367                 "Tx type parameterized interleaver", "dvb-s2_table.tx_type.param_interleaver",
3368                 FT_UINT8, BASE_DEC, NULL, DVB_S2_TABLE_TX_TYPE_PARAM_INTERLEAVER_MASK,
3369                 NULL, HFILL}
3370         },
3371         {&hf_dvb_s2_table_tx_type_n, {
3372                 "Tx type N", "dvb-s2_table.tx_type.n",
3373                 FT_UINT16, BASE_DEC, NULL, DVB_S2_TABLE_TX_TYPE_N_MASK,
3374                 NULL, HFILL}
3375         },
3376         {&hf_dvb_s2_table_tx_type_s, {
3377                 "Tx type s", "dvb-s2_table.tx_type.s",
3378                 FT_UINT16, BASE_DEC, NULL, DVB_S2_TABLE_TX_TYPE_S_MASK,
3379                 NULL, HFILL}
3380         },
3381         {&hf_dvb_s2_table_tx_type_p_interleaver, {
3382                 "Tx type p", "dvb-s2_table.tx_type.p",
3383                 FT_UINT16, BASE_DEC, NULL, DVB_S2_TABLE_TX_TYPE_P_MASK,
3384                 NULL, HFILL}
3385         },
3386         {&hf_dvb_s2_table_tx_type_n1_12, {
3387                 "Tx type N1/12", "dvb-s2_table.tx_type.n1_12",
3388                 FT_UINT16, BASE_DEC, NULL, DVB_S2_TABLE_TX_TYPE_N1_12_MASK,
3389                 NULL, HFILL}
3390         },
3391         {&hf_dvb_s2_table_tx_type_k1_12, {
3392                 "Tx type K1/12", "dvb-s2_table.tx_type.k1_12",
3393                 FT_UINT16, BASE_DEC, NULL, DVB_S2_TABLE_TX_TYPE_K1_12_MASK,
3394                 NULL, HFILL}
3395         },
3396         {&hf_dvb_s2_table_tx_type_K2_12, {
3397                 "Tx type K2/12", "dvb-s2_table.tx_type.k2_12",
3398                 FT_UINT16, BASE_DEC, NULL, DVB_S2_TABLE_TX_TYPE_K2_12_MASK,
3399                 NULL, HFILL}
3400         },
3401         {&hf_dvb_s2_table_tx_type_K3_12, {
3402                 "Tx type K3/12", "dvb-s2_table.tx_type.k3_12",
3403                 FT_UINT16, BASE_DEC, NULL, DVB_S2_TABLE_TX_TYPE_K3_12_MASK,
3404                 NULL, HFILL}
3405         },
3406         {&hf_dvb_s2_table_tx_type_pi_i, {
3407                 "Tx type PI(i)", "dvb-s2_table.tx_type.pi_i",
3408                 FT_BYTES, BASE_NONE, NULL, 0x0,
3409                 NULL, HFILL}
3410         },
3411 /* SPT */
3412         {&hf_dvb_s2_table_satellite_loop_count, {
3413                 "Table satellite loop count", "dvb-s2_table.satellite_loop_count",
3414                 FT_UINT8, BASE_DEC, NULL, 0x0,
3415                 NULL, HFILL}
3416         },
3417         {&hf_dvb_s2_table_satellite, {
3418                 "Satellite", "dvb-s2_table.satellite",
3419                 FT_BYTES, BASE_NONE, NULL, 0x0,
3420                 NULL, HFILL}
3421         },
3422         {&hf_dvb_s2_table_satellite_id, {
3423                 "Satellite id", "dvb-s2_table.satellite.id",
3424                 FT_UINT8, BASE_HEX, NULL, 0x0,
3425                 NULL, HFILL}
3426         },
3427         {&hf_dvb_s2_table_satellite_x_coordinate, {
3428                 "Satellite X coordinate", "dvb-s2_table.satellite.x_coordinate",
3429                 FT_FLOAT, BASE_NONE, NULL, 0x0,
3430                 NULL, HFILL}
3431         },
3432         {&hf_dvb_s2_table_satellite_y_coordinate, {
3433                 "Satellite Y coordinate", "dvb-s2_table.satellite.y_coordinate",
3434                 FT_FLOAT, BASE_NONE, NULL, 0x0,
3435                 NULL, HFILL}
3436         },
3437         {&hf_dvb_s2_table_satellite_z_coordinate, {
3438                 "Satellite Z coordinate", "dvb-s2_table.satellite.z_coordinate",
3439                 FT_FLOAT, BASE_NONE, NULL, 0x0,
3440                 NULL, HFILL}
3441         },
3442 /* NIT - RMT */
3443         {&hf_dvb_s2_table_network_descriptors_length, {
3444                 "Network descriptors length", "dvb-s2_table.network_descriptors_length",
3445                 FT_UINT16, BASE_DEC, NULL, DVB_S2_TABLE_NETWORK_DESC_LENGTH_MASK,
3446                 NULL, HFILL}
3447         },
3448         {&hf_dvb_s2_table_multiplex_streams_spec_length, {
3449                 "Multiplex streams spec loop length", "dvb-s2_table.multiplex_streams_spec_length",
3450                 FT_UINT16, BASE_DEC, NULL, DVB_S2_TABLE_MULTIPLEX_STREAMS_LENGTH_MASK,
3451                 NULL, HFILL}
3452         },
3453         {&hf_dvb_s2_table_multiplex, {
3454                 "Multiplex stream", "dvb-s2_table.multiplex",
3455                 FT_BYTES, BASE_NONE, NULL, 0x0,
3456                 NULL, HFILL}
3457         },
3458         {&hf_dvb_s2_table_multiplex_forward_multiplex, {
3459                 "Forward multiplex", "dvb-s2_table.multiplex.forward_multiplex",
3460                 FT_UINT16, BASE_DEC, NULL, 0x0,
3461                 NULL, HFILL}
3462         },
3463         {&hf_dvb_s2_table_multiplex_reward_multiplex, {
3464                 "Return Multiplex", "dvb-s2_table.multiplex.reward_multiplex",
3465                 FT_UINT16, BASE_DEC, NULL, 0x0,
3466                 NULL, HFILL}
3467         },
3468         {&hf_dvb_s2_table_multiplex_original_network_id, {
3469                 "Multiplex stream original network id", "dvb-s2_table.multiplex.original_network_id",
3470                 FT_UINT16, BASE_DEC, NULL, 0x0,
3471                 NULL, HFILL}
3472         },
3473         {&hf_dvb_s2_table_multiplex_transport_descriptors_length, {
3474                 "Multiplex stream transport descriptors length", "dvb-s2_table.multiplex.transport_descriptors_length",
3475                 FT_UINT16, BASE_DEC, NULL, DVB_S2_TABLE_MULTIPLEX_TRANSPORT_DESC_LENGTH_MASK,
3476                 NULL, HFILL}
3477         },
3478 /* TDT */
3479         {&hf_dvb_s2_reserved_future_use, {
3480                 "Reserved for future use", "dvb-s2_table.reserved_future_use",
3481                 FT_UINT8, BASE_HEX, NULL, 0x40,
3482                 NULL, HFILL}
3483         },
3484         {&hf_dvb_s2_reserved_tdt, {
3485                 "Reserved", "dvb-s2_table.reserved",
3486                 FT_UINT8, BASE_HEX, NULL, 0x30,
3487                 NULL, HFILL}
3488         },
3489         {&hf_dvb_s2_tdt_date, {
3490                 "Date", "dvb-s2_table.date",
3491                 FT_UINT8, BASE_HEX, NULL, 0x0,
3492                 NULL, HFILL}
3493         },
3494         {&hf_dvb_s2_tdt_hour, {
3495                 "Hour", "dvb-s2_table.hour",
3496                 FT_UINT8, BASE_HEX, NULL, 0x0,
3497                 NULL, HFILL}
3498         },
3499         {&hf_dvb_s2_tdt_minute, {
3500                 "Minute", "dvb-s2_table.minute",
3501                 FT_UINT8, BASE_HEX, NULL, 0x0,
3502                 NULL, HFILL}
3503         },
3504         {&hf_dvb_s2_tdt_second, {
3505                 "Second", "dvb-s2_table.second",
3506                 FT_UINT8, BASE_HEX, NULL, 0x0,
3507                 NULL, HFILL}
3508         },
3509 /* MMT2 */
3510         {&hf_dvb_s2_table_svn_number, {
3511                 "Table svn number", "dvb-s2_table.svn_number",
3512                 FT_UINT16, BASE_DEC, NULL, 0x0,
3513                 NULL, HFILL}
3514         },
3515         {&hf_dvb_s2_table_svn_prefix_size, {
3516                 "Table svn prefix size", "dvb-s2_table.svn_prefix_size",
3517                 FT_UINT8, BASE_DEC, NULL, DVB_S2_TABLE_SVN_PREFIX_SIZE_MASK,
3518                 NULL, HFILL}
3519         },
3520         {&hf_dvb_s2_table_pt_count, {
3521                 "Table pt count", "dvb-s2_table.pt_count",
3522                 FT_UINT8, BASE_DEC, NULL, 0x0,
3523                 NULL, HFILL}
3524         },
3525         {&hf_dvb_s2_table_protocol, {
3526                 "Protocol", "dvb-s2_table.protocol",
3527                 FT_BYTES, BASE_NONE, NULL, 0x0,
3528                 NULL, HFILL}
3529         },
3530         {&hf_dvb_s2_table_pt_protocol_type, {
3531                 "Protocol type", "dvb-s2_table.pt.protocol_type",
3532                 FT_UINT16, BASE_HEX, NULL, 0x0,
3533                 NULL, HFILL}
3534         },
3535         {&hf_dvb_s2_table_pt_address_size, {
3536                 "Protocol address size", "dvb-s2_table.pt.address_size",
3537                 FT_UINT8, BASE_DEC, NULL, 0x0,
3538                 NULL, HFILL}
3539         },
3540         {&hf_dvb_s2_table_pt_mapping_sections, {
3541                 "Protocol mapping sections", "dvb-s2_table.pt.mapping_sections",
3542                 FT_UINT8, BASE_DEC, NULL, 0x0,
3543                 NULL, HFILL}
3544         },
3545         {&hf_dvb_s2_table_pt_mapping_section, {
3546                 "Mapping section", "dvb-s2_table.pt.mapping_section",
3547                 FT_BYTES, BASE_NONE, NULL, 0x0,
3548                 NULL, HFILL}
3549         },
3550         {&hf_dvb_s2_table_pt_ms_inclusion_start, {
3551                 "Mapping section inclusion start", "dvb-s2_table.pt.ms.inclusion_start",
3552                 FT_BYTES, BASE_NONE, NULL, 0x0,
3553                 NULL, HFILL}
3554         },
3555         {&hf_dvb_s2_table_pt_ms_inclusion_end, {
3556                 "Mapping section inclusion end", "dvb-s2_table.pt.ms.inclusion_end",
3557                 FT_BYTES, BASE_NONE, NULL, 0x0,
3558                 NULL, HFILL}
3559         },
3560         {&hf_dvb_s2_table_pt_ms_exclusions, {
3561                 "Mapping section exclusions", "dvb-s2_table.pt.ms.exclusions",
3562                 FT_UINT8, BASE_DEC, NULL, 0x0,
3563                 NULL, HFILL}
3564         },
3565         {&hf_dvb_s2_table_pt_ms_exclusion, {
3566                 "Exclusion", "dvb-s2_table.pt.ms.exclusion",
3567                 FT_BYTES, BASE_NONE, NULL, 0x0,
3568                 NULL, HFILL}
3569         },
3570         {&hf_dvb_s2_table_pt_ms_exclusion_start, {
3571                 "Exclusion start", "dvb-s2_table.pt.ms.exclusion.start",
3572                 FT_BYTES, BASE_NONE, NULL, 0x0,
3573                 NULL, HFILL}
3574         },
3575         {&hf_dvb_s2_table_pt_ms_exclusion_end, {
3576                 "Exclusion end", "dvb-s2_table.pt.ms.exclusion.end",
3577                 FT_BYTES, BASE_NONE, NULL, 0x0,
3578                 NULL, HFILL}
3579         },
3580         {&hf_dvb_s2_table_pt_ms_mac24_base, {
3581                 "Mapping section mac24 base", "dvb-s2_table.pt.ms.mac24_base",
3582                 FT_UINT24, BASE_HEX, NULL, 0x0,
3583                 NULL, HFILL}
3584         },
3585         {&hf_dvb_s2_table_pt_ms_mcast_prefix_size, {
3586                 "Mapping section multicast prefix size", "dvb-s2_table.pt.ms.mcast_prefix_size",
3587                 FT_UINT8, BASE_DEC, NULL, DVB_S2_TABLE_PT_MS_MCAST_PREFIX_SIZE_MASK,
3588                 NULL, HFILL}
3589         },
3590 
3591 /* Descriptors */
3592         {&hf_dvb_s2_table_descriptor, {
3593                 "Descriptor", "dvb-s2_table.descriptor",
3594                 FT_BYTES, BASE_NONE, NULL, 0x0,
3595                 NULL, HFILL}
3596         },
3597         {&hf_dvb_s2_table_desc_tag, {
3598                 "Descriptor tag", "dvb-s2_table.desc.tag",
3599                 FT_UINT8, BASE_HEX, VALS(table_desc_type), 0x0,
3600                 NULL, HFILL}
3601         },
3602         {&hf_dvb_s2_table_desc_length, {
3603                 "Descriptor length", "dvb-s2_table.desc.length",
3604                 FT_UINT8, BASE_DEC, NULL, 0x0,
3605                 NULL, HFILL}
3606         },
3607         {&hf_dvb_s2_table_nnd_char, {
3608                 "Name", "dvb-s2_table.desc.nnd_name",
3609                 FT_BYTES, BASE_NONE, NULL, 0x0,
3610                 NULL, HFILL}
3611         },
3612         {&hf_dvb_s2_table_ld_fm_id, {
3613                 "Forward Multiplex", "dvb-s2_table.desc.ld_fm_id",
3614                 FT_UINT16, BASE_HEX, NULL, 0x0,
3615                 NULL, HFILL}
3616         },
3617         {&hf_dvb_s2_table_ld_on_id, {
3618                 "Original network id", "dvb-s2_table.desc.ld_on_id",
3619                 FT_UINT16, BASE_HEX, NULL, 0x0,
3620                 NULL, HFILL}
3621         },
3622         {&hf_dvb_s2_table_ld_rm_id, {
3623                 "Return Multiplex", "dvb-s2_table.desc.ld_rm_id",
3624                 FT_UINT16, BASE_HEX, NULL, 0x0,
3625                 NULL, HFILL}
3626         },
3627         {&hf_dvb_s2_table_ld_service_id, {
3628                 "Service id", "dvb-s2_table.desc.ld_service_id",
3629                 FT_UINT16, BASE_HEX, NULL, 0x0,
3630                 NULL, HFILL}
3631         },
3632         {&hf_dvb_s2_table_ld_linkage_type, {
3633                 "Linkage type", "dvb-s2_table.desc.ld_linkage_type",
3634                 FT_UINT8, BASE_HEX, NULL, 0x0,
3635                 NULL, HFILL}
3636         },
3637         {&hf_dvb_s2_table_ld_ho_type, {
3638                 "Hand-over type", "dvb-s2_table.desc.ld_hand_over_type",
3639                 FT_UINT8, BASE_HEX, NULL, DVB_S2_TABLE_DESC_HAND_OVER_TYPE_MASK,
3640                 NULL, HFILL}
3641         },
3642         {&hf_dvb_s2_table_ld_reserved_future_use, {
3643                 "Reserved for future use", "dvb-s2_table.desc.ld_reserved_future_use",
3644                 FT_UINT8, BASE_HEX, NULL, DVB_S2_TABLE_DESC_RESERVED_FOR_FUTURE_USE_MASK,
3645                 NULL, HFILL}
3646         },
3647         {&hf_dvb_s2_table_ld_origin_type, {
3648                 "Origin type", "dvb-s2_table.desc.ld_origin_type",
3649                 FT_UINT8, BASE_HEX, NULL, DVB_S2_TABLE_DESC_ORIGIN_TYPE_MASK,
3650                 NULL, HFILL}
3651         },
3652         {&hf_dvb_s2_table_ld_network_id, {
3653                 "Network Id", "dvb-s2_table.desc.ld_network_id",
3654                 FT_UINT16, BASE_HEX, NULL, 0x0,
3655                 NULL, HFILL}
3656         },
3657         {&hf_dvb_s2_table_ld_initial_service_id, {
3658                 "Initial service Id", "dvb-s2_table.desc.ld_initial_service_id",
3659                 FT_UINT16, BASE_HEX, NULL, 0x0,
3660                 NULL, HFILL}
3661         },
3662         {&hf_dvb_s2_table_ld_target_event_id, {
3663                 "Target event id", "dvb-s2_table.desc.ld_target_event_id",
3664                 FT_UINT16, BASE_HEX, NULL, 0x0,
3665                 NULL, HFILL}
3666         },
3667         {&hf_dvb_s2_table_ld_target_listed, {
3668                 "Target listed", "dvb-s2_table.desc.ld_target_listed",
3669                 FT_UINT8, BASE_HEX, NULL, 0x80,
3670                 NULL, HFILL}
3671         },
3672         {&hf_dvb_s2_table_ld_event_simulcast, {
3673                 "Event simulcast", "dvb-s2_table.desc.ld_event_simulcast",
3674                 FT_UINT8, BASE_HEX, NULL, 0x40,
3675                 NULL, HFILL}
3676         },
3677         {&hf_dvb_s2_table_ld_reserved, {
3678                 "Reserved", "dvb-s2_table.desc.ld_reserved",
3679                 FT_UINT8, BASE_HEX, NULL, 0x3F,
3680                 NULL, HFILL}
3681         },
3682         {&hf_dvb_s2_table_ld_private_data, {
3683                 "Private data", "dvb-s2_table.desc.ld_private_data",
3684                 FT_BYTES, BASE_NONE, NULL, 0x0,
3685                 NULL, HFILL}
3686         },
3687         {&hf_dvb_s2_table_ld_population_id_loop_count, {
3688                 "Population id loop count", "dvb-s2_table.desc.ld_population_id_loop_count",
3689                 FT_UINT8, BASE_DEC, NULL, 0x0,
3690                 NULL, HFILL}
3691         },
3692         {&hf_dvb_s2_table_ld_population_id_base, {
3693                 "Population id base", "dvb-s2_table.desc.ld_population_id_base",
3694                 FT_UINT16, BASE_DEC, NULL, 0x0,
3695                 NULL, HFILL}
3696         },
3697         {&hf_dvb_s2_table_ld_population_id_mask, {
3698                 "Population id mask", "dvb-s2_table.desc.ld_population_id_mask",
3699                 FT_UINT16, BASE_DEC, NULL, 0x0,
3700                 NULL, HFILL}
3701         },
3702 /* Satellite Return Link Descriptor */
3703         {&hf_dvb_s2_table_srld_satellite_id, {
3704                 "Satellite Id", "dvb-s2_table.desc.srld_satellite_id",
3705                 FT_UINT8, BASE_DEC, NULL, 0x0,
3706                 NULL, HFILL}
3707         },
3708         {&hf_dvb_s2_table_srld_beam_id, {
3709                 "Beam Id", "dvb-s2_table.desc.srld_beam_id",
3710                 FT_UINT16, BASE_DEC, NULL, 0x0,
3711                 NULL, HFILL}
3712         },
3713         {&hf_dvb_s2_table_srld_gateway_id, {
3714                 "Gateway Id", "dvb-s2_table.desc.srld_gateway_id",
3715                 FT_UINT8, BASE_DEC, NULL, 0x0,
3716                 NULL, HFILL}
3717         },
3718         {&hf_dvb_s2_table_srld_reserved, {
3719                 "Reserved data", "dvb-s2_table.desc.srld_reserved",
3720                 FT_UINT8, BASE_DEC, NULL, 0x0,
3721                 NULL, HFILL}
3722         },
3723         {&hf_dvb_s2_table_srld_orbital_position, {
3724                 "Orbital position", "dvb-s2_table.desc.srld_orbital_position",
3725                 FT_UINT16, BASE_HEX, NULL, 0x0,
3726                 NULL, HFILL}
3727         },
3728         {&hf_dvb_s2_table_srld_west_east_flag, {
3729                 "West east flag", "dvb-s2_table.desc.srld_west_east_flag",
3730                 FT_UINT8, BASE_DEC, NULL, 0x01,
3731                 NULL, HFILL}
3732         },
3733         {&hf_dvb_s2_table_srld_superframe_sequence, {
3734                 "Superframe sequence", "dvb-s2_table.desc.srld_superframe_sequence",
3735                 FT_UINT8, BASE_DEC, NULL, 0x0,
3736                 NULL, HFILL}
3737         },
3738         {&hf_dvb_s2_table_srld_tx_frequency_offset, {
3739                 "Tx frequency offset", "dvb-s2_table.desc.srld_tx_frequency_offset",
3740                 FT_UINT24, BASE_DEC, NULL, 0x0,
3741                 NULL, HFILL}
3742         },
3743         {&hf_dvb_s2_table_srld_zero_frequency_offset, {
3744                 "Zero frequency offset", "dvb-s2_table.desc.srld_zero_frequency_offset",
3745                 FT_UINT24, BASE_DEC, NULL, 0x0,
3746                 NULL, HFILL}
3747         },
3748         {&hf_dvb_s2_table_srld_private_data, {
3749                 "Private data", "dvb-s2_table.desc.srld_private_data",
3750                 FT_BYTES, BASE_NONE, NULL, 0x0,
3751                 NULL, HFILL}
3752         },
3753 /* Logon Initialize Descriptor */
3754         {&hf_dvb_s2_table_lid_group_id, {
3755                 "Group Id", "dvb-s2_table.desc.lid_group_id",
3756                 FT_UINT8, BASE_DEC, NULL, 0x0,
3757                 NULL, HFILL}
3758         },
3759         {&hf_dvb_s2_table_lid_logon_id, {
3760                 "Logon Id", "dvb-s2_table.desc.lid_logon_id",
3761                 FT_UINT16, BASE_DEC, NULL, 0x0,
3762                 NULL, HFILL}
3763         },
3764         {&hf_dvb_s2_table_lid_continuous_carrier, {
3765                 "Continuous carrier", "dvb-s2_table.desc.lid_continuous_carrier",
3766                 FT_UINT8, BASE_HEX, NULL, 0x20,
3767                 NULL, HFILL}
3768         },
3769         {&hf_dvb_s2_table_lid_security_handshake, {
3770                 "Security handsake required", "dvb-s2_table.desc.lid_security_handshake",
3771                 FT_UINT8, BASE_HEX, NULL, 0x10,
3772                 NULL, HFILL}
3773         },
3774         {&hf_dvb_s2_table_lid_prefix_flag, {
3775                 "Prefix flag", "dvb-s2_table.desc.lid_prefix_flag",
3776                 FT_UINT8, BASE_HEX, NULL, 0x08,
3777                 NULL, HFILL}
3778         },
3779         {&hf_dvb_s2_table_lid_data_unit_label_flag, {
3780                 "Data unit label flag", "dvb-s2_table.desc.lid_data_unit_label_flag",
3781                 FT_UINT8, BASE_HEX, NULL, 0x04,
3782                 NULL, HFILL}
3783         },
3784         {&hf_dvb_s2_table_lid_mini_slot_flag, {
3785                 "Mini slot flag", "dvb-s2_table.desc.lid_mini_slot_flag",
3786                 FT_UINT8, BASE_HEX, NULL, 0x02,
3787                 NULL, HFILL}
3788         },
3789         {&hf_dvb_s2_table_lid_contention_based_mini_slot_flag, {
3790                 "Contention based mini slot flag", "dvb-s2_table.desc.lid_contention_based_mini_slot_flag",
3791                 FT_UINT8, BASE_HEX, NULL, 0x01,
3792                 NULL, HFILL}
3793         },
3794         {&hf_dvb_s2_table_lid_capacity_type_flag, {
3795                 "Capacity type flag", "dvb-s2_table.desc.lid_capacity_type_flag",
3796                 FT_UINT8, BASE_HEX, NULL, 0x40,
3797                 NULL, HFILL}
3798         },
3799         {&hf_dvb_s2_table_lid_traffic_burst_type, {
3800                 "Traffic burst type", "dvb-s2_table.desc.lid_traffic_burst_type",
3801                 FT_UINT8, BASE_HEX, NULL, 0x20,
3802                 NULL, HFILL}
3803         },
3804         {&hf_dvb_s2_table_lid_connectivity, {
3805                 "Connectivity", "dvb-s2_table.desc.lid_connectivity",
3806                 FT_UINT8, BASE_HEX, NULL, 0x10,
3807                 NULL, HFILL}
3808         },
3809         {&hf_dvb_s2_table_lid_return_vpi, {
3810                 "Return vpi", "dvb-s2_table.desc.lid_return_vpi",
3811                 FT_UINT8, BASE_DEC, NULL, 0x0,
3812                 NULL, HFILL}
3813         },
3814         {&hf_dvb_s2_table_lid_return_vci, {
3815                 "Return vci", "dvb-s2_table.desc.lid_return_vci",
3816                 FT_UINT16, BASE_DEC, NULL, 0x0,
3817                 NULL, HFILL}
3818         },
3819         {&hf_dvb_s2_table_lid_return_signalling_vpi, {
3820                 "Return signalling vpi", "dvb-s2_table.desc.lid_return_signalling_vpi",
3821                 FT_UINT8, BASE_DEC, NULL, 0x0,
3822                 NULL, HFILL}
3823         },
3824         {&hf_dvb_s2_table_lid_return_signalling_vci, {
3825                 "Return signalling vci", "dvb-s2_table.desc.lid_return_signalling_vci",
3826                 FT_UINT16, BASE_DEC, NULL, 0x0,
3827                 NULL, HFILL}
3828         },
3829         {&hf_dvb_s2_table_lid_forward_signalling_vpi, {
3830                 "Forward signalling vpi", "dvb-s2_table.desc.lid_forward_signalling_vpi",
3831                 FT_UINT8, BASE_DEC, NULL, 0x0,
3832                 NULL, HFILL}
3833         },
3834         {&hf_dvb_s2_table_lid_forward_signalling_vci, {
3835                 "Forward signalling vci", "dvb-s2_table.desc.lid_forward_signalling_vci",
3836                 FT_UINT16, BASE_DEC, NULL, 0x0,
3837                 NULL, HFILL}
3838         },
3839         {&hf_dvb_s2_table_lid_return_trf_pid, {
3840                 "Return trf pid", "dvb-s2_table.desc.lid_return_trf_pid",
3841                 FT_UINT16, BASE_DEC, NULL, 0x1FFF,
3842                 NULL, HFILL}
3843         },
3844         {&hf_dvb_s2_table_lid_return_ctrl_mngm_pid, {
3845                 "Return ctrl mngm pid", "dvb-s2_table.desc.lid_return_ctrl_mngm_pid",
3846                 FT_UINT16, BASE_DEC, NULL, 0x1FFF,
3847                 NULL, HFILL}
3848         },
3849         {&hf_dvb_s2_table_lid_cra_level, {
3850                 "Cra level", "dvb-s2_table.desc.lid_cra_level",
3851                 FT_UINT24, BASE_DEC, NULL, 0x0,
3852                 NULL, HFILL}
3853         },
3854         {&hf_dvb_s2_table_lid_vbdc_max, {
3855                 "VBDC max", "dvb-s2_table.desc.lid_vbdc_max",
3856                 FT_UINT16, BASE_DEC, NULL, 0x07FF,
3857                 NULL, HFILL}
3858         },
3859         {&hf_dvb_s2_table_lid_rbdc_max, {
3860                 "RBDC max", "dvb-s2_table.desc.lid_rbdc_max",
3861                 FT_UINT24, BASE_DEC, NULL, 0x0,
3862                 NULL, HFILL}
3863         },
3864         {&hf_dvb_s2_table_lid_rbdc_timeout, {
3865                 "RBDC timeout", "dvb-s2_table.desc.lid_rbdc_timeout",
3866                 FT_UINT16, BASE_DEC, NULL, 0x0,
3867                 NULL, HFILL}
3868         },
3869 /* Forward Interaction Path Descriptor */
3870         {&hf_dvb_s2_table_fipd_original_network_id, {
3871                 "Original network id", "dvb-s2_table.desc.fipd_original_network_id",
3872                 FT_UINT16, BASE_DEC, NULL, 0x0,
3873                 NULL, HFILL}
3874         },
3875         {&hf_dvb_s2_table_fipd_transport_stream_id, {
3876                 "Transport stream id", "dvb-s2_table.desc.fipd_transport_stream_id",
3877                 FT_UINT16, BASE_DEC, NULL, 0x0,
3878                 NULL, HFILL}
3879         },
3880         {&hf_dvb_s2_table_fipd_pid_loop_count, {
3881                 "PID loop count", "dvb-s2_table.desc.fipd_pid_loop_count",
3882                 FT_UINT8, BASE_DEC, NULL, 0x0F,
3883                 NULL, HFILL}
3884         },
3885         {&hf_dvb_s2_table_fipd_pid, {
3886                 "PID", "dvb-s2_table.desc.fipd_pid",
3887                 FT_UINT16, BASE_DEC, NULL, 0x1FFF,
3888                 NULL, HFILL}
3889         },
3890  /* Return Interaction Path Descriptor */
3891         {&hf_dvb_s2_table_ripd_continuous_carrier, {
3892                 "Continuous carrier", "dvb-s2_table.desc.ripd_continuous_carrier",
3893                 FT_UINT8, BASE_DEC, NULL, 0x10,
3894                 NULL, HFILL}
3895         },
3896         {&hf_dvb_s2_desc_network_routing, {
3897                 "Network routing", "dvb-s2_table.desc.ripd_network_routing",
3898                 FT_BYTES, BASE_NONE, NULL, 0x0,
3899                 NULL, HFILL}
3900         },
3901         {&hf_dvb_s2_table_ripd_network_routing_label_loop_count, {
3902                 "Network routing label loop count", "dvb-s2_table.desc.ripd_network_routing_label_loop_count",
3903                 FT_UINT8, BASE_DEC, NULL, 0x0F,
3904                 NULL, HFILL}
3905         },
3906         {&hf_dvb_s2_table_ripd_allocation_desallocation_flag, {
3907                 "Allocation desallocation flag", "dvb-s2_table.desc.network_touing.ripd_allocation_desallocation_flag",
3908                 FT_UINT8, BASE_DEC, NULL, 0x02,
3909                 NULL, HFILL}
3910         },
3911         {&hf_dvb_s2_table_ripd_pid_flag, {
3912                 "PID flag", "dvb-s2_table.desc.network_touing.ripd_pid_flag",
3913                 FT_UINT8, BASE_DEC, NULL, 0x01,
3914                 NULL, HFILL}
3915         },
3916         {&hf_dvb_s2_table_ripd_pid_loop_count, {
3917                 "PID loop count", "dvb-s2_table.desc.network_touing.ripd_pid_loop_count",
3918                 FT_UINT8, BASE_DEC, NULL, 0x0,
3919                 NULL, HFILL}
3920         },
3921         {&hf_dvb_s2_table_ripd_pid, {
3922                 "PID", "dvb-s2_table.desc.network_touing.ripd_pid",
3923                 FT_UINT16, BASE_DEC, NULL, 0x1FFF,
3924                 NULL, HFILL}
3925         },
3926         {&hf_dvb_s2_table_ripd_vpi_vci_flag, {
3927                 "VPI VCI flag", "dvb-s2_table.desc.network_touing.ripd_vpi_vci_flag",
3928                 FT_UINT8, BASE_DEC, NULL, 0x01,
3929                 NULL, HFILL}
3930         },
3931         {&hf_dvb_s2_table_ripd_vpi_vci_loop_count, {
3932                 "VPI VCI loop count", "dvb-s2_table.desc.network_touing.ripd_vpi_vci_loop_count",
3933                 FT_UINT8, BASE_DEC, NULL, 0x0,
3934                 NULL, HFILL}
3935         },
3936         {&hf_dvb_s2_table_ripd_vpi, {
3937                 "VPI", "dvb-s2_table.desc.network_touing.ripd_vpi",
3938                 FT_UINT8, BASE_DEC, NULL, 0x0,
3939                 NULL, HFILL}
3940         },
3941         {&hf_dvb_s2_table_ripd_vci, {
3942                 "VCI", "dvb-s2_table.desc.network_touing.ripd_vci",
3943                 FT_UINT16, BASE_DEC, NULL, 0x0,
3944                 NULL, HFILL}
3945         },
3946         {&hf_dvb_s2_table_ripd_route_id_flag, {
3947                 "Route id flag", "dvb-s2_table.desc.network_touing.ripd_route_id_flag",
3948                 FT_UINT8, BASE_DEC, NULL, 0x01,
3949                 NULL, HFILL}
3950         },
3951         {&hf_dvb_s2_table_ripd_route_id_loop_count, {
3952                 "Route id loop count", "dvb-s2_table.desc.network_touing.ripd_route_id_loop_count",
3953                 FT_UINT8, BASE_DEC, NULL, 0x01,
3954                 NULL, HFILL}
3955         },
3956         {&hf_dvb_s2_table_ripd_route_id, {
3957                 "Route id", "dvb-s2_table.desc.network_touing.ripd_route_id",
3958                 FT_UINT16, BASE_DEC, NULL, 0x0,
3959                 NULL, HFILL}
3960         },
3961         {&hf_dvb_s2_table_ripd_channel_id, {
3962                 "Channel id", "dvb-s2_table.desc.network_touing.ripd_channel_id",
3963                 FT_UINT16, BASE_DEC, NULL, 0x0,
3964                 NULL, HFILL}
3965         },
3966 /* Correction Control Descriptor */
3967         {&hf_dvb_s2_table_corcd_acq_response_timeout, {
3968                 "ACQ response timeout", "dvb-s2_table.desc.corcd_acq_response_timeout",
3969                 FT_UINT32, BASE_DEC, NULL, 0x0,
3970                 NULL, HFILL}
3971         },
3972         {&hf_dvb_s2_table_corcd_sync_response_timeout, {
3973                 "SYNC response timeout", "dvb-s2_table.desc.corcd_sync_response_timeout",
3974                 FT_UINT32, BASE_DEC, NULL, 0x0,
3975                 NULL, HFILL}
3976         },
3977         {&hf_dvb_s2_table_corcd_acq_max_losses, {
3978                 "ACQ max losses", "dvb-s2_table.desc.corcd_acq_max_losses",
3979                 FT_UINT8, BASE_DEC, NULL, 0x0,
3980                 NULL, HFILL}
3981         },
3982         {&hf_dvb_s2_table_corcd_sync_max_losses, {
3983                 "SYNC max losses", "dvb-s2_table.desc.corcd_sync_max_losses",
3984                 FT_UINT8, BASE_DEC, NULL, 0x0,
3985                 NULL, HFILL}
3986         },
3987 /* Contention Control Descriptor */
3988         {&hf_dvb_s2_table_concd_superframe_id, {
3989                 "Superframe id/sequence", "dvb-s2_table.desc.concd_superframe_id",
3990                 FT_UINT8, BASE_DEC, NULL, 0x0,
3991                 NULL, HFILL}
3992         },
3993         {&hf_dvb_s2_table_concd_csc_response_timeout, {
3994                 "CSC/Logon response timeout", "dvb-s2_table.desc.concd_csc_response_timeout",
3995                 FT_UINT32, BASE_DEC, NULL, 0x0,
3996                 NULL, HFILL}
3997         },
3998         {&hf_dvb_s2_table_concd_csc_max_losses, {
3999                 "CSC/Logon max losses", "dvb-s2_table.desc.concd_csc_max_losses",
4000                 FT_UINT8, BASE_DEC, NULL, 0x0,
4001                 NULL, HFILL}
4002         },
4003         {&hf_dvb_s2_table_concd_max_time_before_retry, {
4004                 "Max time before retry", "dvb-s2_table.desc.concd_max_time_before_retry",
4005                 FT_UINT32, BASE_DEC, NULL, 0x0,
4006                 NULL, HFILL}
4007         },
4008 /* Satellite Forward Link Descriptor */
4009         {&hf_dvb_s2_table_sfld_satellite_id, {
4010                 "Satellite ID", "dvb-s2_table.desc.sfld_satellite_id",
4011                 FT_UINT8, BASE_DEC, NULL, 0x0,
4012                 NULL, HFILL}
4013         },
4014         {&hf_dvb_s2_table_sfld_beam_id, {
4015                 "Beam ID", "dvb-s2_table.desc.sfld_beam_id",
4016                 FT_UINT16, BASE_DEC, NULL, 0x0,
4017                 NULL, HFILL}
4018         },
4019         {&hf_dvb_s2_table_sfld_ncc_id, {
4020                 "NCC ID", "dvb-s2_table.desc.sfld_ncc_id",
4021                 FT_UINT8, BASE_DEC, NULL, 0x0,
4022                 NULL, HFILL}
4023         },
4024         {&hf_dvb_s2_table_sfld_multiplex_usage, {
4025                 "Multiplex usage", "dvb-s2_table.desc.sfld_multiplex_usage",
4026                 FT_UINT8, BASE_DEC, NULL, 0xE0,
4027                 NULL, HFILL}
4028         },
4029         {&hf_dvb_s2_table_sfld_local_multiplex_id, {
4030                 "Local multiplex id", "dvb-s2_table.desc.sfld_local_multiplex_id",
4031                 FT_UINT8, BASE_DEC, NULL, 0x1F,
4032                 NULL, HFILL}
4033         },
4034         {&hf_dvb_s2_table_sfld_frequency, {
4035                 "Frequency", "dvb-s2_table.desc.sfld_frequency",
4036                 FT_INT32, BASE_DEC, NULL, 0x0,
4037                 NULL, HFILL}
4038         },
4039         {&hf_dvb_s2_table_sfld_orbital_position, {
4040                 "Orbital position", "dvb-s2_table.desc.sfld_orbital_position",
4041                 FT_UINT16, BASE_HEX, NULL, 0x0,
4042                 NULL, HFILL}
4043         },
4044         {&hf_dvb_s2_table_sfld_west_east_flag, {
4045                 "West east flag", "dvb-s2_table.desc.sfld_west_east_flag",
4046                 FT_UINT8, BASE_DEC, NULL, 0x80,
4047                 NULL, HFILL}
4048         },
4049         {&hf_dvb_s2_table_sfld_polarization, {
4050                 "Polarization", "dvb-s2_table.desc.sfld_polarization",
4051                 FT_UINT8, BASE_DEC, NULL, 0x60,
4052                 NULL, HFILL}
4053         },
4054         {&hf_dvb_s2_table_sfld_transmission_standard, {
4055                 "Transmission standard", "dvb-s2_table.desc.sfld_transmission_standard",
4056                 FT_UINT8, BASE_DEC, NULL, 0x18,
4057                 NULL, HFILL}
4058         },
4059         {&hf_dvb_s2_table_sfld_scrambling_sequence_selector, {
4060                 "Scrambling sequence selector", "dvb-s2_table.desc.sfld_scrambling_sequence_selector",
4061                 FT_UINT8, BASE_DEC, NULL, 0x04,
4062                 NULL, HFILL}
4063         },
4064         {&hf_dvb_s2_table_sfld_roll_off, {
4065                 "Roll-off", "dvb-s2_table.desc.sfld_roll_off",
4066                 FT_UINT8, BASE_DEC, NULL, 0x03,
4067                 NULL, HFILL}
4068         },
4069         {&hf_dvb_s2_table_sfld_symbol_rate, {
4070                 "Symbol rate", "dvb-s2_table.desc.sfld_symbol_rate",
4071                 FT_UINT24, BASE_DEC, NULL, 0x0,
4072                 NULL, HFILL}
4073         },
4074         {&hf_dvb_s2_table_sfld_fec_inner, {
4075                 "FEC Inner", "dvb-s2_table.desc.sfld_fec_inner",
4076                 FT_UINT8, BASE_DEC, NULL, 0xF0,
4077                 NULL, HFILL}
4078         },
4079         {&hf_dvb_s2_table_sfld_input_stream_identifier, {
4080                 "Input stream identifier", "dvb-s2_table.desc.sfld_input_stream_identifier",
4081                 FT_UINT8, BASE_DEC, NULL, 0x0,
4082                 NULL, HFILL}
4083         },
4084         {&hf_dvb_s2_table_sfld_reserved_for_forward_spreading, {
4085                 "Reserved for forward link spreading", "dvb-s2_table.desc.sfld_reserved_for_forward_spreading",
4086                 FT_UINT8, BASE_DEC, NULL, 0xE0,
4087                 NULL, HFILL}
4088         },
4089         {&hf_dvb_s2_table_sfld_scrambling_sequence_index, {
4090                 "Scrambling sequence index", "dvb-s2_table.desc.sfld_scrambling_sequence_index",
4091                 FT_UINT24, BASE_DEC, NULL, 0x03FFFF,
4092                 NULL, HFILL}
4093         },
4094         {&hf_dvb_s2_table_sfld_private_data, {
4095                 "Private data", "dvb-s2_table.desc.sfld_private_data",
4096                 FT_BYTES, BASE_NONE, NULL, 0x0,
4097                 NULL, HFILL}
4098         },
4099         {&hf_dvb_s2_table_sfld_ncr_private_data, {
4100                 "NCR (Private data)", "dvb-s2_table.desc.sfld_ncr_private_data",
4101                 FT_BYTES, BASE_NONE, NULL, 0x0,
4102                 NULL, HFILL}
4103         },
4104         {&hf_dvb_s2_table_sfld_ncr_base_private_data, {
4105                 "NCR BASE", "dvb-s2_table.desc.sfld_ncr_base_private_data",
4106                 FT_UINT64, BASE_DEC, NULL, 0x0,
4107                 NULL, HFILL}
4108         },
4109         {&hf_dvb_s2_table_sfld_ncr_ext_private_data, {
4110                 "NCR EXT", "dvb-s2_table.desc.sfld_ncr_ext_private_data",
4111                 FT_UINT16, BASE_DEC, NULL, 0x01FF,
4112                 NULL, HFILL}
4113         },
4114 /* Control assign descriptor */
4115         {&hf_dvb_s2_table_desc_sync_achieved_time_threshold, {
4116                 "Descriptor sync achieved time threshold", "dvb-s2_table.desc.sync_achieved_time_threshold",
4117                 FT_UINT8, BASE_DEC, NULL, 0x0,
4118                 NULL, HFILL}
4119         },
4120         {&hf_dvb_s2_table_desc_max_sync_tries, {
4121                 "Descriptor max sync tries", "dvb-s2_table.desc.max_sync_tries",
4122                 FT_UINT8, BASE_DEC, NULL, 0x0,
4123                 NULL, HFILL}
4124         },
4125         {&hf_dvb_s2_table_desc_sync_achieved_freq_threshold, {
4126                 "Descriptor sync achieved frequency threshold", "dvb-s2_table.desc.sync_achieved_freq_threshold",
4127                 FT_UINT16, BASE_DEC, NULL, 0x0,
4128                 NULL, HFILL}
4129         },
4130         {&hf_dvb_s2_table_desc_ctrl_start_superframe_count, {
4131                 "Descriptor control start superframe count", "dvb-s2_table.desc.control_start_superframe_count",
4132                 FT_UINT16, BASE_DEC, NULL, 0x0,
4133                 NULL, HFILL}
4134         },
4135         {&hf_dvb_s2_table_desc_ctrl_frame_nbr, {
4136                 "Descriptor control frame number", "dvb-s2_table.desc.control_frame_number",
4137                 FT_UINT8, BASE_DEC, NULL, 0x0,
4138                 NULL, HFILL}
4139         },
4140         {&hf_dvb_s2_table_desc_ctrl_repeat_period, {
4141                 "Descriptor control repeat period", "dvb-s2_table.desc.control_repeat_period",
4142                 FT_UINT16, BASE_DEC, NULL, 0x0,
4143                 NULL, HFILL}
4144         },
4145         {&hf_dvb_s2_table_desc_ctrl_timeslot_nbr, {
4146                 "Descriptor control timeslot number", "dvb-s2_table.desc.control_timeslot_number",
4147                 FT_UINT16, BASE_DEC, NULL, DVB_S2_TABLE_DESC_CTRL_TIMESLOT_NBR_MASK,
4148                 NULL, HFILL}
4149         },
4150         {&hf_dvb_s2_table_desc_sync_start_superframe, {
4151                 "Descriptor SYNC start superframe", "dvb-s2_table.desc.sync_start_superframe",
4152                 FT_UINT16, BASE_DEC, NULL, 0x0,
4153                 NULL, HFILL}
4154         },
4155         {&hf_dvb_s2_table_desc_sync_frame_nbr, {
4156                 "Descriptor SYNC frame number", "dvb-s2_table.desc.sync_frame_number",
4157                 FT_UINT8, BASE_DEC, NULL, DVB_S2_TABLE_DESC_SYNC_FRAME_NBR_MASK,
4158                 NULL, HFILL}
4159         },
4160         {&hf_dvb_s2_table_desc_sync_repeat_period, {
4161                 "Descriptor SYNC repeat period", "dvb-s2_table.desc.sync_repeat_period",
4162                 FT_UINT16, BASE_DEC, NULL, 0x0,
4163                 NULL, HFILL}
4164         },
4165         {&hf_dvb_s2_table_desc_sync_slot_nbr, {
4166                 "Descriptor SYNC timeslot number", "dvb-s2_table.desc.sync_timeslot_number",
4167                 FT_UINT16, BASE_DEC, NULL, DVB_S2_TABLE_DESC_CTRL_TIMESLOT_NBR_MASK,
4168                 NULL, HFILL}
4169         },
4170 /* Correction message descriptor */
4171         {&hf_dvb_s2_table_desc_time_correct_flag, {
4172                 "Descriptor time correction flag", "dvb-s2_table.desc.time_correct_flag",
4173                 FT_UINT8, BASE_HEX, NULL, DVB_S2_TABLE_DESC_TIME_CORRECT_FLAG_MASK,
4174                 NULL, HFILL}
4175         },
4176         {&hf_dvb_s2_table_desc_power_correct_flag, {
4177                 "Descriptor power correction flag", "dvb-s2_table.desc.power_correct_flag",
4178                 FT_UINT8, BASE_HEX, NULL, DVB_S2_TABLE_DESC_POWER_CORRECT_FLAG_MASK,
4179                 NULL, HFILL}
4180         },
4181         {&hf_dvb_s2_table_desc_freq_correct_flag, {
4182                 "Descriptor frequency correction flag", "dvb-s2_table.desc.freq_correct_flag",
4183                 FT_UINT8, BASE_HEX, NULL, DVB_S2_TABLE_DESC_FREQ_CORRECT_FLAG_MASK,
4184                 NULL, HFILL}
4185         },
4186         {&hf_dvb_s2_table_desc_slot_type, {
4187                 "Descriptor slot type", "dvb-s2_table.desc.slot_type",
4188                 FT_UINT8, BASE_HEX, VALS(table_timeslotContent), DVB_S2_TABLE_DESC_SLOT_TYPE_MASK,
4189                 NULL, HFILL}
4190         },
4191         {&hf_dvb_s2_table_desc_burst_time_scaling, {
4192                 "Descriptor burst time scaling", "dvb-s2_table.desc.burst_time_scaling",
4193                 FT_UINT8, BASE_DEC, NULL, DVB_S2_TABLE_DESC_BURST_TIME_SCALING_MASK,
4194                 NULL, HFILL}
4195         },
4196         {&hf_dvb_s2_table_desc_burst_time_correct, {
4197                 "Descriptor burst time correction", "dvb-s2_table.desc.burst_time_correct",
4198                 FT_INT8, BASE_DEC, NULL, 0x0,
4199                 NULL, HFILL}
4200         },
4201         {&hf_dvb_s2_table_desc_power_ctrl_flag, {
4202                 "Descriptor power control flag", "dvb-s2_table.desc.power_ctrl_flag",
4203                 FT_UINT8, BASE_HEX, NULL, DVB_S2_TABLE_DESC_POWER_CTRL_FLAG_MASK,
4204                 NULL, HFILL}
4205         },
4206         {&hf_dvb_s2_table_desc_power_correction, {
4207                 "Descriptor power correction", "dvb-s2_table.desc.power_correction",
4208                 FT_INT8, BASE_DEC, NULL, DVB_S2_TABLE_DESC_POWER_CORRECTION_MASK,
4209                 NULL, HFILL}
4210         },
4211         {&hf_dvb_s2_table_desc_power_esn0, {
4212                 "Descriptor EsN0", "dvb-s2_table.desc.esn0",
4213                 FT_INT8, BASE_DEC, NULL, DVB_S2_TABLE_DESC_POWER_CORRECTION_MASK,
4214                 NULL, HFILL}
4215         },
4216         {&hf_dvb_s2_table_desc_freq_correction, {
4217                 "Descriptor frequency correction", "dvb-s2_table.desc.freq_correction",
4218                 FT_INT16, BASE_DEC, NULL, 0x0,
4219                 NULL, HFILL}
4220         },
4221 /* Correction message extension descriptor */
4222         {&hf_dvb_s2_table_desc_slot_nbr, {
4223                 "Descriptor slot number", "dvb-s2_table.desc.slot_number",
4224                 FT_UINT16, BASE_DEC, NULL, 0x0,
4225                 NULL, HFILL}
4226         },
4227         {&hf_dvb_s2_table_desc_sf_sequence, {
4228                 "Superframe sequence", "dvb-s2_table.desc.cmed.sf.sequence",
4229                 FT_UINT8, BASE_HEX, NULL, 0x0,
4230                 NULL, HFILL}
4231         },
4232         {&hf_dvb_s2_table_desc_frame_number, {
4233                 "Frame number", "dvb-s2_table.desc.cmed.frame.number",
4234                 FT_UINT8, BASE_DEC, NULL, 0x0,
4235                 NULL, HFILL}
4236         },
4237 /* Logon response descriptor */
4238         {&hf_dvb_s2_table_desc_keep_id_after_logoff, {
4239                 "Descriptor keep identifiers after logoff", "dvb-s2_table.desc.keep_id_after_logoff",
4240                 FT_UINT8, BASE_HEX, NULL, DVB_S2_TABLE_DESC_KEEP_ID_AFTER_LOGOFF_MASK,
4241                 NULL, HFILL}
4242         },
4243         {&hf_dvb_s2_table_desc_power_ctrl_mode, {
4244                 "Descriptor power control mode", "dvb-s2_table.desc.power_ctrl_mode",
4245                 FT_UINT8, BASE_HEX, NULL, DVB_S2_TABLE_DESC_POWER_CTRLMODE_MASK,
4246                 NULL, HFILL}
4247         },
4248         {&hf_dvb_s2_table_desc_rcst_access_status, {
4249                 "Descriptor RCST access status", "dvb-s2_table.desc.rcst_access_status",
4250                 FT_UINT8, BASE_HEX, NULL, DVB_S2_TABLE_DESC_RCST_ACCESS_STATUS_MASK,
4251                 NULL, HFILL}
4252         },
4253         {&hf_dvb_s2_table_desc_logon_id, {
4254                 "Descriptor logon id", "dvb-s2_table.desc.logon_id",
4255                 FT_UINT16, BASE_HEX, NULL, 0x0,
4256                 NULL, HFILL}
4257         },
4258         {&hf_dvb_s2_table_desc_lowest_assign_id, {
4259                 "Descriptor lowest_assignment_id", "dvb-s2_table.desc.lowest_assign_id",
4260                 FT_UINT24, BASE_HEX, NULL, 0x0,
4261                 NULL, HFILL}
4262         },
4263         {&hf_dvb_s2_table_desc_assign_id_count, {
4264                 "Descriptor assignment id count", "dvb-s2_table.desc.assign_id_count",
4265                 FT_UINT8, BASE_HEX, NULL, DVB_S2_TABLE_DESC_ASSIGN_ID_COUNT_MASK,
4266                 NULL, HFILL}
4267         },
4268         {&hf_dvb_s2_table_desc_unicast_mac24_count, {
4269                 "Descriptor unicast_mac24_count", "dvb-s2_table.desc.unicast_mac24_count",
4270                 FT_UINT8, BASE_HEX, NULL, DVB_S2_TABLE_DESC_UNICAST_MAC24_COUNT_MASK,
4271                 NULL, HFILL}
4272         },
4273         {&hf_dvb_s2_table_mac24, {
4274                 "MAC24", "dvb-s2_table.desc.mac24",
4275                 FT_BYTES, BASE_NONE, NULL, 0x0,
4276                 NULL, HFILL}
4277         },
4278         {&hf_dvb_s2_table_mac24_prefix_size, {
4279                 "MAC24 prefix size", "dvb-s2_table.desc.mac24.prefix_size",
4280                 FT_UINT8, BASE_HEX, NULL, DVB_S2_TABLE_MAC24_PREFIX_SIZE_MASK,
4281                 NULL, HFILL}
4282         },
4283         {&hf_dvb_s2_table_mac24_unicast, {
4284                 "MAC24 unicast", "dvb-s2_table.mac24.unicast",
4285                 FT_UINT24, BASE_HEX, NULL, 0x0,
4286                 NULL, HFILL}
4287         },
4288         {&hf_dvb_s2_table_mac24_mcast_mapping_method, {
4289                 "MAC24 mcast mapping method", "dvb-s2_table.mac24.mcast_mapping_method",
4290                 FT_UINT8, BASE_HEX, NULL, DVB_S2_TABLE_MAC24_MAPPING_METHOD_MASK,
4291                 NULL, HFILL}
4292         },
4293         {&hf_dvb_s2_table_mac24_mcast_ip_version_ind_pres, {
4294                 "MAC24 mcast ip version indicator presence", "dvb-s2_table.mac24.mcast_ip_version_ind_pres",
4295                 FT_UINT8, BASE_HEX, NULL, DVB_S2_TABLE_MAC24_MCAST_IP_VERSION_IND_PRES_MASK,
4296                 NULL, HFILL}
4297         },
4298         {&hf_dvb_s2_table_mac24_mcast_synthesis_field_size, {
4299                 "MAC24 mcast synthesis field size", "dvb-s2_table.mac24.mcast_synthesis_field_size",
4300                 FT_UINT8, BASE_HEX, NULL, DVB_S2_TABLE_MAC24_MCAST_SYNTHESIS_FIELD_SIZE_MASK,
4301                 NULL, HFILL}
4302         },
4303         {&hf_dvb_s2_table_desc_default_svn_number, {
4304                 "Descriptor default svn number", "dvb-s2_table.desc.default_svn_number",
4305                 FT_UINT16, BASE_HEX, NULL, 0x0,
4306                 NULL, HFILL}
4307         },
4308         {&hf_dvb_s2_table_desc_reserved, {
4309                 "Descriptor reserved", "dvb-s2_table.desc.reserved",
4310                 FT_UINT8, BASE_HEX, NULL, 0x0,
4311                 NULL, HFILL}
4312         },
4313 /* Mobility Control descriptor */
4314         {&hf_dvb_s2_table_mc_command_value, {
4315                 "Descriptor command value", "dvb-s2_table.desc.mc_command_value",
4316                 FT_UINT16, BASE_HEX, VALS(table_mobility_command_value), 0x0,
4317                 NULL, HFILL}
4318         },
4319         {&hf_dvb_s2_table_mc_command_parameter, {
4320                 "Descriptor command parameter", "dvb-s2_table.desc.mc_command_parameter",
4321                 FT_UINT16, BASE_HEX, NULL, 0x0,
4322                 NULL, HFILL}
4323         },
4324 /* Lowest Software Version Descriptor */
4325         {&hf_dvb_s2_table_lsvd_group_count, {
4326                 "Descriptor Group count", "dvb-s2_table.desc.lsvd_group_count",
4327                 FT_UINT8, BASE_DEC, NULL, 0x0,
4328                 NULL, HFILL}
4329         },
4330         {&hf_dvb_s2_table_lsvd_oui, {
4331                 "Descriptor modem OUI", "dvb-s2_table.desc.lsvd_oui",
4332                 FT_UINT32, BASE_DEC, NULL, 0x00FFFFFF,
4333                 NULL, HFILL}
4334         },
4335         {&hf_dvb_s2_table_lsvd_mcast_address, {
4336                 "Descriptor multicast service address", "dvb-s2_table.desc.lsvd_mcast_address",
4337                 FT_UINT32, BASE_HEX, NULL, 0x0,
4338                 NULL, HFILL}
4339         },
4340         {&hf_dvb_s2_table_lsvd_mcast_port, {
4341                 "Descriptor multicast service port", "dvb-s2_table.desc.lsvd_mcast_port",
4342                 FT_UINT16, BASE_DEC, NULL, 0x0,
4343                 NULL, HFILL}
4344         },
4345         {&hf_dvb_s2_table_lsvd_version_field_length, {
4346                 "Descriptor version field length", "dvb-s2_table.desc.lsvd_version_field_length",
4347                 FT_UINT8, BASE_DEC, NULL, 0x0,
4348                 NULL, HFILL}
4349         },
4350         {&hf_dvb_s2_table_lsvd_version_bytes, {
4351                 "Descriptor version bytes", "dvb-s2_table.desc.lsvd_version_bytes",
4352                 FT_BYTES, BASE_NONE, NULL, 0x0,
4353                 NULL, HFILL}
4354         },
4355 /* Lower layer service descriptor */
4356         {&hf_dvb_s2_table_desc_default_ctrl_random_interval, {
4357                 "Descriptor default control randomization interval", "dvb-s2_table.desc.default_ctrl_random_interval",
4358                 FT_UINT8, BASE_HEX, NULL, 0x0,
4359                 NULL, HFILL}
4360         },
4361         {&hf_dvb_s2_table_desc_dynamic_rate_persistence, {
4362                 "Descriptor dynamic rate persistence", "dvb-s2_table.desc.dynamic_rate_persistence",
4363                 FT_UINT8, BASE_HEX, NULL, 0x0,
4364                 NULL, HFILL}
4365         },
4366         {&hf_dvb_s2_table_desc_volume_backlog_persistence, {
4367                 "Descriptor volume backlog persistence", "dvb-s2_table.desc.volume_backlog_persistence",
4368                 FT_UINT8, BASE_HEX, NULL, 0x0,
4369                 NULL, HFILL}
4370         },
4371         {&hf_dvb_s2_table_desc_lls_count, {
4372                 "Descriptor lower layer service count", "dvb-s2_table.desc.lower_layer_service_count",
4373                 FT_UINT8, BASE_HEX, NULL, DVB_S2_TABLE_DESC_LLS_COUNT_MASK,
4374                 NULL, HFILL}
4375         },
4376         {&hf_dvb_s2_table_desc_rc_count, {
4377                 "Descriptor rc count", "dvb-s2_table.desc.rc_count",
4378                 FT_UINT8, BASE_HEX, NULL, DVB_S2_TABLE_DESC_RC_COUNT_MASK,
4379                 NULL, HFILL}
4380         },
4381         {&hf_dvb_s2_table_desc_ra_ac_count, {
4382                 "Descriptor ra_ac count", "dvb-s2_table.desc.ra_ac_count",
4383                 FT_UINT8, BASE_HEX, NULL, DVB_S2_TABLE_DESC_RA_AC_COUNT_MASK,
4384                 NULL, HFILL}
4385         },
4386         {&hf_dvb_s2_table_lls, {
4387                 "lower layer service", "dvb-s2_table.lls",
4388                 FT_BYTES, BASE_NONE, NULL, 0x0,
4389                 NULL, HFILL}
4390         },
4391         {&hf_dvb_s2_table_lls_index, {
4392                 "lls index", "dvb-s2_table.lls.index",
4393                 FT_UINT8, BASE_HEX, NULL, DVB_S2_TABLE_LLS_INDEX_MASK,
4394                 NULL, HFILL}
4395         },
4396         {&hf_dvb_s2_table_lls_random_access, {
4397                 "lls random access", "dvb-s2_table.lls.random_access",
4398                 FT_UINT8, BASE_HEX, NULL, DVB_S2_TABLE_LLS_RANDOM_ACCESS_MASK,
4399                 NULL, HFILL}
4400         },
4401         {&hf_dvb_s2_table_lls_dedicated_access, {
4402                 "lls dedicated access", "dvb-s2_table.lls.dedicated_access",
4403                 FT_UINT8, BASE_HEX, NULL, DVB_S2_TABLE_LLS_DEDICATED_ACCESS_MASK,
4404                 NULL, HFILL}
4405         },
4406         {&hf_dvb_s2_table_lls_nominal_rc_index, {
4407                 "lls nominal rc index", "dvb-s2_table.lls.nominal_rc_index",
4408                 FT_UINT8, BASE_HEX, NULL, DVB_S2_TABLE_LLS_NOMINAL_RC_INDEX_MASK,
4409                 NULL, HFILL}
4410         },
4411         {&hf_dvb_s2_table_lls_nominal_da_ac_index, {
4412                 "lls nominal da_ac index", "dvb-s2_table.lls.nominal_da_ac_index",
4413                 FT_UINT8, BASE_HEX, NULL, DVB_S2_TABLE_LLS_NOMINAL_DA_AC_INDEX_MASK,
4414                 NULL, HFILL}
4415         },
4416         {&hf_dvb_s2_table_lls_conditional_demand_rc_map, {
4417                 "lls conditional demand rc map", "dvb-s2_table.lls.conditional_demand_rc_map",
4418                 FT_BYTES, BASE_NONE, NULL, 0x0,
4419                 NULL, HFILL}
4420         },
4421         {&hf_dvb_s2_table_lls_conditional_scheduler_da_ac_map, {
4422                 "lls conditional scheduler da ac map", "dvb-s2_table.lls.conditional_scheduler_da_ac_map",
4423                 FT_UINT16, BASE_HEX, NULL, 0x0,
4424                 NULL, HFILL}
4425         },
4426         {&hf_dvb_s2_table_lls_nominal_ra_ac_index, {
4427                 "lls nominal ra_ac index", "dvb-s2_table.lls.nominal_ra_ac_index",
4428                 FT_UINT8, BASE_HEX, NULL, DVB_S2_TABLE_LLS_NOMINAL_RA_AC_INDEX_MASK,
4429                 NULL, HFILL}
4430         },
4431         {&hf_dvb_s2_table_lls_conditional_scheduler_ra_ac_map, {
4432                 "lls nominal ra_ac map", "dvb-s2_table.lls.nominal_ra_ac_map",
4433                 FT_UINT8, BASE_HEX, NULL, 0x0,
4434                 NULL, HFILL}
4435         },
4436         {&hf_dvb_s2_table_rc, {
4437                 "request class", "dvb-s2_table.rc",
4438                 FT_BYTES, BASE_NONE, NULL, 0x0,
4439                 NULL, HFILL}
4440         },
4441         {&hf_dvb_s2_table_rc_index, {
4442                 "rc index", "dvb-s2_table.rc.index",
4443                 FT_UINT8, BASE_HEX, NULL, DVB_S2_TABLE_RC_INDEX_MASK,
4444                 NULL, HFILL}
4445         },
4446         {&hf_dvb_s2_table_rc_constant_assignment_provided, {
4447                 "rc constant assignment provided", "dvb-s2_table.rc.constant_assignment_provided",
4448                 FT_UINT8, BASE_HEX, NULL, DVB_S2_TABLE_RC_CONSTANT_ASSIGN_MASK,
4449                 NULL, HFILL}
4450         },
4451         {&hf_dvb_s2_table_rc_volume_allowed, {
4452                 "rc volume allowed", "dvb-s2_table.rc.volume_allowed",
4453                 FT_UINT8, BASE_HEX, NULL, DVB_S2_TABLE_RC_VOLUME_ALLOWED_MASK,
4454                 NULL, HFILL}
4455         },
4456         {&hf_dvb_s2_table_rc_rbdc_allowed, {
4457                 "rc rbdc allowed", "dvb-s2_table.rc.rbdc_allowed",
4458                 FT_UINT8, BASE_HEX, NULL, DVB_S2_TABLE_RC_RBDC_ALLOWED_MASK,
4459                 NULL, HFILL}
4460         },
4461         {&hf_dvb_s2_table_rc_maximum_service_rate, {
4462                 "rc maximum service rate", "dvb-s2_table.rc.maximum_service_rate",
4463                 FT_UINT16, BASE_DEC, NULL, 0x0,
4464                 NULL, HFILL}
4465         },
4466         {&hf_dvb_s2_table_rc_minimum_service_rate, {
4467                 "rc minimum service rate", "dvb-s2_table.rc.minimum_service_rate",
4468                 FT_UINT16, BASE_DEC, NULL, 0x0,
4469                 NULL, HFILL}
4470         },
4471         {&hf_dvb_s2_table_rc_constant_service_rate, {
4472                 "rc minimum constant rate", "dvb-s2_table.rc.constant_service_rate",
4473                 FT_UINT16, BASE_DEC, NULL, 0x0,
4474                 NULL, HFILL}
4475         },
4476         {&hf_dvb_s2_table_rc_maximum_backlog, {
4477                 "rc maximum_backlog", "dvb-s2_table.rc.maximum_backlog",
4478                 FT_UINT8, BASE_DEC, NULL, 0x0,
4479                 NULL, HFILL}
4480         },
4481         {&hf_dvb_s2_table_ra_ac, {
4482                 "random access allocation channel", "dvb-s2_table.ra_ac",
4483                 FT_BYTES, BASE_NONE, NULL, 0x0,
4484                 NULL, HFILL}
4485         },
4486         {&hf_dvb_s2_table_ra_ac_index, {
4487                 "ra_ac index", "dvb-s2_table.ra_ac.index",
4488                 FT_UINT8, BASE_HEX, NULL, DVB_S2_TABLE_RA_AC_INDEX_MASK,
4489                 NULL, HFILL}
4490         },
4491         {&hf_dvb_s2_table_ra_ac_max_unique_payload_per_block, {
4492                 "ra_ac max unique payload per block", "dvb-s2_table.ra_ac.max_unique_payload_per_block",
4493                 FT_UINT8, BASE_DEC, NULL, 0x0,
4494                 NULL, HFILL}
4495         },
4496         {&hf_dvb_s2_table_ra_ac_max_consecutive_block_accessed, {
4497                 "ra_ac max consecutive block accessed", "dvb-s2_table.ra_ac.max_consecutive_block_accessed",
4498                 FT_UINT8, BASE_DEC, NULL, 0x0,
4499                 NULL, HFILL}
4500         },
4501         {&hf_dvb_s2_table_ra_ac_min_idle_block, {
4502                 "ra_ac min idle block", "dvb-s2_table.ra_ac.min_idle_block",
4503                 FT_UINT8, BASE_DEC, NULL, 0x0,
4504                 NULL, HFILL}
4505         },
4506         {&hf_dvb_s2_table_ra_ac_defaults_field_size, {
4507                 "ra_ac defaults field size", "dvb-s2_table.ra_ac.default_field_size",
4508                 FT_UINT8, BASE_DEC, NULL, 0x0,
4509                 NULL, HFILL}
4510         },
4511         {&hf_dvb_s2_table_ra_ac_defaults_for_ra_load_control, {
4512                 "ra_ac defaults for ra load control", "dvb-s2_table.ra_ac.defaults_for_ra_load_control",
4513                 FT_BYTES, BASE_NONE, NULL, 0x0,
4514                 NULL, HFILL}
4515         },
4516         {&hf_dvb_s2_table_crc32, {
4517                 "Table crc32", "dvb-s2_table.crc32",
4518                 FT_UINT32, BASE_HEX, NULL, 0x0,
4519                 NULL, HFILL}
4520         }
4521     };
4522 
4523     static gint *ett_table[] = {
4524         &ett_dvb_s2_hdr_table,
4525         &ett_dvb_s2_hdr_table_sf,
4526         &ett_dvb_s2_hdr_table_network_routing,
4527         &ett_dvb_s2_hdr_table_sf_frame,
4528         &ett_dvb_s2_hdr_table_desc,
4529         &ett_dvb_s2_hdr_tbtp_frame,
4530         &ett_dvb_s2_hdr_tbtp_frame_btp,
4531         &ett_dvb_s2_hdr_table_frame,
4532         &ett_dvb_s2_hdr_table_frame_assign,
4533         &ett_dvb_s2_hdr_table_entry,
4534         &ett_dvb_s2_hdr_table_frametype,
4535         &ett_dvb_s2_hdr_table_frametype_section,
4536         &ett_dvb_s2_hdr_table_frame_ID,
4537         &ett_dvb_s2_hdr_table_frame_ID_timeslot,
4538         &ett_dvb_s2_hdr_table_mac24,
4539         &ett_dvb_s2_hdr_table_lls,
4540         &ett_dvb_s2_hdr_table_rc,
4541         &ett_dvb_s2_hdr_table_raac,
4542         &ett_dvb_s2_hdr_table_txmode,
4543         &ett_dvb_s2_hdr_table_txtype,
4544         &ett_dvb_s2_hdr_table_txtype_uwsegment,
4545         &ett_dvb_s2_hdr_table_txtype_ypattern,
4546         &ett_dvb_s2_hdr_table_txtype_wpattern,
4547         &ett_dvb_s2_hdr_table_txtype_uwsymbol,
4548         &ett_dvb_s2_hdr_table_satellite,
4549         &ett_dvb_s2_hdr_table_multiplex,
4550         &ett_dvb_s2_hdr_table_pt,
4551         &ett_dvb_s2_hdr_table_pt_ms,
4552         &ett_dvb_s2_hdr_table_pt_ms_exclusion,
4553     };
4554 
4555     static const enum_val_t rcs_version[] = {
4556         { "RCS",  "RCS protocol" , DVB_S2_RCS_TABLE_DECODING },
4557         { "RCS2", "RCS2 protocol", DVB_S2_RCS2_TABLE_DECODING },
4558         { NULL, NULL, 0 }
4559     };
4560 
4561     proto_dvb_s2_table = proto_register_protocol("DVB-S2 Signalization Table", "DVB-S2-TABLE", "dvb-s2_table");
4562     register_dissector("dvb-s2_table", dissect_dvb_s2_table, proto_dvb_s2_table);
4563 
4564     proto_register_field_array(proto_dvb_s2_table, hf_table, array_length(hf_table));
4565     proto_register_subtree_array(ett_table, array_length(ett_table));
4566 
4567     dvb_s2_table_module = prefs_register_protocol(proto_dvb_s2_table, proto_reg_handoff_dvb_s2_table);
4568 
4569     prefs_register_enum_preference(dvb_s2_table_module, "rcs_protocol",
4570                                    "defines RCS protocol version",
4571                                    "defines the RCS protocol version used in table dissection",
4572                                    &dvb_s2_rcs_version,
4573                                    rcs_version, FALSE);
4574 }
4575 
proto_reg_handoff_dvb_s2_table(void)4576 void proto_reg_handoff_dvb_s2_table(void)
4577 {
4578 
4579 }
4580 
4581 /*
4582  * Editor modelines  -  http://www.wireshark.org/tools/modelines.html
4583  *
4584  * Local variables:
4585  * c-basic-offset: 4
4586  * tab-width: 8
4587  * indent-tabs-mode: nil
4588  * End:
4589  *
4590  * vi: set shiftwidth=4 tabstop=8 expandtab:
4591  * :indentSize=4:tabSize=8:noTabs=true:
4592  */
4593