Revert "TODO epan/dissectors/asn1/kerberos/packet-kerberos-template.c new GSS flags"
[wireshark-sm.git] / epan / dissectors / packet-tetra.c
blob649d1a9387fb7b5130b616d726081c2b6e03c3cf
1 /* Do not modify this file. Changes will be overwritten. */
2 /* Generated automatically by the ASN.1 to Wireshark dissector compiler */
3 /* packet-tetra.c */
4 /* asn2wrs.py -u -q -L -p tetra -c ./tetra.cnf -s ./packet-tetra-template -D . -O ../.. tetra.asn */
6 /* packet-tetra.c
7 * Routines for TETRA packet dissection
9 * Copyright (c) 2007 - 2011 Professional Mobile Communication Research Group,
10 * Beijing Institute of Technology, China
11 * Copyright (c) 2011 Holger Hans Peter Freyther
13 * Wireshark - Network traffic analyzer
14 * By Gerald Combs <gerald@wireshark.org>
15 * Copyright 1998 Gerald Combs
17 * SPDX-License-Identifier: GPL-2.0-or-later
19 * REF: ETSI EN 300 392-2 V3.2.1
22 #include "config.h"
24 #include <epan/packet.h>
25 #include <epan/expert.h>
26 #include <epan/prefs.h>
27 #include <epan/oids.h>
28 #include <epan/conversation.h>
29 #include <epan/asn1.h>
30 #include <wsutil/array.h>
32 #include "packet-per.h"
33 #include "packet-tetra.h"
35 #define PROTO_TAG_tetra "TETRA"
37 void proto_register_tetra(void);
38 void proto_reg_handoff_tetra(void);
40 /* Wireshark ID of the tetra protocol */
41 static int proto_tetra;
43 static dissector_handle_t tetra_handle;
45 #define TETRA_UDP_PORT 7074 /* Not IANA assigned */
47 /* Whether the capture data include carrier numbers */
48 static bool include_carrier_number = true;
50 /* The following hf_* variables are used to hold the Wireshark IDs of
51 * our header fields; they are filled out when we call
52 * proto_register_field_array() in proto_register_tetra()
54 /** Kts attempt at defining the protocol */
55 static int hf_tetra;
56 static int hf_tetra_header;
57 static int hf_tetra_channels;
58 static int hf_tetra_channel1;
59 static int hf_tetra_channel2;
60 static int hf_tetra_channel3;
61 static int hf_tetra_txreg;
62 static int hf_tetra_timer;
63 static int hf_tetra_pdu;
64 static int hf_tetra_rvstr;
65 static int hf_tetra_carriernumber;
66 static int hf_tetra_rxchannel1;
67 static int hf_tetra_rxchannel2;
68 static int hf_tetra_rxchannel3;
69 static int hf_tetra_crc;
70 static int hf_tetra_len0;
72 static int hf_tetra_AACH_PDU; /* AACH */
73 static int hf_tetra_BSCH_PDU; /* BSCH */
74 static int hf_tetra_BNCH_PDU; /* BNCH */
75 static int hf_tetra_MAC_ACCESS_PDU; /* MAC_ACCESS */
76 static int hf_tetra_MAC_DATA_PDU; /* MAC_DATA */
77 static int hf_tetra_MAC_FRAG_PDU; /* MAC_FRAG */
78 static int hf_tetra_MAC_FRAG120_PDU; /* MAC_FRAG120 */
79 static int hf_tetra_MAC_END_UPLINK_PDU; /* MAC_END_UPLINK */
80 static int hf_tetra_MAC_END_UP114_PDU; /* MAC_END_UP114 */
81 static int hf_tetra_MAC_END_HU_PDU; /* MAC_END_HU */
82 static int hf_tetra_MAC_END_DOWNLINK_PDU; /* MAC_END_DOWNLINK */
83 static int hf_tetra_MAC_END_DOWN111_PDU; /* MAC_END_DOWN111 */
84 static int hf_tetra_MAC_RESOURCE_PDU; /* MAC_RESOURCE */
85 static int hf_tetra_MAC_ACCESS_DEFINE_PDU; /* MAC_ACCESS_DEFINE */
86 static int hf_tetra_function; /* INTEGER_0_3 */
87 static int hf_tetra_field1; /* INTEGER_0_63 */
88 static int hf_tetra_field2; /* INTEGER_0_63 */
89 static int hf_tetra_system_code; /* System_Code */
90 static int hf_tetra_colour_code; /* Colour_Code */
91 static int hf_tetra_timeslot_number; /* Timeslot_Number */
92 static int hf_tetra_frame_number; /* Frame_Number */
93 static int hf_tetra_multiple_frame_number; /* Multiple_Frame_Number */
94 static int hf_tetra_sharing_mod; /* Sharing_Mod */
95 static int hf_tetra_ts_reserved_frames; /* TS_Reserved_Frames */
96 static int hf_tetra_u_plane_dtx; /* U_Plane_DTX */
97 static int hf_tetra_frame_18_extension; /* Frame_18_Extension */
98 static int hf_tetra_reserved; /* Reserved */
99 static int hf_tetra_tm_sdu; /* MLE_Sync */
100 static int hf_tetra_mcc; /* INTEGER_0_1023 */
101 static int hf_tetra_mnc; /* INTEGER_0_16383 */
102 static int hf_tetra_neighbour_cell_broadcast; /* INTEGER_0_3 */
103 static int hf_tetra_cell_service_level; /* INTEGER_0_3 */
104 static int hf_tetra_late_entry_information; /* INTEGER_0_1 */
105 static int hf_tetra_pdu_type; /* INTEGER_0_3 */
106 static int hf_tetra_broadcast_type; /* INTEGER_0_3 */
107 static int hf_tetra_main_carrier; /* INTEGER_0_4095 */
108 static int hf_tetra_frequency_band; /* INTEGER_0_15 */
109 static int hf_tetra_offset; /* Offset */
110 static int hf_tetra_duplex_spacing; /* INTEGER_0_7 */
111 static int hf_tetra_reverse_operation; /* Reverse_Operation */
112 static int hf_tetra_sencond_ctl_carrier; /* Sencond_Ctl_Carrier */
113 static int hf_tetra_ms_txpwr_max_cell; /* MS_TXPWR_MAX_CELL */
114 static int hf_tetra_rxlev_access_min; /* RXLEV_ACCESS_MIN */
115 static int hf_tetra_access_parameter; /* ACCESS_PARAMETER */
116 static int hf_tetra_radio_downlink_timeout; /* RADIO_DOWNLINK_TIMEOUT */
117 static int hf_tetra_hyperframe_or_cck; /* T_hyperframe_or_cck */
118 static int hf_tetra_hyperframe; /* INTEGER_0_65535 */
119 static int hf_tetra_cckid; /* INTEGER_0_65535 */
120 static int hf_tetra_optional_params; /* T_optional_params */
121 static int hf_tetra_even_multiframe; /* TS_COMMON_FRAMES */
122 static int hf_tetra_odd_multiframe; /* TS_COMMON_FRAMES */
123 static int hf_tetra_access_a_code; /* Default_Code_A */
124 static int hf_tetra_extend_service; /* Extended_Services_Broadcast */
125 static int hf_tetra_la; /* INTEGER_0_16383 */
126 static int hf_tetra_subscriber_class; /* Subscriber_class */
127 static int hf_tetra_registriation; /* INTEGER_0_1 */
128 static int hf_tetra_de_registration; /* INTEGER_0_1 */
129 static int hf_tetra_priority_cell; /* INTEGER_0_1 */
130 static int hf_tetra_minimum_mode_service; /* INTEGER_0_1 */
131 static int hf_tetra_migration; /* INTEGER_0_1 */
132 static int hf_tetra_system_wide_service; /* INTEGER_0_1 */
133 static int hf_tetra_tetra_voice_service; /* INTEGER_0_1 */
134 static int hf_tetra_circuit_mode_data_service; /* INTEGER_0_1 */
135 static int hf_tetra_reserved_01; /* INTEGER_0_1 */
136 static int hf_tetra_sndcp_service; /* INTEGER_0_1 */
137 static int hf_tetra_air_interface_encryption; /* INTEGER_0_1 */
138 static int hf_tetra_advanced_link_support; /* INTEGER_0_1 */
139 static int hf_tetra_frame1; /* FRAME */
140 static int hf_tetra_frame2; /* FRAME */
141 static int hf_tetra_frame3; /* FRAME */
142 static int hf_tetra_frame4; /* FRAME */
143 static int hf_tetra_frame5; /* FRAME */
144 static int hf_tetra_frame6; /* FRAME */
145 static int hf_tetra_frame7; /* FRAME */
146 static int hf_tetra_frame8; /* FRAME */
147 static int hf_tetra_frame9; /* FRAME */
148 static int hf_tetra_frame10; /* FRAME */
149 static int hf_tetra_frame11; /* FRAME */
150 static int hf_tetra_frame12; /* FRAME */
151 static int hf_tetra_frame13; /* FRAME */
152 static int hf_tetra_frame14; /* FRAME */
153 static int hf_tetra_frame15; /* FRAME */
154 static int hf_tetra_frame16; /* FRAME */
155 static int hf_tetra_frame17; /* FRAME */
156 static int hf_tetra_frame18; /* FRAME */
157 static int hf_tetra_imm; /* IMM */
158 static int hf_tetra_wt; /* WT */
159 static int hf_tetra_nu; /* NU */
160 static int hf_tetra_frame_len_factor; /* Frame_Len_Factor */
161 static int hf_tetra_timeslot_pointer; /* Timeslot_Pointer */
162 static int hf_tetra_min_pdu_priority; /* Min_Pdu_Priority */
163 static int hf_tetra_security_information; /* INTEGER_0_255 */
164 static int hf_tetra_sds_tl_addressing_method; /* SDS_TL_Addressing_Method */
165 static int hf_tetra_gck_supported; /* INTEGER_0_1 */
166 static int hf_tetra_section; /* T_section */
167 static int hf_tetra_present_1; /* PRESENT1 */
168 static int hf_tetra_present_2; /* INTEGER_0_127 */
169 static int hf_tetra_present_3; /* INTEGER_0_127 */
170 static int hf_tetra_present_4; /* INTEGER_0_127 */
171 static int hf_tetra_data_priority_supported; /* Data_Priority_Supported */
172 static int hf_tetra_reserved_02; /* INTEGER_0_7 */
173 static int hf_tetra_section_2_information; /* Section_Information */
174 static int hf_tetra_section_3_information; /* Section_Information */
175 static int hf_tetra_section_4_information; /* Section_Information */
176 static int hf_tetra_pdu_type_01; /* INTEGER_0_1 */
177 static int hf_tetra_fill_bit_indication; /* Fill_Bit_Indication */
178 static int hf_tetra_encrypted_flag; /* Encrypted_Flag */
179 static int hf_tetra_address; /* Address */
180 static int hf_tetra_data; /* T_data */
181 static int hf_tetra_sdu1; /* U_LLC_PDU */
182 static int hf_tetra_sdu2; /* ComplexSDU */
183 static int hf_tetra_ssi; /* INTEGER_0_16777215 */
184 static int hf_tetra_eventLabel; /* INTEGER_0_1023 */
185 static int hf_tetra_ussi; /* INTEGER_0_16777215 */
186 static int hf_tetra_smi; /* INTEGER_0_16777215 */
187 static int hf_tetra_bl_adata; /* U_BL_ADATA */
188 static int hf_tetra_bl_data; /* U_BL_DATA */
189 static int hf_tetra_bl_udata; /* U_MLE_PDU */
190 static int hf_tetra_bl_ack; /* U_BL_ACK */
191 static int hf_tetra_bl_adata_fcs; /* U_BL_ADATA_FCS */
192 static int hf_tetra_bl_data_fcs; /* U_BL_DATA_FCS */
193 static int hf_tetra_bl_udata_fcs; /* U_MLE_PDU_FCS */
194 static int hf_tetra_bl_ack_fcs; /* U_BL_ACK_FCS */
195 static int hf_tetra_al_setup; /* NULL */
196 static int hf_tetra_al_data; /* NULL */
197 static int hf_tetra_al_udata; /* NULL */
198 static int hf_tetra_al_ack; /* NULL */
199 static int hf_tetra_al_reconnect; /* NULL */
200 static int hf_tetra_reserve1; /* NULL */
201 static int hf_tetra_reserve2; /* NULL */
202 static int hf_tetra_al_disc; /* NULL */
203 static int hf_tetra_nr; /* INTEGER_0_1 */
204 static int hf_tetra_tl_sdu; /* U_MLE_PDU */
205 static int hf_tetra_fcs; /* OCTET_STRING_SIZE_4 */
206 static int hf_tetra_u_mle_pdu; /* U_MLE_PDU */
207 static int hf_tetra_ns; /* INTEGER_0_1 */
208 static int hf_tetra_u_mle_reserved1; /* NULL */
209 static int hf_tetra_mm; /* U_MM_PDU */
210 static int hf_tetra_cmce; /* U_CMCE_PDU */
211 static int hf_tetra_u_mle_reserved2; /* NULL */
212 static int hf_tetra_sndcp; /* NULL */
213 static int hf_tetra_mle; /* UMLE_PDU */
214 static int hf_tetra_tetra_management_entity_protocol; /* NULL */
215 static int hf_tetra_u_mle_reserved3; /* NULL */
216 static int hf_tetra_lengthIndicationOrCapacityRequest; /* T_lengthIndicationOrCapacityRequest */
217 static int hf_tetra_lengthIndication; /* LengthIndication */
218 static int hf_tetra_capacityRequest; /* FRAG */
219 static int hf_tetra_tm_sdu_01; /* U_LLC_PDU */
220 static int hf_tetra_frag; /* Frag1 */
221 static int hf_tetra_reservation_requirement; /* SLOT_APPLY */
222 static int hf_tetra_lengthIndicationOrCapacityRequest_01; /* T_lengthIndicationOrCapacityRequest_01 */
223 static int hf_tetra_lengthIndication_01; /* LengthIndicationMacData */
224 static int hf_tetra_capacityRequest_01; /* FRAG6 */
225 static int hf_tetra_sub_type; /* INTEGER_0_1 */
226 static int hf_tetra_tm_sdu_02; /* BIT_STRING_SIZE_264 */
227 static int hf_tetra_tm_sdu_03; /* BIT_STRING_SIZE_120 */
228 static int hf_tetra_lengthInd_ReservationReq; /* LengthIndOrReservationReq */
229 static int hf_tetra_tm_sdu_04; /* BIT_STRING_SIZE_258 */
230 static int hf_tetra_pdu_subtype; /* INTEGER_0_1 */
231 static int hf_tetra_tm_sdu_05; /* BIT_STRING_SIZE_114 */
232 static int hf_tetra_lengthInd_ReservationReq_01; /* T_lengthInd_ReservationReq */
233 static int hf_tetra_lengthInd; /* LengthIndMacHu */
234 static int hf_tetra_tm_sdu_06; /* BIT_STRING_SIZE_85 */
235 static int hf_tetra_position_of_grant; /* Position_Of_Grant */
236 static int hf_tetra_lengthIndication_02; /* LengthIndicationMacEndDl */
237 static int hf_tetra_slot_granting; /* T_slot_granting */
238 static int hf_tetra_none; /* NULL */
239 static int hf_tetra_slot_granting_param; /* SlotGranting */
240 static int hf_tetra_channel_allocation; /* T_channel_allocation */
241 static int hf_tetra_channel_allocation_element; /* ChannelAllocation */
242 static int hf_tetra_tm_sdu_07; /* BIT_STRING_SIZE_255 */
243 static int hf_tetra_capacity_allocation; /* Capacity_Allocation */
244 static int hf_tetra_granting_delay; /* Granting_delay */
245 static int hf_tetra_allocation_type; /* T_allocation_type */
246 static int hf_tetra_timeslot_assigned; /* Timeslot_Assigned */
247 static int hf_tetra_up_down_assigned; /* T_up_down_assigned */
248 static int hf_tetra_clch_permission; /* CLCH_permission */
249 static int hf_tetra_cell_change; /* Cell_change_flag */
250 static int hf_tetra_carrier_number; /* INTEGER_0_4095 */
251 static int hf_tetra_extend_carrier_flag; /* T_extend_carrier_flag */
252 static int hf_tetra_extended; /* Extended_carrier_flag */
253 static int hf_tetra_monitoring_pattern; /* T_monitoring_pattern */
254 static int hf_tetra_one; /* Monitoring_pattern */
255 static int hf_tetra_none1; /* NULL */
256 static int hf_tetra_none2; /* NULL */
257 static int hf_tetra_none3; /* NULL */
258 static int hf_tetra_offset_01; /* INTEGER_0_3 */
259 static int hf_tetra_reverse_operation_01; /* T_reverse_operation */
260 static int hf_tetra_pdu_type_02; /* INTEGER_0_7 */
261 static int hf_tetra_fill_bit_ind; /* BOOLEAN */
262 static int hf_tetra_position_of_grant_01; /* INTEGER_0_1 */
263 static int hf_tetra_slot_granting_01; /* T_slot_granting_01 */
264 static int hf_tetra_channel_allocation_01; /* T_channel_allocation_01 */
265 static int hf_tetra_tm_sdu_08; /* BIT_STRING_SIZE_111 */
266 static int hf_tetra_encryption_mode; /* INTEGER_0_3 */
267 static int hf_tetra_access_ack; /* T_access_ack */
268 static int hf_tetra_lengthIndication_03; /* LengthIndicationMacResource */
269 static int hf_tetra_address_01; /* AddressMacResource */
270 static int hf_tetra_power_control; /* T_power_control */
271 static int hf_tetra_powerParameters; /* PowerControl */
272 static int hf_tetra_slot_granting_02; /* T_slot_granting_02 */
273 static int hf_tetra_channel_allocation_02; /* T_channel_allocation_02 */
274 static int hf_tetra_tm_sdu_09; /* D_LLC_PDU */
275 static int hf_tetra_null_pdu; /* NULL */
276 static int hf_tetra_ssi_01; /* SSI_NEED */
277 static int hf_tetra_eventLabel_01; /* EVENT_NEED */
278 static int hf_tetra_ussi_01; /* USSI_NEED */
279 static int hf_tetra_smi_01; /* SMI_NEED */
280 static int hf_tetra_ssi_eventLabel; /* SSI_EVENT_NEED */
281 static int hf_tetra_ssi_usage_maker; /* SSI_USAGE_NEED */
282 static int hf_tetra_smi_eventLabel; /* SMI_EVENT_NEED */
283 static int hf_tetra_other; /* OTHER_DATA */
284 static int hf_tetra_eventlabel; /* INTEGER_0_1023 */
285 static int hf_tetra_ventlabel; /* INTEGER_0_1023 */
286 static int hf_tetra_usage_maker; /* INTEGER_0_63 */
287 static int hf_tetra_smi_eventlabel; /* BIT_STRING_SIZE_34 */
288 static int hf_tetra_broadcast_channel; /* INTEGER_0_1 */
289 static int hf_tetra_access_code; /* INTEGER_0_3 */
290 static int hf_tetra_imm_01; /* INTEGER_0_15 */
291 static int hf_tetra_wt_01; /* INTEGER_0_15 */
292 static int hf_tetra_nu_01; /* INTEGER_0_15 */
293 static int hf_tetra_frame_len_factor_01; /* INTEGER_0_1 */
294 static int hf_tetra_timeslot_pointer_01; /* INTEGER_0_15 */
295 static int hf_tetra_min_priority; /* INTEGER_0_7 */
296 static int hf_tetra_optional_field; /* T_optional_field */
297 static int hf_tetra_class_bitmap; /* INTEGER_0_65535 */
298 static int hf_tetra_gssi; /* INTEGER_0_33554431 */
299 static int hf_tetra_reserved_03; /* NULL */
300 static int hf_tetra_filler_bits; /* INTEGER_0_7 */
301 static int hf_tetra_bl_adata_01; /* D_BL_ADATA */
302 static int hf_tetra_bl_data_01; /* D_BL_DATA */
303 static int hf_tetra_bl_udata_01; /* D_MLE_PDU */
304 static int hf_tetra_bl_ack_01; /* D_BL_ACK */
305 static int hf_tetra_bl_adata_fcs_01; /* D_BL_ADATA_FCS */
306 static int hf_tetra_bl_data_fcs_01; /* D_BL_DATA_FCS */
307 static int hf_tetra_bl_udata_fcs_01; /* D_MLE_PDU_FCS */
308 static int hf_tetra_bl_ack_fcs_01; /* D_BL_ACK_FCS */
309 static int hf_tetra_tl_sdu_01; /* D_MLE_PDU */
310 static int hf_tetra_d_mle_pdu; /* D_MLE_PDU */
311 static int hf_tetra_mm_01; /* D_MM_PDU */
312 static int hf_tetra_cmce_01; /* D_CMCE_PDU */
313 static int hf_tetra_mle_01; /* DMLE_PDU */
314 static int hf_tetra_u_prepare; /* U_PREPARE */
315 static int hf_tetra_umle_reserved1; /* NULL */
316 static int hf_tetra_umle_reserved2; /* NULL */
317 static int hf_tetra_umle_reserved3; /* NULL */
318 static int hf_tetra_u_restore; /* U_RESTORE */
319 static int hf_tetra_umle_reserved4; /* NULL */
320 static int hf_tetra_umle_reserved5; /* NULL */
321 static int hf_tetra_umle_reserved6; /* NULL */
322 static int hf_tetra_d_new_cell; /* D_NEW_CELL */
323 static int hf_tetra_d_prepare_fail; /* D_PREPARE_FAIL */
324 static int hf_tetra_d_nwrk_broadcast; /* D_NWRK_BRDADCAST */
325 static int hf_tetra_dmle_reserved1; /* NULL */
326 static int hf_tetra_d_restore_ack; /* D_RESTORE_ACK */
327 static int hf_tetra_d_restore_fail; /* D_RESTORE_FAIL */
328 static int hf_tetra_dmle_reserved2; /* NULL */
329 static int hf_tetra_dmle_reserved3; /* NULL */
330 static int hf_tetra_optional_elements; /* T_optional_elements */
331 static int hf_tetra_no_type2; /* NULL */
332 static int hf_tetra_type2_parameters; /* T_type2_parameters */
333 static int hf_tetra_cell_number; /* T_cell_number */
334 static int hf_tetra_cell_number_01; /* INTEGER_0_65535 */
335 static int hf_tetra_sdu; /* BIT_STRING */
336 static int hf_tetra_optional_elements_01; /* T_optional_elements_01 */
337 static int hf_tetra_type2_parameters_01; /* T_type2_parameters_01 */
338 static int hf_tetra_mcc_01; /* T_mcc */
339 static int hf_tetra_mnc_01; /* T_mnc */
340 static int hf_tetra_la_01; /* T_la */
341 static int hf_tetra_channel_command_valid; /* INTEGER_0_3 */
342 static int hf_tetra_optional_elements_02; /* T_optional_elements_02 */
343 static int hf_tetra_fail_cause; /* INTEGER_0_3 */
344 static int hf_tetra_optional_elements_03; /* T_optional_elements_03 */
345 static int hf_tetra_cell_re_select_parameters; /* INTEGER_0_65535 */
346 static int hf_tetra_optional_elements_04; /* T_optional_elements_04 */
347 static int hf_tetra_type2_parameters_02; /* T_type2_parameters_02 */
348 static int hf_tetra_tetra_network_time; /* T_tetra_network_time */
349 static int hf_tetra_tetra_network_time_01; /* TETRA_NETWORK_TIME */
350 static int hf_tetra_number_of_neighbour_cells; /* T_number_of_neighbour_cells */
351 static int hf_tetra_number_of_neighbour_cells_01; /* INTEGER_0_7 */
352 static int hf_tetra_network_time; /* T_network_time */
353 static int hf_tetra_local_time_offset_sign; /* INTEGER_0_1 */
354 static int hf_tetra_local_time_offset; /* INTEGER_0_63 */
355 static int hf_tetra_year; /* INTEGER_0_63 */
356 static int hf_tetra_reserved_04; /* T_reserved */
357 static int hf_tetra_u_Authentication; /* NULL */
358 static int hf_tetra_u_Itsi_Detach; /* NULL */
359 static int hf_tetra_u_Location_Update_Demand; /* U_LOCATION_UPDATE_DEMAND */
360 static int hf_tetra_u_MM_Status; /* U_MM_STATUS */
361 static int hf_tetra_u_MM_reserved1; /* NULL */
362 static int hf_tetra_u_WK; /* NULL */
363 static int hf_tetra_u_MM_reserved3; /* NULL */
364 static int hf_tetra_u_Attach_Detach_Group_Identity; /* U_ATTACH_DETACH_GROUP_IDENTITY */
365 static int hf_tetra_u_Attach_Detach_Group_Identity_Ack; /* U_ATTACH_DETACH_GROUP_IDENTITY_ACK */
366 static int hf_tetra_u_TEI_Provide; /* NULL */
367 static int hf_tetra_u_MM_reserved6; /* NULL */
368 static int hf_tetra_u_Disabled_Status; /* NULL */
369 static int hf_tetra_u_MM_reserved7; /* NULL */
370 static int hf_tetra_u_MM_reserved8; /* NULL */
371 static int hf_tetra_u_MM_reserved9; /* NULL */
372 static int hf_tetra_u_MM_Function_Not_Support; /* NULL */
373 static int hf_tetra_d_Otar; /* NULL */
374 static int hf_tetra_d_Authentication; /* NULL */
375 static int hf_tetra_d_Authentication_Reject; /* NULL */
376 static int hf_tetra_d_Disable; /* NULL */
377 static int hf_tetra_d_Enable; /* NULL */
378 static int hf_tetra_d_Location_Update_Accept; /* D_LOCATION_UPDATE_ACCEPT */
379 static int hf_tetra_d_Location_Update_Command; /* NULL */
380 static int hf_tetra_d_Location_Update_Reject; /* D_LOCATION_UPDATE_REJECT */
381 static int hf_tetra_d_MM_reserved2; /* NULL */
382 static int hf_tetra_d_Location_Update_Proceeding; /* NULL */
383 static int hf_tetra_d_Attach_Detach_Group_Identity; /* D_ATTACH_DETACH_GROUP_IDENTITY */
384 static int hf_tetra_d_Attach_Detach_Group_Identity_Ack; /* D_ATTACH_DETACH_GROUP_IDENTITY_ACK */
385 static int hf_tetra_d_MM_Status; /* D_MM_STATUS */
386 static int hf_tetra_d_MM_reserved5; /* NULL */
387 static int hf_tetra_d_MM_reserved6; /* NULL */
388 static int hf_tetra_d_MM_Function_Not_Support; /* NULL */
389 static int hf_tetra_attach_detach_identifier; /* T_attach_detach_identifier */
390 static int hf_tetra_attach; /* T_attach */
391 static int hf_tetra_lifetime; /* INTEGER_0_3 */
392 static int hf_tetra_class_of_usage; /* INTEGER_0_7 */
393 static int hf_tetra_detach; /* T_detach */
394 static int hf_tetra_detach_downlike; /* T_detach_downlike */
395 static int hf_tetra_address_type; /* T_address_type */
396 static int hf_tetra_gssi_01; /* OCTET_STRING_SIZE_3 */
397 static int hf_tetra_gssi_extension; /* T_gssi_extension */
398 static int hf_tetra_extension; /* OCTET_STRING_SIZE_3 */
399 static int hf_tetra_vgssi; /* OCTET_STRING_SIZE_3 */
400 static int hf_tetra_attach_detach_identifier_01; /* T_attach_detach_identifier_01 */
401 static int hf_tetra_attach_01; /* T_attach_01 */
402 static int hf_tetra_detach_01; /* T_detach_01 */
403 static int hf_tetra_detach_uplike; /* T_detach_uplike */
404 static int hf_tetra_address_type_01; /* T_address_type_01 */
405 static int hf_tetra_gssi_extension_01; /* T_gssi_extension_01 */
406 static int hf_tetra_location_update_type; /* UPDATE_TYPE */
407 static int hf_tetra_optional_elements_05; /* T_optional_elements_05 */
408 static int hf_tetra_type2_parameters_03; /* T_type2_parameters_03 */
409 static int hf_tetra_ssi_02; /* T_ssi */
410 static int hf_tetra_ssi_03; /* OCTET_STRING_SIZE_3 */
411 static int hf_tetra_address_extension; /* T_address_extension */
412 static int hf_tetra_address_extension_01; /* OCTET_STRING_SIZE_3 */
413 static int hf_tetra_subscriber_class_01; /* T_subscriber_class */
414 static int hf_tetra_energy_saving_mode; /* T_energy_saving_mode */
415 static int hf_tetra_energy_saving_mode_01; /* INTEGER_0_7 */
416 static int hf_tetra_scch_info; /* T_scch_info */
417 static int hf_tetra_scch_info_01; /* INTEGER_0_16383 */
418 static int hf_tetra_type3; /* T_type3 */
419 static int hf_tetra_no_type3; /* NULL */
420 static int hf_tetra_type3_elements; /* T_type3_elements */
421 static int hf_tetra_type2_existance; /* BOOLEAN */
422 static int hf_tetra_type3_identifier; /* TYPE3_IDENTIFIER */
423 static int hf_tetra_new_ra; /* T_new_ra */
424 static int hf_tetra_new_ra_01; /* INTEGER_0_3 */
425 static int hf_tetra_group_identity_location_accept; /* T_group_identity_location_accept */
426 static int hf_tetra_group_identity_location_accept_01; /* INTEGER_0_3 */
427 static int hf_tetra_group_predefined_lifetime; /* T_group_predefined_lifetime */
428 static int hf_tetra_group_predefined_lifetime_01; /* INTEGER_0_3 */
429 static int hf_tetra_group_identity_downlink; /* T_group_identity_downlink */
430 static int hf_tetra_group_identity_downlink_01; /* INTEGER_0_15 */
431 static int hf_tetra_proprietary; /* T_proprietary */
432 static int hf_tetra_proprietary_01; /* INTEGER_0_7 */
433 static int hf_tetra_reject_cause; /* INTEGER_0_31 */
434 static int hf_tetra_cipher_control; /* BOOLEAN */
435 static int hf_tetra_status_uplink; /* INTEGER_0_63 */
436 static int hf_tetra_scanning_on_off; /* T_scanning_on_off */
437 static int hf_tetra_status_downlink; /* INTEGER_0_63 */
438 static int hf_tetra_u_Alert; /* U_ALERT */
439 static int hf_tetra_reserved1; /* NULL */
440 static int hf_tetra_u_Connect; /* U_CONNECT */
441 static int hf_tetra_reserved2; /* NULL */
442 static int hf_tetra_u_Disconnect; /* U_DISCONNECT */
443 static int hf_tetra_u_Info; /* U_INFO */
444 static int hf_tetra_u_Release; /* U_RELEASE */
445 static int hf_tetra_u_Setup; /* U_SETUP */
446 static int hf_tetra_u_Status; /* U_STATUS */
447 static int hf_tetra_u_Tx_Ceased; /* U_TX_CEASED */
448 static int hf_tetra_u_Tx_Demand; /* U_TX_DEMAND */
449 static int hf_tetra_reserved3; /* NULL */
450 static int hf_tetra_reserved4; /* NULL */
451 static int hf_tetra_reserved5; /* NULL */
452 static int hf_tetra_u_Call_Restore; /* U_CALL_RESTORE */
453 static int hf_tetra_u_SDS_Data; /* U_SDS_DATA */
454 static int hf_tetra_u_Facility; /* NULL */
455 static int hf_tetra_call_identifier; /* INTEGER_0_16383 */
456 static int hf_tetra_disconnect_cause; /* INTEGER_0_31 */
457 static int hf_tetra_area_selection; /* INTEGER_0_15 */
458 static int hf_tetra_called_party_type_identifier; /* T_called_party_type_identifier */
459 static int hf_tetra_sna; /* INTEGER_0_255 */
460 static int hf_tetra_ssi_extension; /* BIT_STRING_SIZE_48 */
461 static int hf_tetra_short_data_type_identifier; /* T_short_data_type_identifier */
462 static int hf_tetra_data_1; /* INTEGER_0_65535 */
463 static int hf_tetra_data_2; /* OCTET_STRING_SIZE_4 */
464 static int hf_tetra_data_3; /* BIT_STRING_SIZE_64 */
465 static int hf_tetra_length_indicator_data_4; /* INTEGER_0_4194304 */
466 static int hf_tetra_called_party_type_identifier_01; /* T_called_party_type_identifier_01 */
467 static int hf_tetra_short_number_address; /* INTEGER_0_255 */
468 static int hf_tetra_called_ssi_called_extension; /* BIT_STRING_SIZE_48 */
469 static int hf_tetra_pre_coded_status; /* INTEGER_0_65535 */
470 static int hf_tetra_call_id; /* INTEGER_0_16383 */
471 static int hf_tetra_poll_response; /* INTEGER_0_1 */
472 static int hf_tetra_d_Alert; /* D_ALERT */
473 static int hf_tetra_d_Call_Proceeding; /* D_CALL_PROCEEDING */
474 static int hf_tetra_d_Connect; /* D_CONNECT */
475 static int hf_tetra_d_Connect_Ack; /* D_CONNECT_ACK */
476 static int hf_tetra_d_Disconnect; /* D_DISCONNECT */
477 static int hf_tetra_d_Info; /* D_INFO */
478 static int hf_tetra_d_Release; /* D_RELEASE */
479 static int hf_tetra_d_Setup; /* D_SETUP */
480 static int hf_tetra_d_Status; /* D_STATUS */
481 static int hf_tetra_d_Tx_Ceased; /* D_TX_CEASED */
482 static int hf_tetra_d_Tx_Continue; /* D_TX_CONTINUE */
483 static int hf_tetra_d_Tx_Granted; /* D_TX_GRANTED */
484 static int hf_tetra_d_Tx_Wait; /* D_TX_WAIT */
485 static int hf_tetra_d_Tx_Interrupt; /* NULL */
486 static int hf_tetra_d_Call_Restore; /* D_CALL_RESTORE */
487 static int hf_tetra_d_SDS_Data; /* D_SDS_DATA */
488 static int hf_tetra_d_Facility; /* NULL */
489 static int hf_tetra_calling_party_type_identifier; /* T_calling_party_type_identifier */
490 static int hf_tetra_ssi_extension_01; /* OCTET_STRING_SIZE_6 */
491 static int hf_tetra_short_data_type_identifier_01; /* T_short_data_type_identifier_01 */
492 static int hf_tetra_data_3_01; /* OCTET_STRING_SIZE_8 */
493 static int hf_tetra_calling_party_type_identifier_01; /* T_calling_party_type_identifier_01 */
494 static int hf_tetra_calling_party_address_SSI; /* INTEGER_0_16777215 */
495 static int hf_tetra_reset_call_time_out_timer; /* INTEGER_0_1 */
496 static int hf_tetra_poll_request; /* INTEGER_0_1 */
497 static int hf_tetra_transmission_request_permission; /* INTEGER_0_1 */
498 static int hf_tetra_continue; /* INTEGER_0_1 */
499 static int hf_tetra_request_to_append_LA; /* BOOLEAN */
500 static int hf_tetra_cipher_control_01; /* T_cipher_control */
501 static int hf_tetra_no_cipher; /* NULL */
502 static int hf_tetra_ciphering_parameters; /* INTEGER_0_1023 */
503 static int hf_tetra_optional_elements_06; /* T_optional_elements_06 */
504 static int hf_tetra_type2_parameters_04; /* T_type2_parameters_04 */
505 static int hf_tetra_class_of_MS; /* T_class_of_MS */
506 static int hf_tetra_class_of_MS_01; /* INTEGER_0_16777215 */
507 static int hf_tetra_energy_saving_mode_02; /* T_energy_saving_mode_01 */
508 static int hf_tetra_la_information; /* T_la_information */
509 static int hf_tetra_la_information_01; /* INTEGER_0_16383 */
510 static int hf_tetra_ssi_04; /* T_ssi_01 */
511 static int hf_tetra_address_extension_02; /* T_address_extension_01 */
512 static int hf_tetra_type3_01; /* T_type3_01 */
513 static int hf_tetra_type3_elements_01; /* T_type3_elements_01 */
514 static int hf_tetra_group_identity_location_demand; /* T_group_identity_location_demand */
515 static int hf_tetra_group_identity_location_demand_01; /* INTEGER_0_3 */
516 static int hf_tetra_group_report_response; /* T_group_report_response */
517 static int hf_tetra_group_report_response_01; /* BOOLEAN */
518 static int hf_tetra_group_identity_uplink; /* T_group_identity_uplink */
519 static int hf_tetra_group_identity_uplink_01; /* INTEGER_0_15 */
520 static int hf_tetra_proprietary_02; /* T_proprietary_01 */
521 static int hf_tetra_group_identity_report; /* BOOLEAN */
522 static int hf_tetra_group_identity_attach_detach_mode; /* BOOLEAN */
523 static int hf_tetra_optional_elements_07; /* T_optional_elements_07 */
524 static int hf_tetra_type2_element; /* T_type2_element */
525 static int hf_tetra_type3_02; /* T_type3_02 */
526 static int hf_tetra_type3_elements_02; /* T_type3_elements_02 */
527 static int hf_tetra_length; /* INTEGER_0_2047 */
528 static int hf_tetra_repeat_num; /* INTEGER_0_63 */
529 static int hf_tetra_group_identity_uplink_02; /* GROUP_IDENTITY_UPLINK */
530 static int hf_tetra_group_identity_ack_type; /* BOOLEAN */
531 static int hf_tetra_optional_elements_08; /* T_optional_elements_08 */
532 static int hf_tetra_type2_element_01; /* T_type2_element_01 */
533 static int hf_tetra_type3_03; /* T_type3_03 */
534 static int hf_tetra_type3_elements_03; /* T_type3_elements_03 */
535 static int hf_tetra_hook_method_selection; /* BOOLEAN */
536 static int hf_tetra_simple_duplex_selection; /* T_simple_duplex_selection */
537 static int hf_tetra_basic_service_information; /* Basic_service_information */
538 static int hf_tetra_request_transmit_send_data; /* INTEGER_0_1 */
539 static int hf_tetra_call_priority; /* INTEGER_0_15 */
540 static int hf_tetra_clir_control; /* INTEGER_0_3 */
541 static int hf_tetra_called_party_address; /* Called_party_address_type */
542 static int hf_tetra_optional_elements_09; /* T_optional_elements_09 */
543 static int hf_tetra_type2_parameters_05; /* T_type2_parameters_05 */
544 static int hf_tetra_external_subscriber_number; /* T_external_subscriber_number */
545 static int hf_tetra_external_subscriber_number_01; /* INTEGER_0_31 */
546 static int hf_tetra_prop; /* T_prop */
547 static int hf_tetra_prop_01; /* Proprietary */
548 static int hf_tetra_circuit_mode; /* CIRCUIT */
549 static int hf_tetra_encryption; /* INTEGER_0_1 */
550 static int hf_tetra_communication; /* INTEGER_0_3 */
551 static int hf_tetra_slots_or_speech; /* INTEGER_0_3 */
552 static int hf_tetra_call_identifier_01; /* INTEGER_0_1023 */
553 static int hf_tetra_simplex_duplex_selection; /* T_simplex_duplex_selection */
554 static int hf_tetra_optional_elements_10; /* T_optional_elements_10 */
555 static int hf_tetra_type2_parameters_06; /* T_type2_parameters_06 */
556 static int hf_tetra_basic_service_information_01; /* T_basic_service_information */
557 static int hf_tetra_prop_02; /* T_prop_01 */
558 static int hf_tetra_simplex_duplex_selection_01; /* T_simplex_duplex_selection_01 */
559 static int hf_tetra_optional_elements_11; /* T_optional_elements_11 */
560 static int hf_tetra_type2_parameters_07; /* T_type2_parameters_07 */
561 static int hf_tetra_basic_service_information_02; /* T_basic_service_information_01 */
562 static int hf_tetra_prop_03; /* T_prop_02 */
563 static int hf_tetra_optional_elements_12; /* T_optional_elements_12 */
564 static int hf_tetra_type2_parameters_08; /* T_type2_parameters_08 */
565 static int hf_tetra_prop_04; /* T_prop_03 */
566 static int hf_tetra_tx_demand_priority; /* INTEGER_0_3 */
567 static int hf_tetra_encryption_control; /* INTEGER_0_1 */
568 static int hf_tetra_optional_elements_13; /* T_optional_elements_13 */
569 static int hf_tetra_type2_parameters_09; /* T_type2_parameters_09 */
570 static int hf_tetra_prop_05; /* T_prop_04 */
571 static int hf_tetra_optional_elements_14; /* T_optional_elements_14 */
572 static int hf_tetra_type2_parameters_10; /* T_type2_parameters_10 */
573 static int hf_tetra_prop_06; /* T_prop_05 */
574 static int hf_tetra_request_to_transmit_send_data; /* INTEGER_0_1 */
575 static int hf_tetra_other_party_address; /* Other_party_address_type */
576 static int hf_tetra_optional_elements_15; /* T_optional_elements_15 */
577 static int hf_tetra_type2_parameters_11; /* T_type2_parameters_11 */
578 static int hf_tetra_prop_07; /* T_prop_06 */
579 static int hf_tetra_call_time_out; /* INTEGER_0_15 */
580 static int hf_tetra_hook_method_selection_01; /* INTEGER_0_1 */
581 static int hf_tetra_simplex_duplex_selection_02; /* T_simplex_duplex_selection_02 */
582 static int hf_tetra_transmission_grant; /* INTEGER_0_3 */
583 static int hf_tetra_optional_elements_16; /* T_optional_elements_16 */
584 static int hf_tetra_type2_parameters_12; /* T_type2_parameters_12 */
585 static int hf_tetra_calling_party_address; /* T_calling_party_address */
586 static int hf_tetra_calling_party_address_01; /* Calling_party_address_type */
587 static int hf_tetra_external_subscriber_number_02; /* T_external_subscriber_number_01 */
588 static int hf_tetra_external_subscriber_number_03; /* INTEGER_0_15 */
589 static int hf_tetra_prop_08; /* T_prop_07 */
590 static int hf_tetra_call_time_out_setup_phase; /* INTEGER_0_7 */
591 static int hf_tetra_simplex_duplex_selection_03; /* INTEGER_0_1 */
592 static int hf_tetra_optional_elements_17; /* T_optional_elements_17 */
593 static int hf_tetra_type2_parameters_13; /* T_type2_parameters_13 */
594 static int hf_tetra_basic_service_information_03; /* T_basic_service_information_02 */
595 static int hf_tetra_call_status; /* T_call_status */
596 static int hf_tetra_call_status_01; /* INTEGER_0_7 */
597 static int hf_tetra_notification_indicator; /* T_notification_indicator */
598 static int hf_tetra_notification_indicator_01; /* INTEGER_0_63 */
599 static int hf_tetra_prop_09; /* T_prop_08 */
600 static int hf_tetra_simplex_duplex_selection_04; /* T_simplex_duplex_selection_03 */
601 static int hf_tetra_call_queued; /* BOOLEAN */
602 static int hf_tetra_optional_elements_18; /* T_optional_elements_18 */
603 static int hf_tetra_type2_parameters_14; /* T_type2_parameters_14 */
604 static int hf_tetra_basic_service_infomation; /* T_basic_service_infomation */
605 static int hf_tetra_basic_service_infomation_01; /* Basic_service_information */
606 static int hf_tetra_notification_indicator_02; /* T_notification_indicator_01 */
607 static int hf_tetra_prop_10; /* T_prop_09 */
608 static int hf_tetra_call_time_out_01; /* INTEGER_0_31 */
609 static int hf_tetra_simplex_duplex_selection_05; /* T_simplex_duplex_selection_04 */
610 static int hf_tetra_call_ownership; /* INTEGER_0_1 */
611 static int hf_tetra_optional_elements_19; /* T_optional_elements_19 */
612 static int hf_tetra_type2_parameters_15; /* T_type2_parameters_15 */
613 static int hf_tetra_call_priority_01; /* T_call_priority */
614 static int hf_tetra_basic_service_information_04; /* T_basic_service_information_03 */
615 static int hf_tetra_temporary_address; /* T_temporary_address */
616 static int hf_tetra_temporary_address_01; /* Calling_party_address_type */
617 static int hf_tetra_notification_indicator_03; /* T_notification_indicator_02 */
618 static int hf_tetra_prop_11; /* T_prop_10 */
619 static int hf_tetra_optional_elements_20; /* T_optional_elements_20 */
620 static int hf_tetra_type2_parameters_16; /* T_type2_parameters_16 */
621 static int hf_tetra_notification_indicator_04; /* T_notification_indicator_03 */
622 static int hf_tetra_prop_12; /* T_prop_11 */
623 static int hf_tetra_optional_elements_21; /* T_optional_elements_21 */
624 static int hf_tetra_type2_parameters_17; /* T_type2_parameters_17 */
625 static int hf_tetra_notification_indicator_05; /* T_notification_indicator_04 */
626 static int hf_tetra_prop_13; /* T_prop_12 */
627 static int hf_tetra_reset_call_time_out; /* INTEGER_0_1 */
628 static int hf_tetra_optional_elements_22; /* T_optional_elements_22 */
629 static int hf_tetra_type2_parameters_18; /* T_type2_parameters_18 */
630 static int hf_tetra_new_call_identifier; /* T_new_call_identifier */
631 static int hf_tetra_new_call_identifier_01; /* INTEGER_0_1023 */
632 static int hf_tetra_call_time_out_02; /* T_call_time_out */
633 static int hf_tetra_call_time_out_03; /* INTEGER_0_7 */
634 static int hf_tetra_call_status_02; /* T_call_status_01 */
635 static int hf_tetra_modify; /* T_modify */
636 static int hf_tetra_modify_01; /* Modify_type */
637 static int hf_tetra_notification_indicator_06; /* T_notification_indicator_05 */
638 static int hf_tetra_prop_14; /* T_prop_13 */
639 static int hf_tetra_optional_elements_23; /* T_optional_elements_23 */
640 static int hf_tetra_type2_parameters_19; /* T_type2_parameters_19 */
641 static int hf_tetra_notification_indicator_07; /* T_notification_indicator_06 */
642 static int hf_tetra_prop_15; /* T_prop_14 */
643 static int hf_tetra_group_identity_ack_request; /* BOOLEAN */
644 static int hf_tetra_optional_elements_24; /* T_optional_elements_24 */
645 static int hf_tetra_type2_element_02; /* T_type2_element_02 */
646 static int hf_tetra_type3_04; /* T_type3_04 */
647 static int hf_tetra_type3_elements_04; /* T_type3_elements_04 */
648 static int hf_tetra_group_identity_downlink_02; /* GROUP_IDENTITY_DOWNLINK */
649 static int hf_tetra_group_identity_attach_detach_accept; /* BOOLEAN */
650 static int hf_tetra_optional_elements_25; /* T_optional_elements_25 */
651 static int hf_tetra_type2_element_03; /* T_type2_element_03 */
652 static int hf_tetra_type3_05; /* T_type3_05 */
653 static int hf_tetra_type3_elements_05; /* T_type3_elements_05 */
654 static int hf_tetra_called_party_sna; /* INTEGER_0_255 */
655 static int hf_tetra_called_party_ssi; /* INTEGER_0_16777215 */
656 static int hf_tetra_called_party_ssi_extension; /* T_called_party_ssi_extension */
657 static int hf_tetra_called_party_extention; /* INTEGER_0_16777215 */
658 static int hf_tetra_data_01; /* T_data_01 */
659 static int hf_tetra_element1; /* Type1 */
660 static int hf_tetra_element; /* Type2 */
661 static int hf_tetra_proprietary_element_owner; /* Proprietary_element_owner */
662 static int hf_tetra_proprietary_element_owner_extension; /* BIT_STRING */
663 static int hf_tetra_simplex_duplex_selection_06; /* T_simplex_duplex_selection_05 */
665 /* Initialize the subtree pointers */
666 /* These are the ids of the subtrees that we may be creating */
667 static int ett_tetra;
668 static int ett_tetra_header;
669 static int ett_tetra_length;
670 static int ett_tetra_txreg;
671 static int ett_tetra_text;
673 static int ett_tetra_AACH;
674 static int ett_tetra_BSCH;
675 static int ett_tetra_MLE_Sync;
676 static int ett_tetra_BNCH;
677 static int ett_tetra_T_hyperframe_or_cck;
678 static int ett_tetra_T_optional_params;
679 static int ett_tetra_TS_COMMON_FRAMES;
680 static int ett_tetra_Default_Code_A;
681 static int ett_tetra_Extended_Services_Broadcast;
682 static int ett_tetra_T_section;
683 static int ett_tetra_PRESENT1;
684 static int ett_tetra_MAC_ACCESS;
685 static int ett_tetra_T_data;
686 static int ett_tetra_Address;
687 static int ett_tetra_U_LLC_PDU;
688 static int ett_tetra_U_BL_ACK_FCS;
689 static int ett_tetra_U_MLE_PDU_FCS;
690 static int ett_tetra_U_BL_DATA_FCS;
691 static int ett_tetra_U_BL_ADATA_FCS;
692 static int ett_tetra_U_MLE_PDU;
693 static int ett_tetra_ComplexSDU;
694 static int ett_tetra_T_lengthIndicationOrCapacityRequest;
695 static int ett_tetra_FRAG;
696 static int ett_tetra_MAC_DATA;
697 static int ett_tetra_T_lengthIndicationOrCapacityRequest_01;
698 static int ett_tetra_FRAG6;
699 static int ett_tetra_MAC_FRAG;
700 static int ett_tetra_MAC_FRAG120;
701 static int ett_tetra_MAC_END_UPLINK;
702 static int ett_tetra_MAC_END_UP114;
703 static int ett_tetra_MAC_END_HU;
704 static int ett_tetra_T_lengthInd_ReservationReq;
705 static int ett_tetra_MAC_END_DOWNLINK;
706 static int ett_tetra_T_slot_granting;
707 static int ett_tetra_T_channel_allocation;
708 static int ett_tetra_SlotGranting;
709 static int ett_tetra_ChannelAllocation;
710 static int ett_tetra_T_extend_carrier_flag;
711 static int ett_tetra_T_monitoring_pattern;
712 static int ett_tetra_Extended_carrier_flag;
713 static int ett_tetra_MAC_END_DOWN111;
714 static int ett_tetra_T_slot_granting_01;
715 static int ett_tetra_T_channel_allocation_01;
716 static int ett_tetra_MAC_RESOURCE;
717 static int ett_tetra_OTHER_DATA;
718 static int ett_tetra_T_power_control;
719 static int ett_tetra_T_slot_granting_02;
720 static int ett_tetra_T_channel_allocation_02;
721 static int ett_tetra_AddressMacResource;
722 static int ett_tetra_SSI_NEED;
723 static int ett_tetra_EVENT_NEED;
724 static int ett_tetra_USSI_NEED;
725 static int ett_tetra_SMI_NEED;
726 static int ett_tetra_SSI_EVENT_NEED;
727 static int ett_tetra_SSI_USAGE_NEED;
728 static int ett_tetra_SMI_EVENT_NEED;
729 static int ett_tetra_MAC_ACCESS_DEFINE;
730 static int ett_tetra_T_optional_field;
731 static int ett_tetra_D_LLC_PDU;
732 static int ett_tetra_D_BL_ACK_FCS;
733 static int ett_tetra_D_MLE_PDU_FCS;
734 static int ett_tetra_D_BL_ADATA_FCS;
735 static int ett_tetra_D_BL_DATA_FCS;
736 static int ett_tetra_U_BL_ACK;
737 static int ett_tetra_D_BL_ACK;
738 static int ett_tetra_U_BL_DATA;
739 static int ett_tetra_D_BL_DATA;
740 static int ett_tetra_U_BL_ADATA;
741 static int ett_tetra_D_BL_ADATA;
742 static int ett_tetra_D_MLE_PDU;
743 static int ett_tetra_UMLE_PDU;
744 static int ett_tetra_DMLE_PDU;
745 static int ett_tetra_U_PREPARE;
746 static int ett_tetra_T_optional_elements;
747 static int ett_tetra_T_type2_parameters;
748 static int ett_tetra_T_cell_number;
749 static int ett_tetra_U_RESTORE;
750 static int ett_tetra_T_optional_elements_01;
751 static int ett_tetra_T_type2_parameters_01;
752 static int ett_tetra_T_mcc;
753 static int ett_tetra_T_mnc;
754 static int ett_tetra_T_la;
755 static int ett_tetra_D_NEW_CELL;
756 static int ett_tetra_T_optional_elements_02;
757 static int ett_tetra_D_PREPARE_FAIL;
758 static int ett_tetra_T_optional_elements_03;
759 static int ett_tetra_D_NWRK_BRDADCAST;
760 static int ett_tetra_T_optional_elements_04;
761 static int ett_tetra_T_type2_parameters_02;
762 static int ett_tetra_T_tetra_network_time;
763 static int ett_tetra_T_number_of_neighbour_cells;
764 static int ett_tetra_TETRA_NETWORK_TIME;
765 static int ett_tetra_D_RESTORE_ACK;
766 static int ett_tetra_D_RESTORE_FAIL;
767 static int ett_tetra_U_MM_PDU;
768 static int ett_tetra_D_MM_PDU;
769 static int ett_tetra_GROUP_IDENTITY_DOWNLINK;
770 static int ett_tetra_T_attach_detach_identifier;
771 static int ett_tetra_T_attach;
772 static int ett_tetra_T_detach;
773 static int ett_tetra_T_address_type;
774 static int ett_tetra_T_gssi_extension;
775 static int ett_tetra_GROUP_IDENTITY_UPLINK;
776 static int ett_tetra_T_attach_detach_identifier_01;
777 static int ett_tetra_T_attach_01;
778 static int ett_tetra_T_detach_01;
779 static int ett_tetra_T_address_type_01;
780 static int ett_tetra_T_gssi_extension_01;
781 static int ett_tetra_D_LOCATION_UPDATE_ACCEPT;
782 static int ett_tetra_T_optional_elements_05;
783 static int ett_tetra_T_type2_parameters_03;
784 static int ett_tetra_T_ssi;
785 static int ett_tetra_T_address_extension;
786 static int ett_tetra_T_subscriber_class;
787 static int ett_tetra_T_energy_saving_mode;
788 static int ett_tetra_T_scch_info;
789 static int ett_tetra_T_type3;
790 static int ett_tetra_T_type3_elements;
791 static int ett_tetra_T_new_ra;
792 static int ett_tetra_T_group_identity_location_accept;
793 static int ett_tetra_T_group_predefined_lifetime;
794 static int ett_tetra_T_group_identity_downlink;
795 static int ett_tetra_T_proprietary;
796 static int ett_tetra_D_LOCATION_UPDATE_REJECT;
797 static int ett_tetra_U_MM_STATUS;
798 static int ett_tetra_D_MM_STATUS;
799 static int ett_tetra_U_CMCE_PDU;
800 static int ett_tetra_U_RELEASE;
801 static int ett_tetra_U_SDS_DATA;
802 static int ett_tetra_T_called_party_type_identifier;
803 static int ett_tetra_T_short_data_type_identifier;
804 static int ett_tetra_U_STATUS;
805 static int ett_tetra_T_called_party_type_identifier_01;
806 static int ett_tetra_U_INFO;
807 static int ett_tetra_D_CMCE_PDU;
808 static int ett_tetra_D_SDS_DATA;
809 static int ett_tetra_T_calling_party_type_identifier;
810 static int ett_tetra_T_short_data_type_identifier_01;
811 static int ett_tetra_D_STATUS;
812 static int ett_tetra_T_calling_party_type_identifier_01;
813 static int ett_tetra_D_DISCONNECT;
814 static int ett_tetra_D_INFO;
815 static int ett_tetra_D_TX_WAIT;
816 static int ett_tetra_D_TX_CONTINUE;
817 static int ett_tetra_U_LOCATION_UPDATE_DEMAND;
818 static int ett_tetra_T_cipher_control;
819 static int ett_tetra_T_optional_elements_06;
820 static int ett_tetra_T_type2_parameters_04;
821 static int ett_tetra_T_class_of_MS;
822 static int ett_tetra_T_energy_saving_mode_01;
823 static int ett_tetra_T_la_information;
824 static int ett_tetra_T_ssi_01;
825 static int ett_tetra_T_address_extension_01;
826 static int ett_tetra_T_type3_01;
827 static int ett_tetra_T_type3_elements_01;
828 static int ett_tetra_T_group_identity_location_demand;
829 static int ett_tetra_T_group_report_response;
830 static int ett_tetra_T_group_identity_uplink;
831 static int ett_tetra_T_proprietary_01;
832 static int ett_tetra_U_ATTACH_DETACH_GROUP_IDENTITY;
833 static int ett_tetra_T_optional_elements_07;
834 static int ett_tetra_T_type2_element;
835 static int ett_tetra_T_type3_02;
836 static int ett_tetra_T_type3_elements_02;
837 static int ett_tetra_U_ATTACH_DETACH_GROUP_IDENTITY_ACK;
838 static int ett_tetra_T_optional_elements_08;
839 static int ett_tetra_T_type2_element_01;
840 static int ett_tetra_T_type3_03;
841 static int ett_tetra_T_type3_elements_03;
842 static int ett_tetra_U_SETUP;
843 static int ett_tetra_T_optional_elements_09;
844 static int ett_tetra_T_type2_parameters_05;
845 static int ett_tetra_T_external_subscriber_number;
846 static int ett_tetra_T_prop;
847 static int ett_tetra_Basic_service_information;
848 static int ett_tetra_U_ALERT;
849 static int ett_tetra_T_optional_elements_10;
850 static int ett_tetra_T_type2_parameters_06;
851 static int ett_tetra_T_basic_service_information;
852 static int ett_tetra_T_prop_01;
853 static int ett_tetra_U_CONNECT;
854 static int ett_tetra_T_optional_elements_11;
855 static int ett_tetra_T_type2_parameters_07;
856 static int ett_tetra_T_basic_service_information_01;
857 static int ett_tetra_T_prop_02;
858 static int ett_tetra_U_TX_CEASED;
859 static int ett_tetra_T_optional_elements_12;
860 static int ett_tetra_T_type2_parameters_08;
861 static int ett_tetra_T_prop_03;
862 static int ett_tetra_U_TX_DEMAND;
863 static int ett_tetra_T_optional_elements_13;
864 static int ett_tetra_T_type2_parameters_09;
865 static int ett_tetra_T_prop_04;
866 static int ett_tetra_U_DISCONNECT;
867 static int ett_tetra_T_optional_elements_14;
868 static int ett_tetra_T_type2_parameters_10;
869 static int ett_tetra_T_prop_05;
870 static int ett_tetra_U_CALL_RESTORE;
871 static int ett_tetra_T_optional_elements_15;
872 static int ett_tetra_T_type2_parameters_11;
873 static int ett_tetra_T_prop_06;
874 static int ett_tetra_D_SETUP;
875 static int ett_tetra_T_optional_elements_16;
876 static int ett_tetra_T_type2_parameters_12;
877 static int ett_tetra_T_calling_party_address;
878 static int ett_tetra_T_external_subscriber_number_01;
879 static int ett_tetra_T_prop_07;
880 static int ett_tetra_D_CALL_PROCEEDING;
881 static int ett_tetra_T_optional_elements_17;
882 static int ett_tetra_T_type2_parameters_13;
883 static int ett_tetra_T_basic_service_information_02;
884 static int ett_tetra_T_call_status;
885 static int ett_tetra_T_notification_indicator;
886 static int ett_tetra_T_prop_08;
887 static int ett_tetra_D_ALERT;
888 static int ett_tetra_T_optional_elements_18;
889 static int ett_tetra_T_type2_parameters_14;
890 static int ett_tetra_T_basic_service_infomation;
891 static int ett_tetra_T_notification_indicator_01;
892 static int ett_tetra_T_prop_09;
893 static int ett_tetra_D_CONNECT;
894 static int ett_tetra_T_optional_elements_19;
895 static int ett_tetra_T_type2_parameters_15;
896 static int ett_tetra_T_call_priority;
897 static int ett_tetra_T_basic_service_information_03;
898 static int ett_tetra_T_temporary_address;
899 static int ett_tetra_T_notification_indicator_02;
900 static int ett_tetra_T_prop_10;
901 static int ett_tetra_D_CONNECT_ACK;
902 static int ett_tetra_T_optional_elements_20;
903 static int ett_tetra_T_type2_parameters_16;
904 static int ett_tetra_T_notification_indicator_03;
905 static int ett_tetra_T_prop_11;
906 static int ett_tetra_D_RELEASE;
907 static int ett_tetra_T_optional_elements_21;
908 static int ett_tetra_T_type2_parameters_17;
909 static int ett_tetra_T_notification_indicator_04;
910 static int ett_tetra_T_prop_12;
911 static int ett_tetra_D_CALL_RESTORE;
912 static int ett_tetra_T_optional_elements_22;
913 static int ett_tetra_T_type2_parameters_18;
914 static int ett_tetra_T_new_call_identifier;
915 static int ett_tetra_T_call_time_out;
916 static int ett_tetra_T_call_status_01;
917 static int ett_tetra_T_modify;
918 static int ett_tetra_T_notification_indicator_05;
919 static int ett_tetra_T_prop_13;
920 static int ett_tetra_D_TX_CEASED;
921 static int ett_tetra_T_optional_elements_23;
922 static int ett_tetra_T_type2_parameters_19;
923 static int ett_tetra_T_notification_indicator_06;
924 static int ett_tetra_T_prop_14;
925 static int ett_tetra_D_TX_GRANTED;
926 static int ett_tetra_D_ATTACH_DETACH_GROUP_IDENTITY;
927 static int ett_tetra_T_optional_elements_24;
928 static int ett_tetra_T_type2_element_02;
929 static int ett_tetra_T_type3_04;
930 static int ett_tetra_T_type3_elements_04;
931 static int ett_tetra_D_ATTACH_DETACH_GROUP_IDENTITY_ACK;
932 static int ett_tetra_T_optional_elements_25;
933 static int ett_tetra_T_type2_element_03;
934 static int ett_tetra_T_type3_05;
935 static int ett_tetra_T_type3_elements_05;
936 static int ett_tetra_Calling_party_address_type;
937 static int ett_tetra_T_called_party_ssi_extension;
938 static int ett_tetra_Proprietary;
939 static int ett_tetra_T_data_01;
940 static int ett_tetra_Type1;
941 static int ett_tetra_Type2;
942 static int ett_tetra_Modify_type;
944 static expert_field ei_tetra_channels_incorrect;
948 static int
949 dissect_tetra_INTEGER_0_3(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
950 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
951 0U, 3U, NULL, false);
953 return offset;
958 static int
959 dissect_tetra_INTEGER_0_63(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
960 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
961 0U, 63U, NULL, false);
963 return offset;
967 static const per_sequence_t AACH_sequence[] = {
968 { &hf_tetra_function , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
969 { &hf_tetra_field1 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_63 },
970 { &hf_tetra_field2 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_63 },
971 { NULL, 0, 0, NULL }
974 static int
975 dissect_tetra_AACH(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
976 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
977 ett_tetra_AACH, AACH_sequence);
979 return offset;
983 static const value_string tetra_System_Code_vals[] = {
984 { 0, "ets-300-392-2" },
985 { 1, "ets-300-392-2anden-300-392-7" },
986 { 2, "en-300-392-2-v2-3-2orlateranden-300-392-7" },
987 { 3, "v-d-reserved" },
988 { 4, "v-d-reserved" },
989 { 5, "v-d-reserved" },
990 { 6, "v-d-reserved" },
991 { 7, "v-d-reserved" },
992 { 8, "reserved" },
993 { 9, "reserved" },
994 { 10, "direct-mode-operation" },
995 { 11, "direct-mode-operation" },
996 { 12, "direct-mode-operation" },
997 { 13, "direct-mode-operation" },
998 { 14, "direct-mode-operation" },
999 { 15, "direct-mode-operation" },
1000 { 0, NULL }
1004 static int
1005 dissect_tetra_System_Code(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1006 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1007 16, NULL, false, 0, NULL);
1009 return offset;
1013 static const value_string tetra_Colour_Code_vals[] = {
1014 { 0, "pre-defined" },
1015 { 1, "operator-defined" },
1016 { 2, "operator-defined" },
1017 { 3, "operator-defined" },
1018 { 4, "operator-defined" },
1019 { 5, "operator-defined" },
1020 { 6, "operator-defined" },
1021 { 7, "operator-defined" },
1022 { 8, "operator-defined" },
1023 { 9, "operator-defined" },
1024 { 10, "operator-defined" },
1025 { 11, "operator-defined" },
1026 { 12, "operator-defined" },
1027 { 13, "operator-defined" },
1028 { 14, "operator-defined" },
1029 { 15, "operator-defined" },
1030 { 16, "operator-defined" },
1031 { 17, "operator-defined" },
1032 { 18, "operator-defined" },
1033 { 19, "operator-defined" },
1034 { 20, "operator-defined" },
1035 { 21, "operator-defined" },
1036 { 22, "operator-defined" },
1037 { 23, "operator-defined" },
1038 { 24, "operator-defined" },
1039 { 25, "operator-defined" },
1040 { 26, "operator-defined" },
1041 { 27, "operator-defined" },
1042 { 28, "operator-defined" },
1043 { 29, "operator-defined" },
1044 { 30, "operator-defined" },
1045 { 31, "operator-defined" },
1046 { 32, "operator-defined" },
1047 { 33, "operator-defined" },
1048 { 34, "operator-defined" },
1049 { 35, "operator-defined" },
1050 { 36, "operator-defined" },
1051 { 37, "operator-defined" },
1052 { 38, "operator-defined" },
1053 { 39, "operator-defined" },
1054 { 40, "operator-defined" },
1055 { 41, "operator-defined" },
1056 { 42, "operator-defined" },
1057 { 43, "operator-defined" },
1058 { 44, "operator-defined" },
1059 { 45, "operator-defined" },
1060 { 46, "operator-defined" },
1061 { 47, "operator-defined" },
1062 { 48, "operator-defined" },
1063 { 49, "operator-defined" },
1064 { 50, "operator-defined" },
1065 { 51, "operator-defined" },
1066 { 52, "operator-defined" },
1067 { 53, "operator-defined" },
1068 { 54, "operator-defined" },
1069 { 55, "operator-defined" },
1070 { 56, "operator-defined" },
1071 { 57, "operator-defined" },
1072 { 58, "operator-defined" },
1073 { 59, "operator-defined" },
1074 { 60, "operator-defined" },
1075 { 61, "operator-defined" },
1076 { 62, "operator-defined" },
1077 { 63, "operator-defined" },
1078 { 0, NULL }
1082 static int
1083 dissect_tetra_Colour_Code(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1084 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1085 64, NULL, false, 0, NULL);
1087 return offset;
1091 static const value_string tetra_Timeslot_Number_vals[] = {
1092 { 0, "timeslot-1" },
1093 { 1, "timeslot-2" },
1094 { 2, "timeslot-3" },
1095 { 3, "timeslot-4" },
1096 { 0, NULL }
1100 static int
1101 dissect_tetra_Timeslot_Number(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1102 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1103 4, NULL, false, 0, NULL);
1105 return offset;
1109 static const value_string tetra_Frame_Number_vals[] = {
1110 { 0, "reserved" },
1111 { 1, "frame-1" },
1112 { 2, "frame-2" },
1113 { 3, "frame-3" },
1114 { 4, "frame-4" },
1115 { 5, "frame-5" },
1116 { 6, "frame-6" },
1117 { 7, "frame-7" },
1118 { 8, "frame-8" },
1119 { 9, "frame-9" },
1120 { 10, "frame-10" },
1121 { 11, "frame-11" },
1122 { 12, "frame-12" },
1123 { 13, "frame-13" },
1124 { 14, "frame-14" },
1125 { 15, "frame-15" },
1126 { 16, "frame-16" },
1127 { 17, "frame-17" },
1128 { 18, "frame-18" },
1129 { 19, "reserved" },
1130 { 20, "reserved" },
1131 { 21, "reserved" },
1132 { 22, "reserved" },
1133 { 23, "reserved" },
1134 { 24, "reserved" },
1135 { 25, "reserved" },
1136 { 26, "reserved" },
1137 { 27, "reserved" },
1138 { 28, "reserved" },
1139 { 29, "reserved" },
1140 { 30, "reserved" },
1141 { 31, "reserved" },
1142 { 0, NULL }
1146 static int
1147 dissect_tetra_Frame_Number(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1148 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1149 32, NULL, false, 0, NULL);
1151 return offset;
1155 static const value_string tetra_Multiple_Frame_Number_vals[] = {
1156 { 0, "reserved" },
1157 { 1, "multiframe-1" },
1158 { 2, "multiframe-2" },
1159 { 3, "multiframe-3" },
1160 { 4, "multiframe-4" },
1161 { 5, "multiframe-5" },
1162 { 6, "multiframe-6" },
1163 { 7, "multiframe-7" },
1164 { 8, "multiframe-8" },
1165 { 9, "multiframe-9" },
1166 { 10, "multiframe-10" },
1167 { 11, "multiframe-11" },
1168 { 12, "multiframe-12" },
1169 { 13, "multiframe-13" },
1170 { 14, "multiframe-14" },
1171 { 15, "multiframe-15" },
1172 { 16, "multiframe-16" },
1173 { 17, "multiframe-17" },
1174 { 18, "multiframe-18" },
1175 { 19, "multiframe-19" },
1176 { 20, "multiframe-20" },
1177 { 21, "multiframe-21" },
1178 { 22, "multiframe-22" },
1179 { 23, "multiframe-23" },
1180 { 24, "multiframe-24" },
1181 { 25, "multiframe-25" },
1182 { 26, "multiframe-26" },
1183 { 27, "multiframe-27" },
1184 { 28, "multiframe-28" },
1185 { 29, "multiframe-29" },
1186 { 30, "multiframe-30" },
1187 { 31, "multiframe-31" },
1188 { 32, "multiframe-32" },
1189 { 33, "multiframe-33" },
1190 { 34, "multiframe-34" },
1191 { 35, "multiframe-35" },
1192 { 36, "multiframe-36" },
1193 { 37, "multiframe-37" },
1194 { 38, "multiframe-38" },
1195 { 39, "multiframe-39" },
1196 { 40, "multiframe-40" },
1197 { 41, "multiframe-41" },
1198 { 42, "multiframe-42" },
1199 { 43, "multiframe-43" },
1200 { 44, "multiframe-44" },
1201 { 45, "multiframe-45" },
1202 { 46, "multiframe-46" },
1203 { 47, "multiframe-47" },
1204 { 48, "multiframe-48" },
1205 { 49, "multiframe-49" },
1206 { 50, "multiframe-50" },
1207 { 51, "multiframe-51" },
1208 { 52, "multiframe-52" },
1209 { 53, "multiframe-53" },
1210 { 54, "multiframe-54" },
1211 { 55, "multiframe-55" },
1212 { 56, "multiframe-56" },
1213 { 57, "multiframe-57" },
1214 { 58, "multiframe-58" },
1215 { 59, "multiframe-59" },
1216 { 60, "multiframe-60" },
1217 { 61, "reserved" },
1218 { 62, "reserved" },
1219 { 63, "reserved" },
1220 { 0, NULL }
1224 static int
1225 dissect_tetra_Multiple_Frame_Number(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1226 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1227 64, NULL, false, 0, NULL);
1229 return offset;
1233 static const value_string tetra_Sharing_Mod_vals[] = {
1234 { 0, "continuous-transmission" },
1235 { 1, "carrier-sharing" },
1236 { 2, "mcch-sharing" },
1237 { 3, "traffic-carrier-sharing" },
1238 { 0, NULL }
1242 static int
1243 dissect_tetra_Sharing_Mod(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1244 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1245 4, NULL, false, 0, NULL);
1247 return offset;
1251 static const value_string tetra_TS_Reserved_Frames_vals[] = {
1252 { 0, "frame-reserved-1" },
1253 { 1, "frames-reserved-2" },
1254 { 2, "frames-reserved-3" },
1255 { 3, "frames-reserved-4" },
1256 { 4, "frames-reserved-6" },
1257 { 5, "frames-reserved-9" },
1258 { 6, "frames-reserved-12" },
1259 { 7, "frames-reserved-18" },
1260 { 0, NULL }
1264 static int
1265 dissect_tetra_TS_Reserved_Frames(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1266 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1267 8, NULL, false, 0, NULL);
1269 return offset;
1273 static const value_string tetra_U_Plane_DTX_vals[] = {
1274 { 0, "not-allowed" },
1275 { 1, "allowed" },
1276 { 0, NULL }
1280 static int
1281 dissect_tetra_U_Plane_DTX(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1282 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1283 2, NULL, false, 0, NULL);
1285 return offset;
1289 static const value_string tetra_Frame_18_Extension_vals[] = {
1290 { 0, "not-allowed" },
1291 { 1, "allowed" },
1292 { 0, NULL }
1296 static int
1297 dissect_tetra_Frame_18_Extension(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1298 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1299 2, NULL, false, 0, NULL);
1301 return offset;
1305 static const value_string tetra_Reserved_vals[] = {
1306 { 0, "default" },
1307 { 1, "not-used" },
1308 { 0, NULL }
1312 static int
1313 dissect_tetra_Reserved(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1314 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1315 2, NULL, false, 0, NULL);
1317 return offset;
1322 static int
1323 dissect_tetra_INTEGER_0_1023(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1324 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1325 0U, 1023U, NULL, false);
1327 return offset;
1332 static int
1333 dissect_tetra_INTEGER_0_16383(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1334 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1335 0U, 16383U, NULL, false);
1337 return offset;
1342 static int
1343 dissect_tetra_INTEGER_0_1(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1344 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1345 0U, 1U, NULL, false);
1347 return offset;
1351 static const per_sequence_t MLE_Sync_sequence[] = {
1352 { &hf_tetra_mcc , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1023 },
1353 { &hf_tetra_mnc , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
1354 { &hf_tetra_neighbour_cell_broadcast, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
1355 { &hf_tetra_cell_service_level, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
1356 { &hf_tetra_late_entry_information, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
1357 { NULL, 0, 0, NULL }
1360 static int
1361 dissect_tetra_MLE_Sync(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1362 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1363 ett_tetra_MLE_Sync, MLE_Sync_sequence);
1365 return offset;
1369 static const per_sequence_t BSCH_sequence[] = {
1370 { &hf_tetra_system_code , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_System_Code },
1371 { &hf_tetra_colour_code , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Colour_Code },
1372 { &hf_tetra_timeslot_number, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Timeslot_Number },
1373 { &hf_tetra_frame_number , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Frame_Number },
1374 { &hf_tetra_multiple_frame_number, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Multiple_Frame_Number },
1375 { &hf_tetra_sharing_mod , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Sharing_Mod },
1376 { &hf_tetra_ts_reserved_frames, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_TS_Reserved_Frames },
1377 { &hf_tetra_u_plane_dtx , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_U_Plane_DTX },
1378 { &hf_tetra_frame_18_extension, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Frame_18_Extension },
1379 { &hf_tetra_reserved , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Reserved },
1380 { &hf_tetra_tm_sdu , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_MLE_Sync },
1381 { NULL, 0, 0, NULL }
1384 static int
1385 dissect_tetra_BSCH(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1386 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1387 ett_tetra_BSCH, BSCH_sequence);
1389 return offset;
1394 static int
1395 dissect_tetra_INTEGER_0_4095(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1396 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1397 0U, 4095U, NULL, false);
1399 return offset;
1404 static int
1405 dissect_tetra_INTEGER_0_15(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1406 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1407 0U, 15U, NULL, false);
1409 return offset;
1413 static const value_string tetra_Offset_vals[] = {
1414 { 0, "offset-0" },
1415 { 1, "offset-positive-6-point-25" },
1416 { 2, "offset-minus-6-point-25" },
1417 { 3, "offset-12-point-5" },
1418 { 0, NULL }
1422 static int
1423 dissect_tetra_Offset(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1424 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1425 4, NULL, false, 0, NULL);
1427 return offset;
1432 static int
1433 dissect_tetra_INTEGER_0_7(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1434 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1435 0U, 7U, NULL, false);
1437 return offset;
1441 static const value_string tetra_Reverse_Operation_vals[] = {
1442 { 0, "normal" },
1443 { 1, "reverse" },
1444 { 0, NULL }
1448 static int
1449 dissect_tetra_Reverse_Operation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1450 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1451 2, NULL, false, 0, NULL);
1453 return offset;
1457 static const value_string tetra_Sencond_Ctl_Carrier_vals[] = {
1458 { 0, "none" },
1459 { 1, "timeslot-2" },
1460 { 2, "timeslots-2and3" },
1461 { 3, "timeslots-2and3and4" },
1462 { 0, NULL }
1466 static int
1467 dissect_tetra_Sencond_Ctl_Carrier(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1468 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1469 4, NULL, false, 0, NULL);
1471 return offset;
1475 static const value_string tetra_MS_TXPWR_MAX_CELL_vals[] = {
1476 { 0, "reserved" },
1477 { 1, "dbm-15" },
1478 { 2, "dbm-20" },
1479 { 3, "dbm-25" },
1480 { 4, "dbm-30" },
1481 { 5, "dbm-35" },
1482 { 6, "dbm-40" },
1483 { 7, "dbm-45" },
1484 { 0, NULL }
1488 static int
1489 dissect_tetra_MS_TXPWR_MAX_CELL(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1490 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1491 8, NULL, false, 0, NULL);
1493 return offset;
1497 static const value_string tetra_RXLEV_ACCESS_MIN_vals[] = {
1498 { 0, "dbm-125" },
1499 { 1, "dbm-120" },
1500 { 2, "dbm-115" },
1501 { 3, "dbm-110" },
1502 { 4, "dbm-105" },
1503 { 5, "dbm-100" },
1504 { 6, "dbm-95" },
1505 { 7, "dnm-90" },
1506 { 8, "dbm-85" },
1507 { 9, "dbm-80" },
1508 { 10, "dbm-75" },
1509 { 11, "dbm-70" },
1510 { 12, "dbm-65" },
1511 { 13, "dbm-60" },
1512 { 14, "dbm-55" },
1513 { 15, "dbm-50" },
1514 { 0, NULL }
1518 static int
1519 dissect_tetra_RXLEV_ACCESS_MIN(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1520 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1521 16, NULL, false, 0, NULL);
1523 return offset;
1527 static const value_string tetra_ACCESS_PARAMETER_vals[] = {
1528 { 0, "dbm-53" },
1529 { 1, "dbm-51" },
1530 { 2, "dbm-49" },
1531 { 3, "dbm-47" },
1532 { 4, "dbm-45" },
1533 { 5, "dbm-43" },
1534 { 6, "dbm-41" },
1535 { 7, "dbm-39" },
1536 { 8, "dbm-37" },
1537 { 9, "dbm-35" },
1538 { 10, "dbm-33" },
1539 { 11, "dbm-31" },
1540 { 12, "dbm-29" },
1541 { 13, "dbm-27" },
1542 { 14, "dbm-25" },
1543 { 15, "dbm-23" },
1544 { 0, NULL }
1548 static int
1549 dissect_tetra_ACCESS_PARAMETER(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1550 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1551 16, NULL, false, 0, NULL);
1553 return offset;
1557 static const value_string tetra_RADIO_DOWNLINK_TIMEOUT_vals[] = {
1558 { 0, "disable" },
1559 { 1, "timeslots-144" },
1560 { 2, "timeslots-288" },
1561 { 3, "timeslots-432" },
1562 { 4, "timeslots-576" },
1563 { 5, "timeslots-720" },
1564 { 6, "timeslots-864" },
1565 { 7, "timeslots-1008" },
1566 { 8, "timeslots-1152" },
1567 { 9, "timeslots-1296" },
1568 { 10, "timeslots-1440" },
1569 { 11, "timeslots-1584" },
1570 { 12, "timeslots-1728" },
1571 { 13, "timeslots-1872" },
1572 { 14, "timeslots-2016" },
1573 { 15, "timeslots-2160" },
1574 { 0, NULL }
1578 static int
1579 dissect_tetra_RADIO_DOWNLINK_TIMEOUT(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1580 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1581 16, NULL, false, 0, NULL);
1583 return offset;
1588 static int
1589 dissect_tetra_INTEGER_0_65535(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1590 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1591 0U, 65535U, NULL, false);
1593 return offset;
1597 static const value_string tetra_T_hyperframe_or_cck_vals[] = {
1598 { 0, "hyperframe" },
1599 { 1, "cckid" },
1600 { 0, NULL }
1603 static const per_choice_t T_hyperframe_or_cck_choice[] = {
1604 { 0, &hf_tetra_hyperframe , ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_65535 },
1605 { 1, &hf_tetra_cckid , ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_65535 },
1606 { 0, NULL, 0, NULL }
1609 static int
1610 dissect_tetra_T_hyperframe_or_cck(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1611 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
1612 ett_tetra_T_hyperframe_or_cck, T_hyperframe_or_cck_choice,
1613 NULL);
1615 return offset;
1619 static const value_string tetra_FRAME_vals[] = {
1620 { 0, "not-common" },
1621 { 1, "common" },
1622 { 0, NULL }
1626 static int
1627 dissect_tetra_FRAME(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1628 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1629 2, NULL, false, 0, NULL);
1631 return offset;
1635 static const per_sequence_t TS_COMMON_FRAMES_sequence[] = {
1636 { &hf_tetra_frame1 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1637 { &hf_tetra_frame2 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1638 { &hf_tetra_frame3 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1639 { &hf_tetra_frame4 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1640 { &hf_tetra_frame5 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1641 { &hf_tetra_frame6 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1642 { &hf_tetra_frame7 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1643 { &hf_tetra_frame8 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1644 { &hf_tetra_frame9 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1645 { &hf_tetra_frame10 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1646 { &hf_tetra_frame11 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1647 { &hf_tetra_frame12 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1648 { &hf_tetra_frame13 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1649 { &hf_tetra_frame14 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1650 { &hf_tetra_frame15 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1651 { &hf_tetra_frame16 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1652 { &hf_tetra_frame17 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1653 { &hf_tetra_frame18 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1654 { NULL, 0, 0, NULL }
1657 static int
1658 dissect_tetra_TS_COMMON_FRAMES(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1659 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1660 ett_tetra_TS_COMMON_FRAMES, TS_COMMON_FRAMES_sequence);
1662 return offset;
1666 static const value_string tetra_IMM_vals[] = {
1667 { 0, "always-randomize" },
1668 { 1, "randomize-after-imm-tdma" },
1669 { 2, "randomize-after-imm-tdma" },
1670 { 3, "randomize-after-imm-tdma" },
1671 { 4, "randomize-after-imm-tdma" },
1672 { 5, "randomize-after-imm-tdma" },
1673 { 6, "randomize-after-imm-tdma" },
1674 { 7, "randomize-after-imm-tdma" },
1675 { 8, "randomize-after-imm-tdma" },
1676 { 9, "randomize-after-imm-tdma" },
1677 { 10, "randomize-after-imm-tdma" },
1678 { 11, "randomize-after-imm-tdma" },
1679 { 12, "randomize-after-imm-tdma" },
1680 { 13, "randomize-after-imm-tdma" },
1681 { 14, "randomize-after-imm-tdma" },
1682 { 15, "immediate-access-allowed" },
1683 { 0, NULL }
1687 static int
1688 dissect_tetra_IMM(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1689 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1690 16, NULL, false, 0, NULL);
1692 return offset;
1696 static const value_string tetra_WT_vals[] = {
1697 { 0, "reserved" },
1698 { 1, "response-within-wt-downlink" },
1699 { 2, "response-within-wt-downlink" },
1700 { 3, "response-within-wt-downlink" },
1701 { 4, "response-within-wt-downlink" },
1702 { 5, "response-within-wt-downlink" },
1703 { 6, "response-within-wt-downlink" },
1704 { 7, "response-within-wt-downlink" },
1705 { 8, "response-within-wt-downlink" },
1706 { 9, "response-within-wt-downlink" },
1707 { 10, "response-within-wt-downlink" },
1708 { 11, "response-within-wt-downlink" },
1709 { 12, "response-within-wt-downlink" },
1710 { 13, "response-within-wt-downlink" },
1711 { 14, "response-within-wt-downlink" },
1712 { 15, "response-within-wt-downlink" },
1713 { 0, NULL }
1717 static int
1718 dissect_tetra_WT(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1719 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1720 16, NULL, false, 0, NULL);
1722 return offset;
1726 static const value_string tetra_NU_vals[] = {
1727 { 0, "no-random" },
1728 { 1, "random-1" },
1729 { 2, "random-2" },
1730 { 3, "random-3" },
1731 { 4, "random-4" },
1732 { 5, "random-5" },
1733 { 6, "random-6" },
1734 { 7, "random-7" },
1735 { 8, "random-8" },
1736 { 9, "random-9" },
1737 { 10, "random-10" },
1738 { 11, "random-11" },
1739 { 12, "random-12" },
1740 { 13, "random-13" },
1741 { 14, "random-14" },
1742 { 15, "random-15" },
1743 { 0, NULL }
1747 static int
1748 dissect_tetra_NU(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1749 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1750 16, NULL, false, 0, NULL);
1752 return offset;
1756 static const value_string tetra_Frame_Len_Factor_vals[] = {
1757 { 0, "multiply-1" },
1758 { 1, "multiply-4" },
1759 { 0, NULL }
1763 static int
1764 dissect_tetra_Frame_Len_Factor(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1765 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1766 2, NULL, false, 0, NULL);
1768 return offset;
1772 static const value_string tetra_Timeslot_Pointer_vals[] = {
1773 { 0, "same-as-downlink" },
1774 { 1, "timeslot-4" },
1775 { 2, "timeslot-bit-map" },
1776 { 3, "timeslot-bit-map" },
1777 { 4, "timeslot-bit-map" },
1778 { 5, "timeslot-bit-map" },
1779 { 6, "timeslot-bit-map" },
1780 { 7, "timeslot-bit-map" },
1781 { 8, "timeslot-bit-map" },
1782 { 9, "timeslot-bit-map" },
1783 { 10, "timeslot-bit-map" },
1784 { 11, "timeslot-bit-map" },
1785 { 12, "timeslot-bit-map" },
1786 { 13, "timeslot-bit-map" },
1787 { 14, "timeslot-bit-map" },
1788 { 15, "all-four-timeslots" },
1789 { 0, NULL }
1793 static int
1794 dissect_tetra_Timeslot_Pointer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1795 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1796 16, NULL, false, 0, NULL);
1798 return offset;
1802 static const value_string tetra_Min_Pdu_Priority_vals[] = {
1803 { 0, "priority-0" },
1804 { 1, "priority-1" },
1805 { 2, "priority-2" },
1806 { 3, "priority-3" },
1807 { 4, "priority-4" },
1808 { 5, "priority-5" },
1809 { 6, "priority-6" },
1810 { 7, "priority-7" },
1811 { 0, NULL }
1815 static int
1816 dissect_tetra_Min_Pdu_Priority(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1817 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1818 8, NULL, false, 0, NULL);
1820 return offset;
1824 static const per_sequence_t Default_Code_A_sequence[] = {
1825 { &hf_tetra_imm , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_IMM },
1826 { &hf_tetra_wt , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_WT },
1827 { &hf_tetra_nu , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_NU },
1828 { &hf_tetra_frame_len_factor, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Frame_Len_Factor },
1829 { &hf_tetra_timeslot_pointer, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Timeslot_Pointer },
1830 { &hf_tetra_min_pdu_priority, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Min_Pdu_Priority },
1831 { NULL, 0, 0, NULL }
1834 static int
1835 dissect_tetra_Default_Code_A(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1836 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1837 ett_tetra_Default_Code_A, Default_Code_A_sequence);
1839 return offset;
1844 static int
1845 dissect_tetra_INTEGER_0_255(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1846 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1847 0U, 255U, NULL, false);
1849 return offset;
1853 static const value_string tetra_SDS_TL_Addressing_Method_vals[] = {
1854 { 0, "reserved" },
1855 { 1, "service-centre" },
1856 { 2, "never-use-service-centre" },
1857 { 3, "ms-choice-to-use-service-centre" },
1858 { 0, NULL }
1862 static int
1863 dissect_tetra_SDS_TL_Addressing_Method(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1864 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1865 4, NULL, false, 0, NULL);
1867 return offset;
1871 static const value_string tetra_Data_Priority_Supported_vals[] = {
1872 { 0, "not-supported" },
1873 { 1, "supported" },
1874 { 0, NULL }
1878 static int
1879 dissect_tetra_Data_Priority_Supported(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1880 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1881 2, NULL, false, 0, NULL);
1883 return offset;
1887 static const value_string tetra_Section_Information_vals[] = {
1888 { 0, "no-information" },
1889 { 1, "futher-information" },
1890 { 0, NULL }
1894 static int
1895 dissect_tetra_Section_Information(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1896 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1897 2, NULL, false, 0, NULL);
1899 return offset;
1903 static const per_sequence_t PRESENT1_sequence[] = {
1904 { &hf_tetra_data_priority_supported, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Data_Priority_Supported },
1905 { &hf_tetra_reserved_02 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
1906 { &hf_tetra_section_2_information, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Section_Information },
1907 { &hf_tetra_section_3_information, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Section_Information },
1908 { &hf_tetra_section_4_information, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Section_Information },
1909 { NULL, 0, 0, NULL }
1912 static int
1913 dissect_tetra_PRESENT1(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1914 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1915 ett_tetra_PRESENT1, PRESENT1_sequence);
1917 return offset;
1922 static int
1923 dissect_tetra_INTEGER_0_127(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1924 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1925 0U, 127U, NULL, false);
1927 return offset;
1931 static const value_string tetra_T_section_vals[] = {
1932 { 0, "present-1" },
1933 { 1, "present-2" },
1934 { 2, "present-3" },
1935 { 3, "present-4" },
1936 { 0, NULL }
1939 static const per_choice_t T_section_choice[] = {
1940 { 0, &hf_tetra_present_1 , ASN1_NO_EXTENSIONS , dissect_tetra_PRESENT1 },
1941 { 1, &hf_tetra_present_2 , ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_127 },
1942 { 2, &hf_tetra_present_3 , ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_127 },
1943 { 3, &hf_tetra_present_4 , ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_127 },
1944 { 0, NULL, 0, NULL }
1947 static int
1948 dissect_tetra_T_section(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1949 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
1950 ett_tetra_T_section, T_section_choice,
1951 NULL);
1953 return offset;
1957 static const per_sequence_t Extended_Services_Broadcast_sequence[] = {
1958 { &hf_tetra_security_information, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_255 },
1959 { &hf_tetra_sds_tl_addressing_method, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_SDS_TL_Addressing_Method },
1960 { &hf_tetra_gck_supported , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
1961 { &hf_tetra_section , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_section },
1962 { NULL, 0, 0, NULL }
1965 static int
1966 dissect_tetra_Extended_Services_Broadcast(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1967 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1968 ett_tetra_Extended_Services_Broadcast, Extended_Services_Broadcast_sequence);
1970 return offset;
1974 static const value_string tetra_T_optional_params_vals[] = {
1975 { 0, "even-multiframe" },
1976 { 1, "odd-multiframe" },
1977 { 2, "access-a-code" },
1978 { 3, "extend-service" },
1979 { 0, NULL }
1982 static const per_choice_t T_optional_params_choice[] = {
1983 { 0, &hf_tetra_even_multiframe, ASN1_NO_EXTENSIONS , dissect_tetra_TS_COMMON_FRAMES },
1984 { 1, &hf_tetra_odd_multiframe, ASN1_NO_EXTENSIONS , dissect_tetra_TS_COMMON_FRAMES },
1985 { 2, &hf_tetra_access_a_code , ASN1_NO_EXTENSIONS , dissect_tetra_Default_Code_A },
1986 { 3, &hf_tetra_extend_service, ASN1_NO_EXTENSIONS , dissect_tetra_Extended_Services_Broadcast },
1987 { 0, NULL, 0, NULL }
1990 static int
1991 dissect_tetra_T_optional_params(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1992 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
1993 ett_tetra_T_optional_params, T_optional_params_choice,
1994 NULL);
1996 return offset;
2001 static int
2002 dissect_tetra_Subscriber_class(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2003 offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
2004 16, 16, false, NULL, 0, NULL, NULL);
2006 return offset;
2010 static const per_sequence_t BNCH_sequence[] = {
2011 { &hf_tetra_pdu_type , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
2012 { &hf_tetra_broadcast_type, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
2013 { &hf_tetra_main_carrier , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_4095 },
2014 { &hf_tetra_frequency_band, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_15 },
2015 { &hf_tetra_offset , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Offset },
2016 { &hf_tetra_duplex_spacing, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
2017 { &hf_tetra_reverse_operation, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Reverse_Operation },
2018 { &hf_tetra_sencond_ctl_carrier, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Sencond_Ctl_Carrier },
2019 { &hf_tetra_ms_txpwr_max_cell, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_MS_TXPWR_MAX_CELL },
2020 { &hf_tetra_rxlev_access_min, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_RXLEV_ACCESS_MIN },
2021 { &hf_tetra_access_parameter, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_ACCESS_PARAMETER },
2022 { &hf_tetra_radio_downlink_timeout, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_RADIO_DOWNLINK_TIMEOUT },
2023 { &hf_tetra_hyperframe_or_cck, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_hyperframe_or_cck },
2024 { &hf_tetra_optional_params, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_params },
2025 { &hf_tetra_la , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
2026 { &hf_tetra_subscriber_class, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Subscriber_class },
2027 { &hf_tetra_registriation , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
2028 { &hf_tetra_de_registration, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
2029 { &hf_tetra_priority_cell , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
2030 { &hf_tetra_minimum_mode_service, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
2031 { &hf_tetra_migration , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
2032 { &hf_tetra_system_wide_service, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
2033 { &hf_tetra_tetra_voice_service, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
2034 { &hf_tetra_circuit_mode_data_service, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
2035 { &hf_tetra_reserved_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
2036 { &hf_tetra_sndcp_service , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
2037 { &hf_tetra_air_interface_encryption, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
2038 { &hf_tetra_advanced_link_support, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
2039 { NULL, 0, 0, NULL }
2042 static int
2043 dissect_tetra_BNCH(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2044 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2045 ett_tetra_BNCH, BNCH_sequence);
2047 return offset;
2051 static const value_string tetra_Fill_Bit_Indication_vals[] = {
2052 { 0, "no-present" },
2053 { 1, "present" },
2054 { 0, NULL }
2058 static int
2059 dissect_tetra_Fill_Bit_Indication(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2060 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2061 2, NULL, false, 0, NULL);
2063 return offset;
2067 static const value_string tetra_Encrypted_Flag_vals[] = {
2068 { 0, "not-encrypted" },
2069 { 1, "encrypted" },
2070 { 0, NULL }
2074 static int
2075 dissect_tetra_Encrypted_Flag(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2076 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2077 2, NULL, false, 0, NULL);
2079 return offset;
2084 static int
2085 dissect_tetra_INTEGER_0_16777215(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2086 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
2087 0U, 16777215U, NULL, false);
2089 return offset;
2093 static const value_string tetra_Address_vals[] = {
2094 { 0, "ssi" },
2095 { 1, "eventLabel" },
2096 { 2, "ussi" },
2097 { 3, "smi" },
2098 { 0, NULL }
2101 static const per_choice_t Address_choice[] = {
2102 { 0, &hf_tetra_ssi , ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_16777215 },
2103 { 1, &hf_tetra_eventLabel , ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_1023 },
2104 { 2, &hf_tetra_ussi , ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_16777215 },
2105 { 3, &hf_tetra_smi , ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_16777215 },
2106 { 0, NULL, 0, NULL }
2109 static int
2110 dissect_tetra_Address(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2111 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2112 ett_tetra_Address, Address_choice,
2113 NULL);
2115 return offset;
2120 static int
2121 dissect_tetra_NULL(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2122 offset = dissect_per_null(tvb, offset, actx, tree, hf_index);
2124 return offset;
2128 static const value_string tetra_UPDATE_TYPE_vals[] = {
2129 { 0, "roaming-location-updating" },
2130 { 1, "temporary-registration" },
2131 { 2, "periodic-location-updating" },
2132 { 3, "itsi-attach" },
2133 { 4, "call-restoration-roaming" },
2134 { 5, "migrating-or-call-restoration-migrating" },
2135 { 6, "demand-location-updating" },
2136 { 7, "disabled-MS-updating" },
2137 { 0, NULL }
2141 static int
2142 dissect_tetra_UPDATE_TYPE(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2143 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2144 8, NULL, false, 0, NULL);
2146 return offset;
2151 static int
2152 dissect_tetra_BOOLEAN(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2153 offset = dissect_per_boolean(tvb, offset, actx, tree, hf_index, NULL);
2155 return offset;
2159 static const value_string tetra_T_cipher_control_vals[] = {
2160 { 0, "no-cipher" },
2161 { 1, "ciphering-parameters" },
2162 { 0, NULL }
2165 static const per_choice_t T_cipher_control_choice[] = {
2166 { 0, &hf_tetra_no_cipher , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
2167 { 1, &hf_tetra_ciphering_parameters, ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_1023 },
2168 { 0, NULL, 0, NULL }
2171 static int
2172 dissect_tetra_T_cipher_control(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2173 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2174 ett_tetra_T_cipher_control, T_cipher_control_choice,
2175 NULL);
2177 return offset;
2181 static const value_string tetra_T_class_of_MS_vals[] = {
2182 { 0, "none" },
2183 { 1, "class-of-MS" },
2184 { 0, NULL }
2187 static const per_choice_t T_class_of_MS_choice[] = {
2188 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
2189 { 1, &hf_tetra_class_of_MS_01, ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_16777215 },
2190 { 0, NULL, 0, NULL }
2193 static int
2194 dissect_tetra_T_class_of_MS(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2195 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2196 ett_tetra_T_class_of_MS, T_class_of_MS_choice,
2197 NULL);
2199 return offset;
2203 static const value_string tetra_T_energy_saving_mode_01_vals[] = {
2204 { 0, "none" },
2205 { 1, "energy-saving-mode" },
2206 { 0, NULL }
2209 static const per_choice_t T_energy_saving_mode_01_choice[] = {
2210 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
2211 { 1, &hf_tetra_energy_saving_mode_01, ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_7 },
2212 { 0, NULL, 0, NULL }
2215 static int
2216 dissect_tetra_T_energy_saving_mode_01(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2217 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2218 ett_tetra_T_energy_saving_mode_01, T_energy_saving_mode_01_choice,
2219 NULL);
2221 return offset;
2225 static const value_string tetra_T_la_information_vals[] = {
2226 { 0, "none" },
2227 { 1, "la-information" },
2228 { 0, NULL }
2231 static const per_choice_t T_la_information_choice[] = {
2232 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
2233 { 1, &hf_tetra_la_information_01, ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_16383 },
2234 { 0, NULL, 0, NULL }
2237 static int
2238 dissect_tetra_T_la_information(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2239 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2240 ett_tetra_T_la_information, T_la_information_choice,
2241 NULL);
2243 return offset;
2248 static int
2249 dissect_tetra_OCTET_STRING_SIZE_3(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2250 offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
2251 3, 3, false, NULL);
2253 return offset;
2257 static const value_string tetra_T_ssi_01_vals[] = {
2258 { 0, "none" },
2259 { 1, "ssi" },
2260 { 0, NULL }
2263 static const per_choice_t T_ssi_01_choice[] = {
2264 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
2265 { 1, &hf_tetra_ssi_03 , ASN1_NO_EXTENSIONS , dissect_tetra_OCTET_STRING_SIZE_3 },
2266 { 0, NULL, 0, NULL }
2269 static int
2270 dissect_tetra_T_ssi_01(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2271 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2272 ett_tetra_T_ssi_01, T_ssi_01_choice,
2273 NULL);
2275 return offset;
2279 static const value_string tetra_T_address_extension_01_vals[] = {
2280 { 0, "none" },
2281 { 1, "address-extension" },
2282 { 0, NULL }
2285 static const per_choice_t T_address_extension_01_choice[] = {
2286 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
2287 { 1, &hf_tetra_address_extension_01, ASN1_NO_EXTENSIONS , dissect_tetra_OCTET_STRING_SIZE_3 },
2288 { 0, NULL, 0, NULL }
2291 static int
2292 dissect_tetra_T_address_extension_01(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2293 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2294 ett_tetra_T_address_extension_01, T_address_extension_01_choice,
2295 NULL);
2297 return offset;
2301 static const value_string tetra_TYPE3_IDENTIFIER_vals[] = {
2302 { 0, "reserved" },
2303 { 1, "default-group-attachment-lifetime" },
2304 { 2, "new-registered-area" },
2305 { 3, "group-identity-location-demand" },
2306 { 4, "group-report-response" },
2307 { 5, "group-identity-location-accept" },
2308 { 6, "dm-ms-address" },
2309 { 7, "group-identity-downlink" },
2310 { 8, "group-identity-uplink" },
2311 { 9, "authentication-uplink" },
2312 { 10, "authentication-downlink" },
2313 { 11, "reserved" },
2314 { 12, "reserved1" },
2315 { 13, "reserved2" },
2316 { 14, "reserved3" },
2317 { 15, "proprietary" },
2318 { 0, NULL }
2322 static int
2323 dissect_tetra_TYPE3_IDENTIFIER(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2324 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2325 16, NULL, false, 0, NULL);
2327 return offset;
2331 static const value_string tetra_T_group_identity_location_demand_vals[] = {
2332 { 0, "none" },
2333 { 1, "group-identity-location-demand" },
2334 { 0, NULL }
2337 static const per_choice_t T_group_identity_location_demand_choice[] = {
2338 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
2339 { 1, &hf_tetra_group_identity_location_demand_01, ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_3 },
2340 { 0, NULL, 0, NULL }
2343 static int
2344 dissect_tetra_T_group_identity_location_demand(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2345 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2346 ett_tetra_T_group_identity_location_demand, T_group_identity_location_demand_choice,
2347 NULL);
2349 return offset;
2353 static const value_string tetra_T_group_report_response_vals[] = {
2354 { 0, "none" },
2355 { 1, "group-report-response" },
2356 { 0, NULL }
2359 static const per_choice_t T_group_report_response_choice[] = {
2360 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
2361 { 1, &hf_tetra_group_report_response_01, ASN1_NO_EXTENSIONS , dissect_tetra_BOOLEAN },
2362 { 0, NULL, 0, NULL }
2365 static int
2366 dissect_tetra_T_group_report_response(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2367 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2368 ett_tetra_T_group_report_response, T_group_report_response_choice,
2369 NULL);
2371 return offset;
2375 static const value_string tetra_T_group_identity_uplink_vals[] = {
2376 { 0, "none" },
2377 { 1, "group-identity-uplink" },
2378 { 0, NULL }
2381 static const per_choice_t T_group_identity_uplink_choice[] = {
2382 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
2383 { 1, &hf_tetra_group_identity_uplink_01, ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_15 },
2384 { 0, NULL, 0, NULL }
2387 static int
2388 dissect_tetra_T_group_identity_uplink(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2389 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2390 ett_tetra_T_group_identity_uplink, T_group_identity_uplink_choice,
2391 NULL);
2393 return offset;
2397 static const value_string tetra_T_proprietary_01_vals[] = {
2398 { 0, "none" },
2399 { 1, "proprietary" },
2400 { 0, NULL }
2403 static const per_choice_t T_proprietary_01_choice[] = {
2404 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
2405 { 1, &hf_tetra_proprietary_01, ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_7 },
2406 { 0, NULL, 0, NULL }
2409 static int
2410 dissect_tetra_T_proprietary_01(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2411 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2412 ett_tetra_T_proprietary_01, T_proprietary_01_choice,
2413 NULL);
2415 return offset;
2419 static const per_sequence_t T_type3_elements_01_sequence[] = {
2420 { &hf_tetra_type3_identifier, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_TYPE3_IDENTIFIER },
2421 { &hf_tetra_group_identity_location_demand, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_group_identity_location_demand },
2422 { &hf_tetra_group_report_response, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_group_report_response },
2423 { &hf_tetra_group_identity_uplink, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_group_identity_uplink },
2424 { &hf_tetra_proprietary_02, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_proprietary_01 },
2425 { NULL, 0, 0, NULL }
2428 static int
2429 dissect_tetra_T_type3_elements_01(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2430 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2431 ett_tetra_T_type3_elements_01, T_type3_elements_01_sequence);
2433 return offset;
2437 static const value_string tetra_T_type3_01_vals[] = {
2438 { 0, "no-type3" },
2439 { 1, "type3-elements" },
2440 { 0, NULL }
2443 static const per_choice_t T_type3_01_choice[] = {
2444 { 0, &hf_tetra_no_type3 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
2445 { 1, &hf_tetra_type3_elements_01, ASN1_NO_EXTENSIONS , dissect_tetra_T_type3_elements_01 },
2446 { 0, NULL, 0, NULL }
2449 static int
2450 dissect_tetra_T_type3_01(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2451 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2452 ett_tetra_T_type3_01, T_type3_01_choice,
2453 NULL);
2455 return offset;
2459 static const per_sequence_t T_type2_parameters_04_sequence[] = {
2460 { &hf_tetra_class_of_MS , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_class_of_MS },
2461 { &hf_tetra_energy_saving_mode_02, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_energy_saving_mode_01 },
2462 { &hf_tetra_la_information, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_la_information },
2463 { &hf_tetra_ssi_04 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_ssi_01 },
2464 { &hf_tetra_address_extension_02, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_address_extension_01 },
2465 { &hf_tetra_type3_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_type3_01 },
2466 { NULL, 0, 0, NULL }
2469 static int
2470 dissect_tetra_T_type2_parameters_04(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2471 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2472 ett_tetra_T_type2_parameters_04, T_type2_parameters_04_sequence);
2474 return offset;
2478 static const value_string tetra_T_optional_elements_06_vals[] = {
2479 { 0, "no-type2" },
2480 { 1, "type2-parameters" },
2481 { 0, NULL }
2484 static const per_choice_t T_optional_elements_06_choice[] = {
2485 { 0, &hf_tetra_no_type2 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
2486 { 1, &hf_tetra_type2_parameters_04, ASN1_NO_EXTENSIONS , dissect_tetra_T_type2_parameters_04 },
2487 { 0, NULL, 0, NULL }
2490 static int
2491 dissect_tetra_T_optional_elements_06(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2492 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2493 ett_tetra_T_optional_elements_06, T_optional_elements_06_choice,
2494 NULL);
2496 return offset;
2500 static const per_sequence_t U_LOCATION_UPDATE_DEMAND_sequence[] = {
2501 { &hf_tetra_location_update_type, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_UPDATE_TYPE },
2502 { &hf_tetra_request_to_append_LA, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
2503 { &hf_tetra_cipher_control_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_cipher_control },
2504 { &hf_tetra_optional_elements_06, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_06 },
2505 { NULL, 0, 0, NULL }
2508 static int
2509 dissect_tetra_U_LOCATION_UPDATE_DEMAND(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2510 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2511 ett_tetra_U_LOCATION_UPDATE_DEMAND, U_LOCATION_UPDATE_DEMAND_sequence);
2513 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-LOCATION-UPDATE-DEMAND");
2515 return offset;
2519 static const value_string tetra_T_scanning_on_off_vals[] = {
2520 { 0, "on" },
2521 { 1, "off" },
2522 { 0, NULL }
2526 static int
2527 dissect_tetra_T_scanning_on_off(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2528 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2529 2, NULL, false, 0, NULL);
2531 return offset;
2535 static const per_sequence_t U_MM_STATUS_sequence[] = {
2536 { &hf_tetra_status_uplink , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_63 },
2537 { &hf_tetra_scanning_on_off, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_scanning_on_off },
2538 { NULL, 0, 0, NULL }
2541 static int
2542 dissect_tetra_U_MM_STATUS(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2543 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2544 ett_tetra_U_MM_STATUS, U_MM_STATUS_sequence);
2546 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-MM-STATUS");
2548 return offset;
2553 static int
2554 dissect_tetra_INTEGER_0_2047(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2555 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
2556 0U, 2047U, NULL, false);
2558 return offset;
2562 static const per_sequence_t T_attach_01_sequence[] = {
2563 { &hf_tetra_class_of_usage, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
2564 { NULL, 0, 0, NULL }
2567 static int
2568 dissect_tetra_T_attach_01(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2569 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2570 ett_tetra_T_attach_01, T_attach_01_sequence);
2572 return offset;
2576 static const value_string tetra_T_detach_uplike_vals[] = {
2577 { 0, "unknow-gssi" },
2578 { 1, "invalid-cipher" },
2579 { 2, "user-intitial" },
2580 { 3, "reserved" },
2581 { 0, NULL }
2585 static int
2586 dissect_tetra_T_detach_uplike(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2587 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2588 4, NULL, false, 0, NULL);
2590 return offset;
2594 static const per_sequence_t T_detach_01_sequence[] = {
2595 { &hf_tetra_detach_uplike , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_detach_uplike },
2596 { NULL, 0, 0, NULL }
2599 static int
2600 dissect_tetra_T_detach_01(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2601 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2602 ett_tetra_T_detach_01, T_detach_01_sequence);
2604 return offset;
2608 static const value_string tetra_T_attach_detach_identifier_01_vals[] = {
2609 { 0, "attach" },
2610 { 1, "detach" },
2611 { 0, NULL }
2614 static const per_choice_t T_attach_detach_identifier_01_choice[] = {
2615 { 0, &hf_tetra_attach_01 , ASN1_NO_EXTENSIONS , dissect_tetra_T_attach_01 },
2616 { 1, &hf_tetra_detach_01 , ASN1_NO_EXTENSIONS , dissect_tetra_T_detach_01 },
2617 { 0, NULL, 0, NULL }
2620 static int
2621 dissect_tetra_T_attach_detach_identifier_01(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2622 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2623 ett_tetra_T_attach_detach_identifier_01, T_attach_detach_identifier_01_choice,
2624 NULL);
2626 return offset;
2630 static const per_sequence_t T_gssi_extension_01_sequence[] = {
2631 { &hf_tetra_gssi_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_OCTET_STRING_SIZE_3 },
2632 { &hf_tetra_extension , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_OCTET_STRING_SIZE_3 },
2633 { NULL, 0, 0, NULL }
2636 static int
2637 dissect_tetra_T_gssi_extension_01(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2638 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2639 ett_tetra_T_gssi_extension_01, T_gssi_extension_01_sequence);
2641 return offset;
2645 static const value_string tetra_T_address_type_01_vals[] = {
2646 { 0, "gssi" },
2647 { 1, "gssi-extension" },
2648 { 2, "vgssi" },
2649 { 0, NULL }
2652 static const per_choice_t T_address_type_01_choice[] = {
2653 { 0, &hf_tetra_gssi_01 , ASN1_NO_EXTENSIONS , dissect_tetra_OCTET_STRING_SIZE_3 },
2654 { 1, &hf_tetra_gssi_extension_01, ASN1_NO_EXTENSIONS , dissect_tetra_T_gssi_extension_01 },
2655 { 2, &hf_tetra_vgssi , ASN1_NO_EXTENSIONS , dissect_tetra_OCTET_STRING_SIZE_3 },
2656 { 0, NULL, 0, NULL }
2659 static int
2660 dissect_tetra_T_address_type_01(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2661 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2662 ett_tetra_T_address_type_01, T_address_type_01_choice,
2663 NULL);
2665 return offset;
2669 static const per_sequence_t GROUP_IDENTITY_UPLINK_sequence[] = {
2670 { &hf_tetra_attach_detach_identifier_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_attach_detach_identifier_01 },
2671 { &hf_tetra_address_type_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_address_type_01 },
2672 { NULL, 0, 0, NULL }
2675 static int
2676 dissect_tetra_GROUP_IDENTITY_UPLINK(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2677 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2678 ett_tetra_GROUP_IDENTITY_UPLINK, GROUP_IDENTITY_UPLINK_sequence);
2680 return offset;
2684 static const per_sequence_t T_type3_elements_02_sequence[] = {
2685 { &hf_tetra_type3_identifier, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_TYPE3_IDENTIFIER },
2686 { &hf_tetra_length , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_2047 },
2687 { &hf_tetra_repeat_num , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_63 },
2688 { &hf_tetra_group_identity_uplink_02, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_GROUP_IDENTITY_UPLINK },
2689 { NULL, 0, 0, NULL }
2692 static int
2693 dissect_tetra_T_type3_elements_02(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2694 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2695 ett_tetra_T_type3_elements_02, T_type3_elements_02_sequence);
2697 return offset;
2701 static const value_string tetra_T_type3_02_vals[] = {
2702 { 0, "no-type3" },
2703 { 1, "type3-elements" },
2704 { 0, NULL }
2707 static const per_choice_t T_type3_02_choice[] = {
2708 { 0, &hf_tetra_no_type3 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
2709 { 1, &hf_tetra_type3_elements_02, ASN1_NO_EXTENSIONS , dissect_tetra_T_type3_elements_02 },
2710 { 0, NULL, 0, NULL }
2713 static int
2714 dissect_tetra_T_type3_02(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2715 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2716 ett_tetra_T_type3_02, T_type3_02_choice,
2717 NULL);
2719 return offset;
2723 static const per_sequence_t T_type2_element_sequence[] = {
2724 { &hf_tetra_type3_02 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_type3_02 },
2725 { NULL, 0, 0, NULL }
2728 static int
2729 dissect_tetra_T_type2_element(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2730 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2731 ett_tetra_T_type2_element, T_type2_element_sequence);
2733 return offset;
2737 static const value_string tetra_T_optional_elements_07_vals[] = {
2738 { 0, "no-type2" },
2739 { 1, "type2-element" },
2740 { 0, NULL }
2743 static const per_choice_t T_optional_elements_07_choice[] = {
2744 { 0, &hf_tetra_no_type2 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
2745 { 1, &hf_tetra_type2_element , ASN1_NO_EXTENSIONS , dissect_tetra_T_type2_element },
2746 { 0, NULL, 0, NULL }
2749 static int
2750 dissect_tetra_T_optional_elements_07(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2751 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2752 ett_tetra_T_optional_elements_07, T_optional_elements_07_choice,
2753 NULL);
2755 return offset;
2759 static const per_sequence_t U_ATTACH_DETACH_GROUP_IDENTITY_sequence[] = {
2760 { &hf_tetra_group_identity_report, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
2761 { &hf_tetra_group_identity_attach_detach_mode, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
2762 { &hf_tetra_optional_elements_07, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_07 },
2763 { NULL, 0, 0, NULL }
2766 static int
2767 dissect_tetra_U_ATTACH_DETACH_GROUP_IDENTITY(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2768 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2769 ett_tetra_U_ATTACH_DETACH_GROUP_IDENTITY, U_ATTACH_DETACH_GROUP_IDENTITY_sequence);
2771 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-ATTACH-DETACH-GROUP-IDENTITY");
2773 return offset;
2777 static const per_sequence_t T_type3_elements_03_sequence[] = {
2778 { &hf_tetra_type3_identifier, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_TYPE3_IDENTIFIER },
2779 { &hf_tetra_length , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_2047 },
2780 { &hf_tetra_repeat_num , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_63 },
2781 { &hf_tetra_group_identity_uplink_02, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_GROUP_IDENTITY_UPLINK },
2782 { NULL, 0, 0, NULL }
2785 static int
2786 dissect_tetra_T_type3_elements_03(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2787 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2788 ett_tetra_T_type3_elements_03, T_type3_elements_03_sequence);
2790 return offset;
2794 static const value_string tetra_T_type3_03_vals[] = {
2795 { 0, "no-type3" },
2796 { 1, "type3-elements" },
2797 { 0, NULL }
2800 static const per_choice_t T_type3_03_choice[] = {
2801 { 0, &hf_tetra_no_type3 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
2802 { 1, &hf_tetra_type3_elements_03, ASN1_NO_EXTENSIONS , dissect_tetra_T_type3_elements_03 },
2803 { 0, NULL, 0, NULL }
2806 static int
2807 dissect_tetra_T_type3_03(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2808 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2809 ett_tetra_T_type3_03, T_type3_03_choice,
2810 NULL);
2812 return offset;
2816 static const per_sequence_t T_type2_element_01_sequence[] = {
2817 { &hf_tetra_type3_03 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_type3_03 },
2818 { NULL, 0, 0, NULL }
2821 static int
2822 dissect_tetra_T_type2_element_01(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2823 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2824 ett_tetra_T_type2_element_01, T_type2_element_01_sequence);
2826 return offset;
2830 static const value_string tetra_T_optional_elements_08_vals[] = {
2831 { 0, "no-type2" },
2832 { 1, "type2-element" },
2833 { 0, NULL }
2836 static const per_choice_t T_optional_elements_08_choice[] = {
2837 { 0, &hf_tetra_no_type2 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
2838 { 1, &hf_tetra_type2_element_01, ASN1_NO_EXTENSIONS , dissect_tetra_T_type2_element_01 },
2839 { 0, NULL, 0, NULL }
2842 static int
2843 dissect_tetra_T_optional_elements_08(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2844 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2845 ett_tetra_T_optional_elements_08, T_optional_elements_08_choice,
2846 NULL);
2848 return offset;
2852 static const per_sequence_t U_ATTACH_DETACH_GROUP_IDENTITY_ACK_sequence[] = {
2853 { &hf_tetra_group_identity_ack_type, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
2854 { &hf_tetra_group_identity_attach_detach_mode, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
2855 { &hf_tetra_optional_elements_08, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_08 },
2856 { NULL, 0, 0, NULL }
2859 static int
2860 dissect_tetra_U_ATTACH_DETACH_GROUP_IDENTITY_ACK(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2861 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2862 ett_tetra_U_ATTACH_DETACH_GROUP_IDENTITY_ACK, U_ATTACH_DETACH_GROUP_IDENTITY_ACK_sequence);
2864 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-ATTACH-DETACH-GROUP-IDENTITY-ACK");
2866 return offset;
2870 static const value_string tetra_U_MM_PDU_vals[] = {
2871 { 0, "u-Authentication" },
2872 { 1, "u-Itsi-Detach" },
2873 { 2, "u-Location-Update-Demand" },
2874 { 3, "u-MM-Status" },
2875 { 4, "u-MM-reserved1" },
2876 { 5, "u-WK" },
2877 { 6, "u-MM-reserved3" },
2878 { 7, "u-Attach-Detach-Group-Identity" },
2879 { 8, "u-Attach-Detach-Group-Identity-Ack" },
2880 { 9, "u-TEI-Provide" },
2881 { 10, "u-MM-reserved6" },
2882 { 11, "u-Disabled-Status" },
2883 { 12, "u-MM-reserved7" },
2884 { 13, "u-MM-reserved8" },
2885 { 14, "u-MM-reserved9" },
2886 { 15, "u-MM-Function-Not-Support" },
2887 { 0, NULL }
2890 static const per_choice_t U_MM_PDU_choice[] = {
2891 { 0, &hf_tetra_u_Authentication, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
2892 { 1, &hf_tetra_u_Itsi_Detach , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
2893 { 2, &hf_tetra_u_Location_Update_Demand, ASN1_NO_EXTENSIONS , dissect_tetra_U_LOCATION_UPDATE_DEMAND },
2894 { 3, &hf_tetra_u_MM_Status , ASN1_NO_EXTENSIONS , dissect_tetra_U_MM_STATUS },
2895 { 4, &hf_tetra_u_MM_reserved1, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
2896 { 5, &hf_tetra_u_WK , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
2897 { 6, &hf_tetra_u_MM_reserved3, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
2898 { 7, &hf_tetra_u_Attach_Detach_Group_Identity, ASN1_NO_EXTENSIONS , dissect_tetra_U_ATTACH_DETACH_GROUP_IDENTITY },
2899 { 8, &hf_tetra_u_Attach_Detach_Group_Identity_Ack, ASN1_NO_EXTENSIONS , dissect_tetra_U_ATTACH_DETACH_GROUP_IDENTITY_ACK },
2900 { 9, &hf_tetra_u_TEI_Provide , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
2901 { 10, &hf_tetra_u_MM_reserved6, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
2902 { 11, &hf_tetra_u_Disabled_Status, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
2903 { 12, &hf_tetra_u_MM_reserved7, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
2904 { 13, &hf_tetra_u_MM_reserved8, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
2905 { 14, &hf_tetra_u_MM_reserved9, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
2906 { 15, &hf_tetra_u_MM_Function_Not_Support, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
2907 { 0, NULL, 0, NULL }
2910 static int
2911 dissect_tetra_U_MM_PDU(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2912 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2913 ett_tetra_U_MM_PDU, U_MM_PDU_choice,
2914 NULL);
2916 return offset;
2920 static const value_string tetra_T_simplex_duplex_selection_vals[] = {
2921 { 0, "simplex" },
2922 { 1, "duplex" },
2923 { 0, NULL }
2927 static int
2928 dissect_tetra_T_simplex_duplex_selection(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2929 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2930 2, NULL, false, 0, NULL);
2932 return offset;
2936 static const value_string tetra_CIRCUIT_vals[] = {
2937 { 0, "speech-tch-s" },
2938 { 1, "unprotected-tch-7-2" },
2939 { 2, "low-protection-tch-4-8" },
2940 { 3, "low-protection-tch-4-8" },
2941 { 4, "low-protection-tch-4-8" },
2942 { 5, "high-protection-tch-2-4" },
2943 { 6, "high-protection-tch-2-4" },
2944 { 7, "high-protection-tch-2-4" },
2945 { 0, NULL }
2949 static int
2950 dissect_tetra_CIRCUIT(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2951 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2952 8, NULL, false, 0, NULL);
2954 return offset;
2958 static const per_sequence_t Basic_service_information_sequence[] = {
2959 { &hf_tetra_circuit_mode , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_CIRCUIT },
2960 { &hf_tetra_encryption , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
2961 { &hf_tetra_communication , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
2962 { &hf_tetra_slots_or_speech, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
2963 { NULL, 0, 0, NULL }
2966 static int
2967 dissect_tetra_Basic_service_information(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2968 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2969 ett_tetra_Basic_service_information, Basic_service_information_sequence);
2971 return offset;
2975 static const value_string tetra_T_basic_service_information_vals[] = {
2976 { 0, "none" },
2977 { 1, "basic-service-information" },
2978 { 0, NULL }
2981 static const per_choice_t T_basic_service_information_choice[] = {
2982 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
2983 { 1, &hf_tetra_basic_service_information, ASN1_NO_EXTENSIONS , dissect_tetra_Basic_service_information },
2984 { 0, NULL, 0, NULL }
2987 static int
2988 dissect_tetra_T_basic_service_information(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2989 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2990 ett_tetra_T_basic_service_information, T_basic_service_information_choice,
2991 NULL);
2993 return offset;
2998 static int
2999 dissect_tetra_Proprietary_element_owner(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3000 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
3001 0U, 255U, NULL, false);
3003 return offset;
3008 static int
3009 dissect_tetra_BIT_STRING(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3010 offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
3011 NO_BOUND, NO_BOUND, false, NULL, 0, NULL, NULL);
3013 return offset;
3017 static const per_sequence_t Type1_sequence[] = {
3018 { &hf_tetra_proprietary_element_owner, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Proprietary_element_owner },
3019 { &hf_tetra_proprietary_element_owner_extension, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_BIT_STRING },
3020 { NULL, 0, 0, NULL }
3023 static int
3024 dissect_tetra_Type1(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3025 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3026 ett_tetra_Type1, Type1_sequence);
3028 return offset;
3032 static const per_sequence_t Type2_sequence[] = {
3033 { &hf_tetra_proprietary_element_owner, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Proprietary_element_owner },
3034 { NULL, 0, 0, NULL }
3037 static int
3038 dissect_tetra_Type2(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3039 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3040 ett_tetra_Type2, Type2_sequence);
3042 return offset;
3046 static const value_string tetra_T_data_01_vals[] = {
3047 { 0, "element1" },
3048 { 1, "element" },
3049 { 0, NULL }
3052 static const per_choice_t T_data_01_choice[] = {
3053 { 0, &hf_tetra_element1 , ASN1_NO_EXTENSIONS , dissect_tetra_Type1 },
3054 { 1, &hf_tetra_element , ASN1_NO_EXTENSIONS , dissect_tetra_Type2 },
3055 { 0, NULL, 0, NULL }
3058 static int
3059 dissect_tetra_T_data_01(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3060 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3061 ett_tetra_T_data_01, T_data_01_choice,
3062 NULL);
3064 return offset;
3068 static const per_sequence_t Proprietary_sequence[] = {
3069 { &hf_tetra_data_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_data_01 },
3070 { NULL, 0, 0, NULL }
3073 static int
3074 dissect_tetra_Proprietary(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3075 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3076 ett_tetra_Proprietary, Proprietary_sequence);
3078 return offset;
3082 static const value_string tetra_T_prop_01_vals[] = {
3083 { 0, "none" },
3084 { 1, "prop" },
3085 { 0, NULL }
3088 static const per_choice_t T_prop_01_choice[] = {
3089 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
3090 { 1, &hf_tetra_prop_01 , ASN1_NO_EXTENSIONS , dissect_tetra_Proprietary },
3091 { 0, NULL, 0, NULL }
3094 static int
3095 dissect_tetra_T_prop_01(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3096 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3097 ett_tetra_T_prop_01, T_prop_01_choice,
3098 NULL);
3100 return offset;
3104 static const per_sequence_t T_type2_parameters_06_sequence[] = {
3105 { &hf_tetra_basic_service_information_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_basic_service_information },
3106 { &hf_tetra_prop_02 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop_01 },
3107 { NULL, 0, 0, NULL }
3110 static int
3111 dissect_tetra_T_type2_parameters_06(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3112 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3113 ett_tetra_T_type2_parameters_06, T_type2_parameters_06_sequence);
3115 return offset;
3119 static const value_string tetra_T_optional_elements_10_vals[] = {
3120 { 0, "no-type2" },
3121 { 1, "type2-parameters" },
3122 { 0, NULL }
3125 static const per_choice_t T_optional_elements_10_choice[] = {
3126 { 0, &hf_tetra_no_type2 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
3127 { 1, &hf_tetra_type2_parameters_06, ASN1_NO_EXTENSIONS , dissect_tetra_T_type2_parameters_06 },
3128 { 0, NULL, 0, NULL }
3131 static int
3132 dissect_tetra_T_optional_elements_10(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3133 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3134 ett_tetra_T_optional_elements_10, T_optional_elements_10_choice,
3135 NULL);
3137 return offset;
3141 static const per_sequence_t U_ALERT_sequence[] = {
3142 { &hf_tetra_call_identifier_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1023 },
3143 { &hf_tetra_reserved_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
3144 { &hf_tetra_simplex_duplex_selection, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_simplex_duplex_selection },
3145 { &hf_tetra_optional_elements_10, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_10 },
3146 { NULL, 0, 0, NULL }
3149 static int
3150 dissect_tetra_U_ALERT(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3151 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3152 ett_tetra_U_ALERT, U_ALERT_sequence);
3154 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-ALERT");
3156 return offset;
3160 static const value_string tetra_T_simplex_duplex_selection_01_vals[] = {
3161 { 0, "simplex" },
3162 { 1, "duplex" },
3163 { 0, NULL }
3167 static int
3168 dissect_tetra_T_simplex_duplex_selection_01(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3169 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
3170 2, NULL, false, 0, NULL);
3172 return offset;
3176 static const value_string tetra_T_basic_service_information_01_vals[] = {
3177 { 0, "none" },
3178 { 1, "basic-service-information" },
3179 { 0, NULL }
3182 static const per_choice_t T_basic_service_information_01_choice[] = {
3183 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
3184 { 1, &hf_tetra_basic_service_information, ASN1_NO_EXTENSIONS , dissect_tetra_Basic_service_information },
3185 { 0, NULL, 0, NULL }
3188 static int
3189 dissect_tetra_T_basic_service_information_01(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3190 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3191 ett_tetra_T_basic_service_information_01, T_basic_service_information_01_choice,
3192 NULL);
3194 return offset;
3198 static const value_string tetra_T_prop_02_vals[] = {
3199 { 0, "none" },
3200 { 1, "prop" },
3201 { 0, NULL }
3204 static const per_choice_t T_prop_02_choice[] = {
3205 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
3206 { 1, &hf_tetra_prop_01 , ASN1_NO_EXTENSIONS , dissect_tetra_Proprietary },
3207 { 0, NULL, 0, NULL }
3210 static int
3211 dissect_tetra_T_prop_02(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3212 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3213 ett_tetra_T_prop_02, T_prop_02_choice,
3214 NULL);
3216 return offset;
3220 static const per_sequence_t T_type2_parameters_07_sequence[] = {
3221 { &hf_tetra_basic_service_information_02, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_basic_service_information_01 },
3222 { &hf_tetra_prop_03 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop_02 },
3223 { NULL, 0, 0, NULL }
3226 static int
3227 dissect_tetra_T_type2_parameters_07(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3228 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3229 ett_tetra_T_type2_parameters_07, T_type2_parameters_07_sequence);
3231 return offset;
3235 static const value_string tetra_T_optional_elements_11_vals[] = {
3236 { 0, "no-type2" },
3237 { 1, "type2-parameters" },
3238 { 0, NULL }
3241 static const per_choice_t T_optional_elements_11_choice[] = {
3242 { 0, &hf_tetra_no_type2 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
3243 { 1, &hf_tetra_type2_parameters_07, ASN1_NO_EXTENSIONS , dissect_tetra_T_type2_parameters_07 },
3244 { 0, NULL, 0, NULL }
3247 static int
3248 dissect_tetra_T_optional_elements_11(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3249 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3250 ett_tetra_T_optional_elements_11, T_optional_elements_11_choice,
3251 NULL);
3253 return offset;
3257 static const per_sequence_t U_CONNECT_sequence[] = {
3258 { &hf_tetra_call_identifier_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1023 },
3259 { &hf_tetra_hook_method_selection, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
3260 { &hf_tetra_simplex_duplex_selection_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_simplex_duplex_selection_01 },
3261 { &hf_tetra_optional_elements_11, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_11 },
3262 { NULL, 0, 0, NULL }
3265 static int
3266 dissect_tetra_U_CONNECT(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3267 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3268 ett_tetra_U_CONNECT, U_CONNECT_sequence);
3270 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-CONNECT");
3272 return offset;
3277 static int
3278 dissect_tetra_INTEGER_0_31(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3279 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
3280 0U, 31U, NULL, false);
3282 return offset;
3286 static const value_string tetra_T_prop_05_vals[] = {
3287 { 0, "none" },
3288 { 1, "prop" },
3289 { 0, NULL }
3292 static const per_choice_t T_prop_05_choice[] = {
3293 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
3294 { 1, &hf_tetra_prop_01 , ASN1_NO_EXTENSIONS , dissect_tetra_Proprietary },
3295 { 0, NULL, 0, NULL }
3298 static int
3299 dissect_tetra_T_prop_05(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3300 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3301 ett_tetra_T_prop_05, T_prop_05_choice,
3302 NULL);
3304 return offset;
3308 static const per_sequence_t T_type2_parameters_10_sequence[] = {
3309 { &hf_tetra_prop_06 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop_05 },
3310 { NULL, 0, 0, NULL }
3313 static int
3314 dissect_tetra_T_type2_parameters_10(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3315 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3316 ett_tetra_T_type2_parameters_10, T_type2_parameters_10_sequence);
3318 return offset;
3322 static const value_string tetra_T_optional_elements_14_vals[] = {
3323 { 0, "no-type2" },
3324 { 1, "type2-parameters" },
3325 { 0, NULL }
3328 static const per_choice_t T_optional_elements_14_choice[] = {
3329 { 0, &hf_tetra_no_type2 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
3330 { 1, &hf_tetra_type2_parameters_10, ASN1_NO_EXTENSIONS , dissect_tetra_T_type2_parameters_10 },
3331 { 0, NULL, 0, NULL }
3334 static int
3335 dissect_tetra_T_optional_elements_14(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3336 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3337 ett_tetra_T_optional_elements_14, T_optional_elements_14_choice,
3338 NULL);
3340 return offset;
3344 static const per_sequence_t U_DISCONNECT_sequence[] = {
3345 { &hf_tetra_call_identifier_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1023 },
3346 { &hf_tetra_disconnect_cause, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_31 },
3347 { &hf_tetra_optional_elements_14, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_14 },
3348 { NULL, 0, 0, NULL }
3351 static int
3352 dissect_tetra_U_DISCONNECT(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3353 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3354 ett_tetra_U_DISCONNECT, U_DISCONNECT_sequence);
3356 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-DISCONNECT");
3358 return offset;
3362 static const per_sequence_t U_INFO_sequence[] = {
3363 { &hf_tetra_call_id , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
3364 { &hf_tetra_poll_response , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
3365 { NULL, 0, 0, NULL }
3368 static int
3369 dissect_tetra_U_INFO(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3370 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3371 ett_tetra_U_INFO, U_INFO_sequence);
3373 return offset;
3377 static const per_sequence_t U_RELEASE_sequence[] = {
3378 { &hf_tetra_call_identifier, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
3379 { &hf_tetra_disconnect_cause, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_31 },
3380 { NULL, 0, 0, NULL }
3383 static int
3384 dissect_tetra_U_RELEASE(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3385 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3386 ett_tetra_U_RELEASE, U_RELEASE_sequence);
3388 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-RELEASE");
3389 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3390 ett_tetra_U_RELEASE, U_RELEASE_sequence);
3392 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-RELEASE");
3394 return offset;
3398 static const value_string tetra_T_simple_duplex_selection_vals[] = {
3399 { 0, "simplex" },
3400 { 1, "duplex" },
3401 { 0, NULL }
3405 static int
3406 dissect_tetra_T_simple_duplex_selection(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3407 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
3408 2, NULL, false, 0, NULL);
3410 return offset;
3414 static const per_sequence_t T_called_party_ssi_extension_sequence[] = {
3415 { &hf_tetra_called_party_ssi, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16777215 },
3416 { &hf_tetra_called_party_extention, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16777215 },
3417 { NULL, 0, 0, NULL }
3420 static int
3421 dissect_tetra_T_called_party_ssi_extension(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3422 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3423 ett_tetra_T_called_party_ssi_extension, T_called_party_ssi_extension_sequence);
3425 return offset;
3429 static const value_string tetra_Calling_party_address_type_vals[] = {
3430 { 0, "called-party-sna" },
3431 { 1, "called-party-ssi" },
3432 { 2, "called-party-ssi-extension" },
3433 { 0, NULL }
3436 static const per_choice_t Calling_party_address_type_choice[] = {
3437 { 0, &hf_tetra_called_party_sna, ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_255 },
3438 { 1, &hf_tetra_called_party_ssi, ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_16777215 },
3439 { 2, &hf_tetra_called_party_ssi_extension, ASN1_NO_EXTENSIONS , dissect_tetra_T_called_party_ssi_extension },
3440 { 0, NULL, 0, NULL }
3443 static int
3444 dissect_tetra_Calling_party_address_type(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3445 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3446 ett_tetra_Calling_party_address_type, Calling_party_address_type_choice,
3447 NULL);
3449 return offset;
3454 static int
3455 dissect_tetra_Called_party_address_type(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3456 offset = dissect_tetra_Calling_party_address_type(tvb, offset, actx, tree, hf_index);
3458 return offset;
3462 static const value_string tetra_T_external_subscriber_number_vals[] = {
3463 { 0, "none" },
3464 { 1, "external-subscriber-number" },
3465 { 0, NULL }
3468 static const per_choice_t T_external_subscriber_number_choice[] = {
3469 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
3470 { 1, &hf_tetra_external_subscriber_number_01, ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_31 },
3471 { 0, NULL, 0, NULL }
3474 static int
3475 dissect_tetra_T_external_subscriber_number(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3476 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3477 ett_tetra_T_external_subscriber_number, T_external_subscriber_number_choice,
3478 NULL);
3480 return offset;
3484 static const value_string tetra_T_prop_vals[] = {
3485 { 0, "none" },
3486 { 1, "prop" },
3487 { 0, NULL }
3490 static const per_choice_t T_prop_choice[] = {
3491 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
3492 { 1, &hf_tetra_prop_01 , ASN1_NO_EXTENSIONS , dissect_tetra_Proprietary },
3493 { 0, NULL, 0, NULL }
3496 static int
3497 dissect_tetra_T_prop(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3498 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3499 ett_tetra_T_prop, T_prop_choice,
3500 NULL);
3502 return offset;
3506 static const per_sequence_t T_type2_parameters_05_sequence[] = {
3507 { &hf_tetra_external_subscriber_number, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_external_subscriber_number },
3508 { &hf_tetra_prop , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop },
3509 { NULL, 0, 0, NULL }
3512 static int
3513 dissect_tetra_T_type2_parameters_05(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3514 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3515 ett_tetra_T_type2_parameters_05, T_type2_parameters_05_sequence);
3517 return offset;
3521 static const value_string tetra_T_optional_elements_09_vals[] = {
3522 { 0, "no-type2" },
3523 { 1, "type2-parameters" },
3524 { 0, NULL }
3527 static const per_choice_t T_optional_elements_09_choice[] = {
3528 { 0, &hf_tetra_no_type2 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
3529 { 1, &hf_tetra_type2_parameters_05, ASN1_NO_EXTENSIONS , dissect_tetra_T_type2_parameters_05 },
3530 { 0, NULL, 0, NULL }
3533 static int
3534 dissect_tetra_T_optional_elements_09(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3535 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3536 ett_tetra_T_optional_elements_09, T_optional_elements_09_choice,
3537 NULL);
3539 return offset;
3543 static const per_sequence_t U_SETUP_sequence[] = {
3544 { &hf_tetra_area_selection, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_15 },
3545 { &hf_tetra_hook_method_selection, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
3546 { &hf_tetra_simple_duplex_selection, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_simple_duplex_selection },
3547 { &hf_tetra_basic_service_information, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Basic_service_information },
3548 { &hf_tetra_request_transmit_send_data, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
3549 { &hf_tetra_call_priority , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_15 },
3550 { &hf_tetra_clir_control , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
3551 { &hf_tetra_called_party_address, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Called_party_address_type },
3552 { &hf_tetra_optional_elements_09, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_09 },
3553 { NULL, 0, 0, NULL }
3556 static int
3557 dissect_tetra_U_SETUP(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3558 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3559 ett_tetra_U_SETUP, U_SETUP_sequence);
3561 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-SETUP");
3563 return offset;
3568 static int
3569 dissect_tetra_BIT_STRING_SIZE_48(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3570 offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
3571 48, 48, false, NULL, 0, NULL, NULL);
3573 return offset;
3577 static const value_string tetra_T_called_party_type_identifier_01_vals[] = {
3578 { 0, "short-number-address" },
3579 { 1, "ssi" },
3580 { 2, "called-ssi-called-extension" },
3581 { 3, "none" },
3582 { 0, NULL }
3585 static const per_choice_t T_called_party_type_identifier_01_choice[] = {
3586 { 0, &hf_tetra_short_number_address, ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_255 },
3587 { 1, &hf_tetra_ssi , ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_16777215 },
3588 { 2, &hf_tetra_called_ssi_called_extension, ASN1_NO_EXTENSIONS , dissect_tetra_BIT_STRING_SIZE_48 },
3589 { 3, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
3590 { 0, NULL, 0, NULL }
3593 static int
3594 dissect_tetra_T_called_party_type_identifier_01(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3595 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3596 ett_tetra_T_called_party_type_identifier_01, T_called_party_type_identifier_01_choice,
3597 NULL);
3599 return offset;
3603 static const per_sequence_t U_STATUS_sequence[] = {
3604 { &hf_tetra_area_selection, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_15 },
3605 { &hf_tetra_called_party_type_identifier_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_called_party_type_identifier_01 },
3606 { &hf_tetra_pre_coded_status, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_65535 },
3607 { NULL, 0, 0, NULL }
3610 static int
3611 dissect_tetra_U_STATUS(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3612 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3613 ett_tetra_U_STATUS, U_STATUS_sequence);
3615 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-STATUS");
3617 return offset;
3621 static const value_string tetra_T_prop_03_vals[] = {
3622 { 0, "none" },
3623 { 1, "prop" },
3624 { 0, NULL }
3627 static const per_choice_t T_prop_03_choice[] = {
3628 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
3629 { 1, &hf_tetra_prop_01 , ASN1_NO_EXTENSIONS , dissect_tetra_Proprietary },
3630 { 0, NULL, 0, NULL }
3633 static int
3634 dissect_tetra_T_prop_03(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3635 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3636 ett_tetra_T_prop_03, T_prop_03_choice,
3637 NULL);
3639 return offset;
3643 static const per_sequence_t T_type2_parameters_08_sequence[] = {
3644 { &hf_tetra_prop_04 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop_03 },
3645 { NULL, 0, 0, NULL }
3648 static int
3649 dissect_tetra_T_type2_parameters_08(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3650 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3651 ett_tetra_T_type2_parameters_08, T_type2_parameters_08_sequence);
3653 return offset;
3657 static const value_string tetra_T_optional_elements_12_vals[] = {
3658 { 0, "no-type2" },
3659 { 1, "type2-parameters" },
3660 { 0, NULL }
3663 static const per_choice_t T_optional_elements_12_choice[] = {
3664 { 0, &hf_tetra_no_type2 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
3665 { 1, &hf_tetra_type2_parameters_08, ASN1_NO_EXTENSIONS , dissect_tetra_T_type2_parameters_08 },
3666 { 0, NULL, 0, NULL }
3669 static int
3670 dissect_tetra_T_optional_elements_12(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3671 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3672 ett_tetra_T_optional_elements_12, T_optional_elements_12_choice,
3673 NULL);
3675 return offset;
3679 static const per_sequence_t U_TX_CEASED_sequence[] = {
3680 { &hf_tetra_call_identifier_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1023 },
3681 { &hf_tetra_optional_elements_12, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_12 },
3682 { NULL, 0, 0, NULL }
3685 static int
3686 dissect_tetra_U_TX_CEASED(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3687 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3688 ett_tetra_U_TX_CEASED, U_TX_CEASED_sequence);
3690 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-TX-CEASED");
3692 return offset;
3696 static const value_string tetra_T_prop_04_vals[] = {
3697 { 0, "none" },
3698 { 1, "prop" },
3699 { 0, NULL }
3702 static const per_choice_t T_prop_04_choice[] = {
3703 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
3704 { 1, &hf_tetra_prop_01 , ASN1_NO_EXTENSIONS , dissect_tetra_Proprietary },
3705 { 0, NULL, 0, NULL }
3708 static int
3709 dissect_tetra_T_prop_04(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3710 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3711 ett_tetra_T_prop_04, T_prop_04_choice,
3712 NULL);
3714 return offset;
3718 static const per_sequence_t T_type2_parameters_09_sequence[] = {
3719 { &hf_tetra_prop_05 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop_04 },
3720 { NULL, 0, 0, NULL }
3723 static int
3724 dissect_tetra_T_type2_parameters_09(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3725 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3726 ett_tetra_T_type2_parameters_09, T_type2_parameters_09_sequence);
3728 return offset;
3732 static const value_string tetra_T_optional_elements_13_vals[] = {
3733 { 0, "no-type2" },
3734 { 1, "type2-parameters" },
3735 { 0, NULL }
3738 static const per_choice_t T_optional_elements_13_choice[] = {
3739 { 0, &hf_tetra_no_type2 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
3740 { 1, &hf_tetra_type2_parameters_09, ASN1_NO_EXTENSIONS , dissect_tetra_T_type2_parameters_09 },
3741 { 0, NULL, 0, NULL }
3744 static int
3745 dissect_tetra_T_optional_elements_13(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3746 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3747 ett_tetra_T_optional_elements_13, T_optional_elements_13_choice,
3748 NULL);
3750 return offset;
3754 static const per_sequence_t U_TX_DEMAND_sequence[] = {
3755 { &hf_tetra_call_identifier_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1023 },
3756 { &hf_tetra_tx_demand_priority, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
3757 { &hf_tetra_encryption_control, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
3758 { &hf_tetra_reserved_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
3759 { &hf_tetra_optional_elements_13, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_13 },
3760 { NULL, 0, 0, NULL }
3763 static int
3764 dissect_tetra_U_TX_DEMAND(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3765 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3766 ett_tetra_U_TX_DEMAND, U_TX_DEMAND_sequence);
3768 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-TX-DEMAND");
3770 return offset;
3775 static int
3776 dissect_tetra_Other_party_address_type(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3777 offset = dissect_tetra_Calling_party_address_type(tvb, offset, actx, tree, hf_index);
3779 return offset;
3783 static const value_string tetra_T_prop_06_vals[] = {
3784 { 0, "none" },
3785 { 1, "prop" },
3786 { 0, NULL }
3789 static const per_choice_t T_prop_06_choice[] = {
3790 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
3791 { 1, &hf_tetra_prop_01 , ASN1_NO_EXTENSIONS , dissect_tetra_Proprietary },
3792 { 0, NULL, 0, NULL }
3795 static int
3796 dissect_tetra_T_prop_06(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3797 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3798 ett_tetra_T_prop_06, T_prop_06_choice,
3799 NULL);
3801 return offset;
3805 static const per_sequence_t T_type2_parameters_11_sequence[] = {
3806 { &hf_tetra_prop_07 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop_06 },
3807 { NULL, 0, 0, NULL }
3810 static int
3811 dissect_tetra_T_type2_parameters_11(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3812 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3813 ett_tetra_T_type2_parameters_11, T_type2_parameters_11_sequence);
3815 return offset;
3819 static const value_string tetra_T_optional_elements_15_vals[] = {
3820 { 0, "no-type2" },
3821 { 1, "type2-parameters" },
3822 { 0, NULL }
3825 static const per_choice_t T_optional_elements_15_choice[] = {
3826 { 0, &hf_tetra_no_type2 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
3827 { 1, &hf_tetra_type2_parameters_11, ASN1_NO_EXTENSIONS , dissect_tetra_T_type2_parameters_11 },
3828 { 0, NULL, 0, NULL }
3831 static int
3832 dissect_tetra_T_optional_elements_15(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3833 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3834 ett_tetra_T_optional_elements_15, T_optional_elements_15_choice,
3835 NULL);
3837 return offset;
3841 static const per_sequence_t U_CALL_RESTORE_sequence[] = {
3842 { &hf_tetra_call_identifier_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1023 },
3843 { &hf_tetra_request_to_transmit_send_data, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
3844 { &hf_tetra_other_party_address, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Other_party_address_type },
3845 { &hf_tetra_basic_service_information, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Basic_service_information },
3846 { &hf_tetra_optional_elements_15, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_15 },
3847 { NULL, 0, 0, NULL }
3850 static int
3851 dissect_tetra_U_CALL_RESTORE(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3852 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3853 ett_tetra_U_CALL_RESTORE, U_CALL_RESTORE_sequence);
3855 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-CALL-RESTORE");
3857 return offset;
3861 static const value_string tetra_T_called_party_type_identifier_vals[] = {
3862 { 0, "sna" },
3863 { 1, "ssi" },
3864 { 2, "ssi-extension" },
3865 { 3, "none" },
3866 { 0, NULL }
3869 static const per_choice_t T_called_party_type_identifier_choice[] = {
3870 { 0, &hf_tetra_sna , ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_255 },
3871 { 1, &hf_tetra_ssi , ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_16777215 },
3872 { 2, &hf_tetra_ssi_extension , ASN1_NO_EXTENSIONS , dissect_tetra_BIT_STRING_SIZE_48 },
3873 { 3, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
3874 { 0, NULL, 0, NULL }
3877 static int
3878 dissect_tetra_T_called_party_type_identifier(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3879 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3880 ett_tetra_T_called_party_type_identifier, T_called_party_type_identifier_choice,
3881 NULL);
3883 return offset;
3888 static int
3889 dissect_tetra_OCTET_STRING_SIZE_4(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3890 offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
3891 4, 4, false, NULL);
3893 return offset;
3898 static int
3899 dissect_tetra_BIT_STRING_SIZE_64(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3900 offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
3901 64, 64, false, NULL, 0, NULL, NULL);
3903 return offset;
3908 static int
3909 dissect_tetra_INTEGER_0_4194304(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3910 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
3911 0U, 4194304U, NULL, false);
3913 return offset;
3917 static const value_string tetra_T_short_data_type_identifier_vals[] = {
3918 { 0, "data-1" },
3919 { 1, "data-2" },
3920 { 2, "data-3" },
3921 { 3, "length-indicator-data-4" },
3922 { 0, NULL }
3925 static const per_choice_t T_short_data_type_identifier_choice[] = {
3926 { 0, &hf_tetra_data_1 , ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_65535 },
3927 { 1, &hf_tetra_data_2 , ASN1_NO_EXTENSIONS , dissect_tetra_OCTET_STRING_SIZE_4 },
3928 { 2, &hf_tetra_data_3 , ASN1_NO_EXTENSIONS , dissect_tetra_BIT_STRING_SIZE_64 },
3929 { 3, &hf_tetra_length_indicator_data_4, ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_4194304 },
3930 { 0, NULL, 0, NULL }
3933 static int
3934 dissect_tetra_T_short_data_type_identifier(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3935 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3936 ett_tetra_T_short_data_type_identifier, T_short_data_type_identifier_choice,
3937 NULL);
3939 return offset;
3943 static const per_sequence_t U_SDS_DATA_sequence[] = {
3944 { &hf_tetra_area_selection, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_15 },
3945 { &hf_tetra_called_party_type_identifier, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_called_party_type_identifier },
3946 { &hf_tetra_short_data_type_identifier, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_short_data_type_identifier },
3947 { NULL, 0, 0, NULL }
3950 static int
3951 dissect_tetra_U_SDS_DATA(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3952 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3953 ett_tetra_U_SDS_DATA, U_SDS_DATA_sequence);
3955 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-SDS-DATA");
3957 return offset;
3961 static const value_string tetra_U_CMCE_PDU_vals[] = {
3962 { 0, "u-Alert" },
3963 { 1, "reserved1" },
3964 { 2, "u-Connect" },
3965 { 3, "reserved2" },
3966 { 4, "u-Disconnect" },
3967 { 5, "u-Info" },
3968 { 6, "u-Release" },
3969 { 7, "u-Setup" },
3970 { 8, "u-Status" },
3971 { 9, "u-Tx-Ceased" },
3972 { 10, "u-Tx-Demand" },
3973 { 11, "reserved3" },
3974 { 12, "reserved4" },
3975 { 13, "reserved5" },
3976 { 14, "u-Call-Restore" },
3977 { 15, "u-SDS-Data" },
3978 { 16, "u-Facility" },
3979 { 0, NULL }
3982 static const per_choice_t U_CMCE_PDU_choice[] = {
3983 { 0, &hf_tetra_u_Alert , ASN1_NO_EXTENSIONS , dissect_tetra_U_ALERT },
3984 { 1, &hf_tetra_reserved1 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
3985 { 2, &hf_tetra_u_Connect , ASN1_NO_EXTENSIONS , dissect_tetra_U_CONNECT },
3986 { 3, &hf_tetra_reserved2 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
3987 { 4, &hf_tetra_u_Disconnect , ASN1_NO_EXTENSIONS , dissect_tetra_U_DISCONNECT },
3988 { 5, &hf_tetra_u_Info , ASN1_NO_EXTENSIONS , dissect_tetra_U_INFO },
3989 { 6, &hf_tetra_u_Release , ASN1_NO_EXTENSIONS , dissect_tetra_U_RELEASE },
3990 { 7, &hf_tetra_u_Setup , ASN1_NO_EXTENSIONS , dissect_tetra_U_SETUP },
3991 { 8, &hf_tetra_u_Status , ASN1_NO_EXTENSIONS , dissect_tetra_U_STATUS },
3992 { 9, &hf_tetra_u_Tx_Ceased , ASN1_NO_EXTENSIONS , dissect_tetra_U_TX_CEASED },
3993 { 10, &hf_tetra_u_Tx_Demand , ASN1_NO_EXTENSIONS , dissect_tetra_U_TX_DEMAND },
3994 { 11, &hf_tetra_reserved3 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
3995 { 12, &hf_tetra_reserved4 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
3996 { 13, &hf_tetra_reserved5 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
3997 { 14, &hf_tetra_u_Call_Restore, ASN1_NO_EXTENSIONS , dissect_tetra_U_CALL_RESTORE },
3998 { 15, &hf_tetra_u_SDS_Data , ASN1_NO_EXTENSIONS , dissect_tetra_U_SDS_DATA },
3999 { 16, &hf_tetra_u_Facility , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
4000 { 0, NULL, 0, NULL }
4003 static int
4004 dissect_tetra_U_CMCE_PDU(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4005 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
4006 ett_tetra_U_CMCE_PDU, U_CMCE_PDU_choice,
4007 NULL);
4009 return offset;
4013 static const value_string tetra_T_cell_number_vals[] = {
4014 { 0, "none" },
4015 { 1, "cell-number" },
4016 { 0, NULL }
4019 static const per_choice_t T_cell_number_choice[] = {
4020 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
4021 { 1, &hf_tetra_cell_number_01, ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_65535 },
4022 { 0, NULL, 0, NULL }
4025 static int
4026 dissect_tetra_T_cell_number(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4027 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
4028 ett_tetra_T_cell_number, T_cell_number_choice,
4029 NULL);
4031 return offset;
4035 static const per_sequence_t T_type2_parameters_sequence[] = {
4036 { &hf_tetra_cell_number , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_cell_number },
4037 { &hf_tetra_sdu , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_BIT_STRING },
4038 { NULL, 0, 0, NULL }
4041 static int
4042 dissect_tetra_T_type2_parameters(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4043 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4044 ett_tetra_T_type2_parameters, T_type2_parameters_sequence);
4046 return offset;
4050 static const value_string tetra_T_optional_elements_vals[] = {
4051 { 0, "no-type2" },
4052 { 1, "type2-parameters" },
4053 { 0, NULL }
4056 static const per_choice_t T_optional_elements_choice[] = {
4057 { 0, &hf_tetra_no_type2 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
4058 { 1, &hf_tetra_type2_parameters, ASN1_NO_EXTENSIONS , dissect_tetra_T_type2_parameters },
4059 { 0, NULL, 0, NULL }
4062 static int
4063 dissect_tetra_T_optional_elements(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4064 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
4065 ett_tetra_T_optional_elements, T_optional_elements_choice,
4066 NULL);
4068 return offset;
4072 static const per_sequence_t U_PREPARE_sequence[] = {
4073 { &hf_tetra_pdu_type_02 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
4074 { &hf_tetra_optional_elements, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements },
4075 { NULL, 0, 0, NULL }
4078 static int
4079 dissect_tetra_U_PREPARE(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4080 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4081 ett_tetra_U_PREPARE, U_PREPARE_sequence);
4083 return offset;
4087 static const value_string tetra_T_mcc_vals[] = {
4088 { 0, "none" },
4089 { 1, "mcc" },
4090 { 0, NULL }
4093 static const per_choice_t T_mcc_choice[] = {
4094 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
4095 { 1, &hf_tetra_mcc , ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_1023 },
4096 { 0, NULL, 0, NULL }
4099 static int
4100 dissect_tetra_T_mcc(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4101 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
4102 ett_tetra_T_mcc, T_mcc_choice,
4103 NULL);
4105 return offset;
4109 static const value_string tetra_T_mnc_vals[] = {
4110 { 0, "none" },
4111 { 1, "mnc" },
4112 { 0, NULL }
4115 static const per_choice_t T_mnc_choice[] = {
4116 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
4117 { 1, &hf_tetra_mnc , ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_16383 },
4118 { 0, NULL, 0, NULL }
4121 static int
4122 dissect_tetra_T_mnc(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4123 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
4124 ett_tetra_T_mnc, T_mnc_choice,
4125 NULL);
4127 return offset;
4131 static const value_string tetra_T_la_vals[] = {
4132 { 0, "none" },
4133 { 1, "la" },
4134 { 0, NULL }
4137 static const per_choice_t T_la_choice[] = {
4138 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
4139 { 1, &hf_tetra_la , ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_16383 },
4140 { 0, NULL, 0, NULL }
4143 static int
4144 dissect_tetra_T_la(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4145 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
4146 ett_tetra_T_la, T_la_choice,
4147 NULL);
4149 return offset;
4153 static const per_sequence_t T_type2_parameters_01_sequence[] = {
4154 { &hf_tetra_mcc_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_mcc },
4155 { &hf_tetra_mnc_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_mnc },
4156 { &hf_tetra_la_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_la },
4157 { &hf_tetra_sdu , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_BIT_STRING },
4158 { NULL, 0, 0, NULL }
4161 static int
4162 dissect_tetra_T_type2_parameters_01(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4163 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4164 ett_tetra_T_type2_parameters_01, T_type2_parameters_01_sequence);
4166 return offset;
4170 static const value_string tetra_T_optional_elements_01_vals[] = {
4171 { 0, "no-type2" },
4172 { 1, "type2-parameters" },
4173 { 0, NULL }
4176 static const per_choice_t T_optional_elements_01_choice[] = {
4177 { 0, &hf_tetra_no_type2 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
4178 { 1, &hf_tetra_type2_parameters_01, ASN1_NO_EXTENSIONS , dissect_tetra_T_type2_parameters_01 },
4179 { 0, NULL, 0, NULL }
4182 static int
4183 dissect_tetra_T_optional_elements_01(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4184 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
4185 ett_tetra_T_optional_elements_01, T_optional_elements_01_choice,
4186 NULL);
4188 return offset;
4192 static const per_sequence_t U_RESTORE_sequence[] = {
4193 { &hf_tetra_pdu_type_02 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
4194 { &hf_tetra_optional_elements_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_01 },
4195 { NULL, 0, 0, NULL }
4198 static int
4199 dissect_tetra_U_RESTORE(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4200 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4201 ett_tetra_U_RESTORE, U_RESTORE_sequence);
4203 return offset;
4207 static const value_string tetra_UMLE_PDU_vals[] = {
4208 { 0, "u-prepare" },
4209 { 1, "umle-reserved1" },
4210 { 2, "umle-reserved2" },
4211 { 3, "umle-reserved3" },
4212 { 4, "u-restore" },
4213 { 5, "umle-reserved4" },
4214 { 6, "umle-reserved5" },
4215 { 7, "umle-reserved6" },
4216 { 0, NULL }
4219 static const per_choice_t UMLE_PDU_choice[] = {
4220 { 0, &hf_tetra_u_prepare , ASN1_NO_EXTENSIONS , dissect_tetra_U_PREPARE },
4221 { 1, &hf_tetra_umle_reserved1, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
4222 { 2, &hf_tetra_umle_reserved2, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
4223 { 3, &hf_tetra_umle_reserved3, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
4224 { 4, &hf_tetra_u_restore , ASN1_NO_EXTENSIONS , dissect_tetra_U_RESTORE },
4225 { 5, &hf_tetra_umle_reserved4, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
4226 { 6, &hf_tetra_umle_reserved5, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
4227 { 7, &hf_tetra_umle_reserved6, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
4228 { 0, NULL, 0, NULL }
4231 static int
4232 dissect_tetra_UMLE_PDU(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4233 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
4234 ett_tetra_UMLE_PDU, UMLE_PDU_choice,
4235 NULL);
4237 return offset;
4241 static const value_string tetra_U_MLE_PDU_vals[] = {
4242 { 0, "u-mle-reserved1" },
4243 { 1, "mm" },
4244 { 2, "cmce" },
4245 { 3, "u-mle-reserved2" },
4246 { 4, "sndcp" },
4247 { 5, "mle" },
4248 { 6, "tetra-management-entity-protocol" },
4249 { 7, "u-mle-reserved3" },
4250 { 0, NULL }
4253 static const per_choice_t U_MLE_PDU_choice[] = {
4254 { 0, &hf_tetra_u_mle_reserved1, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
4255 { 1, &hf_tetra_mm , ASN1_NO_EXTENSIONS , dissect_tetra_U_MM_PDU },
4256 { 2, &hf_tetra_cmce , ASN1_NO_EXTENSIONS , dissect_tetra_U_CMCE_PDU },
4257 { 3, &hf_tetra_u_mle_reserved2, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
4258 { 4, &hf_tetra_sndcp , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
4259 { 5, &hf_tetra_mle , ASN1_NO_EXTENSIONS , dissect_tetra_UMLE_PDU },
4260 { 6, &hf_tetra_tetra_management_entity_protocol, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
4261 { 7, &hf_tetra_u_mle_reserved3, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
4262 { 0, NULL, 0, NULL }
4265 static int
4266 dissect_tetra_U_MLE_PDU(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4267 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
4268 ett_tetra_U_MLE_PDU, U_MLE_PDU_choice,
4269 NULL);
4271 return offset;
4275 static const per_sequence_t U_BL_ADATA_sequence[] = {
4276 { &hf_tetra_nr , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4277 { &hf_tetra_ns , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4278 { &hf_tetra_tl_sdu , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_U_MLE_PDU },
4279 { NULL, 0, 0, NULL }
4282 static int
4283 dissect_tetra_U_BL_ADATA(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4284 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4285 ett_tetra_U_BL_ADATA, U_BL_ADATA_sequence);
4287 return offset;
4291 static const per_sequence_t U_BL_DATA_sequence[] = {
4292 { &hf_tetra_ns , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4293 { &hf_tetra_tl_sdu , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_U_MLE_PDU },
4294 { NULL, 0, 0, NULL }
4297 static int
4298 dissect_tetra_U_BL_DATA(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4299 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4300 ett_tetra_U_BL_DATA, U_BL_DATA_sequence);
4302 return offset;
4306 static const per_sequence_t U_BL_ACK_sequence[] = {
4307 { &hf_tetra_nr , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4308 { &hf_tetra_tl_sdu , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_U_MLE_PDU },
4309 { NULL, 0, 0, NULL }
4312 static int
4313 dissect_tetra_U_BL_ACK(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4314 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4315 ett_tetra_U_BL_ACK, U_BL_ACK_sequence);
4317 return offset;
4321 static const per_sequence_t U_BL_ADATA_FCS_sequence[] = {
4322 { &hf_tetra_nr , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4323 { &hf_tetra_ns , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4324 { &hf_tetra_tl_sdu , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_U_MLE_PDU },
4325 { &hf_tetra_fcs , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_OCTET_STRING_SIZE_4 },
4326 { NULL, 0, 0, NULL }
4329 static int
4330 dissect_tetra_U_BL_ADATA_FCS(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4331 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4332 ett_tetra_U_BL_ADATA_FCS, U_BL_ADATA_FCS_sequence);
4334 return offset;
4338 static const per_sequence_t U_BL_DATA_FCS_sequence[] = {
4339 { &hf_tetra_ns , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4340 { &hf_tetra_tl_sdu , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_U_MLE_PDU },
4341 { &hf_tetra_fcs , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_OCTET_STRING_SIZE_4 },
4342 { NULL, 0, 0, NULL }
4345 static int
4346 dissect_tetra_U_BL_DATA_FCS(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4347 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4348 ett_tetra_U_BL_DATA_FCS, U_BL_DATA_FCS_sequence);
4350 return offset;
4354 static const per_sequence_t U_MLE_PDU_FCS_sequence[] = {
4355 { &hf_tetra_u_mle_pdu , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_U_MLE_PDU },
4356 { &hf_tetra_fcs , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_OCTET_STRING_SIZE_4 },
4357 { NULL, 0, 0, NULL }
4360 static int
4361 dissect_tetra_U_MLE_PDU_FCS(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4362 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4363 ett_tetra_U_MLE_PDU_FCS, U_MLE_PDU_FCS_sequence);
4365 return offset;
4369 static const per_sequence_t U_BL_ACK_FCS_sequence[] = {
4370 { &hf_tetra_nr , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4371 { &hf_tetra_tl_sdu , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_U_MLE_PDU },
4372 { &hf_tetra_fcs , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_OCTET_STRING_SIZE_4 },
4373 { NULL, 0, 0, NULL }
4376 static int
4377 dissect_tetra_U_BL_ACK_FCS(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4378 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4379 ett_tetra_U_BL_ACK_FCS, U_BL_ACK_FCS_sequence);
4381 return offset;
4385 static const value_string tetra_U_LLC_PDU_vals[] = {
4386 { 0, "bl-adata" },
4387 { 1, "bl-data" },
4388 { 2, "bl-udata" },
4389 { 3, "bl-ack" },
4390 { 4, "bl-adata-fcs" },
4391 { 5, "bl-data-fcs" },
4392 { 6, "bl-udata-fcs" },
4393 { 7, "bl-ack-fcs" },
4394 { 8, "al-setup" },
4395 { 9, "al-data" },
4396 { 10, "al-udata" },
4397 { 11, "al-ack" },
4398 { 12, "al-reconnect" },
4399 { 13, "reserve1" },
4400 { 14, "reserve2" },
4401 { 15, "al-disc" },
4402 { 0, NULL }
4405 static const per_choice_t U_LLC_PDU_choice[] = {
4406 { 0, &hf_tetra_bl_adata , ASN1_NO_EXTENSIONS , dissect_tetra_U_BL_ADATA },
4407 { 1, &hf_tetra_bl_data , ASN1_NO_EXTENSIONS , dissect_tetra_U_BL_DATA },
4408 { 2, &hf_tetra_bl_udata , ASN1_NO_EXTENSIONS , dissect_tetra_U_MLE_PDU },
4409 { 3, &hf_tetra_bl_ack , ASN1_NO_EXTENSIONS , dissect_tetra_U_BL_ACK },
4410 { 4, &hf_tetra_bl_adata_fcs , ASN1_NO_EXTENSIONS , dissect_tetra_U_BL_ADATA_FCS },
4411 { 5, &hf_tetra_bl_data_fcs , ASN1_NO_EXTENSIONS , dissect_tetra_U_BL_DATA_FCS },
4412 { 6, &hf_tetra_bl_udata_fcs , ASN1_NO_EXTENSIONS , dissect_tetra_U_MLE_PDU_FCS },
4413 { 7, &hf_tetra_bl_ack_fcs , ASN1_NO_EXTENSIONS , dissect_tetra_U_BL_ACK_FCS },
4414 { 8, &hf_tetra_al_setup , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
4415 { 9, &hf_tetra_al_data , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
4416 { 10, &hf_tetra_al_udata , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
4417 { 11, &hf_tetra_al_ack , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
4418 { 12, &hf_tetra_al_reconnect , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
4419 { 13, &hf_tetra_reserve1 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
4420 { 14, &hf_tetra_reserve2 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
4421 { 15, &hf_tetra_al_disc , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
4422 { 0, NULL, 0, NULL }
4425 static int
4426 dissect_tetra_U_LLC_PDU(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4427 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
4428 ett_tetra_U_LLC_PDU, U_LLC_PDU_choice,
4429 NULL);
4431 return offset;
4435 static const value_string tetra_LengthIndication_vals[] = {
4436 { 0, "null" },
4437 { 1, "reserved-1" },
4438 { 2, "reserved-2" },
4439 { 3, "bits-24" },
4440 { 4, "bits-32" },
4441 { 5, "bits-40" },
4442 { 6, "bits-48" },
4443 { 7, "bits-56" },
4444 { 8, "bits-64" },
4445 { 9, "bits-72" },
4446 { 10, "bits-80" },
4447 { 11, "bits-88" },
4448 { 12, "bits-96" },
4449 { 13, "reserved-13" },
4450 { 14, "reserved-14" },
4451 { 15, "reserved-15" },
4452 { 16, "reserved-16" },
4453 { 17, "reserved-17" },
4454 { 18, "reserved-18" },
4455 { 19, "reserved-19" },
4456 { 20, "reserved-20" },
4457 { 21, "reserved-21" },
4458 { 22, "reserved-22" },
4459 { 23, "reserved-23" },
4460 { 24, "reserved-24" },
4461 { 25, "reserved-25" },
4462 { 26, "reserved-26" },
4463 { 27, "reserved-27" },
4464 { 28, "reserved-28" },
4465 { 29, "reserved-29" },
4466 { 30, "reserved-30" },
4467 { 31, "reserved-31" },
4468 { 0, NULL }
4472 static int
4473 dissect_tetra_LengthIndication(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4474 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
4475 32, NULL, false, 0, NULL);
4477 return offset;
4481 static const value_string tetra_Frag1_vals[] = {
4482 { 0, "not-fragmented" },
4483 { 1, "start-of-fragmentation" },
4484 { 0, NULL }
4488 static int
4489 dissect_tetra_Frag1(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4490 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
4491 2, NULL, false, 0, NULL);
4493 return offset;
4497 static const value_string tetra_SLOT_APPLY_vals[] = {
4498 { 0, "subslot" },
4499 { 1, "slot-1" },
4500 { 2, "slot-2" },
4501 { 3, "slot-3" },
4502 { 4, "slot-4" },
4503 { 5, "slot-5" },
4504 { 6, "slot-6" },
4505 { 7, "slot-8" },
4506 { 8, "slot-10" },
4507 { 9, "slot-13" },
4508 { 10, "slot-17" },
4509 { 11, "slot-24" },
4510 { 12, "slot-34" },
4511 { 13, "slot-51" },
4512 { 14, "slot-68" },
4513 { 15, "more-than-68" },
4514 { 0, NULL }
4518 static int
4519 dissect_tetra_SLOT_APPLY(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4520 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
4521 16, NULL, false, 0, NULL);
4523 return offset;
4527 static const per_sequence_t FRAG_sequence[] = {
4528 { &hf_tetra_frag , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Frag1 },
4529 { &hf_tetra_reservation_requirement, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_SLOT_APPLY },
4530 { NULL, 0, 0, NULL }
4533 static int
4534 dissect_tetra_FRAG(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4535 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4536 ett_tetra_FRAG, FRAG_sequence);
4538 return offset;
4542 static const value_string tetra_T_lengthIndicationOrCapacityRequest_vals[] = {
4543 { 0, "lengthIndication" },
4544 { 1, "capacityRequest" },
4545 { 0, NULL }
4548 static const per_choice_t T_lengthIndicationOrCapacityRequest_choice[] = {
4549 { 0, &hf_tetra_lengthIndication, ASN1_NO_EXTENSIONS , dissect_tetra_LengthIndication },
4550 { 1, &hf_tetra_capacityRequest, ASN1_NO_EXTENSIONS , dissect_tetra_FRAG },
4551 { 0, NULL, 0, NULL }
4554 static int
4555 dissect_tetra_T_lengthIndicationOrCapacityRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4556 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
4557 ett_tetra_T_lengthIndicationOrCapacityRequest, T_lengthIndicationOrCapacityRequest_choice,
4558 NULL);
4560 return offset;
4564 static const per_sequence_t ComplexSDU_sequence[] = {
4565 { &hf_tetra_lengthIndicationOrCapacityRequest, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_lengthIndicationOrCapacityRequest },
4566 { &hf_tetra_tm_sdu_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_U_LLC_PDU },
4567 { NULL, 0, 0, NULL }
4570 static int
4571 dissect_tetra_ComplexSDU(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4572 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4573 ett_tetra_ComplexSDU, ComplexSDU_sequence);
4575 return offset;
4579 static const value_string tetra_T_data_vals[] = {
4580 { 0, "sdu1" },
4581 { 1, "sdu2" },
4582 { 0, NULL }
4585 static const per_choice_t T_data_choice[] = {
4586 { 0, &hf_tetra_sdu1 , ASN1_NO_EXTENSIONS , dissect_tetra_U_LLC_PDU },
4587 { 1, &hf_tetra_sdu2 , ASN1_NO_EXTENSIONS , dissect_tetra_ComplexSDU },
4588 { 0, NULL, 0, NULL }
4591 static int
4592 dissect_tetra_T_data(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4593 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
4594 ett_tetra_T_data, T_data_choice,
4595 NULL);
4597 return offset;
4601 static const per_sequence_t MAC_ACCESS_sequence[] = {
4602 { &hf_tetra_pdu_type_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4603 { &hf_tetra_fill_bit_indication, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Fill_Bit_Indication },
4604 { &hf_tetra_encrypted_flag, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Encrypted_Flag },
4605 { &hf_tetra_address , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Address },
4606 { &hf_tetra_data , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_data },
4607 { NULL, 0, 0, NULL }
4610 static int
4611 dissect_tetra_MAC_ACCESS(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4612 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4613 ett_tetra_MAC_ACCESS, MAC_ACCESS_sequence);
4615 return offset;
4619 static const value_string tetra_LengthIndicationMacData_vals[] = {
4620 { 0, "null" },
4621 { 1, "reserved-1" },
4622 { 2, "reserved-2" },
4623 { 3, "bits-24" },
4624 { 4, "bits-32" },
4625 { 5, "bits-40" },
4626 { 6, "bits-48" },
4627 { 7, "bits-56" },
4628 { 8, "bits-64" },
4629 { 9, "bits-72" },
4630 { 10, "bits-80" },
4631 { 11, "bits-88" },
4632 { 12, "bits-96" },
4633 { 13, "bits-104" },
4634 { 14, "bits-112" },
4635 { 15, "bits-120" },
4636 { 16, "bits-128" },
4637 { 17, "bits-136" },
4638 { 18, "bits-144" },
4639 { 19, "bits-152" },
4640 { 20, "bits-160" },
4641 { 21, "bits-168" },
4642 { 22, "bits-176" },
4643 { 23, "bits-184" },
4644 { 24, "bits-192" },
4645 { 25, "bits-200" },
4646 { 26, "bits-208" },
4647 { 27, "bits-216" },
4648 { 28, "bits-224" },
4649 { 29, "bits-232" },
4650 { 30, "bits-240" },
4651 { 31, "bits-248" },
4652 { 32, "bits-256" },
4653 { 33, "bits-264" },
4654 { 34, "bits-272" },
4655 { 35, "reserved-35" },
4656 { 36, "reserved-36" },
4657 { 37, "reserved-37" },
4658 { 38, "reserved-38" },
4659 { 39, "reserved-39" },
4660 { 40, "reserved-40" },
4661 { 41, "reserved-41" },
4662 { 42, "reserved-42" },
4663 { 43, "reserved-43" },
4664 { 44, "reserved-44" },
4665 { 45, "reserved-45" },
4666 { 46, "reserved-46" },
4667 { 47, "reserved-47" },
4668 { 48, "reserved-48" },
4669 { 49, "reserved-49" },
4670 { 50, "reserved-50" },
4671 { 51, "reserved-51" },
4672 { 52, "reserved-52" },
4673 { 53, "reserved-53" },
4674 { 54, "reserved-54" },
4675 { 55, "reserved-55" },
4676 { 56, "reserved-56" },
4677 { 57, "reserved-57" },
4678 { 58, "reserved-58" },
4679 { 59, "reserved-59" },
4680 { 60, "reserved-60" },
4681 { 61, "reserved-61" },
4682 { 62, "second-halfslot-stolen" },
4683 { 63, "start-frag" },
4684 { 0, NULL }
4688 static int
4689 dissect_tetra_LengthIndicationMacData(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4690 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
4691 64, NULL, false, 0, NULL);
4693 return offset;
4697 static const per_sequence_t FRAG6_sequence[] = {
4698 { &hf_tetra_frag , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Frag1 },
4699 { &hf_tetra_reservation_requirement, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_SLOT_APPLY },
4700 { &hf_tetra_reserved_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4701 { NULL, 0, 0, NULL }
4704 static int
4705 dissect_tetra_FRAG6(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4706 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4707 ett_tetra_FRAG6, FRAG6_sequence);
4709 return offset;
4713 static const value_string tetra_T_lengthIndicationOrCapacityRequest_01_vals[] = {
4714 { 0, "lengthIndication" },
4715 { 1, "capacityRequest" },
4716 { 0, NULL }
4719 static const per_choice_t T_lengthIndicationOrCapacityRequest_01_choice[] = {
4720 { 0, &hf_tetra_lengthIndication_01, ASN1_NO_EXTENSIONS , dissect_tetra_LengthIndicationMacData },
4721 { 1, &hf_tetra_capacityRequest_01, ASN1_NO_EXTENSIONS , dissect_tetra_FRAG6 },
4722 { 0, NULL, 0, NULL }
4725 static int
4726 dissect_tetra_T_lengthIndicationOrCapacityRequest_01(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4727 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
4728 ett_tetra_T_lengthIndicationOrCapacityRequest_01, T_lengthIndicationOrCapacityRequest_01_choice,
4729 NULL);
4731 return offset;
4735 static const per_sequence_t MAC_DATA_sequence[] = {
4736 { &hf_tetra_pdu_type , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
4737 { &hf_tetra_fill_bit_indication, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Fill_Bit_Indication },
4738 { &hf_tetra_encrypted_flag, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Encrypted_Flag },
4739 { &hf_tetra_address , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Address },
4740 { &hf_tetra_lengthIndicationOrCapacityRequest_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_lengthIndicationOrCapacityRequest_01 },
4741 { &hf_tetra_tm_sdu_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_U_LLC_PDU },
4742 { NULL, 0, 0, NULL }
4745 static int
4746 dissect_tetra_MAC_DATA(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4747 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4748 ett_tetra_MAC_DATA, MAC_DATA_sequence);
4750 return offset;
4755 static int
4756 dissect_tetra_BIT_STRING_SIZE_264(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4757 offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
4758 264, 264, false, NULL, 0, NULL, NULL);
4760 return offset;
4764 static const per_sequence_t MAC_FRAG_sequence[] = {
4765 { &hf_tetra_pdu_type , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
4766 { &hf_tetra_sub_type , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4767 { &hf_tetra_fill_bit_indication, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Fill_Bit_Indication },
4768 { &hf_tetra_tm_sdu_02 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_BIT_STRING_SIZE_264 },
4769 { NULL, 0, 0, NULL }
4772 static int
4773 dissect_tetra_MAC_FRAG(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4774 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4775 ett_tetra_MAC_FRAG, MAC_FRAG_sequence);
4777 return offset;
4782 static int
4783 dissect_tetra_BIT_STRING_SIZE_120(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4784 offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
4785 120, 120, false, NULL, 0, NULL, NULL);
4787 return offset;
4791 static const per_sequence_t MAC_FRAG120_sequence[] = {
4792 { &hf_tetra_pdu_type , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
4793 { &hf_tetra_sub_type , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4794 { &hf_tetra_fill_bit_indication, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Fill_Bit_Indication },
4795 { &hf_tetra_tm_sdu_03 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_BIT_STRING_SIZE_120 },
4796 { NULL, 0, 0, NULL }
4799 static int
4800 dissect_tetra_MAC_FRAG120(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4801 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4802 ett_tetra_MAC_FRAG120, MAC_FRAG120_sequence);
4804 return offset;
4808 static const value_string tetra_LengthIndOrReservationReq_vals[] = {
4809 { 0, "reserved-0" },
4810 { 1, "reserved-1" },
4811 { 2, "bits-16" },
4812 { 3, "bits-24" },
4813 { 4, "bits-32" },
4814 { 5, "bits-40" },
4815 { 6, "bits-48" },
4816 { 7, "bits-56" },
4817 { 8, "bits-64" },
4818 { 9, "bits-72" },
4819 { 10, "bits-80" },
4820 { 11, "bits-88" },
4821 { 12, "bits-96" },
4822 { 13, "bits-104" },
4823 { 14, "bits-112" },
4824 { 15, "bits-120" },
4825 { 16, "bits-128" },
4826 { 17, "bits-136" },
4827 { 18, "bits-144" },
4828 { 19, "bits-152" },
4829 { 20, "bits-160" },
4830 { 21, "bits-168" },
4831 { 22, "bits-176" },
4832 { 23, "bits-184" },
4833 { 24, "bits-192" },
4834 { 25, "bits-200" },
4835 { 26, "bits-208" },
4836 { 27, "bits-216" },
4837 { 28, "bits-224" },
4838 { 29, "bits-232" },
4839 { 30, "bits-240" },
4840 { 31, "bits-248" },
4841 { 32, "bits-256" },
4842 { 33, "bits-264" },
4843 { 34, "bits-272" },
4844 { 35, "reserved-35" },
4845 { 36, "reserved-36" },
4846 { 37, "reserved-37" },
4847 { 38, "reserved-38" },
4848 { 39, "reserved-39" },
4849 { 40, "reserved-40" },
4850 { 41, "reserved-41" },
4851 { 42, "reserved-42" },
4852 { 43, "reserved-43" },
4853 { 44, "reserved-44" },
4854 { 45, "reserved-45" },
4855 { 46, "reserved-46" },
4856 { 47, "reserved-47" },
4857 { 48, "subslot" },
4858 { 49, "slot-1" },
4859 { 50, "slot-2" },
4860 { 51, "slot-3" },
4861 { 52, "slot-4" },
4862 { 53, "slot-5" },
4863 { 54, "slot-6" },
4864 { 55, "slot-8" },
4865 { 56, "slot-10" },
4866 { 57, "slot-13" },
4867 { 58, "slot-17" },
4868 { 59, "slot-24" },
4869 { 60, "slot-34" },
4870 { 61, "slot-51" },
4871 { 62, "slot-68" },
4872 { 63, "more-than-68" },
4873 { 0, NULL }
4877 static int
4878 dissect_tetra_LengthIndOrReservationReq(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4879 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
4880 64, NULL, false, 0, NULL);
4882 return offset;
4887 static int
4888 dissect_tetra_BIT_STRING_SIZE_258(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4889 offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
4890 258, 258, false, NULL, 0, NULL, NULL);
4892 return offset;
4896 static const per_sequence_t MAC_END_UPLINK_sequence[] = {
4897 { &hf_tetra_pdu_type , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
4898 { &hf_tetra_sub_type , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4899 { &hf_tetra_fill_bit_indication, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Fill_Bit_Indication },
4900 { &hf_tetra_lengthInd_ReservationReq, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_LengthIndOrReservationReq },
4901 { &hf_tetra_tm_sdu_04 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_BIT_STRING_SIZE_258 },
4902 { NULL, 0, 0, NULL }
4905 static int
4906 dissect_tetra_MAC_END_UPLINK(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4907 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4908 ett_tetra_MAC_END_UPLINK, MAC_END_UPLINK_sequence);
4910 return offset;
4915 static int
4916 dissect_tetra_BIT_STRING_SIZE_114(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4917 offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
4918 114, 114, false, NULL, 0, NULL, NULL);
4920 return offset;
4924 static const per_sequence_t MAC_END_UP114_sequence[] = {
4925 { &hf_tetra_pdu_type , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
4926 { &hf_tetra_pdu_subtype , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4927 { &hf_tetra_fill_bit_indication, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Fill_Bit_Indication },
4928 { &hf_tetra_lengthInd_ReservationReq, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_LengthIndOrReservationReq },
4929 { &hf_tetra_tm_sdu_05 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_BIT_STRING_SIZE_114 },
4930 { NULL, 0, 0, NULL }
4933 static int
4934 dissect_tetra_MAC_END_UP114(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4935 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4936 ett_tetra_MAC_END_UP114, MAC_END_UP114_sequence);
4938 return offset;
4942 static const value_string tetra_LengthIndMacHu_vals[] = {
4943 { 0, "reserved-0" },
4944 { 1, "bits-8" },
4945 { 2, "bits-16" },
4946 { 3, "bits-24" },
4947 { 4, "bits-32" },
4948 { 5, "bits-40" },
4949 { 6, "bits-48" },
4950 { 7, "bits-56" },
4951 { 8, "bits-64" },
4952 { 9, "bits-72" },
4953 { 10, "bits-80" },
4954 { 11, "bits-88" },
4955 { 12, "bits-96" },
4956 { 13, "reserved-13" },
4957 { 14, "reserved-14" },
4958 { 15, "reserved-15" },
4959 { 0, NULL }
4963 static int
4964 dissect_tetra_LengthIndMacHu(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4965 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
4966 16, NULL, false, 0, NULL);
4968 return offset;
4972 static const value_string tetra_T_lengthInd_ReservationReq_vals[] = {
4973 { 0, "lengthInd" },
4974 { 1, "reservation-requirement" },
4975 { 0, NULL }
4978 static const per_choice_t T_lengthInd_ReservationReq_choice[] = {
4979 { 0, &hf_tetra_lengthInd , ASN1_NO_EXTENSIONS , dissect_tetra_LengthIndMacHu },
4980 { 1, &hf_tetra_reservation_requirement, ASN1_NO_EXTENSIONS , dissect_tetra_SLOT_APPLY },
4981 { 0, NULL, 0, NULL }
4984 static int
4985 dissect_tetra_T_lengthInd_ReservationReq(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4986 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
4987 ett_tetra_T_lengthInd_ReservationReq, T_lengthInd_ReservationReq_choice,
4988 NULL);
4990 return offset;
4995 static int
4996 dissect_tetra_BIT_STRING_SIZE_85(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4997 offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
4998 85, 85, false, NULL, 0, NULL, NULL);
5000 return offset;
5004 static const per_sequence_t MAC_END_HU_sequence[] = {
5005 { &hf_tetra_pdu_type_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
5006 { &hf_tetra_fill_bit_indication, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Fill_Bit_Indication },
5007 { &hf_tetra_lengthInd_ReservationReq_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_lengthInd_ReservationReq },
5008 { &hf_tetra_tm_sdu_06 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_BIT_STRING_SIZE_85 },
5009 { NULL, 0, 0, NULL }
5012 static int
5013 dissect_tetra_MAC_END_HU(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5014 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
5015 ett_tetra_MAC_END_HU, MAC_END_HU_sequence);
5017 return offset;
5021 static const value_string tetra_Position_Of_Grant_vals[] = {
5022 { 0, "on-current" },
5023 { 1, "on-allocated" },
5024 { 0, NULL }
5028 static int
5029 dissect_tetra_Position_Of_Grant(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5030 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5031 2, NULL, false, 0, NULL);
5033 return offset;
5037 static const value_string tetra_LengthIndicationMacEndDl_vals[] = {
5038 { 0, "reserved-0" },
5039 { 1, "reserved-1" },
5040 { 2, "bits-16" },
5041 { 3, "bits-24" },
5042 { 4, "bits-32" },
5043 { 5, "bits-40" },
5044 { 6, "bits-48" },
5045 { 7, "bits-56" },
5046 { 8, "bits-64" },
5047 { 9, "bits-72" },
5048 { 10, "bits-80" },
5049 { 11, "bits-88" },
5050 { 12, "bits-96" },
5051 { 13, "bits-104" },
5052 { 14, "bits-112" },
5053 { 15, "bits-120" },
5054 { 16, "bits-128" },
5055 { 17, "bits-136" },
5056 { 18, "bits-144" },
5057 { 19, "bits-152" },
5058 { 20, "bits-160" },
5059 { 21, "bits-168" },
5060 { 22, "bits-176" },
5061 { 23, "bits-184" },
5062 { 24, "bits-192" },
5063 { 25, "bits-200" },
5064 { 26, "bits-208" },
5065 { 27, "bits-216" },
5066 { 28, "bits-224" },
5067 { 29, "bits-232" },
5068 { 30, "bits-240" },
5069 { 31, "bits-248" },
5070 { 32, "bits-256" },
5071 { 33, "bits-264" },
5072 { 34, "bits-272" },
5073 { 35, "reserved-35" },
5074 { 36, "reserved-36" },
5075 { 37, "reserved-37" },
5076 { 38, "reserved-38" },
5077 { 39, "reserved-39" },
5078 { 40, "reserved-40" },
5079 { 41, "reserved-41" },
5080 { 42, "reserved-42" },
5081 { 43, "reserved-43" },
5082 { 44, "reserved-44" },
5083 { 45, "reserved-45" },
5084 { 46, "reserved-46" },
5085 { 47, "reserved-47" },
5086 { 48, "reserved-48" },
5087 { 49, "reserved-49" },
5088 { 50, "reserved-50" },
5089 { 51, "reserved-51" },
5090 { 52, "reserved-52" },
5091 { 53, "reserved-53" },
5092 { 54, "reserved-54" },
5093 { 55, "reserved-55" },
5094 { 56, "reserved-56" },
5095 { 57, "reserved-57" },
5096 { 58, "reserved-58" },
5097 { 59, "reserved-59" },
5098 { 60, "reserved-60" },
5099 { 61, "reserved-61" },
5100 { 62, "reserved-62" },
5101 { 63, "reserved-63" },
5102 { 0, NULL }
5106 static int
5107 dissect_tetra_LengthIndicationMacEndDl(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5108 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5109 64, NULL, false, 0, NULL);
5111 return offset;
5115 static const value_string tetra_Capacity_Allocation_vals[] = {
5116 { 0, "first-subslot" },
5117 { 1, "slot-allocated-1" },
5118 { 2, "slot-allocated-2" },
5119 { 3, "slot-allocated-3" },
5120 { 4, "slot-allocated-4" },
5121 { 5, "slot-allocated-5" },
5122 { 6, "slot-allocated-6" },
5123 { 7, "slot-allocated-8" },
5124 { 8, "slot-allocated-10" },
5125 { 9, "slot-allocated-13" },
5126 { 10, "slot-allocated-17" },
5127 { 11, "slot-allocated-24" },
5128 { 12, "slot-allocated-34" },
5129 { 13, "lot-allocated-51" },
5130 { 14, "slot-allocated-68" },
5131 { 15, "second-subslot" },
5132 { 0, NULL }
5136 static int
5137 dissect_tetra_Capacity_Allocation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5138 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5139 16, NULL, false, 0, NULL);
5141 return offset;
5145 static const value_string tetra_Granting_delay_vals[] = {
5146 { 0, "capacity-allocation-at-next-opportunity" },
5147 { 1, "number-of-opportunities-delay" },
5148 { 2, "number-of-opportunities-delay" },
5149 { 3, "number-of-opportunities-delay" },
5150 { 4, "number-of-opportunities-delay" },
5151 { 5, "number-of-opportunities-delay" },
5152 { 6, "number-of-opportunities-delay" },
5153 { 7, "number-of-opportunities-delay" },
5154 { 8, "number-of-opportunities-delay" },
5155 { 9, "number-of-opportunities-delay" },
5156 { 10, "number-of-opportunities-delay" },
5157 { 11, "number-of-opportunities-delay" },
5158 { 12, "number-of-opportunities-delay" },
5159 { 13, "number-of-opportunities-delay" },
5160 { 14, "allocation-starts-at-frame-18" },
5161 { 15, "wait" },
5162 { 0, NULL }
5166 static int
5167 dissect_tetra_Granting_delay(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5168 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5169 16, NULL, false, 0, NULL);
5171 return offset;
5175 static const per_sequence_t SlotGranting_sequence[] = {
5176 { &hf_tetra_capacity_allocation, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Capacity_Allocation },
5177 { &hf_tetra_granting_delay, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Granting_delay },
5178 { NULL, 0, 0, NULL }
5181 static int
5182 dissect_tetra_SlotGranting(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5183 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
5184 ett_tetra_SlotGranting, SlotGranting_sequence);
5186 return offset;
5190 static const value_string tetra_T_slot_granting_vals[] = {
5191 { 0, "none" },
5192 { 1, "slot-granting-param" },
5193 { 0, NULL }
5196 static const per_choice_t T_slot_granting_choice[] = {
5197 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
5198 { 1, &hf_tetra_slot_granting_param, ASN1_NO_EXTENSIONS , dissect_tetra_SlotGranting },
5199 { 0, NULL, 0, NULL }
5202 static int
5203 dissect_tetra_T_slot_granting(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5204 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5205 ett_tetra_T_slot_granting, T_slot_granting_choice,
5206 NULL);
5208 return offset;
5212 static const value_string tetra_T_allocation_type_vals[] = {
5213 { 0, "replace" },
5214 { 1, "add" },
5215 { 2, "quit" },
5216 { 3, "reserved" },
5217 { 0, NULL }
5221 static int
5222 dissect_tetra_T_allocation_type(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5223 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5224 4, NULL, false, 0, NULL);
5226 return offset;
5230 static const value_string tetra_Timeslot_Assigned_vals[] = {
5231 { 0, "go-to-control-channel" },
5232 { 1, "timeslot-4" },
5233 { 2, "timeslot-bit-map" },
5234 { 3, "timeslot-bit-map" },
5235 { 4, "timeslot-bit-map" },
5236 { 5, "timeslot-bit-map" },
5237 { 6, "timeslot-bit-map" },
5238 { 7, "timeslot-bit-map" },
5239 { 8, "timeslot-bit-map" },
5240 { 9, "timeslot-bit-map" },
5241 { 10, "timeslot-bit-map" },
5242 { 11, "timeslot-bit-map" },
5243 { 12, "timeslot-bit-map" },
5244 { 13, "timeslot-bit-map" },
5245 { 14, "timeslot-bit-map" },
5246 { 15, "all-four-timeslots" },
5247 { 0, NULL }
5251 static int
5252 dissect_tetra_Timeslot_Assigned(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5253 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5254 16, NULL, false, 0, NULL);
5256 return offset;
5260 static const value_string tetra_T_up_down_assigned_vals[] = {
5261 { 0, "reserve" },
5262 { 1, "downlink-only" },
5263 { 2, "uplink-only" },
5264 { 3, "uplink-downlink" },
5265 { 0, NULL }
5269 static int
5270 dissect_tetra_T_up_down_assigned(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5271 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5272 4, NULL, false, 0, NULL);
5274 return offset;
5278 static const value_string tetra_CLCH_permission_vals[] = {
5279 { 0, "no-permission" },
5280 { 1, "permission" },
5281 { 0, NULL }
5285 static int
5286 dissect_tetra_CLCH_permission(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5287 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5288 2, NULL, false, 0, NULL);
5290 return offset;
5294 static const value_string tetra_Cell_change_flag_vals[] = {
5295 { 0, "no-change" },
5296 { 1, "change" },
5297 { 0, NULL }
5301 static int
5302 dissect_tetra_Cell_change_flag(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5303 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5304 2, NULL, false, 0, NULL);
5306 return offset;
5310 static const value_string tetra_T_reverse_operation_vals[] = {
5311 { 0, "normal" },
5312 { 1, "reverse" },
5313 { 0, NULL }
5317 static int
5318 dissect_tetra_T_reverse_operation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5319 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5320 2, NULL, false, 0, NULL);
5322 return offset;
5326 static const per_sequence_t Extended_carrier_flag_sequence[] = {
5327 { &hf_tetra_frequency_band, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_15 },
5328 { &hf_tetra_offset_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
5329 { &hf_tetra_duplex_spacing, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
5330 { &hf_tetra_reverse_operation_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_reverse_operation },
5331 { NULL, 0, 0, NULL }
5334 static int
5335 dissect_tetra_Extended_carrier_flag(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5336 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
5337 ett_tetra_Extended_carrier_flag, Extended_carrier_flag_sequence);
5339 return offset;
5343 static const value_string tetra_T_extend_carrier_flag_vals[] = {
5344 { 0, "none" },
5345 { 1, "extended" },
5346 { 0, NULL }
5349 static const per_choice_t T_extend_carrier_flag_choice[] = {
5350 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
5351 { 1, &hf_tetra_extended , ASN1_NO_EXTENSIONS , dissect_tetra_Extended_carrier_flag },
5352 { 0, NULL, 0, NULL }
5355 static int
5356 dissect_tetra_T_extend_carrier_flag(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5357 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5358 ett_tetra_T_extend_carrier_flag, T_extend_carrier_flag_choice,
5359 NULL);
5361 return offset;
5365 static const value_string tetra_Monitoring_pattern_vals[] = {
5366 { 0, "no" },
5367 { 1, "one" },
5368 { 2, "two" },
5369 { 3, "three" },
5370 { 0, NULL }
5374 static int
5375 dissect_tetra_Monitoring_pattern(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5376 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5377 4, NULL, false, 0, NULL);
5379 return offset;
5383 static const value_string tetra_T_monitoring_pattern_vals[] = {
5384 { 0, "one" },
5385 { 1, "none1" },
5386 { 2, "none2" },
5387 { 3, "none3" },
5388 { 0, NULL }
5391 static const per_choice_t T_monitoring_pattern_choice[] = {
5392 { 0, &hf_tetra_one , ASN1_NO_EXTENSIONS , dissect_tetra_Monitoring_pattern },
5393 { 1, &hf_tetra_none1 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
5394 { 2, &hf_tetra_none2 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
5395 { 3, &hf_tetra_none3 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
5396 { 0, NULL, 0, NULL }
5399 static int
5400 dissect_tetra_T_monitoring_pattern(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5401 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5402 ett_tetra_T_monitoring_pattern, T_monitoring_pattern_choice,
5403 NULL);
5405 return offset;
5409 static const per_sequence_t ChannelAllocation_sequence[] = {
5410 { &hf_tetra_allocation_type, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_allocation_type },
5411 { &hf_tetra_timeslot_assigned, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Timeslot_Assigned },
5412 { &hf_tetra_up_down_assigned, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_up_down_assigned },
5413 { &hf_tetra_clch_permission, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_CLCH_permission },
5414 { &hf_tetra_cell_change , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Cell_change_flag },
5415 { &hf_tetra_carrier_number, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_4095 },
5416 { &hf_tetra_extend_carrier_flag, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_extend_carrier_flag },
5417 { &hf_tetra_monitoring_pattern, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_monitoring_pattern },
5418 { NULL, 0, 0, NULL }
5421 static int
5422 dissect_tetra_ChannelAllocation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5423 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
5424 ett_tetra_ChannelAllocation, ChannelAllocation_sequence);
5426 return offset;
5430 static const value_string tetra_T_channel_allocation_vals[] = {
5431 { 0, "none" },
5432 { 1, "channel-allocation-element" },
5433 { 0, NULL }
5436 static const per_choice_t T_channel_allocation_choice[] = {
5437 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
5438 { 1, &hf_tetra_channel_allocation_element, ASN1_NO_EXTENSIONS , dissect_tetra_ChannelAllocation },
5439 { 0, NULL, 0, NULL }
5442 static int
5443 dissect_tetra_T_channel_allocation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5444 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5445 ett_tetra_T_channel_allocation, T_channel_allocation_choice,
5446 NULL);
5448 return offset;
5453 static int
5454 dissect_tetra_BIT_STRING_SIZE_255(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5455 offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
5456 255, 255, false, NULL, 0, NULL, NULL);
5458 return offset;
5462 static const per_sequence_t MAC_END_DOWNLINK_sequence[] = {
5463 { &hf_tetra_pdu_type , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
5464 { &hf_tetra_sub_type , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
5465 { &hf_tetra_fill_bit_indication, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Fill_Bit_Indication },
5466 { &hf_tetra_position_of_grant, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Position_Of_Grant },
5467 { &hf_tetra_lengthIndication_02, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_LengthIndicationMacEndDl },
5468 { &hf_tetra_slot_granting , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_slot_granting },
5469 { &hf_tetra_channel_allocation, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_channel_allocation },
5470 { &hf_tetra_tm_sdu_07 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_BIT_STRING_SIZE_255 },
5471 { NULL, 0, 0, NULL }
5474 static int
5475 dissect_tetra_MAC_END_DOWNLINK(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5476 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
5477 ett_tetra_MAC_END_DOWNLINK, MAC_END_DOWNLINK_sequence);
5479 return offset;
5483 static const value_string tetra_T_slot_granting_01_vals[] = {
5484 { 0, "none" },
5485 { 1, "slot-granting-param" },
5486 { 0, NULL }
5489 static const per_choice_t T_slot_granting_01_choice[] = {
5490 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
5491 { 1, &hf_tetra_slot_granting_param, ASN1_NO_EXTENSIONS , dissect_tetra_SlotGranting },
5492 { 0, NULL, 0, NULL }
5495 static int
5496 dissect_tetra_T_slot_granting_01(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5497 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5498 ett_tetra_T_slot_granting_01, T_slot_granting_01_choice,
5499 NULL);
5501 return offset;
5505 static const value_string tetra_T_channel_allocation_01_vals[] = {
5506 { 0, "none" },
5507 { 1, "channel-allocation-element" },
5508 { 0, NULL }
5511 static const per_choice_t T_channel_allocation_01_choice[] = {
5512 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
5513 { 1, &hf_tetra_channel_allocation_element, ASN1_NO_EXTENSIONS , dissect_tetra_ChannelAllocation },
5514 { 0, NULL, 0, NULL }
5517 static int
5518 dissect_tetra_T_channel_allocation_01(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5519 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5520 ett_tetra_T_channel_allocation_01, T_channel_allocation_01_choice,
5521 NULL);
5523 return offset;
5528 static int
5529 dissect_tetra_BIT_STRING_SIZE_111(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5530 offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
5531 111, 111, false, NULL, 0, NULL, NULL);
5533 return offset;
5537 static const per_sequence_t MAC_END_DOWN111_sequence[] = {
5538 { &hf_tetra_pdu_type_02 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
5539 { &hf_tetra_fill_bit_ind , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
5540 { &hf_tetra_position_of_grant_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
5541 { &hf_tetra_lengthIndication_02, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_LengthIndicationMacEndDl },
5542 { &hf_tetra_slot_granting_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_slot_granting_01 },
5543 { &hf_tetra_channel_allocation_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_channel_allocation_01 },
5544 { &hf_tetra_tm_sdu_08 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_BIT_STRING_SIZE_111 },
5545 { NULL, 0, 0, NULL }
5548 static int
5549 dissect_tetra_MAC_END_DOWN111(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5550 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
5551 ett_tetra_MAC_END_DOWN111, MAC_END_DOWN111_sequence);
5553 return offset;
5557 static const value_string tetra_T_access_ack_vals[] = {
5558 { 0, "undefined" },
5559 { 1, "random-access-acknowledged" },
5560 { 0, NULL }
5564 static int
5565 dissect_tetra_T_access_ack(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5566 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5567 2, NULL, false, 0, NULL);
5569 return offset;
5573 static const value_string tetra_LengthIndicationMacResource_vals[] = {
5574 { 0, "reserved-0" },
5575 { 1, "reserved-1" },
5576 { 2, "null-pdu" },
5577 { 3, "reserved" },
5578 { 4, "bits-32" },
5579 { 5, "bits-40" },
5580 { 6, "bits-48" },
5581 { 7, "bits-56" },
5582 { 8, "bits-64" },
5583 { 9, "bits-72" },
5584 { 10, "bits-80" },
5585 { 11, "bits-88" },
5586 { 12, "bits-96" },
5587 { 13, "bits-104" },
5588 { 14, "bits-112" },
5589 { 15, "bits-120" },
5590 { 16, "bits-128" },
5591 { 17, "bits-136" },
5592 { 18, "bits-144" },
5593 { 19, "bits-152" },
5594 { 20, "bits-160" },
5595 { 21, "bits-168" },
5596 { 22, "bits-176" },
5597 { 23, "bits-184" },
5598 { 24, "bits-192" },
5599 { 25, "bits-200" },
5600 { 26, "bits-208" },
5601 { 27, "bits-216" },
5602 { 28, "bits-224" },
5603 { 29, "bits-232" },
5604 { 30, "bits-240" },
5605 { 31, "bits-248" },
5606 { 32, "bits-256" },
5607 { 33, "bits-264" },
5608 { 34, "bits-272" },
5609 { 35, "reserved-35" },
5610 { 36, "reserved-36" },
5611 { 37, "reserved-37" },
5612 { 38, "reserved-38" },
5613 { 39, "reserved-39" },
5614 { 40, "reserved-40" },
5615 { 41, "reserved-41" },
5616 { 42, "reserved-42" },
5617 { 43, "reserved-43" },
5618 { 44, "reserved-44" },
5619 { 45, "reserved-45" },
5620 { 46, "reserved-46" },
5621 { 47, "reserved-47" },
5622 { 48, "reserved-48" },
5623 { 49, "reserved-49" },
5624 { 50, "reserved-50" },
5625 { 51, "reserved-51" },
5626 { 52, "reserved-52" },
5627 { 53, "reserved-53" },
5628 { 54, "reserved-54" },
5629 { 55, "reserved-55" },
5630 { 56, "reserved-56" },
5631 { 57, "reserved-57" },
5632 { 58, "reserved-58" },
5633 { 59, "reserved-59" },
5634 { 60, "reserved-60" },
5635 { 61, "reserved-61" },
5636 { 62, "second-halfslot-stolen" },
5637 { 63, "start-frag" },
5638 { 0, NULL }
5642 static int
5643 dissect_tetra_LengthIndicationMacResource(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5644 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5645 64, NULL, false, 0, NULL);
5647 return offset;
5651 static const value_string tetra_PowerControl_vals[] = {
5652 { 0, "no-change" },
5653 { 1, "increase-1" },
5654 { 2, "increase-2" },
5655 { 3, "increase-3" },
5656 { 4, "increase-4" },
5657 { 5, "increase-5" },
5658 { 6, "increase-6" },
5659 { 7, "maximum-xceeded" },
5660 { 8, "revert-open-loop-control" },
5661 { 9, "decrease-1" },
5662 { 10, "decrease-2" },
5663 { 11, "decrease-3" },
5664 { 12, "decrease-4" },
5665 { 13, "decrease-5" },
5666 { 14, "decrease-6" },
5667 { 15, "radio-uplink-failure" },
5668 { 0, NULL }
5672 static int
5673 dissect_tetra_PowerControl(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5674 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5675 16, NULL, false, 0, NULL);
5677 return offset;
5681 static const value_string tetra_T_power_control_vals[] = {
5682 { 0, "none" },
5683 { 1, "powerParameters" },
5684 { 0, NULL }
5687 static const per_choice_t T_power_control_choice[] = {
5688 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
5689 { 1, &hf_tetra_powerParameters, ASN1_NO_EXTENSIONS , dissect_tetra_PowerControl },
5690 { 0, NULL, 0, NULL }
5693 static int
5694 dissect_tetra_T_power_control(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5695 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5696 ett_tetra_T_power_control, T_power_control_choice,
5697 NULL);
5699 return offset;
5703 static const value_string tetra_T_slot_granting_02_vals[] = {
5704 { 0, "none" },
5705 { 1, "slot-granting-param" },
5706 { 0, NULL }
5709 static const per_choice_t T_slot_granting_02_choice[] = {
5710 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
5711 { 1, &hf_tetra_slot_granting_param, ASN1_NO_EXTENSIONS , dissect_tetra_SlotGranting },
5712 { 0, NULL, 0, NULL }
5715 static int
5716 dissect_tetra_T_slot_granting_02(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5717 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5718 ett_tetra_T_slot_granting_02, T_slot_granting_02_choice,
5719 NULL);
5721 return offset;
5725 static const value_string tetra_T_channel_allocation_02_vals[] = {
5726 { 0, "none" },
5727 { 1, "channel-allocation-element" },
5728 { 0, NULL }
5731 static const per_choice_t T_channel_allocation_02_choice[] = {
5732 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
5733 { 1, &hf_tetra_channel_allocation_element, ASN1_NO_EXTENSIONS , dissect_tetra_ChannelAllocation },
5734 { 0, NULL, 0, NULL }
5737 static int
5738 dissect_tetra_T_channel_allocation_02(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5739 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5740 ett_tetra_T_channel_allocation_02, T_channel_allocation_02_choice,
5741 NULL);
5743 return offset;
5747 static const value_string tetra_T_ssi_vals[] = {
5748 { 0, "none" },
5749 { 1, "ssi" },
5750 { 0, NULL }
5753 static const per_choice_t T_ssi_choice[] = {
5754 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
5755 { 1, &hf_tetra_ssi_03 , ASN1_NO_EXTENSIONS , dissect_tetra_OCTET_STRING_SIZE_3 },
5756 { 0, NULL, 0, NULL }
5759 static int
5760 dissect_tetra_T_ssi(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5761 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5762 ett_tetra_T_ssi, T_ssi_choice,
5763 NULL);
5765 return offset;
5769 static const value_string tetra_T_address_extension_vals[] = {
5770 { 0, "none" },
5771 { 1, "address-extension" },
5772 { 0, NULL }
5775 static const per_choice_t T_address_extension_choice[] = {
5776 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
5777 { 1, &hf_tetra_address_extension_01, ASN1_NO_EXTENSIONS , dissect_tetra_OCTET_STRING_SIZE_3 },
5778 { 0, NULL, 0, NULL }
5781 static int
5782 dissect_tetra_T_address_extension(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5783 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5784 ett_tetra_T_address_extension, T_address_extension_choice,
5785 NULL);
5787 return offset;
5791 static const value_string tetra_T_subscriber_class_vals[] = {
5792 { 0, "none" },
5793 { 1, "subscriber-class" },
5794 { 0, NULL }
5797 static const per_choice_t T_subscriber_class_choice[] = {
5798 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
5799 { 1, &hf_tetra_subscriber_class, ASN1_NO_EXTENSIONS , dissect_tetra_Subscriber_class },
5800 { 0, NULL, 0, NULL }
5803 static int
5804 dissect_tetra_T_subscriber_class(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5805 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5806 ett_tetra_T_subscriber_class, T_subscriber_class_choice,
5807 NULL);
5809 return offset;
5813 static const value_string tetra_T_energy_saving_mode_vals[] = {
5814 { 0, "none" },
5815 { 1, "energy-saving-mode" },
5816 { 0, NULL }
5819 static const per_choice_t T_energy_saving_mode_choice[] = {
5820 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
5821 { 1, &hf_tetra_energy_saving_mode_01, ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_7 },
5822 { 0, NULL, 0, NULL }
5825 static int
5826 dissect_tetra_T_energy_saving_mode(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5827 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5828 ett_tetra_T_energy_saving_mode, T_energy_saving_mode_choice,
5829 NULL);
5831 return offset;
5835 static const value_string tetra_T_scch_info_vals[] = {
5836 { 0, "none" },
5837 { 1, "scch-info" },
5838 { 0, NULL }
5841 static const per_choice_t T_scch_info_choice[] = {
5842 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
5843 { 1, &hf_tetra_scch_info_01 , ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_16383 },
5844 { 0, NULL, 0, NULL }
5847 static int
5848 dissect_tetra_T_scch_info(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5849 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5850 ett_tetra_T_scch_info, T_scch_info_choice,
5851 NULL);
5853 return offset;
5857 static const value_string tetra_T_new_ra_vals[] = {
5858 { 0, "none" },
5859 { 1, "new-ra" },
5860 { 0, NULL }
5863 static const per_choice_t T_new_ra_choice[] = {
5864 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
5865 { 1, &hf_tetra_new_ra_01 , ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_3 },
5866 { 0, NULL, 0, NULL }
5869 static int
5870 dissect_tetra_T_new_ra(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5871 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5872 ett_tetra_T_new_ra, T_new_ra_choice,
5873 NULL);
5875 return offset;
5879 static const value_string tetra_T_group_identity_location_accept_vals[] = {
5880 { 0, "none" },
5881 { 1, "group-identity-location-accept" },
5882 { 0, NULL }
5885 static const per_choice_t T_group_identity_location_accept_choice[] = {
5886 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
5887 { 1, &hf_tetra_group_identity_location_accept_01, ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_3 },
5888 { 0, NULL, 0, NULL }
5891 static int
5892 dissect_tetra_T_group_identity_location_accept(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5893 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5894 ett_tetra_T_group_identity_location_accept, T_group_identity_location_accept_choice,
5895 NULL);
5897 return offset;
5901 static const value_string tetra_T_group_predefined_lifetime_vals[] = {
5902 { 0, "none" },
5903 { 1, "group-predefined-lifetime" },
5904 { 0, NULL }
5907 static const per_choice_t T_group_predefined_lifetime_choice[] = {
5908 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
5909 { 1, &hf_tetra_group_predefined_lifetime_01, ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_3 },
5910 { 0, NULL, 0, NULL }
5913 static int
5914 dissect_tetra_T_group_predefined_lifetime(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5915 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5916 ett_tetra_T_group_predefined_lifetime, T_group_predefined_lifetime_choice,
5917 NULL);
5919 return offset;
5923 static const value_string tetra_T_group_identity_downlink_vals[] = {
5924 { 0, "none" },
5925 { 1, "group-identity-downlink" },
5926 { 0, NULL }
5929 static const per_choice_t T_group_identity_downlink_choice[] = {
5930 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
5931 { 1, &hf_tetra_group_identity_downlink_01, ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_15 },
5932 { 0, NULL, 0, NULL }
5935 static int
5936 dissect_tetra_T_group_identity_downlink(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5937 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5938 ett_tetra_T_group_identity_downlink, T_group_identity_downlink_choice,
5939 NULL);
5941 return offset;
5945 static const value_string tetra_T_proprietary_vals[] = {
5946 { 0, "none" },
5947 { 1, "proprietary" },
5948 { 0, NULL }
5951 static const per_choice_t T_proprietary_choice[] = {
5952 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
5953 { 1, &hf_tetra_proprietary_01, ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_7 },
5954 { 0, NULL, 0, NULL }
5957 static int
5958 dissect_tetra_T_proprietary(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5959 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5960 ett_tetra_T_proprietary, T_proprietary_choice,
5961 NULL);
5963 return offset;
5967 static const per_sequence_t T_type3_elements_sequence[] = {
5968 { &hf_tetra_type2_existance, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
5969 { &hf_tetra_type3_identifier, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_TYPE3_IDENTIFIER },
5970 { &hf_tetra_new_ra , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_new_ra },
5971 { &hf_tetra_group_identity_location_accept, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_group_identity_location_accept },
5972 { &hf_tetra_group_predefined_lifetime, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_group_predefined_lifetime },
5973 { &hf_tetra_group_identity_downlink, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_group_identity_downlink },
5974 { &hf_tetra_proprietary , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_proprietary },
5975 { NULL, 0, 0, NULL }
5978 static int
5979 dissect_tetra_T_type3_elements(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5980 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
5981 ett_tetra_T_type3_elements, T_type3_elements_sequence);
5983 return offset;
5987 static const value_string tetra_T_type3_vals[] = {
5988 { 0, "no-type3" },
5989 { 1, "type3-elements" },
5990 { 0, NULL }
5993 static const per_choice_t T_type3_choice[] = {
5994 { 0, &hf_tetra_no_type3 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
5995 { 1, &hf_tetra_type3_elements, ASN1_NO_EXTENSIONS , dissect_tetra_T_type3_elements },
5996 { 0, NULL, 0, NULL }
5999 static int
6000 dissect_tetra_T_type3(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6001 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6002 ett_tetra_T_type3, T_type3_choice,
6003 NULL);
6005 return offset;
6009 static const per_sequence_t T_type2_parameters_03_sequence[] = {
6010 { &hf_tetra_ssi_02 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_ssi },
6011 { &hf_tetra_address_extension, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_address_extension },
6012 { &hf_tetra_subscriber_class_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_subscriber_class },
6013 { &hf_tetra_energy_saving_mode, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_energy_saving_mode },
6014 { &hf_tetra_scch_info , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_scch_info },
6015 { &hf_tetra_type3 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_type3 },
6016 { NULL, 0, 0, NULL }
6019 static int
6020 dissect_tetra_T_type2_parameters_03(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6021 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6022 ett_tetra_T_type2_parameters_03, T_type2_parameters_03_sequence);
6024 return offset;
6028 static const value_string tetra_T_optional_elements_05_vals[] = {
6029 { 0, "no-type2" },
6030 { 1, "type2-parameters" },
6031 { 0, NULL }
6034 static const per_choice_t T_optional_elements_05_choice[] = {
6035 { 0, &hf_tetra_no_type2 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
6036 { 1, &hf_tetra_type2_parameters_03, ASN1_NO_EXTENSIONS , dissect_tetra_T_type2_parameters_03 },
6037 { 0, NULL, 0, NULL }
6040 static int
6041 dissect_tetra_T_optional_elements_05(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6042 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6043 ett_tetra_T_optional_elements_05, T_optional_elements_05_choice,
6044 NULL);
6046 return offset;
6050 static const per_sequence_t D_LOCATION_UPDATE_ACCEPT_sequence[] = {
6051 { &hf_tetra_location_update_type, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_UPDATE_TYPE },
6052 { &hf_tetra_optional_elements_05, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_05 },
6053 { NULL, 0, 0, NULL }
6056 static int
6057 dissect_tetra_D_LOCATION_UPDATE_ACCEPT(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6058 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6059 ett_tetra_D_LOCATION_UPDATE_ACCEPT, D_LOCATION_UPDATE_ACCEPT_sequence);
6061 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-LOCATION-UPDATE-ACCEPT");
6063 return offset;
6067 static const per_sequence_t D_LOCATION_UPDATE_REJECT_sequence[] = {
6068 { &hf_tetra_location_update_type, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_UPDATE_TYPE },
6069 { &hf_tetra_reject_cause , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_31 },
6070 { &hf_tetra_cipher_control, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
6071 { NULL, 0, 0, NULL }
6074 static int
6075 dissect_tetra_D_LOCATION_UPDATE_REJECT(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6076 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6077 ett_tetra_D_LOCATION_UPDATE_REJECT, D_LOCATION_UPDATE_REJECT_sequence);
6079 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-LOCATION-UPDATE-REJECT");
6081 return offset;
6085 static const per_sequence_t T_attach_sequence[] = {
6086 { &hf_tetra_lifetime , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
6087 { &hf_tetra_class_of_usage, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
6088 { NULL, 0, 0, NULL }
6091 static int
6092 dissect_tetra_T_attach(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6093 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6094 ett_tetra_T_attach, T_attach_sequence);
6096 return offset;
6100 static const value_string tetra_T_detach_downlike_vals[] = {
6101 { 0, "unknow-gssi" },
6102 { 1, "temporary-detachment1" },
6103 { 2, "temporary-detachment2" },
6104 { 3, "permanent-detachment" },
6105 { 0, NULL }
6109 static int
6110 dissect_tetra_T_detach_downlike(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6111 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
6112 4, NULL, false, 0, NULL);
6114 return offset;
6118 static const per_sequence_t T_detach_sequence[] = {
6119 { &hf_tetra_detach_downlike, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_detach_downlike },
6120 { NULL, 0, 0, NULL }
6123 static int
6124 dissect_tetra_T_detach(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6125 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6126 ett_tetra_T_detach, T_detach_sequence);
6128 return offset;
6132 static const value_string tetra_T_attach_detach_identifier_vals[] = {
6133 { 0, "attach" },
6134 { 1, "detach" },
6135 { 0, NULL }
6138 static const per_choice_t T_attach_detach_identifier_choice[] = {
6139 { 0, &hf_tetra_attach , ASN1_NO_EXTENSIONS , dissect_tetra_T_attach },
6140 { 1, &hf_tetra_detach , ASN1_NO_EXTENSIONS , dissect_tetra_T_detach },
6141 { 0, NULL, 0, NULL }
6144 static int
6145 dissect_tetra_T_attach_detach_identifier(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6146 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6147 ett_tetra_T_attach_detach_identifier, T_attach_detach_identifier_choice,
6148 NULL);
6150 return offset;
6154 static const per_sequence_t T_gssi_extension_sequence[] = {
6155 { &hf_tetra_gssi_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_OCTET_STRING_SIZE_3 },
6156 { &hf_tetra_extension , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_OCTET_STRING_SIZE_3 },
6157 { NULL, 0, 0, NULL }
6160 static int
6161 dissect_tetra_T_gssi_extension(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6162 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6163 ett_tetra_T_gssi_extension, T_gssi_extension_sequence);
6165 return offset;
6169 static const value_string tetra_T_address_type_vals[] = {
6170 { 0, "gssi" },
6171 { 1, "gssi-extension" },
6172 { 2, "vgssi" },
6173 { 0, NULL }
6176 static const per_choice_t T_address_type_choice[] = {
6177 { 0, &hf_tetra_gssi_01 , ASN1_NO_EXTENSIONS , dissect_tetra_OCTET_STRING_SIZE_3 },
6178 { 1, &hf_tetra_gssi_extension, ASN1_NO_EXTENSIONS , dissect_tetra_T_gssi_extension },
6179 { 2, &hf_tetra_vgssi , ASN1_NO_EXTENSIONS , dissect_tetra_OCTET_STRING_SIZE_3 },
6180 { 0, NULL, 0, NULL }
6183 static int
6184 dissect_tetra_T_address_type(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6185 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6186 ett_tetra_T_address_type, T_address_type_choice,
6187 NULL);
6189 return offset;
6193 static const per_sequence_t GROUP_IDENTITY_DOWNLINK_sequence[] = {
6194 { &hf_tetra_attach_detach_identifier, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_attach_detach_identifier },
6195 { &hf_tetra_address_type , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_address_type },
6196 { NULL, 0, 0, NULL }
6199 static int
6200 dissect_tetra_GROUP_IDENTITY_DOWNLINK(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6201 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6202 ett_tetra_GROUP_IDENTITY_DOWNLINK, GROUP_IDENTITY_DOWNLINK_sequence);
6204 return offset;
6208 static const per_sequence_t T_type3_elements_04_sequence[] = {
6209 { &hf_tetra_type3_identifier, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_TYPE3_IDENTIFIER },
6210 { &hf_tetra_length , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_2047 },
6211 { &hf_tetra_repeat_num , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_63 },
6212 { &hf_tetra_group_identity_downlink_02, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_GROUP_IDENTITY_DOWNLINK },
6213 { NULL, 0, 0, NULL }
6216 static int
6217 dissect_tetra_T_type3_elements_04(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6218 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6219 ett_tetra_T_type3_elements_04, T_type3_elements_04_sequence);
6221 return offset;
6225 static const value_string tetra_T_type3_04_vals[] = {
6226 { 0, "no-type3" },
6227 { 1, "type3-elements" },
6228 { 0, NULL }
6231 static const per_choice_t T_type3_04_choice[] = {
6232 { 0, &hf_tetra_no_type3 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
6233 { 1, &hf_tetra_type3_elements_04, ASN1_NO_EXTENSIONS , dissect_tetra_T_type3_elements_04 },
6234 { 0, NULL, 0, NULL }
6237 static int
6238 dissect_tetra_T_type3_04(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6239 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6240 ett_tetra_T_type3_04, T_type3_04_choice,
6241 NULL);
6243 return offset;
6247 static const per_sequence_t T_type2_element_02_sequence[] = {
6248 { &hf_tetra_type3_04 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_type3_04 },
6249 { NULL, 0, 0, NULL }
6252 static int
6253 dissect_tetra_T_type2_element_02(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6254 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6255 ett_tetra_T_type2_element_02, T_type2_element_02_sequence);
6257 return offset;
6261 static const value_string tetra_T_optional_elements_24_vals[] = {
6262 { 0, "no-type2" },
6263 { 1, "type2-element" },
6264 { 0, NULL }
6267 static const per_choice_t T_optional_elements_24_choice[] = {
6268 { 0, &hf_tetra_no_type2 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
6269 { 1, &hf_tetra_type2_element_02, ASN1_NO_EXTENSIONS , dissect_tetra_T_type2_element_02 },
6270 { 0, NULL, 0, NULL }
6273 static int
6274 dissect_tetra_T_optional_elements_24(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6275 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6276 ett_tetra_T_optional_elements_24, T_optional_elements_24_choice,
6277 NULL);
6279 return offset;
6283 static const per_sequence_t D_ATTACH_DETACH_GROUP_IDENTITY_sequence[] = {
6284 { &hf_tetra_group_identity_report, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
6285 { &hf_tetra_group_identity_ack_request, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
6286 { &hf_tetra_group_identity_attach_detach_mode, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
6287 { &hf_tetra_optional_elements_24, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_24 },
6288 { NULL, 0, 0, NULL }
6291 static int
6292 dissect_tetra_D_ATTACH_DETACH_GROUP_IDENTITY(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6293 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6294 ett_tetra_D_ATTACH_DETACH_GROUP_IDENTITY, D_ATTACH_DETACH_GROUP_IDENTITY_sequence);
6296 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-ATTACH-DETACH-GROUP-IDENTITY");
6298 return offset;
6302 static const per_sequence_t T_type3_elements_05_sequence[] = {
6303 { &hf_tetra_type3_identifier, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_TYPE3_IDENTIFIER },
6304 { &hf_tetra_length , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_2047 },
6305 { &hf_tetra_repeat_num , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_63 },
6306 { &hf_tetra_group_identity_downlink_02, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_GROUP_IDENTITY_DOWNLINK },
6307 { NULL, 0, 0, NULL }
6310 static int
6311 dissect_tetra_T_type3_elements_05(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6312 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6313 ett_tetra_T_type3_elements_05, T_type3_elements_05_sequence);
6315 return offset;
6319 static const value_string tetra_T_type3_05_vals[] = {
6320 { 0, "no-type3" },
6321 { 1, "type3-elements" },
6322 { 0, NULL }
6325 static const per_choice_t T_type3_05_choice[] = {
6326 { 0, &hf_tetra_no_type3 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
6327 { 1, &hf_tetra_type3_elements_05, ASN1_NO_EXTENSIONS , dissect_tetra_T_type3_elements_05 },
6328 { 0, NULL, 0, NULL }
6331 static int
6332 dissect_tetra_T_type3_05(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6333 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6334 ett_tetra_T_type3_05, T_type3_05_choice,
6335 NULL);
6337 return offset;
6341 static const per_sequence_t T_type2_element_03_sequence[] = {
6342 { &hf_tetra_type3_05 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_type3_05 },
6343 { NULL, 0, 0, NULL }
6346 static int
6347 dissect_tetra_T_type2_element_03(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6348 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6349 ett_tetra_T_type2_element_03, T_type2_element_03_sequence);
6351 return offset;
6355 static const value_string tetra_T_optional_elements_25_vals[] = {
6356 { 0, "no-type2" },
6357 { 1, "type2-element" },
6358 { 0, NULL }
6361 static const per_choice_t T_optional_elements_25_choice[] = {
6362 { 0, &hf_tetra_no_type2 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
6363 { 1, &hf_tetra_type2_element_03, ASN1_NO_EXTENSIONS , dissect_tetra_T_type2_element_03 },
6364 { 0, NULL, 0, NULL }
6367 static int
6368 dissect_tetra_T_optional_elements_25(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6369 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6370 ett_tetra_T_optional_elements_25, T_optional_elements_25_choice,
6371 NULL);
6373 return offset;
6377 static const per_sequence_t D_ATTACH_DETACH_GROUP_IDENTITY_ACK_sequence[] = {
6378 { &hf_tetra_group_identity_attach_detach_accept, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
6379 { &hf_tetra_reserved_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
6380 { &hf_tetra_optional_elements_25, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_25 },
6381 { NULL, 0, 0, NULL }
6384 static int
6385 dissect_tetra_D_ATTACH_DETACH_GROUP_IDENTITY_ACK(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6386 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6387 ett_tetra_D_ATTACH_DETACH_GROUP_IDENTITY_ACK, D_ATTACH_DETACH_GROUP_IDENTITY_ACK_sequence);
6389 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-ATTACH-DETACH-GROUP-IDENTITY-ACK");
6391 return offset;
6395 static const per_sequence_t D_MM_STATUS_sequence[] = {
6396 { &hf_tetra_status_downlink, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_63 },
6397 { NULL, 0, 0, NULL }
6400 static int
6401 dissect_tetra_D_MM_STATUS(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6402 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6403 ett_tetra_D_MM_STATUS, D_MM_STATUS_sequence);
6405 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-MM-STATUS");
6407 return offset;
6411 static const value_string tetra_D_MM_PDU_vals[] = {
6412 { 0, "d-Otar" },
6413 { 1, "d-Authentication" },
6414 { 2, "d-Authentication-Reject" },
6415 { 3, "d-Disable" },
6416 { 4, "d-Enable" },
6417 { 5, "d-Location-Update-Accept" },
6418 { 6, "d-Location-Update-Command" },
6419 { 7, "d-Location-Update-Reject" },
6420 { 8, "d-MM-reserved2" },
6421 { 9, "d-Location-Update-Proceeding" },
6422 { 10, "d-Attach-Detach-Group-Identity" },
6423 { 11, "d-Attach-Detach-Group-Identity-Ack" },
6424 { 12, "d-MM-Status" },
6425 { 13, "d-MM-reserved5" },
6426 { 14, "d-MM-reserved6" },
6427 { 15, "d-MM-Function-Not-Support" },
6428 { 0, NULL }
6431 static const per_choice_t D_MM_PDU_choice[] = {
6432 { 0, &hf_tetra_d_Otar , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
6433 { 1, &hf_tetra_d_Authentication, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
6434 { 2, &hf_tetra_d_Authentication_Reject, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
6435 { 3, &hf_tetra_d_Disable , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
6436 { 4, &hf_tetra_d_Enable , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
6437 { 5, &hf_tetra_d_Location_Update_Accept, ASN1_NO_EXTENSIONS , dissect_tetra_D_LOCATION_UPDATE_ACCEPT },
6438 { 6, &hf_tetra_d_Location_Update_Command, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
6439 { 7, &hf_tetra_d_Location_Update_Reject, ASN1_NO_EXTENSIONS , dissect_tetra_D_LOCATION_UPDATE_REJECT },
6440 { 8, &hf_tetra_d_MM_reserved2, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
6441 { 9, &hf_tetra_d_Location_Update_Proceeding, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
6442 { 10, &hf_tetra_d_Attach_Detach_Group_Identity, ASN1_NO_EXTENSIONS , dissect_tetra_D_ATTACH_DETACH_GROUP_IDENTITY },
6443 { 11, &hf_tetra_d_Attach_Detach_Group_Identity_Ack, ASN1_NO_EXTENSIONS , dissect_tetra_D_ATTACH_DETACH_GROUP_IDENTITY_ACK },
6444 { 12, &hf_tetra_d_MM_Status , ASN1_NO_EXTENSIONS , dissect_tetra_D_MM_STATUS },
6445 { 13, &hf_tetra_d_MM_reserved5, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
6446 { 14, &hf_tetra_d_MM_reserved6, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
6447 { 15, &hf_tetra_d_MM_Function_Not_Support, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
6448 { 0, NULL, 0, NULL }
6451 static int
6452 dissect_tetra_D_MM_PDU(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6453 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6454 ett_tetra_D_MM_PDU, D_MM_PDU_choice,
6455 NULL);
6457 return offset;
6461 static const value_string tetra_T_simplex_duplex_selection_03_vals[] = {
6462 { 0, "simplex" },
6463 { 1, "duplex" },
6464 { 0, NULL }
6468 static int
6469 dissect_tetra_T_simplex_duplex_selection_03(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6470 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
6471 2, NULL, false, 0, NULL);
6473 return offset;
6477 static const value_string tetra_T_basic_service_infomation_vals[] = {
6478 { 0, "none" },
6479 { 1, "basic-service-infomation" },
6480 { 0, NULL }
6483 static const per_choice_t T_basic_service_infomation_choice[] = {
6484 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
6485 { 1, &hf_tetra_basic_service_infomation_01, ASN1_NO_EXTENSIONS , dissect_tetra_Basic_service_information },
6486 { 0, NULL, 0, NULL }
6489 static int
6490 dissect_tetra_T_basic_service_infomation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6491 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6492 ett_tetra_T_basic_service_infomation, T_basic_service_infomation_choice,
6493 NULL);
6495 return offset;
6499 static const value_string tetra_T_notification_indicator_01_vals[] = {
6500 { 0, "none" },
6501 { 1, "notification-indicator" },
6502 { 0, NULL }
6505 static const per_choice_t T_notification_indicator_01_choice[] = {
6506 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
6507 { 1, &hf_tetra_notification_indicator_01, ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_63 },
6508 { 0, NULL, 0, NULL }
6511 static int
6512 dissect_tetra_T_notification_indicator_01(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6513 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6514 ett_tetra_T_notification_indicator_01, T_notification_indicator_01_choice,
6515 NULL);
6517 return offset;
6521 static const value_string tetra_T_prop_09_vals[] = {
6522 { 0, "none" },
6523 { 1, "prop" },
6524 { 0, NULL }
6527 static const per_choice_t T_prop_09_choice[] = {
6528 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
6529 { 1, &hf_tetra_prop_01 , ASN1_NO_EXTENSIONS , dissect_tetra_Proprietary },
6530 { 0, NULL, 0, NULL }
6533 static int
6534 dissect_tetra_T_prop_09(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6535 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6536 ett_tetra_T_prop_09, T_prop_09_choice,
6537 NULL);
6539 return offset;
6543 static const per_sequence_t T_type2_parameters_14_sequence[] = {
6544 { &hf_tetra_basic_service_infomation, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_basic_service_infomation },
6545 { &hf_tetra_notification_indicator_02, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_notification_indicator_01 },
6546 { &hf_tetra_prop_10 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop_09 },
6547 { NULL, 0, 0, NULL }
6550 static int
6551 dissect_tetra_T_type2_parameters_14(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6552 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6553 ett_tetra_T_type2_parameters_14, T_type2_parameters_14_sequence);
6555 return offset;
6559 static const value_string tetra_T_optional_elements_18_vals[] = {
6560 { 0, "no-type2" },
6561 { 1, "type2-parameters" },
6562 { 0, NULL }
6565 static const per_choice_t T_optional_elements_18_choice[] = {
6566 { 0, &hf_tetra_no_type2 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
6567 { 1, &hf_tetra_type2_parameters_14, ASN1_NO_EXTENSIONS , dissect_tetra_T_type2_parameters_14 },
6568 { 0, NULL, 0, NULL }
6571 static int
6572 dissect_tetra_T_optional_elements_18(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6573 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6574 ett_tetra_T_optional_elements_18, T_optional_elements_18_choice,
6575 NULL);
6577 return offset;
6581 static const per_sequence_t D_ALERT_sequence[] = {
6582 { &hf_tetra_call_identifier_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1023 },
6583 { &hf_tetra_call_time_out_setup_phase, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
6584 { &hf_tetra_reserved_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
6585 { &hf_tetra_simplex_duplex_selection_04, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_simplex_duplex_selection_03 },
6586 { &hf_tetra_call_queued , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
6587 { &hf_tetra_optional_elements_18, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_18 },
6588 { NULL, 0, 0, NULL }
6591 static int
6592 dissect_tetra_D_ALERT(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6593 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6594 ett_tetra_D_ALERT, D_ALERT_sequence);
6596 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-ALERT");
6598 return offset;
6602 static const value_string tetra_T_basic_service_information_02_vals[] = {
6603 { 0, "none" },
6604 { 1, "basic-service-information" },
6605 { 0, NULL }
6608 static const per_choice_t T_basic_service_information_02_choice[] = {
6609 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
6610 { 1, &hf_tetra_basic_service_information, ASN1_NO_EXTENSIONS , dissect_tetra_Basic_service_information },
6611 { 0, NULL, 0, NULL }
6614 static int
6615 dissect_tetra_T_basic_service_information_02(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6616 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6617 ett_tetra_T_basic_service_information_02, T_basic_service_information_02_choice,
6618 NULL);
6620 return offset;
6624 static const value_string tetra_T_call_status_vals[] = {
6625 { 0, "none" },
6626 { 1, "call-status" },
6627 { 0, NULL }
6630 static const per_choice_t T_call_status_choice[] = {
6631 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
6632 { 1, &hf_tetra_call_status_01, ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_7 },
6633 { 0, NULL, 0, NULL }
6636 static int
6637 dissect_tetra_T_call_status(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6638 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6639 ett_tetra_T_call_status, T_call_status_choice,
6640 NULL);
6642 return offset;
6646 static const value_string tetra_T_notification_indicator_vals[] = {
6647 { 0, "none" },
6648 { 1, "notification-indicator" },
6649 { 0, NULL }
6652 static const per_choice_t T_notification_indicator_choice[] = {
6653 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
6654 { 1, &hf_tetra_notification_indicator_01, ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_63 },
6655 { 0, NULL, 0, NULL }
6658 static int
6659 dissect_tetra_T_notification_indicator(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6660 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6661 ett_tetra_T_notification_indicator, T_notification_indicator_choice,
6662 NULL);
6664 return offset;
6668 static const value_string tetra_T_prop_08_vals[] = {
6669 { 0, "none" },
6670 { 1, "prop" },
6671 { 0, NULL }
6674 static const per_choice_t T_prop_08_choice[] = {
6675 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
6676 { 1, &hf_tetra_prop_01 , ASN1_NO_EXTENSIONS , dissect_tetra_Proprietary },
6677 { 0, NULL, 0, NULL }
6680 static int
6681 dissect_tetra_T_prop_08(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6682 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6683 ett_tetra_T_prop_08, T_prop_08_choice,
6684 NULL);
6686 return offset;
6690 static const per_sequence_t T_type2_parameters_13_sequence[] = {
6691 { &hf_tetra_basic_service_information_03, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_basic_service_information_02 },
6692 { &hf_tetra_call_status , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_call_status },
6693 { &hf_tetra_notification_indicator, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_notification_indicator },
6694 { &hf_tetra_prop_09 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop_08 },
6695 { NULL, 0, 0, NULL }
6698 static int
6699 dissect_tetra_T_type2_parameters_13(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6700 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6701 ett_tetra_T_type2_parameters_13, T_type2_parameters_13_sequence);
6703 return offset;
6707 static const value_string tetra_T_optional_elements_17_vals[] = {
6708 { 0, "no-type2" },
6709 { 1, "type2-parameters" },
6710 { 0, NULL }
6713 static const per_choice_t T_optional_elements_17_choice[] = {
6714 { 0, &hf_tetra_no_type2 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
6715 { 1, &hf_tetra_type2_parameters_13, ASN1_NO_EXTENSIONS , dissect_tetra_T_type2_parameters_13 },
6716 { 0, NULL, 0, NULL }
6719 static int
6720 dissect_tetra_T_optional_elements_17(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6721 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6722 ett_tetra_T_optional_elements_17, T_optional_elements_17_choice,
6723 NULL);
6725 return offset;
6729 static const per_sequence_t D_CALL_PROCEEDING_sequence[] = {
6730 { &hf_tetra_call_identifier_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1023 },
6731 { &hf_tetra_call_time_out_setup_phase, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
6732 { &hf_tetra_hook_method_selection, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
6733 { &hf_tetra_simplex_duplex_selection_03, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
6734 { &hf_tetra_optional_elements_17, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_17 },
6735 { NULL, 0, 0, NULL }
6738 static int
6739 dissect_tetra_D_CALL_PROCEEDING(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6740 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6741 ett_tetra_D_CALL_PROCEEDING, D_CALL_PROCEEDING_sequence);
6743 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-CALL-PROCEEDING");
6745 return offset;
6749 static const value_string tetra_T_simplex_duplex_selection_04_vals[] = {
6750 { 0, "simplex" },
6751 { 1, "duplex" },
6752 { 0, NULL }
6756 static int
6757 dissect_tetra_T_simplex_duplex_selection_04(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6758 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
6759 2, NULL, false, 0, NULL);
6761 return offset;
6765 static const value_string tetra_T_call_priority_vals[] = {
6766 { 0, "none" },
6767 { 1, "call-priority" },
6768 { 0, NULL }
6771 static const per_choice_t T_call_priority_choice[] = {
6772 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
6773 { 1, &hf_tetra_call_priority , ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_15 },
6774 { 0, NULL, 0, NULL }
6777 static int
6778 dissect_tetra_T_call_priority(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6779 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6780 ett_tetra_T_call_priority, T_call_priority_choice,
6781 NULL);
6783 return offset;
6787 static const value_string tetra_T_basic_service_information_03_vals[] = {
6788 { 0, "none" },
6789 { 1, "basic-service-information" },
6790 { 0, NULL }
6793 static const per_choice_t T_basic_service_information_03_choice[] = {
6794 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
6795 { 1, &hf_tetra_basic_service_information, ASN1_NO_EXTENSIONS , dissect_tetra_Basic_service_information },
6796 { 0, NULL, 0, NULL }
6799 static int
6800 dissect_tetra_T_basic_service_information_03(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6801 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6802 ett_tetra_T_basic_service_information_03, T_basic_service_information_03_choice,
6803 NULL);
6805 return offset;
6809 static const value_string tetra_T_temporary_address_vals[] = {
6810 { 0, "none" },
6811 { 1, "temporary-address" },
6812 { 0, NULL }
6815 static const per_choice_t T_temporary_address_choice[] = {
6816 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
6817 { 1, &hf_tetra_temporary_address_01, ASN1_NO_EXTENSIONS , dissect_tetra_Calling_party_address_type },
6818 { 0, NULL, 0, NULL }
6821 static int
6822 dissect_tetra_T_temporary_address(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6823 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6824 ett_tetra_T_temporary_address, T_temporary_address_choice,
6825 NULL);
6827 return offset;
6831 static const value_string tetra_T_notification_indicator_02_vals[] = {
6832 { 0, "none" },
6833 { 1, "notification-indicator" },
6834 { 0, NULL }
6837 static const per_choice_t T_notification_indicator_02_choice[] = {
6838 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
6839 { 1, &hf_tetra_notification_indicator_01, ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_63 },
6840 { 0, NULL, 0, NULL }
6843 static int
6844 dissect_tetra_T_notification_indicator_02(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6845 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6846 ett_tetra_T_notification_indicator_02, T_notification_indicator_02_choice,
6847 NULL);
6849 return offset;
6853 static const value_string tetra_T_prop_10_vals[] = {
6854 { 0, "none" },
6855 { 1, "prop" },
6856 { 0, NULL }
6859 static const per_choice_t T_prop_10_choice[] = {
6860 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
6861 { 1, &hf_tetra_prop_01 , ASN1_NO_EXTENSIONS , dissect_tetra_Proprietary },
6862 { 0, NULL, 0, NULL }
6865 static int
6866 dissect_tetra_T_prop_10(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6867 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6868 ett_tetra_T_prop_10, T_prop_10_choice,
6869 NULL);
6871 return offset;
6875 static const per_sequence_t T_type2_parameters_15_sequence[] = {
6876 { &hf_tetra_call_priority_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_call_priority },
6877 { &hf_tetra_basic_service_information_04, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_basic_service_information_03 },
6878 { &hf_tetra_temporary_address, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_temporary_address },
6879 { &hf_tetra_notification_indicator_03, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_notification_indicator_02 },
6880 { &hf_tetra_prop_11 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop_10 },
6881 { NULL, 0, 0, NULL }
6884 static int
6885 dissect_tetra_T_type2_parameters_15(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6886 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6887 ett_tetra_T_type2_parameters_15, T_type2_parameters_15_sequence);
6889 return offset;
6893 static const value_string tetra_T_optional_elements_19_vals[] = {
6894 { 0, "no-type2" },
6895 { 1, "type2-parameters" },
6896 { 0, NULL }
6899 static const per_choice_t T_optional_elements_19_choice[] = {
6900 { 0, &hf_tetra_no_type2 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
6901 { 1, &hf_tetra_type2_parameters_15, ASN1_NO_EXTENSIONS , dissect_tetra_T_type2_parameters_15 },
6902 { 0, NULL, 0, NULL }
6905 static int
6906 dissect_tetra_T_optional_elements_19(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6907 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6908 ett_tetra_T_optional_elements_19, T_optional_elements_19_choice,
6909 NULL);
6911 return offset;
6915 static const per_sequence_t D_CONNECT_sequence[] = {
6916 { &hf_tetra_call_identifier_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1023 },
6917 { &hf_tetra_call_time_out_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_31 },
6918 { &hf_tetra_hook_method_selection, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
6919 { &hf_tetra_simplex_duplex_selection_05, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_simplex_duplex_selection_04 },
6920 { &hf_tetra_transmission_grant, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
6921 { &hf_tetra_transmission_request_permission, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
6922 { &hf_tetra_call_ownership, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
6923 { &hf_tetra_optional_elements_19, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_19 },
6924 { NULL, 0, 0, NULL }
6927 static int
6928 dissect_tetra_D_CONNECT(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6929 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6930 ett_tetra_D_CONNECT, D_CONNECT_sequence);
6932 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-CONNECT");
6934 return offset;
6938 static const value_string tetra_T_notification_indicator_03_vals[] = {
6939 { 0, "none" },
6940 { 1, "notification-indicator" },
6941 { 0, NULL }
6944 static const per_choice_t T_notification_indicator_03_choice[] = {
6945 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
6946 { 1, &hf_tetra_notification_indicator_01, ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_63 },
6947 { 0, NULL, 0, NULL }
6950 static int
6951 dissect_tetra_T_notification_indicator_03(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6952 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6953 ett_tetra_T_notification_indicator_03, T_notification_indicator_03_choice,
6954 NULL);
6956 return offset;
6960 static const value_string tetra_T_prop_11_vals[] = {
6961 { 0, "none" },
6962 { 1, "prop" },
6963 { 0, NULL }
6966 static const per_choice_t T_prop_11_choice[] = {
6967 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
6968 { 1, &hf_tetra_prop_01 , ASN1_NO_EXTENSIONS , dissect_tetra_Proprietary },
6969 { 0, NULL, 0, NULL }
6972 static int
6973 dissect_tetra_T_prop_11(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6974 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6975 ett_tetra_T_prop_11, T_prop_11_choice,
6976 NULL);
6978 return offset;
6982 static const per_sequence_t T_type2_parameters_16_sequence[] = {
6983 { &hf_tetra_notification_indicator_04, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_notification_indicator_03 },
6984 { &hf_tetra_prop_12 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop_11 },
6985 { NULL, 0, 0, NULL }
6988 static int
6989 dissect_tetra_T_type2_parameters_16(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6990 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6991 ett_tetra_T_type2_parameters_16, T_type2_parameters_16_sequence);
6993 return offset;
6997 static const value_string tetra_T_optional_elements_20_vals[] = {
6998 { 0, "no-type2" },
6999 { 1, "type2-parameters" },
7000 { 0, NULL }
7003 static const per_choice_t T_optional_elements_20_choice[] = {
7004 { 0, &hf_tetra_no_type2 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
7005 { 1, &hf_tetra_type2_parameters_16, ASN1_NO_EXTENSIONS , dissect_tetra_T_type2_parameters_16 },
7006 { 0, NULL, 0, NULL }
7009 static int
7010 dissect_tetra_T_optional_elements_20(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7011 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7012 ett_tetra_T_optional_elements_20, T_optional_elements_20_choice,
7013 NULL);
7015 return offset;
7019 static const per_sequence_t D_CONNECT_ACK_sequence[] = {
7020 { &hf_tetra_call_identifier_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1023 },
7021 { &hf_tetra_call_time_out , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_15 },
7022 { &hf_tetra_transmission_grant, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
7023 { &hf_tetra_transmission_request_permission, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
7024 { &hf_tetra_optional_elements_20, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_20 },
7025 { NULL, 0, 0, NULL }
7028 static int
7029 dissect_tetra_D_CONNECT_ACK(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7030 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7031 ett_tetra_D_CONNECT_ACK, D_CONNECT_ACK_sequence);
7033 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-CONNECT-ACK");
7035 return offset;
7039 static const per_sequence_t D_DISCONNECT_sequence[] = {
7040 { &hf_tetra_call_identifier, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
7041 { &hf_tetra_disconnect_cause, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_31 },
7042 { NULL, 0, 0, NULL }
7045 static int
7046 dissect_tetra_D_DISCONNECT(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7047 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7048 ett_tetra_D_DISCONNECT, D_DISCONNECT_sequence);
7050 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-DISCONNECT");
7052 return offset;
7056 static const per_sequence_t D_INFO_sequence[] = {
7057 { &hf_tetra_call_identifier, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
7058 { &hf_tetra_reset_call_time_out_timer, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
7059 { &hf_tetra_poll_request , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
7060 { NULL, 0, 0, NULL }
7063 static int
7064 dissect_tetra_D_INFO(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7065 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7066 ett_tetra_D_INFO, D_INFO_sequence);
7068 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-INFO");
7070 return offset;
7074 static const value_string tetra_T_notification_indicator_04_vals[] = {
7075 { 0, "none" },
7076 { 1, "notification-indicator" },
7077 { 0, NULL }
7080 static const per_choice_t T_notification_indicator_04_choice[] = {
7081 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
7082 { 1, &hf_tetra_notification_indicator_01, ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_63 },
7083 { 0, NULL, 0, NULL }
7086 static int
7087 dissect_tetra_T_notification_indicator_04(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7088 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7089 ett_tetra_T_notification_indicator_04, T_notification_indicator_04_choice,
7090 NULL);
7092 return offset;
7096 static const value_string tetra_T_prop_12_vals[] = {
7097 { 0, "none" },
7098 { 1, "prop" },
7099 { 0, NULL }
7102 static const per_choice_t T_prop_12_choice[] = {
7103 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
7104 { 1, &hf_tetra_prop_01 , ASN1_NO_EXTENSIONS , dissect_tetra_Proprietary },
7105 { 0, NULL, 0, NULL }
7108 static int
7109 dissect_tetra_T_prop_12(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7110 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7111 ett_tetra_T_prop_12, T_prop_12_choice,
7112 NULL);
7114 return offset;
7118 static const per_sequence_t T_type2_parameters_17_sequence[] = {
7119 { &hf_tetra_notification_indicator_05, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_notification_indicator_04 },
7120 { &hf_tetra_prop_13 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop_12 },
7121 { NULL, 0, 0, NULL }
7124 static int
7125 dissect_tetra_T_type2_parameters_17(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7126 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7127 ett_tetra_T_type2_parameters_17, T_type2_parameters_17_sequence);
7129 return offset;
7133 static const value_string tetra_T_optional_elements_21_vals[] = {
7134 { 0, "no-type2" },
7135 { 1, "type2-parameters" },
7136 { 0, NULL }
7139 static const per_choice_t T_optional_elements_21_choice[] = {
7140 { 0, &hf_tetra_no_type2 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
7141 { 1, &hf_tetra_type2_parameters_17, ASN1_NO_EXTENSIONS , dissect_tetra_T_type2_parameters_17 },
7142 { 0, NULL, 0, NULL }
7145 static int
7146 dissect_tetra_T_optional_elements_21(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7147 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7148 ett_tetra_T_optional_elements_21, T_optional_elements_21_choice,
7149 NULL);
7151 return offset;
7155 static const per_sequence_t D_RELEASE_sequence[] = {
7156 { &hf_tetra_call_identifier, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
7157 { &hf_tetra_disconnect_cause, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_31 },
7158 { &hf_tetra_optional_elements_21, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_21 },
7159 { NULL, 0, 0, NULL }
7162 static int
7163 dissect_tetra_D_RELEASE(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7164 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7165 ett_tetra_D_RELEASE, D_RELEASE_sequence);
7167 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-RELEASE");
7169 return offset;
7173 static const value_string tetra_T_simplex_duplex_selection_02_vals[] = {
7174 { 0, "simplex" },
7175 { 1, "duplex" },
7176 { 0, NULL }
7180 static int
7181 dissect_tetra_T_simplex_duplex_selection_02(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7182 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
7183 2, NULL, false, 0, NULL);
7185 return offset;
7189 static const value_string tetra_T_calling_party_address_vals[] = {
7190 { 0, "none" },
7191 { 1, "calling-party-address" },
7192 { 0, NULL }
7195 static const per_choice_t T_calling_party_address_choice[] = {
7196 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
7197 { 1, &hf_tetra_calling_party_address_01, ASN1_NO_EXTENSIONS , dissect_tetra_Calling_party_address_type },
7198 { 0, NULL, 0, NULL }
7201 static int
7202 dissect_tetra_T_calling_party_address(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7203 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7204 ett_tetra_T_calling_party_address, T_calling_party_address_choice,
7205 NULL);
7207 return offset;
7211 static const value_string tetra_T_external_subscriber_number_01_vals[] = {
7212 { 0, "none" },
7213 { 1, "external-subscriber-number" },
7214 { 0, NULL }
7217 static const per_choice_t T_external_subscriber_number_01_choice[] = {
7218 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
7219 { 1, &hf_tetra_external_subscriber_number_03, ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_15 },
7220 { 0, NULL, 0, NULL }
7223 static int
7224 dissect_tetra_T_external_subscriber_number_01(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7225 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7226 ett_tetra_T_external_subscriber_number_01, T_external_subscriber_number_01_choice,
7227 NULL);
7229 return offset;
7233 static const value_string tetra_T_prop_07_vals[] = {
7234 { 0, "none" },
7235 { 1, "prop" },
7236 { 0, NULL }
7239 static const per_choice_t T_prop_07_choice[] = {
7240 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
7241 { 1, &hf_tetra_prop_01 , ASN1_NO_EXTENSIONS , dissect_tetra_Proprietary },
7242 { 0, NULL, 0, NULL }
7245 static int
7246 dissect_tetra_T_prop_07(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7247 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7248 ett_tetra_T_prop_07, T_prop_07_choice,
7249 NULL);
7251 return offset;
7255 static const per_sequence_t T_type2_parameters_12_sequence[] = {
7256 { &hf_tetra_calling_party_address, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_calling_party_address },
7257 { &hf_tetra_external_subscriber_number_02, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_external_subscriber_number_01 },
7258 { &hf_tetra_prop_08 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop_07 },
7259 { NULL, 0, 0, NULL }
7262 static int
7263 dissect_tetra_T_type2_parameters_12(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7264 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7265 ett_tetra_T_type2_parameters_12, T_type2_parameters_12_sequence);
7267 return offset;
7271 static const value_string tetra_T_optional_elements_16_vals[] = {
7272 { 0, "no-type2" },
7273 { 1, "type2-parameters" },
7274 { 0, NULL }
7277 static const per_choice_t T_optional_elements_16_choice[] = {
7278 { 0, &hf_tetra_no_type2 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
7279 { 1, &hf_tetra_type2_parameters_12, ASN1_NO_EXTENSIONS , dissect_tetra_T_type2_parameters_12 },
7280 { 0, NULL, 0, NULL }
7283 static int
7284 dissect_tetra_T_optional_elements_16(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7285 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7286 ett_tetra_T_optional_elements_16, T_optional_elements_16_choice,
7287 NULL);
7289 return offset;
7293 static const per_sequence_t D_SETUP_sequence[] = {
7294 { &hf_tetra_call_identifier, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
7295 { &hf_tetra_call_time_out , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_15 },
7296 { &hf_tetra_hook_method_selection_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
7297 { &hf_tetra_simplex_duplex_selection_02, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_simplex_duplex_selection_02 },
7298 { &hf_tetra_basic_service_information, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Basic_service_information },
7299 { &hf_tetra_transmission_grant, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
7300 { &hf_tetra_transmission_request_permission, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
7301 { &hf_tetra_call_priority , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_15 },
7302 { &hf_tetra_optional_elements_16, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_16 },
7303 { NULL, 0, 0, NULL }
7306 static int
7307 dissect_tetra_D_SETUP(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7308 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7309 ett_tetra_D_SETUP, D_SETUP_sequence);
7311 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-SETUP");
7313 return offset;
7318 static int
7319 dissect_tetra_OCTET_STRING_SIZE_6(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7320 offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
7321 6, 6, false, NULL);
7323 return offset;
7327 static const value_string tetra_T_calling_party_type_identifier_01_vals[] = {
7328 { 0, "none1" },
7329 { 1, "calling-party-address-SSI" },
7330 { 2, "ssi-extension" },
7331 { 3, "none2" },
7332 { 0, NULL }
7335 static const per_choice_t T_calling_party_type_identifier_01_choice[] = {
7336 { 0, &hf_tetra_none1 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
7337 { 1, &hf_tetra_calling_party_address_SSI, ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_16777215 },
7338 { 2, &hf_tetra_ssi_extension_01, ASN1_NO_EXTENSIONS , dissect_tetra_OCTET_STRING_SIZE_6 },
7339 { 3, &hf_tetra_none2 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
7340 { 0, NULL, 0, NULL }
7343 static int
7344 dissect_tetra_T_calling_party_type_identifier_01(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7345 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7346 ett_tetra_T_calling_party_type_identifier_01, T_calling_party_type_identifier_01_choice,
7347 NULL);
7349 return offset;
7353 static const per_sequence_t D_STATUS_sequence[] = {
7354 { &hf_tetra_calling_party_type_identifier_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_calling_party_type_identifier_01 },
7355 { &hf_tetra_pre_coded_status, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_65535 },
7356 { NULL, 0, 0, NULL }
7359 static int
7360 dissect_tetra_D_STATUS(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7361 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7362 ett_tetra_D_STATUS, D_STATUS_sequence);
7364 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-STATUS");
7366 return offset;
7370 static const value_string tetra_T_notification_indicator_06_vals[] = {
7371 { 0, "none" },
7372 { 1, "notification-indicator" },
7373 { 0, NULL }
7376 static const per_choice_t T_notification_indicator_06_choice[] = {
7377 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
7378 { 1, &hf_tetra_notification_indicator_01, ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_63 },
7379 { 0, NULL, 0, NULL }
7382 static int
7383 dissect_tetra_T_notification_indicator_06(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7384 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7385 ett_tetra_T_notification_indicator_06, T_notification_indicator_06_choice,
7386 NULL);
7388 return offset;
7392 static const value_string tetra_T_prop_14_vals[] = {
7393 { 0, "none" },
7394 { 1, "prop" },
7395 { 0, NULL }
7398 static const per_choice_t T_prop_14_choice[] = {
7399 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
7400 { 1, &hf_tetra_prop_01 , ASN1_NO_EXTENSIONS , dissect_tetra_Proprietary },
7401 { 0, NULL, 0, NULL }
7404 static int
7405 dissect_tetra_T_prop_14(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7406 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7407 ett_tetra_T_prop_14, T_prop_14_choice,
7408 NULL);
7410 return offset;
7414 static const per_sequence_t T_type2_parameters_19_sequence[] = {
7415 { &hf_tetra_notification_indicator_07, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_notification_indicator_06 },
7416 { &hf_tetra_prop_15 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop_14 },
7417 { NULL, 0, 0, NULL }
7420 static int
7421 dissect_tetra_T_type2_parameters_19(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7422 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7423 ett_tetra_T_type2_parameters_19, T_type2_parameters_19_sequence);
7425 return offset;
7429 static const value_string tetra_T_optional_elements_23_vals[] = {
7430 { 0, "no-type2" },
7431 { 1, "type2-parameters" },
7432 { 0, NULL }
7435 static const per_choice_t T_optional_elements_23_choice[] = {
7436 { 0, &hf_tetra_no_type2 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
7437 { 1, &hf_tetra_type2_parameters_19, ASN1_NO_EXTENSIONS , dissect_tetra_T_type2_parameters_19 },
7438 { 0, NULL, 0, NULL }
7441 static int
7442 dissect_tetra_T_optional_elements_23(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7443 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7444 ett_tetra_T_optional_elements_23, T_optional_elements_23_choice,
7445 NULL);
7447 return offset;
7451 static const per_sequence_t D_TX_CEASED_sequence[] = {
7452 { &hf_tetra_call_identifier_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1023 },
7453 { &hf_tetra_transmission_request_permission, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
7454 { &hf_tetra_optional_elements_23, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_23 },
7455 { NULL, 0, 0, NULL }
7458 static int
7459 dissect_tetra_D_TX_CEASED(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7460 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7461 ett_tetra_D_TX_CEASED, D_TX_CEASED_sequence);
7463 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-TX-CEASED");
7465 return offset;
7469 static const per_sequence_t D_TX_CONTINUE_sequence[] = {
7470 { &hf_tetra_call_identifier, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
7471 { &hf_tetra_continue , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
7472 { &hf_tetra_transmission_request_permission, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
7473 { NULL, 0, 0, NULL }
7476 static int
7477 dissect_tetra_D_TX_CONTINUE(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7478 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7479 ett_tetra_D_TX_CONTINUE, D_TX_CONTINUE_sequence);
7481 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-TX-CONTINUE");
7483 return offset;
7487 static const per_sequence_t D_TX_GRANTED_sequence[] = {
7488 { &hf_tetra_call_identifier_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1023 },
7489 { &hf_tetra_transmission_grant, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
7490 { &hf_tetra_transmission_request_permission, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
7491 { &hf_tetra_encryption_control, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
7492 { &hf_tetra_reserved_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
7493 { NULL, 0, 0, NULL }
7496 static int
7497 dissect_tetra_D_TX_GRANTED(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7498 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7499 ett_tetra_D_TX_GRANTED, D_TX_GRANTED_sequence);
7501 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-TX-GRANTED");
7504 return offset;
7508 static const per_sequence_t D_TX_WAIT_sequence[] = {
7509 { &hf_tetra_call_identifier, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
7510 { &hf_tetra_transmission_request_permission, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
7511 { NULL, 0, 0, NULL }
7514 static int
7515 dissect_tetra_D_TX_WAIT(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7516 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7517 ett_tetra_D_TX_WAIT, D_TX_WAIT_sequence);
7519 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-TX-WAIT");
7520 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7521 ett_tetra_D_TX_WAIT, D_TX_WAIT_sequence);
7523 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-TX-WAIT");
7525 return offset;
7529 static const value_string tetra_T_new_call_identifier_vals[] = {
7530 { 0, "none" },
7531 { 1, "new-call-identifier" },
7532 { 0, NULL }
7535 static const per_choice_t T_new_call_identifier_choice[] = {
7536 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
7537 { 1, &hf_tetra_new_call_identifier_01, ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_1023 },
7538 { 0, NULL, 0, NULL }
7541 static int
7542 dissect_tetra_T_new_call_identifier(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7543 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7544 ett_tetra_T_new_call_identifier, T_new_call_identifier_choice,
7545 NULL);
7547 return offset;
7551 static const value_string tetra_T_call_time_out_vals[] = {
7552 { 0, "none" },
7553 { 1, "call-time-out" },
7554 { 0, NULL }
7557 static const per_choice_t T_call_time_out_choice[] = {
7558 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
7559 { 1, &hf_tetra_call_time_out_03, ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_7 },
7560 { 0, NULL, 0, NULL }
7563 static int
7564 dissect_tetra_T_call_time_out(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7565 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7566 ett_tetra_T_call_time_out, T_call_time_out_choice,
7567 NULL);
7569 return offset;
7573 static const value_string tetra_T_call_status_01_vals[] = {
7574 { 0, "none" },
7575 { 1, "call-status" },
7576 { 0, NULL }
7579 static const per_choice_t T_call_status_01_choice[] = {
7580 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
7581 { 1, &hf_tetra_call_status_01, ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_7 },
7582 { 0, NULL, 0, NULL }
7585 static int
7586 dissect_tetra_T_call_status_01(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7587 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7588 ett_tetra_T_call_status_01, T_call_status_01_choice,
7589 NULL);
7591 return offset;
7595 static const value_string tetra_T_simplex_duplex_selection_05_vals[] = {
7596 { 0, "simplex" },
7597 { 1, "duplex" },
7598 { 0, NULL }
7602 static int
7603 dissect_tetra_T_simplex_duplex_selection_05(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7604 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
7605 2, NULL, false, 0, NULL);
7607 return offset;
7611 static const per_sequence_t Modify_type_sequence[] = {
7612 { &hf_tetra_simplex_duplex_selection_06, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_simplex_duplex_selection_05 },
7613 { &hf_tetra_basic_service_information, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Basic_service_information },
7614 { NULL, 0, 0, NULL }
7617 static int
7618 dissect_tetra_Modify_type(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7619 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7620 ett_tetra_Modify_type, Modify_type_sequence);
7622 return offset;
7626 static const value_string tetra_T_modify_vals[] = {
7627 { 0, "none" },
7628 { 1, "modify" },
7629 { 0, NULL }
7632 static const per_choice_t T_modify_choice[] = {
7633 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
7634 { 1, &hf_tetra_modify_01 , ASN1_NO_EXTENSIONS , dissect_tetra_Modify_type },
7635 { 0, NULL, 0, NULL }
7638 static int
7639 dissect_tetra_T_modify(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7640 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7641 ett_tetra_T_modify, T_modify_choice,
7642 NULL);
7644 return offset;
7648 static const value_string tetra_T_notification_indicator_05_vals[] = {
7649 { 0, "none" },
7650 { 1, "notification-indicator" },
7651 { 0, NULL }
7654 static const per_choice_t T_notification_indicator_05_choice[] = {
7655 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
7656 { 1, &hf_tetra_notification_indicator_01, ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_63 },
7657 { 0, NULL, 0, NULL }
7660 static int
7661 dissect_tetra_T_notification_indicator_05(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7662 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7663 ett_tetra_T_notification_indicator_05, T_notification_indicator_05_choice,
7664 NULL);
7666 return offset;
7670 static const value_string tetra_T_prop_13_vals[] = {
7671 { 0, "none" },
7672 { 1, "prop" },
7673 { 0, NULL }
7676 static const per_choice_t T_prop_13_choice[] = {
7677 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
7678 { 1, &hf_tetra_prop_01 , ASN1_NO_EXTENSIONS , dissect_tetra_Proprietary },
7679 { 0, NULL, 0, NULL }
7682 static int
7683 dissect_tetra_T_prop_13(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7684 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7685 ett_tetra_T_prop_13, T_prop_13_choice,
7686 NULL);
7688 return offset;
7692 static const per_sequence_t T_type2_parameters_18_sequence[] = {
7693 { &hf_tetra_new_call_identifier, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_new_call_identifier },
7694 { &hf_tetra_call_time_out_02, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_call_time_out },
7695 { &hf_tetra_call_status_02, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_call_status_01 },
7696 { &hf_tetra_modify , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_modify },
7697 { &hf_tetra_notification_indicator_06, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_notification_indicator_05 },
7698 { &hf_tetra_prop_14 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop_13 },
7699 { NULL, 0, 0, NULL }
7702 static int
7703 dissect_tetra_T_type2_parameters_18(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7704 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7705 ett_tetra_T_type2_parameters_18, T_type2_parameters_18_sequence);
7707 return offset;
7711 static const value_string tetra_T_optional_elements_22_vals[] = {
7712 { 0, "no-type2" },
7713 { 1, "type2-parameters" },
7714 { 0, NULL }
7717 static const per_choice_t T_optional_elements_22_choice[] = {
7718 { 0, &hf_tetra_no_type2 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
7719 { 1, &hf_tetra_type2_parameters_18, ASN1_NO_EXTENSIONS , dissect_tetra_T_type2_parameters_18 },
7720 { 0, NULL, 0, NULL }
7723 static int
7724 dissect_tetra_T_optional_elements_22(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7725 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7726 ett_tetra_T_optional_elements_22, T_optional_elements_22_choice,
7727 NULL);
7729 return offset;
7733 static const per_sequence_t D_CALL_RESTORE_sequence[] = {
7734 { &hf_tetra_call_identifier_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1023 },
7735 { &hf_tetra_transmission_grant, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
7736 { &hf_tetra_transmission_request_permission, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
7737 { &hf_tetra_reset_call_time_out, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
7738 { &hf_tetra_optional_elements_22, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_22 },
7739 { NULL, 0, 0, NULL }
7742 static int
7743 dissect_tetra_D_CALL_RESTORE(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7744 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7745 ett_tetra_D_CALL_RESTORE, D_CALL_RESTORE_sequence);
7747 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-CALL-RESTORE");
7749 return offset;
7753 static const value_string tetra_T_calling_party_type_identifier_vals[] = {
7754 { 0, "none1" },
7755 { 1, "ssi" },
7756 { 2, "ssi-extension" },
7757 { 3, "none2" },
7758 { 0, NULL }
7761 static const per_choice_t T_calling_party_type_identifier_choice[] = {
7762 { 0, &hf_tetra_none1 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
7763 { 1, &hf_tetra_ssi , ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_16777215 },
7764 { 2, &hf_tetra_ssi_extension_01, ASN1_NO_EXTENSIONS , dissect_tetra_OCTET_STRING_SIZE_6 },
7765 { 3, &hf_tetra_none2 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
7766 { 0, NULL, 0, NULL }
7769 static int
7770 dissect_tetra_T_calling_party_type_identifier(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7771 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7772 ett_tetra_T_calling_party_type_identifier, T_calling_party_type_identifier_choice,
7773 NULL);
7775 return offset;
7780 static int
7781 dissect_tetra_OCTET_STRING_SIZE_8(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7782 offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
7783 8, 8, false, NULL);
7785 return offset;
7789 static const value_string tetra_T_short_data_type_identifier_01_vals[] = {
7790 { 0, "data-1" },
7791 { 1, "data-2" },
7792 { 2, "data-3" },
7793 { 3, "length-indicator-data-4" },
7794 { 0, NULL }
7797 static const per_choice_t T_short_data_type_identifier_01_choice[] = {
7798 { 0, &hf_tetra_data_1 , ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_65535 },
7799 { 1, &hf_tetra_data_2 , ASN1_NO_EXTENSIONS , dissect_tetra_OCTET_STRING_SIZE_4 },
7800 { 2, &hf_tetra_data_3_01 , ASN1_NO_EXTENSIONS , dissect_tetra_OCTET_STRING_SIZE_8 },
7801 { 3, &hf_tetra_length_indicator_data_4, ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_4194304 },
7802 { 0, NULL, 0, NULL }
7805 static int
7806 dissect_tetra_T_short_data_type_identifier_01(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7807 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7808 ett_tetra_T_short_data_type_identifier_01, T_short_data_type_identifier_01_choice,
7809 NULL);
7811 return offset;
7815 static const per_sequence_t D_SDS_DATA_sequence[] = {
7816 { &hf_tetra_calling_party_type_identifier, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_calling_party_type_identifier },
7817 { &hf_tetra_short_data_type_identifier_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_short_data_type_identifier_01 },
7818 { NULL, 0, 0, NULL }
7821 static int
7822 dissect_tetra_D_SDS_DATA(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7823 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7824 ett_tetra_D_SDS_DATA, D_SDS_DATA_sequence);
7826 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-SDS-DATA");
7828 return offset;
7832 static const value_string tetra_D_CMCE_PDU_vals[] = {
7833 { 0, "d-Alert" },
7834 { 1, "d-Call-Proceeding" },
7835 { 2, "d-Connect" },
7836 { 3, "d-Connect-Ack" },
7837 { 4, "d-Disconnect" },
7838 { 5, "d-Info" },
7839 { 6, "d-Release" },
7840 { 7, "d-Setup" },
7841 { 8, "d-Status" },
7842 { 9, "d-Tx-Ceased" },
7843 { 10, "d-Tx-Continue" },
7844 { 11, "d-Tx-Granted" },
7845 { 12, "d-Tx-Wait" },
7846 { 13, "d-Tx-Interrupt" },
7847 { 14, "d-Call-Restore" },
7848 { 15, "d-SDS-Data" },
7849 { 16, "d-Facility" },
7850 { 0, NULL }
7853 static const per_choice_t D_CMCE_PDU_choice[] = {
7854 { 0, &hf_tetra_d_Alert , ASN1_NO_EXTENSIONS , dissect_tetra_D_ALERT },
7855 { 1, &hf_tetra_d_Call_Proceeding, ASN1_NO_EXTENSIONS , dissect_tetra_D_CALL_PROCEEDING },
7856 { 2, &hf_tetra_d_Connect , ASN1_NO_EXTENSIONS , dissect_tetra_D_CONNECT },
7857 { 3, &hf_tetra_d_Connect_Ack , ASN1_NO_EXTENSIONS , dissect_tetra_D_CONNECT_ACK },
7858 { 4, &hf_tetra_d_Disconnect , ASN1_NO_EXTENSIONS , dissect_tetra_D_DISCONNECT },
7859 { 5, &hf_tetra_d_Info , ASN1_NO_EXTENSIONS , dissect_tetra_D_INFO },
7860 { 6, &hf_tetra_d_Release , ASN1_NO_EXTENSIONS , dissect_tetra_D_RELEASE },
7861 { 7, &hf_tetra_d_Setup , ASN1_NO_EXTENSIONS , dissect_tetra_D_SETUP },
7862 { 8, &hf_tetra_d_Status , ASN1_NO_EXTENSIONS , dissect_tetra_D_STATUS },
7863 { 9, &hf_tetra_d_Tx_Ceased , ASN1_NO_EXTENSIONS , dissect_tetra_D_TX_CEASED },
7864 { 10, &hf_tetra_d_Tx_Continue , ASN1_NO_EXTENSIONS , dissect_tetra_D_TX_CONTINUE },
7865 { 11, &hf_tetra_d_Tx_Granted , ASN1_NO_EXTENSIONS , dissect_tetra_D_TX_GRANTED },
7866 { 12, &hf_tetra_d_Tx_Wait , ASN1_NO_EXTENSIONS , dissect_tetra_D_TX_WAIT },
7867 { 13, &hf_tetra_d_Tx_Interrupt, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
7868 { 14, &hf_tetra_d_Call_Restore, ASN1_NO_EXTENSIONS , dissect_tetra_D_CALL_RESTORE },
7869 { 15, &hf_tetra_d_SDS_Data , ASN1_NO_EXTENSIONS , dissect_tetra_D_SDS_DATA },
7870 { 16, &hf_tetra_d_Facility , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
7871 { 0, NULL, 0, NULL }
7874 static int
7875 dissect_tetra_D_CMCE_PDU(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7876 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7877 ett_tetra_D_CMCE_PDU, D_CMCE_PDU_choice,
7878 NULL);
7880 return offset;
7884 static const value_string tetra_T_optional_elements_02_vals[] = {
7885 { 0, "no-type2" },
7886 { 1, "sdu" },
7887 { 0, NULL }
7890 static const per_choice_t T_optional_elements_02_choice[] = {
7891 { 0, &hf_tetra_no_type2 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
7892 { 1, &hf_tetra_sdu , ASN1_NO_EXTENSIONS , dissect_tetra_BIT_STRING },
7893 { 0, NULL, 0, NULL }
7896 static int
7897 dissect_tetra_T_optional_elements_02(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7898 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7899 ett_tetra_T_optional_elements_02, T_optional_elements_02_choice,
7900 NULL);
7902 return offset;
7906 static const per_sequence_t D_NEW_CELL_sequence[] = {
7907 { &hf_tetra_pdu_type_02 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
7908 { &hf_tetra_channel_command_valid, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
7909 { &hf_tetra_optional_elements_02, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_02 },
7910 { NULL, 0, 0, NULL }
7913 static int
7914 dissect_tetra_D_NEW_CELL(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7915 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7916 ett_tetra_D_NEW_CELL, D_NEW_CELL_sequence);
7918 return offset;
7922 static const value_string tetra_T_optional_elements_03_vals[] = {
7923 { 0, "no-type2" },
7924 { 1, "sdu" },
7925 { 0, NULL }
7928 static const per_choice_t T_optional_elements_03_choice[] = {
7929 { 0, &hf_tetra_no_type2 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
7930 { 1, &hf_tetra_sdu , ASN1_NO_EXTENSIONS , dissect_tetra_BIT_STRING },
7931 { 0, NULL, 0, NULL }
7934 static int
7935 dissect_tetra_T_optional_elements_03(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7936 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7937 ett_tetra_T_optional_elements_03, T_optional_elements_03_choice,
7938 NULL);
7940 return offset;
7944 static const per_sequence_t D_PREPARE_FAIL_sequence[] = {
7945 { &hf_tetra_pdu_type_02 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
7946 { &hf_tetra_fail_cause , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
7947 { &hf_tetra_optional_elements_03, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_03 },
7948 { NULL, 0, 0, NULL }
7951 static int
7952 dissect_tetra_D_PREPARE_FAIL(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7953 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7954 ett_tetra_D_PREPARE_FAIL, D_PREPARE_FAIL_sequence);
7956 return offset;
7961 static int
7962 dissect_tetra_T_network_time(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7963 offset = dissect_per_integer(tvb, offset, actx, tree, hf_index, NULL);
7965 return offset;
7970 static int
7971 dissect_tetra_T_reserved(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7972 offset = dissect_per_integer(tvb, offset, actx, tree, hf_index, NULL);
7974 return offset;
7978 static const per_sequence_t TETRA_NETWORK_TIME_sequence[] = {
7979 { &hf_tetra_network_time , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_network_time },
7980 { &hf_tetra_local_time_offset_sign, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
7981 { &hf_tetra_local_time_offset, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_63 },
7982 { &hf_tetra_year , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_63 },
7983 { &hf_tetra_reserved_04 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_reserved },
7984 { NULL, 0, 0, NULL }
7987 static int
7988 dissect_tetra_TETRA_NETWORK_TIME(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7989 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7990 ett_tetra_TETRA_NETWORK_TIME, TETRA_NETWORK_TIME_sequence);
7992 return offset;
7996 static const value_string tetra_T_tetra_network_time_vals[] = {
7997 { 0, "none" },
7998 { 1, "tetra-network-time" },
7999 { 0, NULL }
8002 static const per_choice_t T_tetra_network_time_choice[] = {
8003 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
8004 { 1, &hf_tetra_tetra_network_time_01, ASN1_NO_EXTENSIONS , dissect_tetra_TETRA_NETWORK_TIME },
8005 { 0, NULL, 0, NULL }
8008 static int
8009 dissect_tetra_T_tetra_network_time(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8010 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8011 ett_tetra_T_tetra_network_time, T_tetra_network_time_choice,
8012 NULL);
8014 return offset;
8018 static const value_string tetra_T_number_of_neighbour_cells_vals[] = {
8019 { 0, "none" },
8020 { 1, "number-of-neighbour-cells" },
8021 { 0, NULL }
8024 static const per_choice_t T_number_of_neighbour_cells_choice[] = {
8025 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
8026 { 1, &hf_tetra_number_of_neighbour_cells_01, ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_7 },
8027 { 0, NULL, 0, NULL }
8030 static int
8031 dissect_tetra_T_number_of_neighbour_cells(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8032 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8033 ett_tetra_T_number_of_neighbour_cells, T_number_of_neighbour_cells_choice,
8034 NULL);
8036 return offset;
8040 static const per_sequence_t T_type2_parameters_02_sequence[] = {
8041 { &hf_tetra_tetra_network_time, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_tetra_network_time },
8042 { &hf_tetra_number_of_neighbour_cells, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_number_of_neighbour_cells },
8043 { NULL, 0, 0, NULL }
8046 static int
8047 dissect_tetra_T_type2_parameters_02(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8048 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8049 ett_tetra_T_type2_parameters_02, T_type2_parameters_02_sequence);
8051 return offset;
8055 static const value_string tetra_T_optional_elements_04_vals[] = {
8056 { 0, "no-type2" },
8057 { 1, "type2-parameters" },
8058 { 0, NULL }
8061 static const per_choice_t T_optional_elements_04_choice[] = {
8062 { 0, &hf_tetra_no_type2 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
8063 { 1, &hf_tetra_type2_parameters_02, ASN1_NO_EXTENSIONS , dissect_tetra_T_type2_parameters_02 },
8064 { 0, NULL, 0, NULL }
8067 static int
8068 dissect_tetra_T_optional_elements_04(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8069 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8070 ett_tetra_T_optional_elements_04, T_optional_elements_04_choice,
8071 NULL);
8073 return offset;
8077 static const per_sequence_t D_NWRK_BRDADCAST_sequence[] = {
8078 { &hf_tetra_pdu_type_02 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
8079 { &hf_tetra_cell_re_select_parameters, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_65535 },
8080 { &hf_tetra_cell_service_level, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
8081 { &hf_tetra_optional_elements_04, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_04 },
8082 { NULL, 0, 0, NULL }
8085 static int
8086 dissect_tetra_D_NWRK_BRDADCAST(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8087 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8088 ett_tetra_D_NWRK_BRDADCAST, D_NWRK_BRDADCAST_sequence);
8090 return offset;
8094 static const per_sequence_t D_RESTORE_ACK_sequence[] = {
8095 { &hf_tetra_pdu_type_02 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
8096 { &hf_tetra_sdu , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_BIT_STRING },
8097 { NULL, 0, 0, NULL }
8100 static int
8101 dissect_tetra_D_RESTORE_ACK(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8102 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8103 ett_tetra_D_RESTORE_ACK, D_RESTORE_ACK_sequence);
8105 return offset;
8109 static const per_sequence_t D_RESTORE_FAIL_sequence[] = {
8110 { &hf_tetra_pdu_type_02 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
8111 { &hf_tetra_fail_cause , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
8112 { NULL, 0, 0, NULL }
8115 static int
8116 dissect_tetra_D_RESTORE_FAIL(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8117 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8118 ett_tetra_D_RESTORE_FAIL, D_RESTORE_FAIL_sequence);
8120 return offset;
8124 static const value_string tetra_DMLE_PDU_vals[] = {
8125 { 0, "d-new-cell" },
8126 { 1, "d-prepare-fail" },
8127 { 2, "d-nwrk-broadcast" },
8128 { 3, "dmle-reserved1" },
8129 { 4, "d-restore-ack" },
8130 { 5, "d-restore-fail" },
8131 { 6, "dmle-reserved2" },
8132 { 7, "dmle-reserved3" },
8133 { 0, NULL }
8136 static const per_choice_t DMLE_PDU_choice[] = {
8137 { 0, &hf_tetra_d_new_cell , ASN1_NO_EXTENSIONS , dissect_tetra_D_NEW_CELL },
8138 { 1, &hf_tetra_d_prepare_fail, ASN1_NO_EXTENSIONS , dissect_tetra_D_PREPARE_FAIL },
8139 { 2, &hf_tetra_d_nwrk_broadcast, ASN1_NO_EXTENSIONS , dissect_tetra_D_NWRK_BRDADCAST },
8140 { 3, &hf_tetra_dmle_reserved1, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
8141 { 4, &hf_tetra_d_restore_ack , ASN1_NO_EXTENSIONS , dissect_tetra_D_RESTORE_ACK },
8142 { 5, &hf_tetra_d_restore_fail, ASN1_NO_EXTENSIONS , dissect_tetra_D_RESTORE_FAIL },
8143 { 6, &hf_tetra_dmle_reserved2, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
8144 { 7, &hf_tetra_dmle_reserved3, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
8145 { 0, NULL, 0, NULL }
8148 static int
8149 dissect_tetra_DMLE_PDU(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8150 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8151 ett_tetra_DMLE_PDU, DMLE_PDU_choice,
8152 NULL);
8154 return offset;
8158 static const value_string tetra_D_MLE_PDU_vals[] = {
8159 { 0, "u-mle-reserved1" },
8160 { 1, "mm" },
8161 { 2, "cmce" },
8162 { 3, "u-mle-reserved2" },
8163 { 4, "sndcp" },
8164 { 5, "mle" },
8165 { 6, "tetra-management-entity-protocol" },
8166 { 7, "u-mle-reserved3" },
8167 { 0, NULL }
8170 static const per_choice_t D_MLE_PDU_choice[] = {
8171 { 0, &hf_tetra_u_mle_reserved1, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
8172 { 1, &hf_tetra_mm_01 , ASN1_NO_EXTENSIONS , dissect_tetra_D_MM_PDU },
8173 { 2, &hf_tetra_cmce_01 , ASN1_NO_EXTENSIONS , dissect_tetra_D_CMCE_PDU },
8174 { 3, &hf_tetra_u_mle_reserved2, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
8175 { 4, &hf_tetra_sndcp , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
8176 { 5, &hf_tetra_mle_01 , ASN1_NO_EXTENSIONS , dissect_tetra_DMLE_PDU },
8177 { 6, &hf_tetra_tetra_management_entity_protocol, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
8178 { 7, &hf_tetra_u_mle_reserved3, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
8179 { 0, NULL, 0, NULL }
8182 static int
8183 dissect_tetra_D_MLE_PDU(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8184 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8185 ett_tetra_D_MLE_PDU, D_MLE_PDU_choice,
8186 NULL);
8188 return offset;
8192 static const per_sequence_t D_BL_ADATA_sequence[] = {
8193 { &hf_tetra_nr , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
8194 { &hf_tetra_ns , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
8195 { &hf_tetra_tl_sdu_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_D_MLE_PDU },
8196 { NULL, 0, 0, NULL }
8199 static int
8200 dissect_tetra_D_BL_ADATA(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8201 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8202 ett_tetra_D_BL_ADATA, D_BL_ADATA_sequence);
8204 return offset;
8208 static const per_sequence_t D_BL_DATA_sequence[] = {
8209 { &hf_tetra_ns , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
8210 { &hf_tetra_tl_sdu_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_D_MLE_PDU },
8211 { NULL, 0, 0, NULL }
8214 static int
8215 dissect_tetra_D_BL_DATA(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8216 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8217 ett_tetra_D_BL_DATA, D_BL_DATA_sequence);
8219 return offset;
8223 static const per_sequence_t D_BL_ACK_sequence[] = {
8224 { &hf_tetra_nr , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
8225 { &hf_tetra_tl_sdu_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_D_MLE_PDU },
8226 { NULL, 0, 0, NULL }
8229 static int
8230 dissect_tetra_D_BL_ACK(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8231 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8232 ett_tetra_D_BL_ACK, D_BL_ACK_sequence);
8234 return offset;
8238 static const per_sequence_t D_BL_ADATA_FCS_sequence[] = {
8239 { &hf_tetra_nr , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
8240 { &hf_tetra_ns , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
8241 { &hf_tetra_tl_sdu_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_D_MLE_PDU },
8242 { &hf_tetra_fcs , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_OCTET_STRING_SIZE_4 },
8243 { NULL, 0, 0, NULL }
8246 static int
8247 dissect_tetra_D_BL_ADATA_FCS(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8248 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8249 ett_tetra_D_BL_ADATA_FCS, D_BL_ADATA_FCS_sequence);
8251 return offset;
8255 static const per_sequence_t D_BL_DATA_FCS_sequence[] = {
8256 { &hf_tetra_ns , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
8257 { &hf_tetra_tl_sdu_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_D_MLE_PDU },
8258 { &hf_tetra_fcs , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_OCTET_STRING_SIZE_4 },
8259 { NULL, 0, 0, NULL }
8262 static int
8263 dissect_tetra_D_BL_DATA_FCS(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8264 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8265 ett_tetra_D_BL_DATA_FCS, D_BL_DATA_FCS_sequence);
8267 return offset;
8271 static const per_sequence_t D_MLE_PDU_FCS_sequence[] = {
8272 { &hf_tetra_d_mle_pdu , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_D_MLE_PDU },
8273 { &hf_tetra_fcs , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_OCTET_STRING_SIZE_4 },
8274 { NULL, 0, 0, NULL }
8277 static int
8278 dissect_tetra_D_MLE_PDU_FCS(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8279 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8280 ett_tetra_D_MLE_PDU_FCS, D_MLE_PDU_FCS_sequence);
8282 return offset;
8286 static const per_sequence_t D_BL_ACK_FCS_sequence[] = {
8287 { &hf_tetra_nr , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
8288 { &hf_tetra_tl_sdu_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_D_MLE_PDU },
8289 { &hf_tetra_fcs , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_OCTET_STRING_SIZE_4 },
8290 { NULL, 0, 0, NULL }
8293 static int
8294 dissect_tetra_D_BL_ACK_FCS(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8295 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8296 ett_tetra_D_BL_ACK_FCS, D_BL_ACK_FCS_sequence);
8298 return offset;
8302 static const value_string tetra_D_LLC_PDU_vals[] = {
8303 { 0, "bl-adata" },
8304 { 1, "bl-data" },
8305 { 2, "bl-udata" },
8306 { 3, "bl-ack" },
8307 { 4, "bl-adata-fcs" },
8308 { 5, "bl-data-fcs" },
8309 { 6, "bl-udata-fcs" },
8310 { 7, "bl-ack-fcs" },
8311 { 8, "al-setup" },
8312 { 9, "al-data" },
8313 { 10, "al-udata" },
8314 { 11, "al-ack" },
8315 { 12, "al-reconnect" },
8316 { 13, "reserve1" },
8317 { 14, "reserve2" },
8318 { 15, "al-disc" },
8319 { 0, NULL }
8322 static const per_choice_t D_LLC_PDU_choice[] = {
8323 { 0, &hf_tetra_bl_adata_01 , ASN1_NO_EXTENSIONS , dissect_tetra_D_BL_ADATA },
8324 { 1, &hf_tetra_bl_data_01 , ASN1_NO_EXTENSIONS , dissect_tetra_D_BL_DATA },
8325 { 2, &hf_tetra_bl_udata_01 , ASN1_NO_EXTENSIONS , dissect_tetra_D_MLE_PDU },
8326 { 3, &hf_tetra_bl_ack_01 , ASN1_NO_EXTENSIONS , dissect_tetra_D_BL_ACK },
8327 { 4, &hf_tetra_bl_adata_fcs_01, ASN1_NO_EXTENSIONS , dissect_tetra_D_BL_ADATA_FCS },
8328 { 5, &hf_tetra_bl_data_fcs_01, ASN1_NO_EXTENSIONS , dissect_tetra_D_BL_DATA_FCS },
8329 { 6, &hf_tetra_bl_udata_fcs_01, ASN1_NO_EXTENSIONS , dissect_tetra_D_MLE_PDU_FCS },
8330 { 7, &hf_tetra_bl_ack_fcs_01 , ASN1_NO_EXTENSIONS , dissect_tetra_D_BL_ACK_FCS },
8331 { 8, &hf_tetra_al_setup , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
8332 { 9, &hf_tetra_al_data , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
8333 { 10, &hf_tetra_al_udata , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
8334 { 11, &hf_tetra_al_ack , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
8335 { 12, &hf_tetra_al_reconnect , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
8336 { 13, &hf_tetra_reserve1 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
8337 { 14, &hf_tetra_reserve2 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
8338 { 15, &hf_tetra_al_disc , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
8339 { 0, NULL, 0, NULL }
8342 static int
8343 dissect_tetra_D_LLC_PDU(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8344 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8345 ett_tetra_D_LLC_PDU, D_LLC_PDU_choice,
8346 NULL);
8348 return offset;
8352 static const per_sequence_t OTHER_DATA_sequence[] = {
8353 { &hf_tetra_power_control , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_power_control },
8354 { &hf_tetra_slot_granting_02, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_slot_granting_02 },
8355 { &hf_tetra_channel_allocation_02, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_channel_allocation_02 },
8356 { &hf_tetra_tm_sdu_09 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_D_LLC_PDU },
8357 { NULL, 0, 0, NULL }
8360 static int
8361 dissect_tetra_OTHER_DATA(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8362 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8363 ett_tetra_OTHER_DATA, OTHER_DATA_sequence);
8365 return offset;
8369 static const per_sequence_t SSI_NEED_sequence[] = {
8370 { &hf_tetra_ssi , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16777215 },
8371 { &hf_tetra_other , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_OTHER_DATA },
8372 { NULL, 0, 0, NULL }
8375 static int
8376 dissect_tetra_SSI_NEED(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8377 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8378 ett_tetra_SSI_NEED, SSI_NEED_sequence);
8380 return offset;
8384 static const per_sequence_t EVENT_NEED_sequence[] = {
8385 { &hf_tetra_eventlabel , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1023 },
8386 { &hf_tetra_other , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_OTHER_DATA },
8387 { NULL, 0, 0, NULL }
8390 static int
8391 dissect_tetra_EVENT_NEED(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8392 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8393 ett_tetra_EVENT_NEED, EVENT_NEED_sequence);
8395 return offset;
8399 static const per_sequence_t USSI_NEED_sequence[] = {
8400 { &hf_tetra_ussi , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16777215 },
8401 { &hf_tetra_other , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_OTHER_DATA },
8402 { NULL, 0, 0, NULL }
8405 static int
8406 dissect_tetra_USSI_NEED(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8407 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8408 ett_tetra_USSI_NEED, USSI_NEED_sequence);
8410 return offset;
8414 static const per_sequence_t SMI_NEED_sequence[] = {
8415 { &hf_tetra_smi , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16777215 },
8416 { &hf_tetra_other , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_OTHER_DATA },
8417 { NULL, 0, 0, NULL }
8420 static int
8421 dissect_tetra_SMI_NEED(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8422 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8423 ett_tetra_SMI_NEED, SMI_NEED_sequence);
8425 return offset;
8429 static const per_sequence_t SSI_EVENT_NEED_sequence[] = {
8430 { &hf_tetra_ssi , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16777215 },
8431 { &hf_tetra_ventlabel , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1023 },
8432 { &hf_tetra_other , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_OTHER_DATA },
8433 { NULL, 0, 0, NULL }
8436 static int
8437 dissect_tetra_SSI_EVENT_NEED(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8438 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8439 ett_tetra_SSI_EVENT_NEED, SSI_EVENT_NEED_sequence);
8441 return offset;
8445 static const per_sequence_t SSI_USAGE_NEED_sequence[] = {
8446 { &hf_tetra_ssi , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16777215 },
8447 { &hf_tetra_usage_maker , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_63 },
8448 { &hf_tetra_other , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_OTHER_DATA },
8449 { NULL, 0, 0, NULL }
8452 static int
8453 dissect_tetra_SSI_USAGE_NEED(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8454 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8455 ett_tetra_SSI_USAGE_NEED, SSI_USAGE_NEED_sequence);
8457 return offset;
8462 static int
8463 dissect_tetra_BIT_STRING_SIZE_34(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8464 offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
8465 34, 34, false, NULL, 0, NULL, NULL);
8467 return offset;
8471 static const per_sequence_t SMI_EVENT_NEED_sequence[] = {
8472 { &hf_tetra_smi_eventlabel, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_BIT_STRING_SIZE_34 },
8473 { &hf_tetra_other , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_OTHER_DATA },
8474 { NULL, 0, 0, NULL }
8477 static int
8478 dissect_tetra_SMI_EVENT_NEED(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8479 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8480 ett_tetra_SMI_EVENT_NEED, SMI_EVENT_NEED_sequence);
8482 return offset;
8486 static const value_string tetra_AddressMacResource_vals[] = {
8487 { 0, "null-pdu" },
8488 { 1, "ssi" },
8489 { 2, "eventLabel" },
8490 { 3, "ussi" },
8491 { 4, "smi" },
8492 { 5, "ssi-eventLabel" },
8493 { 6, "ssi-usage-maker" },
8494 { 7, "smi-eventLabel" },
8495 { 0, NULL }
8498 static const per_choice_t AddressMacResource_choice[] = {
8499 { 0, &hf_tetra_null_pdu , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
8500 { 1, &hf_tetra_ssi_01 , ASN1_NO_EXTENSIONS , dissect_tetra_SSI_NEED },
8501 { 2, &hf_tetra_eventLabel_01 , ASN1_NO_EXTENSIONS , dissect_tetra_EVENT_NEED },
8502 { 3, &hf_tetra_ussi_01 , ASN1_NO_EXTENSIONS , dissect_tetra_USSI_NEED },
8503 { 4, &hf_tetra_smi_01 , ASN1_NO_EXTENSIONS , dissect_tetra_SMI_NEED },
8504 { 5, &hf_tetra_ssi_eventLabel, ASN1_NO_EXTENSIONS , dissect_tetra_SSI_EVENT_NEED },
8505 { 6, &hf_tetra_ssi_usage_maker, ASN1_NO_EXTENSIONS , dissect_tetra_SSI_USAGE_NEED },
8506 { 7, &hf_tetra_smi_eventLabel, ASN1_NO_EXTENSIONS , dissect_tetra_SMI_EVENT_NEED },
8507 { 0, NULL, 0, NULL }
8510 static int
8511 dissect_tetra_AddressMacResource(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8512 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8513 ett_tetra_AddressMacResource, AddressMacResource_choice,
8514 NULL);
8516 return offset;
8520 static const per_sequence_t MAC_RESOURCE_sequence[] = {
8521 { &hf_tetra_pdu_type , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
8522 { &hf_tetra_fill_bit_indication, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Fill_Bit_Indication },
8523 { &hf_tetra_position_of_grant, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Position_Of_Grant },
8524 { &hf_tetra_encryption_mode, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
8525 { &hf_tetra_access_ack , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_access_ack },
8526 { &hf_tetra_lengthIndication_03, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_LengthIndicationMacResource },
8527 { &hf_tetra_address_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_AddressMacResource },
8528 { NULL, 0, 0, NULL }
8531 static int
8532 dissect_tetra_MAC_RESOURCE(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8533 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8534 ett_tetra_MAC_RESOURCE, MAC_RESOURCE_sequence);
8536 return offset;
8541 static int
8542 dissect_tetra_INTEGER_0_33554431(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8543 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
8544 0U, 33554431U, NULL, false);
8546 return offset;
8550 static const value_string tetra_T_optional_field_vals[] = {
8551 { 0, "none" },
8552 { 1, "class-bitmap" },
8553 { 2, "gssi" },
8554 { 3, "reserved" },
8555 { 0, NULL }
8558 static const per_choice_t T_optional_field_choice[] = {
8559 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
8560 { 1, &hf_tetra_class_bitmap , ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_65535 },
8561 { 2, &hf_tetra_gssi , ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_33554431 },
8562 { 3, &hf_tetra_reserved_03 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
8563 { 0, NULL, 0, NULL }
8566 static int
8567 dissect_tetra_T_optional_field(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8568 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8569 ett_tetra_T_optional_field, T_optional_field_choice,
8570 NULL);
8572 return offset;
8576 static const per_sequence_t MAC_ACCESS_DEFINE_sequence[] = {
8577 { &hf_tetra_pdu_type , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
8578 { &hf_tetra_broadcast_type, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
8579 { &hf_tetra_broadcast_channel, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
8580 { &hf_tetra_access_code , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
8581 { &hf_tetra_imm_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_15 },
8582 { &hf_tetra_wt_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_15 },
8583 { &hf_tetra_nu_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_15 },
8584 { &hf_tetra_frame_len_factor_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
8585 { &hf_tetra_timeslot_pointer_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_15 },
8586 { &hf_tetra_min_priority , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
8587 { &hf_tetra_optional_field, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_field },
8588 { &hf_tetra_filler_bits , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
8589 { NULL, 0, 0, NULL }
8592 static int
8593 dissect_tetra_MAC_ACCESS_DEFINE(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8594 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8595 ett_tetra_MAC_ACCESS_DEFINE, MAC_ACCESS_DEFINE_sequence);
8597 return offset;
8600 /*--- PDUs ---*/
8602 static int dissect_AACH_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
8603 int offset = 0;
8604 asn1_ctx_t asn1_ctx;
8605 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, false, pinfo);
8606 offset = dissect_tetra_AACH(tvb, offset, &asn1_ctx, tree, hf_tetra_AACH_PDU);
8607 offset += 7; offset >>= 3;
8608 return offset;
8610 static int dissect_BSCH_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
8611 int offset = 0;
8612 asn1_ctx_t asn1_ctx;
8613 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, false, pinfo);
8614 offset = dissect_tetra_BSCH(tvb, offset, &asn1_ctx, tree, hf_tetra_BSCH_PDU);
8615 offset += 7; offset >>= 3;
8616 return offset;
8618 static int dissect_BNCH_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
8619 int offset = 0;
8620 asn1_ctx_t asn1_ctx;
8621 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, false, pinfo);
8622 offset = dissect_tetra_BNCH(tvb, offset, &asn1_ctx, tree, hf_tetra_BNCH_PDU);
8623 offset += 7; offset >>= 3;
8624 return offset;
8626 static int dissect_MAC_ACCESS_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
8627 int offset = 0;
8628 asn1_ctx_t asn1_ctx;
8629 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, false, pinfo);
8630 offset = dissect_tetra_MAC_ACCESS(tvb, offset, &asn1_ctx, tree, hf_tetra_MAC_ACCESS_PDU);
8631 offset += 7; offset >>= 3;
8632 return offset;
8634 static int dissect_MAC_DATA_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
8635 int offset = 0;
8636 asn1_ctx_t asn1_ctx;
8637 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, false, pinfo);
8638 offset = dissect_tetra_MAC_DATA(tvb, offset, &asn1_ctx, tree, hf_tetra_MAC_DATA_PDU);
8639 offset += 7; offset >>= 3;
8640 return offset;
8642 static int dissect_MAC_FRAG_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
8643 int offset = 0;
8644 asn1_ctx_t asn1_ctx;
8645 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, false, pinfo);
8646 offset = dissect_tetra_MAC_FRAG(tvb, offset, &asn1_ctx, tree, hf_tetra_MAC_FRAG_PDU);
8647 offset += 7; offset >>= 3;
8648 return offset;
8650 static int dissect_MAC_FRAG120_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
8651 int offset = 0;
8652 asn1_ctx_t asn1_ctx;
8653 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, false, pinfo);
8654 offset = dissect_tetra_MAC_FRAG120(tvb, offset, &asn1_ctx, tree, hf_tetra_MAC_FRAG120_PDU);
8655 offset += 7; offset >>= 3;
8656 return offset;
8658 static int dissect_MAC_END_UPLINK_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
8659 int offset = 0;
8660 asn1_ctx_t asn1_ctx;
8661 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, false, pinfo);
8662 offset = dissect_tetra_MAC_END_UPLINK(tvb, offset, &asn1_ctx, tree, hf_tetra_MAC_END_UPLINK_PDU);
8663 offset += 7; offset >>= 3;
8664 return offset;
8666 static int dissect_MAC_END_UP114_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
8667 int offset = 0;
8668 asn1_ctx_t asn1_ctx;
8669 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, false, pinfo);
8670 offset = dissect_tetra_MAC_END_UP114(tvb, offset, &asn1_ctx, tree, hf_tetra_MAC_END_UP114_PDU);
8671 offset += 7; offset >>= 3;
8672 return offset;
8674 static int dissect_MAC_END_HU_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
8675 int offset = 0;
8676 asn1_ctx_t asn1_ctx;
8677 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, false, pinfo);
8678 offset = dissect_tetra_MAC_END_HU(tvb, offset, &asn1_ctx, tree, hf_tetra_MAC_END_HU_PDU);
8679 offset += 7; offset >>= 3;
8680 return offset;
8682 static int dissect_MAC_END_DOWNLINK_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
8683 int offset = 0;
8684 asn1_ctx_t asn1_ctx;
8685 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, false, pinfo);
8686 offset = dissect_tetra_MAC_END_DOWNLINK(tvb, offset, &asn1_ctx, tree, hf_tetra_MAC_END_DOWNLINK_PDU);
8687 offset += 7; offset >>= 3;
8688 return offset;
8690 static int dissect_MAC_END_DOWN111_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
8691 int offset = 0;
8692 asn1_ctx_t asn1_ctx;
8693 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, false, pinfo);
8694 offset = dissect_tetra_MAC_END_DOWN111(tvb, offset, &asn1_ctx, tree, hf_tetra_MAC_END_DOWN111_PDU);
8695 offset += 7; offset >>= 3;
8696 return offset;
8698 static int dissect_MAC_RESOURCE_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
8699 int offset = 0;
8700 asn1_ctx_t asn1_ctx;
8701 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, false, pinfo);
8702 offset = dissect_tetra_MAC_RESOURCE(tvb, offset, &asn1_ctx, tree, hf_tetra_MAC_RESOURCE_PDU);
8703 offset += 7; offset >>= 3;
8704 return offset;
8706 static int dissect_MAC_ACCESS_DEFINE_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
8707 int offset = 0;
8708 asn1_ctx_t asn1_ctx;
8709 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, false, pinfo);
8710 offset = dissect_tetra_MAC_ACCESS_DEFINE(tvb, offset, &asn1_ctx, tree, hf_tetra_MAC_ACCESS_DEFINE_PDU);
8711 offset += 7; offset >>= 3;
8712 return offset;
8716 static const value_string channeltypenames[] = {
8717 { 0, "Reserved" },
8718 { 1, "AACH" },
8719 { 2, "SCH/F" },
8720 { 3, "SCH/HD" },
8721 { 4, "Unknown" },
8722 { 5, "BSCH" },
8723 { 6, "BNCH" },
8724 { 7, "TCH/F" },
8725 { 8, "TCH/H" },
8726 { 9, "TCH4.8"},
8727 { 10, "TCH7.2"},
8728 { 11, "STCH"},
8729 { 0, NULL }
8732 static const value_string recvchanneltypenames[] = {
8733 { 0, "Reserved" },
8734 { 1, "AACH" },
8735 { 2, "SCH/F" },
8736 { 3, "SCH/HD" },
8737 { 4, "Unknown" },
8738 { 5, "BSCH" },
8739 { 6, "BNCH" },
8740 { 7, "TCH/F" },
8741 { 8, "TCH/H" },
8742 { 9, "TCH4.8"},
8743 { 10, "TCH7.2"},
8744 { 11, "STCH"},
8745 { 15, "SCH/HU"},
8746 { 0, NULL }
8749 /* Get the length of received pdu */
8750 static int get_rx_pdu_length(uint32_t channel_type)
8752 int len = 0;
8754 switch(channel_type) {
8755 case TETRA_CHAN_AACH:
8756 len = 14;
8757 break;
8758 case TETRA_CHAN_SCH_F:
8759 len = 268;
8760 break;
8761 case TETRA_CHAN_SCH_D:
8762 len = 124; ;
8763 break;
8764 case TETRA_CHAN_BSCH:
8765 len = 60;
8766 break;
8767 case TETRA_CHAN_BNCH:
8768 len = 124;
8769 break;
8770 case TETRA_CHAN_TCH_F:
8771 len = 274;
8772 break;
8773 case TETRA_CHAN_TCH_H:
8774 len = 137;
8775 break;
8776 case TETRA_CHAN_TCH_2_4:
8777 len = 144;
8778 break;
8779 case TETRA_CHAN_TCH_4_8:
8780 len = 288;
8781 break;
8782 case TETRA_CHAN_STCH:
8783 len = 124;
8784 break;
8785 case TETRA_CHAN_SCH_HU:
8786 len = 92;
8787 break;
8788 default:
8789 len = 0;
8790 break;
8793 return len;
8796 /* Get the length of transmitted pdu */
8797 static int get_tx_pdu_length(uint32_t channel_type)
8799 int len = 0;
8801 switch(channel_type) {
8802 case TETRA_CHAN_AACH:
8803 len = 14;
8804 break;
8805 case TETRA_CHAN_SCH_F:
8806 len = 268;
8807 break;
8808 case TETRA_CHAN_SCH_D:
8809 len = 124;
8810 break;
8811 case TETRA_CHAN_BSCH:
8812 len = 60;
8813 break;
8814 case TETRA_CHAN_BNCH:
8815 len = 124;
8816 break;
8817 case TETRA_CHAN_TCH_F:
8818 len = 274;
8819 break;
8820 case TETRA_CHAN_TCH_H:
8821 len = 137;
8822 break;
8823 case TETRA_CHAN_TCH_2_4:
8824 len = 144;
8825 break;
8826 case TETRA_CHAN_TCH_4_8:
8827 len = 288;
8828 break;
8829 case TETRA_CHAN_STCH:
8830 len = 124;
8831 break;
8834 return len;
8837 void tetra_dissect_pdu(int channel_type, int dir, tvbuff_t *pdu, proto_tree *tree, packet_info *pinfo)
8839 proto_item *tetra_sub_item;
8840 proto_tree *tetra_sub_tree;
8841 uint8_t p;
8843 tetra_sub_item = proto_tree_add_item(tree, hf_tetra_pdu,
8844 pdu, 0, tvb_captured_length(pdu), ENC_NA);
8846 tetra_sub_tree = proto_item_add_subtree(tetra_sub_item, ett_tetra);
8848 switch(channel_type) {
8849 case TETRA_CHAN_AACH:
8850 dissect_AACH_PDU(pdu, pinfo, tetra_sub_tree, NULL);
8851 break;
8852 case TETRA_CHAN_SCH_F:
8853 p = tvb_get_uint8(pdu, 0);
8854 switch(p >> 6) {
8855 case 0:
8856 if (dir == TETRA_DOWNLINK)
8857 dissect_MAC_RESOURCE_PDU(pdu, pinfo, tetra_sub_tree, NULL);
8858 else
8859 dissect_MAC_DATA_PDU(pdu, pinfo, tetra_sub_tree, NULL);
8860 break;
8861 case 1: /* MAC-FRAG or MAC-END */
8862 if((p >> 5) == 3) {
8863 if (dir == TETRA_DOWNLINK)
8864 dissect_MAC_END_DOWNLINK_PDU(pdu, pinfo, tetra_sub_tree, NULL);
8865 else
8866 dissect_MAC_END_UPLINK_PDU(pdu, pinfo, tetra_sub_tree, NULL);
8868 } else
8869 dissect_MAC_FRAG_PDU(pdu, pinfo, tetra_sub_tree, NULL);
8870 break;
8871 case 2:
8872 dissect_MAC_ACCESS_DEFINE_PDU(pdu, pinfo, tetra_sub_tree, NULL);
8873 break;
8875 break;
8876 case TETRA_CHAN_SCH_D:
8877 p = tvb_get_uint8(pdu, 0);
8878 switch(p >> 6) {
8879 case 0:
8880 dissect_MAC_RESOURCE_PDU(pdu, pinfo, tetra_sub_tree, NULL);
8881 break;
8882 case 1: /* MAC-FRAG or MAC-END */
8883 if((p >> 5) == 3)
8884 dissect_MAC_END_DOWN111_PDU(pdu, pinfo, tetra_sub_tree, NULL);
8885 else
8886 dissect_MAC_FRAG120_PDU(pdu, pinfo, tetra_sub_tree, NULL);
8887 break;
8888 case 2:
8889 dissect_MAC_ACCESS_DEFINE_PDU(pdu, pinfo, tetra_sub_tree, NULL);
8890 break;
8892 break;
8893 case TETRA_CHAN_SCH_HU:
8894 p = tvb_get_uint8(pdu, 0);
8895 switch(p >> 7) {
8896 case 0: /* MAC-ACCESS */
8897 dissect_MAC_ACCESS_PDU(pdu, pinfo, tetra_sub_tree, NULL);
8898 break;
8899 case 1: /* MAC-END-HU */
8900 dissect_MAC_END_HU_PDU(pdu, pinfo, tetra_sub_tree, NULL);
8901 break;
8903 break;
8904 case TETRA_CHAN_BSCH:
8905 col_append_sep_str(pinfo->cinfo, COL_INFO, NULL, "BSCH");
8906 dissect_BSCH_PDU(pdu, pinfo, tetra_sub_tree, NULL);
8907 break;
8908 case TETRA_CHAN_BNCH:
8909 col_append_sep_str(pinfo->cinfo, COL_INFO, NULL, "BNCH");
8910 dissect_BNCH_PDU(pdu, pinfo, tetra_sub_tree, NULL);
8911 break;
8912 case TETRA_CHAN_STCH:
8913 p = tvb_get_uint8(pdu, 0);
8914 switch(p >> 6) {
8915 case 0:
8916 dissect_MAC_RESOURCE_PDU(pdu, pinfo, tetra_sub_tree, NULL);
8917 break;
8918 case 1: /* MAC-FRAG or MAC-END */
8919 if((p >> 5) == 3) {
8920 if (dir == TETRA_DOWNLINK)
8921 dissect_MAC_END_DOWN111_PDU(pdu, pinfo, tetra_sub_tree, NULL);
8922 else
8923 dissect_MAC_END_UP114_PDU(pdu, pinfo, tetra_sub_tree, NULL);
8924 } else
8925 dissect_MAC_FRAG120_PDU(pdu, pinfo, tetra_sub_tree, NULL);
8926 break;
8927 case 2:
8928 dissect_MAC_ACCESS_DEFINE_PDU(pdu, pinfo, tetra_sub_tree, NULL);
8929 break;
8931 break;
8932 case TETRA_CHAN_TCH_F:
8933 col_append_sep_str(pinfo->cinfo, COL_INFO, NULL, "Voice");
8934 break;
8938 static void dissect_tetra_UNITDATA_IND(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tetra_tree, int offset)
8940 uint32_t rxreg = 0;
8941 uint32_t channels = 0, i;
8942 uint32_t channel_type;
8943 int pdu_offset = 0;
8944 proto_item *tetra_sub_item;
8945 proto_tree *tetra_header_tree = NULL;
8946 tvbuff_t *payload_tvb;
8948 /* Length */
8949 rxreg = tvb_get_letohl(tvb, offset);
8950 proto_tree_add_uint(tetra_tree, hf_tetra_len0, tvb, offset, 4, rxreg);
8952 /* RvSteR */
8953 offset += 4;
8954 rxreg = tvb_get_letohl(tvb, offset);
8955 proto_tree_add_uint(tetra_tree, hf_tetra_rvstr, tvb, offset, 4, rxreg);
8957 /* Logical channels */
8958 channels = rxreg & 0x3;
8959 tetra_sub_item = proto_tree_add_uint( tetra_tree, hf_tetra_channels, tvb, offset, 4, channels );
8960 tetra_header_tree = proto_item_add_subtree(tetra_sub_item, ett_tetra);
8961 if (channels > 3) {
8962 expert_add_info(pinfo, tetra_sub_item, &ei_tetra_channels_incorrect);
8963 channels = 3;
8966 pdu_offset = offset + 4;
8967 for(i = 0; i < channels; i++) {
8968 int byte_len, bits_len, remaining_bits;
8969 int hf_channel[3];
8971 hf_channel[0] = hf_tetra_rxchannel1;
8972 hf_channel[1] = hf_tetra_rxchannel2;
8973 hf_channel[2] = hf_tetra_rxchannel3;
8975 /* Channel type */
8976 channel_type = (rxreg >> ((i + 1) * 4) ) & 0xf;
8977 proto_tree_add_uint( tetra_header_tree, hf_channel[i], tvb, offset, 4, channel_type);
8979 /* CRC */
8980 proto_tree_add_boolean( tetra_header_tree, hf_tetra_crc, tvb, offset, 4, !(rxreg >> (i + 2) & 0x01));
8982 /* PDU */
8983 bits_len = get_rx_pdu_length(channel_type);
8984 byte_len = bits_len >> 3;
8985 remaining_bits = bits_len % 8;
8986 if ((remaining_bits)!=0)
8987 byte_len++;
8989 payload_tvb = tvb_new_subset_length(tvb, pdu_offset, byte_len);
8990 tetra_dissect_pdu(channel_type, TETRA_UPLINK, payload_tvb, tetra_header_tree, pinfo);
8992 if ((remaining_bits)!=0)
8993 byte_len--;
8994 pdu_offset += byte_len;
8998 static void dissect_tetra_UNITDATA_REQ(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tetra_tree, int offset)
9000 uint32_t txreg = 0;
9001 uint32_t channels = 0, i;
9002 uint32_t channel_type;
9003 int pdu_offset = 0;
9004 proto_item *tetra_sub_item = NULL;
9005 proto_tree *tetra_header_tree = NULL;
9006 tvbuff_t *payload_tvb;
9008 /* TxR */
9009 txreg = tvb_get_letohl(tvb, offset);
9010 proto_tree_add_uint(tetra_tree, hf_tetra_txreg, tvb, offset, 4, txreg);
9012 /* Logical channels */
9013 channels = (txreg & 0x3) + 1;
9014 tetra_sub_item = proto_tree_add_uint( tetra_tree, hf_tetra_channels, tvb, offset, 4, channels );
9015 tetra_header_tree = proto_item_add_subtree(tetra_sub_item, ett_tetra);
9016 txreg >>= 2;
9017 /* Skip 0000B */
9018 if(channels == 2)
9019 txreg >>= 4;
9021 if (channels > 3) {
9022 expert_add_info(pinfo, tetra_sub_item, &ei_tetra_channels_incorrect);
9023 channels = 3;
9026 pdu_offset = offset + 4;
9027 for(i = 0; i < channels; i++) {
9028 int byte_len, bits_len, remaining_bits;
9029 int hf_channel[3];
9031 hf_channel[0] = hf_tetra_channel1;
9032 hf_channel[1] = hf_tetra_channel2;
9033 hf_channel[2] = hf_tetra_channel3;
9035 channel_type = txreg & 0xf;
9036 proto_tree_add_uint( tetra_header_tree, hf_channel[i], tvb, offset, 4, channel_type);
9037 txreg >>= 4;
9038 /* PDU */
9039 bits_len = get_tx_pdu_length(channel_type);
9040 byte_len = bits_len >> 3;
9041 remaining_bits = bits_len % 8;
9042 if ((remaining_bits)!=0)
9043 byte_len++;
9045 payload_tvb = tvb_new_subset_length(tvb, pdu_offset, byte_len);
9046 tetra_dissect_pdu(channel_type, TETRA_DOWNLINK, payload_tvb, tetra_header_tree, pinfo);
9047 pdu_offset += byte_len;
9051 static int
9052 dissect_tetra(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
9054 proto_item *tetra_item = NULL;
9055 proto_item *tetra_sub_item = NULL;
9056 proto_tree *tetra_tree = NULL;
9057 proto_tree *tetra_header_tree = NULL;
9058 uint16_t type = 0;
9059 uint8_t carriernumber = -1;
9061 col_set_str(pinfo->cinfo, COL_PROTOCOL, PROTO_TAG_tetra);
9062 /* Clear out stuff in the info column */
9063 col_clear(pinfo->cinfo,COL_INFO);
9066 * This is not a good way of dissecting packets. The tvb length should
9067 * be sanity checked so we aren't going past the actual size of the buffer.
9069 type = tvb_get_uint8(tvb, 0);
9071 if(include_carrier_number) {
9072 carriernumber = tvb_get_uint8(tvb, 1);
9076 switch(type) {
9077 case 1:
9078 if(include_carrier_number)
9079 col_add_fstr(pinfo->cinfo, COL_INFO, "Tetra-UNITDATA-REQ, Carrier: %d",
9080 carriernumber);
9081 else
9082 col_set_str(pinfo->cinfo, COL_INFO, "Tetra-UNITDATA-REQ");
9083 break;
9084 case 2:
9085 if(include_carrier_number)
9086 col_add_fstr(pinfo->cinfo, COL_INFO, "Tetra-UNITDATA-IND, Carrier: %d",
9087 carriernumber);
9088 else
9089 col_set_str(pinfo->cinfo, COL_INFO, "Tetra-UNITDATA-IND");
9090 break;
9091 case 3:
9092 if(include_carrier_number)
9093 col_add_fstr(pinfo->cinfo, COL_INFO, "MAC-Timer, Carrier: %d",
9094 carriernumber);
9095 else
9096 col_set_str(pinfo->cinfo, COL_INFO, "MAC-Timer");
9097 break;
9098 case 127:
9099 if(include_carrier_number)
9100 col_add_fstr(pinfo->cinfo, COL_INFO, "Tetra-UNITDATA-IND Done, Carrier: %d",
9101 carriernumber);
9102 else
9103 col_set_str(pinfo->cinfo, COL_INFO, "Tetra-UNITDATA-IND Done");
9104 break;
9105 case 128:
9106 if(include_carrier_number)
9107 col_add_fstr(pinfo->cinfo, COL_INFO, "Tetra-UNITDATA-REQ Done, Carrier: %d",
9108 carriernumber);
9109 else
9110 col_set_str(pinfo->cinfo, COL_INFO, "Tetra-UNITDATA-REQ Done");
9111 break;
9112 default:
9113 col_add_fstr(pinfo->cinfo, COL_INFO, "Unknown command: %d", type);
9114 break;
9117 /* if (tree) */ { /* we are being asked for details */
9118 uint32_t offset = 0;
9119 uint32_t txtimer = 0;
9120 uint32_t tslot = 0;
9122 tetra_item = proto_tree_add_item(tree, proto_tetra, tvb, 0, -1, ENC_NA);
9123 tetra_tree = proto_item_add_subtree(tetra_item, ett_tetra);
9125 offset ++;
9127 /* Carrier number */
9128 if(include_carrier_number) {
9129 proto_tree_add_uint(tetra_tree, hf_tetra_carriernumber, tvb, offset, 1, carriernumber);
9130 offset ++;
9133 /* Registers */
9134 tetra_sub_item = proto_tree_add_item( tetra_tree, hf_tetra_header, tvb, offset, -1, ENC_NA );
9135 tetra_header_tree = proto_item_add_subtree(tetra_sub_item, ett_tetra);
9137 /* Timer */
9138 txtimer = tvb_get_letohl(tvb, offset);
9139 tetra_sub_item = proto_tree_add_item(tetra_header_tree, hf_tetra_timer, tvb, offset, 4, ENC_LITTLE_ENDIAN);
9140 tslot = ((txtimer & 0x7800) >> 11);
9141 if(tslot==4)
9142 tslot = 3;
9143 if(tslot==8)
9144 tslot = 4;
9145 proto_item_append_text(tetra_sub_item, " (Multiple frame: %d, Frame: %d, Slot: %d)",
9146 txtimer & 0x3F, (txtimer & 0x7c0) >> 6,
9147 tslot);
9149 offset += 4;
9151 switch(type) {
9152 case 1: /* tetra-UNITDATA-REQ */
9153 case 128: /* tetra-UNITDATA-REQ Done */
9154 dissect_tetra_UNITDATA_REQ(tvb, pinfo, tetra_header_tree, offset);
9155 break;
9156 case 2: /* tetra-UNITDATA-IND */
9157 case 127: /* tetra-UNITDATA-IND Done */
9158 dissect_tetra_UNITDATA_IND(tvb, pinfo, tetra_header_tree, offset);
9159 break;
9160 case 3: /* MAC-Timer */
9161 break;
9162 default:
9163 break;
9166 return tvb_captured_length(tvb);
9169 void proto_reg_handoff_tetra(void)
9171 dissector_add_uint_with_preference("udp.port", TETRA_UDP_PORT, tetra_handle);
9175 void proto_register_tetra (void)
9177 module_t *tetra_module;
9178 expert_module_t* expert_tetra;
9181 * A header field is something you can search/filter on.
9183 * We create a structure to register our fields. It consists of an
9184 * array of hf_register_info structures, each of which are of the format
9185 * {&(field id), {name, abbrev, type, display, strings, bitmask, blurb, HFILL}}.
9187 static hf_register_info hf[] = {
9188 { &hf_tetra,
9189 { "Data", "tetra.data", FT_NONE, BASE_NONE, NULL, 0x0,
9190 "tetra PDU", HFILL }},
9191 { &hf_tetra_header,
9192 { "Registers", "tetra.header", FT_NONE, BASE_NONE, NULL, 0x0,
9193 "TETRA Registers", HFILL }},
9194 { &hf_tetra_channels,
9195 { "Logical Channels", "tetra.channels", FT_UINT8, BASE_DEC, NULL, 0x0,
9196 "The amount of logical channels", HFILL }},
9197 { &hf_tetra_channel1,
9198 { "Channel 1", "tetra.txchannel1", FT_UINT8, BASE_DEC, VALS(channeltypenames), 0x0,
9199 "Logical channels type", HFILL }},
9200 { &hf_tetra_channel2,
9201 { "Channel 2", "tetra.txchannel2", FT_UINT8, BASE_DEC, VALS(channeltypenames), 0x0,
9202 "Logical channels type", HFILL }},
9203 { &hf_tetra_channel3,
9204 { "Channel 3", "tetra.txchannel3", FT_UINT8, BASE_DEC, VALS(channeltypenames), 0x0,
9205 "Logical channels type", HFILL }},
9206 { &hf_tetra_txreg,
9207 { "TxR", "tetra.txreg", FT_UINT32, BASE_HEX, NULL, 0x0,
9208 "TX Register", HFILL }},
9209 { &hf_tetra_rvstr,
9210 { "RvSteR", "tetra.rvster", FT_UINT32, BASE_HEX, NULL, 0x0,
9211 "Receive Status Register", HFILL }},
9212 { &hf_tetra_carriernumber,
9213 { "Carrier Number", "tetra.carrier", FT_UINT8, BASE_DEC, NULL, 0x0,
9214 NULL, HFILL }},
9215 { &hf_tetra_rxchannel1,
9216 { "Channel 1", "tetra.rxchannel1", FT_UINT8, BASE_DEC, VALS(recvchanneltypenames), 0x0,
9217 "Logical channels type", HFILL }},
9218 { &hf_tetra_rxchannel2,
9219 { "Channel 2", "tetra.rxchannel2", FT_UINT8, BASE_DEC, VALS(recvchanneltypenames), 0x0,
9220 "Logical channels type", HFILL }},
9221 { &hf_tetra_rxchannel3,
9222 { "Channel 3", "tetra.rxchannel3", FT_UINT8, BASE_DEC, VALS(recvchanneltypenames), 0x0,
9223 "Logical channels type", HFILL }},
9224 { &hf_tetra_timer,
9225 { "Timer", "tetra.timer", FT_UINT32, BASE_HEX, NULL, 0x0,
9226 "Timer Register", HFILL }},
9227 { &hf_tetra_crc,
9228 { "CRC", "tetra.crc", FT_BOOLEAN, BASE_NONE, NULL, 0x0,
9229 "CRC result", HFILL }},
9230 { &hf_tetra_len0,
9231 { "Length", "tetra.len0", FT_UINT32, BASE_DEC, NULL, 0x0,
9232 "Length of the PDU", HFILL }},
9233 { &hf_tetra_pdu,
9234 { "PDU", "tetra.pdu", FT_BYTES, BASE_NONE, NULL, 0x0,
9235 NULL, HFILL }} ,
9237 { &hf_tetra_AACH_PDU,
9238 { "AACH", "tetra.AACH_element",
9239 FT_NONE, BASE_NONE, NULL, 0,
9240 NULL, HFILL }},
9241 { &hf_tetra_BSCH_PDU,
9242 { "BSCH", "tetra.BSCH_element",
9243 FT_NONE, BASE_NONE, NULL, 0,
9244 NULL, HFILL }},
9245 { &hf_tetra_BNCH_PDU,
9246 { "BNCH", "tetra.BNCH_element",
9247 FT_NONE, BASE_NONE, NULL, 0,
9248 NULL, HFILL }},
9249 { &hf_tetra_MAC_ACCESS_PDU,
9250 { "MAC-ACCESS", "tetra.MAC_ACCESS_element",
9251 FT_NONE, BASE_NONE, NULL, 0,
9252 NULL, HFILL }},
9253 { &hf_tetra_MAC_DATA_PDU,
9254 { "MAC-DATA", "tetra.MAC_DATA_element",
9255 FT_NONE, BASE_NONE, NULL, 0,
9256 NULL, HFILL }},
9257 { &hf_tetra_MAC_FRAG_PDU,
9258 { "MAC-FRAG", "tetra.MAC_FRAG_element",
9259 FT_NONE, BASE_NONE, NULL, 0,
9260 NULL, HFILL }},
9261 { &hf_tetra_MAC_FRAG120_PDU,
9262 { "MAC-FRAG120", "tetra.MAC_FRAG120_element",
9263 FT_NONE, BASE_NONE, NULL, 0,
9264 NULL, HFILL }},
9265 { &hf_tetra_MAC_END_UPLINK_PDU,
9266 { "MAC-END-UPLINK", "tetra.MAC_END_UPLINK_element",
9267 FT_NONE, BASE_NONE, NULL, 0,
9268 NULL, HFILL }},
9269 { &hf_tetra_MAC_END_UP114_PDU,
9270 { "MAC-END-UP114", "tetra.MAC_END_UP114_element",
9271 FT_NONE, BASE_NONE, NULL, 0,
9272 NULL, HFILL }},
9273 { &hf_tetra_MAC_END_HU_PDU,
9274 { "MAC-END-HU", "tetra.MAC_END_HU_element",
9275 FT_NONE, BASE_NONE, NULL, 0,
9276 NULL, HFILL }},
9277 { &hf_tetra_MAC_END_DOWNLINK_PDU,
9278 { "MAC-END-DOWNLINK", "tetra.MAC_END_DOWNLINK_element",
9279 FT_NONE, BASE_NONE, NULL, 0,
9280 NULL, HFILL }},
9281 { &hf_tetra_MAC_END_DOWN111_PDU,
9282 { "MAC-END-DOWN111", "tetra.MAC_END_DOWN111_element",
9283 FT_NONE, BASE_NONE, NULL, 0,
9284 NULL, HFILL }},
9285 { &hf_tetra_MAC_RESOURCE_PDU,
9286 { "MAC-RESOURCE", "tetra.MAC_RESOURCE_element",
9287 FT_NONE, BASE_NONE, NULL, 0,
9288 NULL, HFILL }},
9289 { &hf_tetra_MAC_ACCESS_DEFINE_PDU,
9290 { "MAC-ACCESS-DEFINE", "tetra.MAC_ACCESS_DEFINE_element",
9291 FT_NONE, BASE_NONE, NULL, 0,
9292 NULL, HFILL }},
9293 { &hf_tetra_function,
9294 { "function", "tetra.function",
9295 FT_UINT32, BASE_DEC, NULL, 0,
9296 "INTEGER_0_3", HFILL }},
9297 { &hf_tetra_field1,
9298 { "field1", "tetra.field1",
9299 FT_UINT32, BASE_DEC, NULL, 0,
9300 "INTEGER_0_63", HFILL }},
9301 { &hf_tetra_field2,
9302 { "field2", "tetra.field2",
9303 FT_UINT32, BASE_DEC, NULL, 0,
9304 "INTEGER_0_63", HFILL }},
9305 { &hf_tetra_system_code,
9306 { "system-code", "tetra.system_code",
9307 FT_UINT32, BASE_DEC, VALS(tetra_System_Code_vals), 0,
9308 NULL, HFILL }},
9309 { &hf_tetra_colour_code,
9310 { "colour-code", "tetra.colour_code",
9311 FT_UINT32, BASE_DEC, VALS(tetra_Colour_Code_vals), 0,
9312 NULL, HFILL }},
9313 { &hf_tetra_timeslot_number,
9314 { "timeslot-number", "tetra.timeslot_number",
9315 FT_UINT32, BASE_DEC, VALS(tetra_Timeslot_Number_vals), 0,
9316 NULL, HFILL }},
9317 { &hf_tetra_frame_number,
9318 { "frame-number", "tetra.frame_number",
9319 FT_UINT32, BASE_DEC, VALS(tetra_Frame_Number_vals), 0,
9320 NULL, HFILL }},
9321 { &hf_tetra_multiple_frame_number,
9322 { "multiple-frame-number", "tetra.multiple_frame_number",
9323 FT_UINT32, BASE_DEC, VALS(tetra_Multiple_Frame_Number_vals), 0,
9324 NULL, HFILL }},
9325 { &hf_tetra_sharing_mod,
9326 { "sharing-mod", "tetra.sharing_mod",
9327 FT_UINT32, BASE_DEC, VALS(tetra_Sharing_Mod_vals), 0,
9328 NULL, HFILL }},
9329 { &hf_tetra_ts_reserved_frames,
9330 { "ts-reserved-frames", "tetra.ts_reserved_frames",
9331 FT_UINT32, BASE_DEC, VALS(tetra_TS_Reserved_Frames_vals), 0,
9332 NULL, HFILL }},
9333 { &hf_tetra_u_plane_dtx,
9334 { "u-plane-dtx", "tetra.u_plane_dtx",
9335 FT_UINT32, BASE_DEC, VALS(tetra_U_Plane_DTX_vals), 0,
9336 NULL, HFILL }},
9337 { &hf_tetra_frame_18_extension,
9338 { "frame-18-extension", "tetra.frame_18_extension",
9339 FT_UINT32, BASE_DEC, VALS(tetra_Frame_18_Extension_vals), 0,
9340 NULL, HFILL }},
9341 { &hf_tetra_reserved,
9342 { "reserved", "tetra.reserved",
9343 FT_UINT32, BASE_DEC, VALS(tetra_Reserved_vals), 0,
9344 NULL, HFILL }},
9345 { &hf_tetra_tm_sdu,
9346 { "tm-sdu", "tetra.tm_sdu_element",
9347 FT_NONE, BASE_NONE, NULL, 0,
9348 "MLE_Sync", HFILL }},
9349 { &hf_tetra_mcc,
9350 { "mcc", "tetra.mcc",
9351 FT_UINT32, BASE_DEC, NULL, 0,
9352 "INTEGER_0_1023", HFILL }},
9353 { &hf_tetra_mnc,
9354 { "mnc", "tetra.mnc",
9355 FT_UINT32, BASE_DEC, NULL, 0,
9356 "INTEGER_0_16383", HFILL }},
9357 { &hf_tetra_neighbour_cell_broadcast,
9358 { "neighbour-cell-broadcast", "tetra.neighbour_cell_broadcast",
9359 FT_UINT32, BASE_DEC, NULL, 0,
9360 "INTEGER_0_3", HFILL }},
9361 { &hf_tetra_cell_service_level,
9362 { "cell-service-level", "tetra.cell_service_level",
9363 FT_UINT32, BASE_DEC, NULL, 0,
9364 "INTEGER_0_3", HFILL }},
9365 { &hf_tetra_late_entry_information,
9366 { "late-entry-information", "tetra.late_entry_information",
9367 FT_UINT32, BASE_DEC, NULL, 0,
9368 "INTEGER_0_1", HFILL }},
9369 { &hf_tetra_pdu_type,
9370 { "pdu-type", "tetra.pdu_type",
9371 FT_UINT32, BASE_DEC, NULL, 0,
9372 "INTEGER_0_3", HFILL }},
9373 { &hf_tetra_broadcast_type,
9374 { "broadcast-type", "tetra.broadcast_type",
9375 FT_UINT32, BASE_DEC, NULL, 0,
9376 "INTEGER_0_3", HFILL }},
9377 { &hf_tetra_main_carrier,
9378 { "main-carrier", "tetra.main_carrier",
9379 FT_UINT32, BASE_DEC, NULL, 0,
9380 "INTEGER_0_4095", HFILL }},
9381 { &hf_tetra_frequency_band,
9382 { "frequency-band", "tetra.frequency_band",
9383 FT_UINT32, BASE_DEC, NULL, 0,
9384 "INTEGER_0_15", HFILL }},
9385 { &hf_tetra_offset,
9386 { "offset", "tetra.offset",
9387 FT_UINT32, BASE_DEC, VALS(tetra_Offset_vals), 0,
9388 NULL, HFILL }},
9389 { &hf_tetra_duplex_spacing,
9390 { "duplex-spacing", "tetra.duplex_spacing",
9391 FT_UINT32, BASE_DEC, NULL, 0,
9392 "INTEGER_0_7", HFILL }},
9393 { &hf_tetra_reverse_operation,
9394 { "reverse-operation", "tetra.reverse_operation",
9395 FT_UINT32, BASE_DEC, VALS(tetra_Reverse_Operation_vals), 0,
9396 NULL, HFILL }},
9397 { &hf_tetra_sencond_ctl_carrier,
9398 { "sencond-ctl-carrier", "tetra.sencond_ctl_carrier",
9399 FT_UINT32, BASE_DEC, VALS(tetra_Sencond_Ctl_Carrier_vals), 0,
9400 NULL, HFILL }},
9401 { &hf_tetra_ms_txpwr_max_cell,
9402 { "ms-txpwr-max-cell", "tetra.ms_txpwr_max_cell",
9403 FT_UINT32, BASE_DEC, VALS(tetra_MS_TXPWR_MAX_CELL_vals), 0,
9404 NULL, HFILL }},
9405 { &hf_tetra_rxlev_access_min,
9406 { "rxlev-access-min", "tetra.rxlev_access_min",
9407 FT_UINT32, BASE_DEC, VALS(tetra_RXLEV_ACCESS_MIN_vals), 0,
9408 NULL, HFILL }},
9409 { &hf_tetra_access_parameter,
9410 { "access-parameter", "tetra.access_parameter",
9411 FT_UINT32, BASE_DEC, VALS(tetra_ACCESS_PARAMETER_vals), 0,
9412 NULL, HFILL }},
9413 { &hf_tetra_radio_downlink_timeout,
9414 { "radio-downlink-timeout", "tetra.radio_downlink_timeout",
9415 FT_UINT32, BASE_DEC, VALS(tetra_RADIO_DOWNLINK_TIMEOUT_vals), 0,
9416 NULL, HFILL }},
9417 { &hf_tetra_hyperframe_or_cck,
9418 { "hyperframe-or-cck", "tetra.hyperframe_or_cck",
9419 FT_UINT32, BASE_DEC, VALS(tetra_T_hyperframe_or_cck_vals), 0,
9420 NULL, HFILL }},
9421 { &hf_tetra_hyperframe,
9422 { "hyperframe", "tetra.hyperframe",
9423 FT_UINT32, BASE_DEC, NULL, 0,
9424 "INTEGER_0_65535", HFILL }},
9425 { &hf_tetra_cckid,
9426 { "cckid", "tetra.cckid",
9427 FT_UINT32, BASE_DEC, NULL, 0,
9428 "INTEGER_0_65535", HFILL }},
9429 { &hf_tetra_optional_params,
9430 { "optional-params", "tetra.optional_params",
9431 FT_UINT32, BASE_DEC, VALS(tetra_T_optional_params_vals), 0,
9432 NULL, HFILL }},
9433 { &hf_tetra_even_multiframe,
9434 { "even-multiframe", "tetra.even_multiframe_element",
9435 FT_NONE, BASE_NONE, NULL, 0,
9436 "TS_COMMON_FRAMES", HFILL }},
9437 { &hf_tetra_odd_multiframe,
9438 { "odd-multiframe", "tetra.odd_multiframe_element",
9439 FT_NONE, BASE_NONE, NULL, 0,
9440 "TS_COMMON_FRAMES", HFILL }},
9441 { &hf_tetra_access_a_code,
9442 { "access-a-code", "tetra.access_a_code_element",
9443 FT_NONE, BASE_NONE, NULL, 0,
9444 "Default_Code_A", HFILL }},
9445 { &hf_tetra_extend_service,
9446 { "extend-service", "tetra.extend_service_element",
9447 FT_NONE, BASE_NONE, NULL, 0,
9448 "Extended_Services_Broadcast", HFILL }},
9449 { &hf_tetra_la,
9450 { "la", "tetra.la",
9451 FT_UINT32, BASE_DEC, NULL, 0,
9452 "INTEGER_0_16383", HFILL }},
9453 { &hf_tetra_subscriber_class,
9454 { "subscriber-class", "tetra.subscriber_class",
9455 FT_BYTES, BASE_NONE, NULL, 0,
9456 NULL, HFILL }},
9457 { &hf_tetra_registriation,
9458 { "registriation", "tetra.registriation",
9459 FT_UINT32, BASE_DEC, NULL, 0,
9460 "INTEGER_0_1", HFILL }},
9461 { &hf_tetra_de_registration,
9462 { "de-registration", "tetra.de_registration",
9463 FT_UINT32, BASE_DEC, NULL, 0,
9464 "INTEGER_0_1", HFILL }},
9465 { &hf_tetra_priority_cell,
9466 { "priority-cell", "tetra.priority_cell",
9467 FT_UINT32, BASE_DEC, NULL, 0,
9468 "INTEGER_0_1", HFILL }},
9469 { &hf_tetra_minimum_mode_service,
9470 { "minimum-mode-service", "tetra.minimum_mode_service",
9471 FT_UINT32, BASE_DEC, NULL, 0,
9472 "INTEGER_0_1", HFILL }},
9473 { &hf_tetra_migration,
9474 { "migration", "tetra.migration",
9475 FT_UINT32, BASE_DEC, NULL, 0,
9476 "INTEGER_0_1", HFILL }},
9477 { &hf_tetra_system_wide_service,
9478 { "system-wide-service", "tetra.system_wide_service",
9479 FT_UINT32, BASE_DEC, NULL, 0,
9480 "INTEGER_0_1", HFILL }},
9481 { &hf_tetra_tetra_voice_service,
9482 { "tetra-voice-service", "tetra.tetra_voice_service",
9483 FT_UINT32, BASE_DEC, NULL, 0,
9484 "INTEGER_0_1", HFILL }},
9485 { &hf_tetra_circuit_mode_data_service,
9486 { "circuit-mode-data-service", "tetra.circuit_mode_data_service",
9487 FT_UINT32, BASE_DEC, NULL, 0,
9488 "INTEGER_0_1", HFILL }},
9489 { &hf_tetra_reserved_01,
9490 { "reserved", "tetra.reserved",
9491 FT_UINT32, BASE_DEC, NULL, 0,
9492 "INTEGER_0_1", HFILL }},
9493 { &hf_tetra_sndcp_service,
9494 { "sndcp-service", "tetra.sndcp_service",
9495 FT_UINT32, BASE_DEC, NULL, 0,
9496 "INTEGER_0_1", HFILL }},
9497 { &hf_tetra_air_interface_encryption,
9498 { "air-interface-encryption", "tetra.air_interface_encryption",
9499 FT_UINT32, BASE_DEC, NULL, 0,
9500 "INTEGER_0_1", HFILL }},
9501 { &hf_tetra_advanced_link_support,
9502 { "advanced-link-support", "tetra.advanced_link_support",
9503 FT_UINT32, BASE_DEC, NULL, 0,
9504 "INTEGER_0_1", HFILL }},
9505 { &hf_tetra_frame1,
9506 { "frame1", "tetra.frame1",
9507 FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
9508 "FRAME", HFILL }},
9509 { &hf_tetra_frame2,
9510 { "frame2", "tetra.frame2",
9511 FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
9512 "FRAME", HFILL }},
9513 { &hf_tetra_frame3,
9514 { "frame3", "tetra.frame3",
9515 FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
9516 "FRAME", HFILL }},
9517 { &hf_tetra_frame4,
9518 { "frame4", "tetra.frame4",
9519 FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
9520 "FRAME", HFILL }},
9521 { &hf_tetra_frame5,
9522 { "frame5", "tetra.frame5",
9523 FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
9524 "FRAME", HFILL }},
9525 { &hf_tetra_frame6,
9526 { "frame6", "tetra.frame6",
9527 FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
9528 "FRAME", HFILL }},
9529 { &hf_tetra_frame7,
9530 { "frame7", "tetra.frame7",
9531 FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
9532 "FRAME", HFILL }},
9533 { &hf_tetra_frame8,
9534 { "frame8", "tetra.frame8",
9535 FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
9536 "FRAME", HFILL }},
9537 { &hf_tetra_frame9,
9538 { "frame9", "tetra.frame9",
9539 FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
9540 "FRAME", HFILL }},
9541 { &hf_tetra_frame10,
9542 { "frame10", "tetra.frame10",
9543 FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
9544 "FRAME", HFILL }},
9545 { &hf_tetra_frame11,
9546 { "frame11", "tetra.frame11",
9547 FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
9548 "FRAME", HFILL }},
9549 { &hf_tetra_frame12,
9550 { "frame12", "tetra.frame12",
9551 FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
9552 "FRAME", HFILL }},
9553 { &hf_tetra_frame13,
9554 { "frame13", "tetra.frame13",
9555 FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
9556 "FRAME", HFILL }},
9557 { &hf_tetra_frame14,
9558 { "frame14", "tetra.frame14",
9559 FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
9560 "FRAME", HFILL }},
9561 { &hf_tetra_frame15,
9562 { "frame15", "tetra.frame15",
9563 FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
9564 "FRAME", HFILL }},
9565 { &hf_tetra_frame16,
9566 { "frame16", "tetra.frame16",
9567 FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
9568 "FRAME", HFILL }},
9569 { &hf_tetra_frame17,
9570 { "frame17", "tetra.frame17",
9571 FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
9572 "FRAME", HFILL }},
9573 { &hf_tetra_frame18,
9574 { "frame18", "tetra.frame18",
9575 FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
9576 "FRAME", HFILL }},
9577 { &hf_tetra_imm,
9578 { "imm", "tetra.imm",
9579 FT_UINT32, BASE_DEC, VALS(tetra_IMM_vals), 0,
9580 NULL, HFILL }},
9581 { &hf_tetra_wt,
9582 { "wt", "tetra.wt",
9583 FT_UINT32, BASE_DEC, VALS(tetra_WT_vals), 0,
9584 NULL, HFILL }},
9585 { &hf_tetra_nu,
9586 { "nu", "tetra.nu",
9587 FT_UINT32, BASE_DEC, VALS(tetra_NU_vals), 0,
9588 NULL, HFILL }},
9589 { &hf_tetra_frame_len_factor,
9590 { "frame-len-factor", "tetra.frame_len_factor",
9591 FT_UINT32, BASE_DEC, VALS(tetra_Frame_Len_Factor_vals), 0,
9592 NULL, HFILL }},
9593 { &hf_tetra_timeslot_pointer,
9594 { "timeslot-pointer", "tetra.timeslot_pointer",
9595 FT_UINT32, BASE_DEC, VALS(tetra_Timeslot_Pointer_vals), 0,
9596 NULL, HFILL }},
9597 { &hf_tetra_min_pdu_priority,
9598 { "min-pdu-priority", "tetra.min_pdu_priority",
9599 FT_UINT32, BASE_DEC, VALS(tetra_Min_Pdu_Priority_vals), 0,
9600 NULL, HFILL }},
9601 { &hf_tetra_security_information,
9602 { "security-information", "tetra.security_information",
9603 FT_UINT32, BASE_DEC, NULL, 0,
9604 "INTEGER_0_255", HFILL }},
9605 { &hf_tetra_sds_tl_addressing_method,
9606 { "sds-tl-addressing-method", "tetra.sds_tl_addressing_method",
9607 FT_UINT32, BASE_DEC, VALS(tetra_SDS_TL_Addressing_Method_vals), 0,
9608 NULL, HFILL }},
9609 { &hf_tetra_gck_supported,
9610 { "gck-supported", "tetra.gck_supported",
9611 FT_UINT32, BASE_DEC, NULL, 0,
9612 "INTEGER_0_1", HFILL }},
9613 { &hf_tetra_section,
9614 { "section", "tetra.section",
9615 FT_UINT32, BASE_DEC, VALS(tetra_T_section_vals), 0,
9616 NULL, HFILL }},
9617 { &hf_tetra_present_1,
9618 { "present-1", "tetra.present_1_element",
9619 FT_NONE, BASE_NONE, NULL, 0,
9620 "PRESENT1", HFILL }},
9621 { &hf_tetra_present_2,
9622 { "present-2", "tetra.present_2",
9623 FT_UINT32, BASE_DEC, NULL, 0,
9624 "INTEGER_0_127", HFILL }},
9625 { &hf_tetra_present_3,
9626 { "present-3", "tetra.present_3",
9627 FT_UINT32, BASE_DEC, NULL, 0,
9628 "INTEGER_0_127", HFILL }},
9629 { &hf_tetra_present_4,
9630 { "present-4", "tetra.present_4",
9631 FT_UINT32, BASE_DEC, NULL, 0,
9632 "INTEGER_0_127", HFILL }},
9633 { &hf_tetra_data_priority_supported,
9634 { "data-priority-supported", "tetra.data_priority_supported",
9635 FT_UINT32, BASE_DEC, VALS(tetra_Data_Priority_Supported_vals), 0,
9636 NULL, HFILL }},
9637 { &hf_tetra_reserved_02,
9638 { "reserved", "tetra.reserved",
9639 FT_UINT32, BASE_DEC, NULL, 0,
9640 "INTEGER_0_7", HFILL }},
9641 { &hf_tetra_section_2_information,
9642 { "section-2-information", "tetra.section_2_information",
9643 FT_UINT32, BASE_DEC, VALS(tetra_Section_Information_vals), 0,
9644 "Section_Information", HFILL }},
9645 { &hf_tetra_section_3_information,
9646 { "section-3-information", "tetra.section_3_information",
9647 FT_UINT32, BASE_DEC, VALS(tetra_Section_Information_vals), 0,
9648 "Section_Information", HFILL }},
9649 { &hf_tetra_section_4_information,
9650 { "section-4-information", "tetra.section_4_information",
9651 FT_UINT32, BASE_DEC, VALS(tetra_Section_Information_vals), 0,
9652 "Section_Information", HFILL }},
9653 { &hf_tetra_pdu_type_01,
9654 { "pdu-type", "tetra.pdu_type",
9655 FT_UINT32, BASE_DEC, NULL, 0,
9656 "INTEGER_0_1", HFILL }},
9657 { &hf_tetra_fill_bit_indication,
9658 { "fill-bit-indication", "tetra.fill_bit_indication",
9659 FT_UINT32, BASE_DEC, VALS(tetra_Fill_Bit_Indication_vals), 0,
9660 NULL, HFILL }},
9661 { &hf_tetra_encrypted_flag,
9662 { "encrypted-flag", "tetra.encrypted_flag",
9663 FT_UINT32, BASE_DEC, VALS(tetra_Encrypted_Flag_vals), 0,
9664 NULL, HFILL }},
9665 { &hf_tetra_address,
9666 { "address", "tetra.address",
9667 FT_UINT32, BASE_DEC, VALS(tetra_Address_vals), 0,
9668 NULL, HFILL }},
9669 { &hf_tetra_data,
9670 { "data", "tetra.data",
9671 FT_UINT32, BASE_DEC, VALS(tetra_T_data_vals), 0,
9672 NULL, HFILL }},
9673 { &hf_tetra_sdu1,
9674 { "sdu1", "tetra.sdu1",
9675 FT_UINT32, BASE_DEC, VALS(tetra_U_LLC_PDU_vals), 0,
9676 "U_LLC_PDU", HFILL }},
9677 { &hf_tetra_sdu2,
9678 { "sdu2", "tetra.sdu2_element",
9679 FT_NONE, BASE_NONE, NULL, 0,
9680 "ComplexSDU", HFILL }},
9681 { &hf_tetra_ssi,
9682 { "ssi", "tetra.ssi",
9683 FT_UINT32, BASE_DEC, NULL, 0,
9684 "INTEGER_0_16777215", HFILL }},
9685 { &hf_tetra_eventLabel,
9686 { "eventLabel", "tetra.eventLabel",
9687 FT_UINT32, BASE_DEC, NULL, 0,
9688 "INTEGER_0_1023", HFILL }},
9689 { &hf_tetra_ussi,
9690 { "ussi", "tetra.ussi",
9691 FT_UINT32, BASE_DEC, NULL, 0,
9692 "INTEGER_0_16777215", HFILL }},
9693 { &hf_tetra_smi,
9694 { "smi", "tetra.smi",
9695 FT_UINT32, BASE_DEC, NULL, 0,
9696 "INTEGER_0_16777215", HFILL }},
9697 { &hf_tetra_bl_adata,
9698 { "bl-adata", "tetra.bl_adata_element",
9699 FT_NONE, BASE_NONE, NULL, 0,
9700 "U_BL_ADATA", HFILL }},
9701 { &hf_tetra_bl_data,
9702 { "bl-data", "tetra.bl_data_element",
9703 FT_NONE, BASE_NONE, NULL, 0,
9704 "U_BL_DATA", HFILL }},
9705 { &hf_tetra_bl_udata,
9706 { "bl-udata", "tetra.bl_udata",
9707 FT_UINT32, BASE_DEC, VALS(tetra_U_MLE_PDU_vals), 0,
9708 "U_MLE_PDU", HFILL }},
9709 { &hf_tetra_bl_ack,
9710 { "bl-ack", "tetra.bl_ack_element",
9711 FT_NONE, BASE_NONE, NULL, 0,
9712 "U_BL_ACK", HFILL }},
9713 { &hf_tetra_bl_adata_fcs,
9714 { "bl-adata-fcs", "tetra.bl_adata_fcs_element",
9715 FT_NONE, BASE_NONE, NULL, 0,
9716 "U_BL_ADATA_FCS", HFILL }},
9717 { &hf_tetra_bl_data_fcs,
9718 { "bl-data-fcs", "tetra.bl_data_fcs_element",
9719 FT_NONE, BASE_NONE, NULL, 0,
9720 "U_BL_DATA_FCS", HFILL }},
9721 { &hf_tetra_bl_udata_fcs,
9722 { "bl-udata-fcs", "tetra.bl_udata_fcs_element",
9723 FT_NONE, BASE_NONE, NULL, 0,
9724 "U_MLE_PDU_FCS", HFILL }},
9725 { &hf_tetra_bl_ack_fcs,
9726 { "bl-ack-fcs", "tetra.bl_ack_fcs_element",
9727 FT_NONE, BASE_NONE, NULL, 0,
9728 "U_BL_ACK_FCS", HFILL }},
9729 { &hf_tetra_al_setup,
9730 { "al-setup", "tetra.al_setup_element",
9731 FT_NONE, BASE_NONE, NULL, 0,
9732 NULL, HFILL }},
9733 { &hf_tetra_al_data,
9734 { "al-data", "tetra.al_data_element",
9735 FT_NONE, BASE_NONE, NULL, 0,
9736 NULL, HFILL }},
9737 { &hf_tetra_al_udata,
9738 { "al-udata", "tetra.al_udata_element",
9739 FT_NONE, BASE_NONE, NULL, 0,
9740 NULL, HFILL }},
9741 { &hf_tetra_al_ack,
9742 { "al-ack", "tetra.al_ack_element",
9743 FT_NONE, BASE_NONE, NULL, 0,
9744 NULL, HFILL }},
9745 { &hf_tetra_al_reconnect,
9746 { "al-reconnect", "tetra.al_reconnect_element",
9747 FT_NONE, BASE_NONE, NULL, 0,
9748 NULL, HFILL }},
9749 { &hf_tetra_reserve1,
9750 { "reserve1", "tetra.reserve1_element",
9751 FT_NONE, BASE_NONE, NULL, 0,
9752 NULL, HFILL }},
9753 { &hf_tetra_reserve2,
9754 { "reserve2", "tetra.reserve2_element",
9755 FT_NONE, BASE_NONE, NULL, 0,
9756 NULL, HFILL }},
9757 { &hf_tetra_al_disc,
9758 { "al-disc", "tetra.al_disc_element",
9759 FT_NONE, BASE_NONE, NULL, 0,
9760 NULL, HFILL }},
9761 { &hf_tetra_nr,
9762 { "nr", "tetra.nr",
9763 FT_UINT32, BASE_DEC, NULL, 0,
9764 "INTEGER_0_1", HFILL }},
9765 { &hf_tetra_tl_sdu,
9766 { "tl-sdu", "tetra.tl_sdu",
9767 FT_UINT32, BASE_DEC, VALS(tetra_U_MLE_PDU_vals), 0,
9768 "U_MLE_PDU", HFILL }},
9769 { &hf_tetra_fcs,
9770 { "fcs", "tetra.fcs",
9771 FT_BYTES, BASE_NONE, NULL, 0,
9772 "OCTET_STRING_SIZE_4", HFILL }},
9773 { &hf_tetra_u_mle_pdu,
9774 { "u-mle-pdu", "tetra.u_mle_pdu",
9775 FT_UINT32, BASE_DEC, VALS(tetra_U_MLE_PDU_vals), 0,
9776 NULL, HFILL }},
9777 { &hf_tetra_ns,
9778 { "ns", "tetra.ns",
9779 FT_UINT32, BASE_DEC, NULL, 0,
9780 "INTEGER_0_1", HFILL }},
9781 { &hf_tetra_u_mle_reserved1,
9782 { "u-mle-reserved1", "tetra.u_mle_reserved1_element",
9783 FT_NONE, BASE_NONE, NULL, 0,
9784 NULL, HFILL }},
9785 { &hf_tetra_mm,
9786 { "mm", "tetra.mm",
9787 FT_UINT32, BASE_DEC, VALS(tetra_U_MM_PDU_vals), 0,
9788 "U_MM_PDU", HFILL }},
9789 { &hf_tetra_cmce,
9790 { "cmce", "tetra.cmce",
9791 FT_UINT32, BASE_DEC, VALS(tetra_U_CMCE_PDU_vals), 0,
9792 "U_CMCE_PDU", HFILL }},
9793 { &hf_tetra_u_mle_reserved2,
9794 { "u-mle-reserved2", "tetra.u_mle_reserved2_element",
9795 FT_NONE, BASE_NONE, NULL, 0,
9796 NULL, HFILL }},
9797 { &hf_tetra_sndcp,
9798 { "sndcp", "tetra.sndcp_element",
9799 FT_NONE, BASE_NONE, NULL, 0,
9800 NULL, HFILL }},
9801 { &hf_tetra_mle,
9802 { "mle", "tetra.mle",
9803 FT_UINT32, BASE_DEC, VALS(tetra_UMLE_PDU_vals), 0,
9804 "UMLE_PDU", HFILL }},
9805 { &hf_tetra_tetra_management_entity_protocol,
9806 { "tetra-management-entity-protocol", "tetra.tetra_management_entity_protocol_element",
9807 FT_NONE, BASE_NONE, NULL, 0,
9808 NULL, HFILL }},
9809 { &hf_tetra_u_mle_reserved3,
9810 { "u-mle-reserved3", "tetra.u_mle_reserved3_element",
9811 FT_NONE, BASE_NONE, NULL, 0,
9812 NULL, HFILL }},
9813 { &hf_tetra_lengthIndicationOrCapacityRequest,
9814 { "lengthIndicationOrCapacityRequest", "tetra.lengthIndicationOrCapacityRequest",
9815 FT_UINT32, BASE_DEC, VALS(tetra_T_lengthIndicationOrCapacityRequest_vals), 0,
9816 NULL, HFILL }},
9817 { &hf_tetra_lengthIndication,
9818 { "lengthIndication", "tetra.lengthIndication",
9819 FT_UINT32, BASE_DEC, VALS(tetra_LengthIndication_vals), 0,
9820 NULL, HFILL }},
9821 { &hf_tetra_capacityRequest,
9822 { "capacityRequest", "tetra.capacityRequest_element",
9823 FT_NONE, BASE_NONE, NULL, 0,
9824 "FRAG", HFILL }},
9825 { &hf_tetra_tm_sdu_01,
9826 { "tm-sdu", "tetra.tm_sdu",
9827 FT_UINT32, BASE_DEC, VALS(tetra_U_LLC_PDU_vals), 0,
9828 "U_LLC_PDU", HFILL }},
9829 { &hf_tetra_frag,
9830 { "frag", "tetra.frag",
9831 FT_UINT32, BASE_DEC, VALS(tetra_Frag1_vals), 0,
9832 "Frag1", HFILL }},
9833 { &hf_tetra_reservation_requirement,
9834 { "reservation-requirement", "tetra.reservation_requirement",
9835 FT_UINT32, BASE_DEC, VALS(tetra_SLOT_APPLY_vals), 0,
9836 "SLOT_APPLY", HFILL }},
9837 { &hf_tetra_lengthIndicationOrCapacityRequest_01,
9838 { "lengthIndicationOrCapacityRequest", "tetra.lengthIndicationOrCapacityRequest",
9839 FT_UINT32, BASE_DEC, VALS(tetra_T_lengthIndicationOrCapacityRequest_01_vals), 0,
9840 "T_lengthIndicationOrCapacityRequest_01", HFILL }},
9841 { &hf_tetra_lengthIndication_01,
9842 { "lengthIndication", "tetra.lengthIndication",
9843 FT_UINT32, BASE_DEC, VALS(tetra_LengthIndicationMacData_vals), 0,
9844 "LengthIndicationMacData", HFILL }},
9845 { &hf_tetra_capacityRequest_01,
9846 { "capacityRequest", "tetra.capacityRequest_element",
9847 FT_NONE, BASE_NONE, NULL, 0,
9848 "FRAG6", HFILL }},
9849 { &hf_tetra_sub_type,
9850 { "sub-type", "tetra.sub_type",
9851 FT_UINT32, BASE_DEC, NULL, 0,
9852 "INTEGER_0_1", HFILL }},
9853 { &hf_tetra_tm_sdu_02,
9854 { "tm-sdu", "tetra.tm_sdu",
9855 FT_BYTES, BASE_NONE, NULL, 0,
9856 "BIT_STRING_SIZE_264", HFILL }},
9857 { &hf_tetra_tm_sdu_03,
9858 { "tm-sdu", "tetra.tm_sdu",
9859 FT_BYTES, BASE_NONE, NULL, 0,
9860 "BIT_STRING_SIZE_120", HFILL }},
9861 { &hf_tetra_lengthInd_ReservationReq,
9862 { "lengthInd-ReservationReq", "tetra.lengthInd_ReservationReq",
9863 FT_UINT32, BASE_DEC, VALS(tetra_LengthIndOrReservationReq_vals), 0,
9864 "LengthIndOrReservationReq", HFILL }},
9865 { &hf_tetra_tm_sdu_04,
9866 { "tm-sdu", "tetra.tm_sdu",
9867 FT_BYTES, BASE_NONE, NULL, 0,
9868 "BIT_STRING_SIZE_258", HFILL }},
9869 { &hf_tetra_pdu_subtype,
9870 { "pdu-subtype", "tetra.pdu_subtype",
9871 FT_UINT32, BASE_DEC, NULL, 0,
9872 "INTEGER_0_1", HFILL }},
9873 { &hf_tetra_tm_sdu_05,
9874 { "tm-sdu", "tetra.tm_sdu",
9875 FT_BYTES, BASE_NONE, NULL, 0,
9876 "BIT_STRING_SIZE_114", HFILL }},
9877 { &hf_tetra_lengthInd_ReservationReq_01,
9878 { "lengthInd-ReservationReq", "tetra.lengthInd_ReservationReq",
9879 FT_UINT32, BASE_DEC, VALS(tetra_T_lengthInd_ReservationReq_vals), 0,
9880 NULL, HFILL }},
9881 { &hf_tetra_lengthInd,
9882 { "lengthInd", "tetra.lengthInd",
9883 FT_UINT32, BASE_DEC, VALS(tetra_LengthIndMacHu_vals), 0,
9884 "LengthIndMacHu", HFILL }},
9885 { &hf_tetra_tm_sdu_06,
9886 { "tm-sdu", "tetra.tm_sdu",
9887 FT_BYTES, BASE_NONE, NULL, 0,
9888 "BIT_STRING_SIZE_85", HFILL }},
9889 { &hf_tetra_position_of_grant,
9890 { "position-of-grant", "tetra.position_of_grant",
9891 FT_UINT32, BASE_DEC, VALS(tetra_Position_Of_Grant_vals), 0,
9892 NULL, HFILL }},
9893 { &hf_tetra_lengthIndication_02,
9894 { "lengthIndication", "tetra.lengthIndication",
9895 FT_UINT32, BASE_DEC, VALS(tetra_LengthIndicationMacEndDl_vals), 0,
9896 "LengthIndicationMacEndDl", HFILL }},
9897 { &hf_tetra_slot_granting,
9898 { "slot-granting", "tetra.slot_granting",
9899 FT_UINT32, BASE_DEC, VALS(tetra_T_slot_granting_vals), 0,
9900 "T_slot_granting", HFILL }},
9901 { &hf_tetra_none,
9902 { "none", "tetra.none_element",
9903 FT_NONE, BASE_NONE, NULL, 0,
9904 NULL, HFILL }},
9905 { &hf_tetra_slot_granting_param,
9906 { "slot-granting-param", "tetra.slot_granting_param_element",
9907 FT_NONE, BASE_NONE, NULL, 0,
9908 "SlotGranting", HFILL }},
9909 { &hf_tetra_channel_allocation,
9910 { "channel-allocation", "tetra.channel_allocation",
9911 FT_UINT32, BASE_DEC, VALS(tetra_T_channel_allocation_vals), 0,
9912 NULL, HFILL }},
9913 { &hf_tetra_channel_allocation_element,
9914 { "channel-allocation-element", "tetra.channel_allocation_element_element",
9915 FT_NONE, BASE_NONE, NULL, 0,
9916 "ChannelAllocation", HFILL }},
9917 { &hf_tetra_tm_sdu_07,
9918 { "tm-sdu", "tetra.tm_sdu",
9919 FT_BYTES, BASE_NONE, NULL, 0,
9920 "BIT_STRING_SIZE_255", HFILL }},
9921 { &hf_tetra_capacity_allocation,
9922 { "capacity-allocation", "tetra.capacity_allocation",
9923 FT_UINT32, BASE_DEC, VALS(tetra_Capacity_Allocation_vals), 0,
9924 NULL, HFILL }},
9925 { &hf_tetra_granting_delay,
9926 { "granting-delay", "tetra.granting_delay",
9927 FT_UINT32, BASE_DEC, VALS(tetra_Granting_delay_vals), 0,
9928 NULL, HFILL }},
9929 { &hf_tetra_allocation_type,
9930 { "allocation-type", "tetra.allocation_type",
9931 FT_UINT32, BASE_DEC, VALS(tetra_T_allocation_type_vals), 0,
9932 NULL, HFILL }},
9933 { &hf_tetra_timeslot_assigned,
9934 { "timeslot-assigned", "tetra.timeslot_assigned",
9935 FT_UINT32, BASE_DEC, VALS(tetra_Timeslot_Assigned_vals), 0,
9936 NULL, HFILL }},
9937 { &hf_tetra_up_down_assigned,
9938 { "up-down-assigned", "tetra.up_down_assigned",
9939 FT_UINT32, BASE_DEC, VALS(tetra_T_up_down_assigned_vals), 0,
9940 NULL, HFILL }},
9941 { &hf_tetra_clch_permission,
9942 { "clch-permission", "tetra.clch_permission",
9943 FT_UINT32, BASE_DEC, VALS(tetra_CLCH_permission_vals), 0,
9944 NULL, HFILL }},
9945 { &hf_tetra_cell_change,
9946 { "cell-change", "tetra.cell_change",
9947 FT_UINT32, BASE_DEC, VALS(tetra_Cell_change_flag_vals), 0,
9948 "Cell_change_flag", HFILL }},
9949 { &hf_tetra_carrier_number,
9950 { "carrier-number", "tetra.carrier_number",
9951 FT_UINT32, BASE_DEC, NULL, 0,
9952 "INTEGER_0_4095", HFILL }},
9953 { &hf_tetra_extend_carrier_flag,
9954 { "extend-carrier-flag", "tetra.extend_carrier_flag",
9955 FT_UINT32, BASE_DEC, VALS(tetra_T_extend_carrier_flag_vals), 0,
9956 NULL, HFILL }},
9957 { &hf_tetra_extended,
9958 { "extended", "tetra.extended_element",
9959 FT_NONE, BASE_NONE, NULL, 0,
9960 "Extended_carrier_flag", HFILL }},
9961 { &hf_tetra_monitoring_pattern,
9962 { "monitoring-pattern", "tetra.monitoring_pattern",
9963 FT_UINT32, BASE_DEC, VALS(tetra_T_monitoring_pattern_vals), 0,
9964 NULL, HFILL }},
9965 { &hf_tetra_one,
9966 { "one", "tetra.one",
9967 FT_UINT32, BASE_DEC, VALS(tetra_Monitoring_pattern_vals), 0,
9968 "Monitoring_pattern", HFILL }},
9969 { &hf_tetra_none1,
9970 { "none1", "tetra.none1_element",
9971 FT_NONE, BASE_NONE, NULL, 0,
9972 NULL, HFILL }},
9973 { &hf_tetra_none2,
9974 { "none2", "tetra.none2_element",
9975 FT_NONE, BASE_NONE, NULL, 0,
9976 NULL, HFILL }},
9977 { &hf_tetra_none3,
9978 { "none3", "tetra.none3_element",
9979 FT_NONE, BASE_NONE, NULL, 0,
9980 NULL, HFILL }},
9981 { &hf_tetra_offset_01,
9982 { "offset", "tetra.offset",
9983 FT_UINT32, BASE_DEC, NULL, 0,
9984 "INTEGER_0_3", HFILL }},
9985 { &hf_tetra_reverse_operation_01,
9986 { "reverse-operation", "tetra.reverse_operation",
9987 FT_UINT32, BASE_DEC, VALS(tetra_T_reverse_operation_vals), 0,
9988 NULL, HFILL }},
9989 { &hf_tetra_pdu_type_02,
9990 { "pdu-type", "tetra.pdu_type",
9991 FT_UINT32, BASE_DEC, NULL, 0,
9992 "INTEGER_0_7", HFILL }},
9993 { &hf_tetra_fill_bit_ind,
9994 { "fill-bit-ind", "tetra.fill_bit_ind",
9995 FT_BOOLEAN, BASE_NONE, NULL, 0,
9996 "BOOLEAN", HFILL }},
9997 { &hf_tetra_position_of_grant_01,
9998 { "position-of-grant", "tetra.position_of_grant",
9999 FT_UINT32, BASE_DEC, NULL, 0,
10000 "INTEGER_0_1", HFILL }},
10001 { &hf_tetra_slot_granting_01,
10002 { "slot-granting", "tetra.slot_granting",
10003 FT_UINT32, BASE_DEC, VALS(tetra_T_slot_granting_01_vals), 0,
10004 "T_slot_granting_01", HFILL }},
10005 { &hf_tetra_channel_allocation_01,
10006 { "channel-allocation", "tetra.channel_allocation",
10007 FT_UINT32, BASE_DEC, VALS(tetra_T_channel_allocation_01_vals), 0,
10008 "T_channel_allocation_01", HFILL }},
10009 { &hf_tetra_tm_sdu_08,
10010 { "tm-sdu", "tetra.tm_sdu",
10011 FT_BYTES, BASE_NONE, NULL, 0,
10012 "BIT_STRING_SIZE_111", HFILL }},
10013 { &hf_tetra_encryption_mode,
10014 { "encryption-mode", "tetra.encryption_mode",
10015 FT_UINT32, BASE_DEC, NULL, 0,
10016 "INTEGER_0_3", HFILL }},
10017 { &hf_tetra_access_ack,
10018 { "access-ack", "tetra.access_ack",
10019 FT_UINT32, BASE_DEC, VALS(tetra_T_access_ack_vals), 0,
10020 NULL, HFILL }},
10021 { &hf_tetra_lengthIndication_03,
10022 { "lengthIndication", "tetra.lengthIndication",
10023 FT_UINT32, BASE_DEC, VALS(tetra_LengthIndicationMacResource_vals), 0,
10024 "LengthIndicationMacResource", HFILL }},
10025 { &hf_tetra_address_01,
10026 { "address", "tetra.address",
10027 FT_UINT32, BASE_DEC, VALS(tetra_AddressMacResource_vals), 0,
10028 "AddressMacResource", HFILL }},
10029 { &hf_tetra_power_control,
10030 { "power-control", "tetra.power_control",
10031 FT_UINT32, BASE_DEC, VALS(tetra_T_power_control_vals), 0,
10032 NULL, HFILL }},
10033 { &hf_tetra_powerParameters,
10034 { "powerParameters", "tetra.powerParameters",
10035 FT_UINT32, BASE_DEC, VALS(tetra_PowerControl_vals), 0,
10036 "PowerControl", HFILL }},
10037 { &hf_tetra_slot_granting_02,
10038 { "slot-granting", "tetra.slot_granting",
10039 FT_UINT32, BASE_DEC, VALS(tetra_T_slot_granting_02_vals), 0,
10040 "T_slot_granting_02", HFILL }},
10041 { &hf_tetra_channel_allocation_02,
10042 { "channel-allocation", "tetra.channel_allocation",
10043 FT_UINT32, BASE_DEC, VALS(tetra_T_channel_allocation_02_vals), 0,
10044 "T_channel_allocation_02", HFILL }},
10045 { &hf_tetra_tm_sdu_09,
10046 { "tm-sdu", "tetra.tm_sdu",
10047 FT_UINT32, BASE_DEC, VALS(tetra_D_LLC_PDU_vals), 0,
10048 "D_LLC_PDU", HFILL }},
10049 { &hf_tetra_null_pdu,
10050 { "null-pdu", "tetra.null_pdu_element",
10051 FT_NONE, BASE_NONE, NULL, 0,
10052 NULL, HFILL }},
10053 { &hf_tetra_ssi_01,
10054 { "ssi", "tetra.ssi_element",
10055 FT_NONE, BASE_NONE, NULL, 0,
10056 "SSI_NEED", HFILL }},
10057 { &hf_tetra_eventLabel_01,
10058 { "eventLabel", "tetra.eventLabel_element",
10059 FT_NONE, BASE_NONE, NULL, 0,
10060 "EVENT_NEED", HFILL }},
10061 { &hf_tetra_ussi_01,
10062 { "ussi", "tetra.ussi_element",
10063 FT_NONE, BASE_NONE, NULL, 0,
10064 "USSI_NEED", HFILL }},
10065 { &hf_tetra_smi_01,
10066 { "smi", "tetra.smi_element",
10067 FT_NONE, BASE_NONE, NULL, 0,
10068 "SMI_NEED", HFILL }},
10069 { &hf_tetra_ssi_eventLabel,
10070 { "ssi-eventLabel", "tetra.ssi_eventLabel_element",
10071 FT_NONE, BASE_NONE, NULL, 0,
10072 "SSI_EVENT_NEED", HFILL }},
10073 { &hf_tetra_ssi_usage_maker,
10074 { "ssi-usage-maker", "tetra.ssi_usage_maker_element",
10075 FT_NONE, BASE_NONE, NULL, 0,
10076 "SSI_USAGE_NEED", HFILL }},
10077 { &hf_tetra_smi_eventLabel,
10078 { "smi-eventLabel", "tetra.smi_eventLabel_element",
10079 FT_NONE, BASE_NONE, NULL, 0,
10080 "SMI_EVENT_NEED", HFILL }},
10081 { &hf_tetra_other,
10082 { "other", "tetra.other_element",
10083 FT_NONE, BASE_NONE, NULL, 0,
10084 "OTHER_DATA", HFILL }},
10085 { &hf_tetra_eventlabel,
10086 { "eventlabel", "tetra.eventlabel",
10087 FT_UINT32, BASE_DEC, NULL, 0,
10088 "INTEGER_0_1023", HFILL }},
10089 { &hf_tetra_ventlabel,
10090 { "ventlabel", "tetra.ventlabel",
10091 FT_UINT32, BASE_DEC, NULL, 0,
10092 "INTEGER_0_1023", HFILL }},
10093 { &hf_tetra_usage_maker,
10094 { "usage-maker", "tetra.usage_maker",
10095 FT_UINT32, BASE_DEC, NULL, 0,
10096 "INTEGER_0_63", HFILL }},
10097 { &hf_tetra_smi_eventlabel,
10098 { "smi-eventlabel", "tetra.smi_eventlabel",
10099 FT_BYTES, BASE_NONE, NULL, 0,
10100 "BIT_STRING_SIZE_34", HFILL }},
10101 { &hf_tetra_broadcast_channel,
10102 { "broadcast-channel", "tetra.broadcast_channel",
10103 FT_UINT32, BASE_DEC, NULL, 0,
10104 "INTEGER_0_1", HFILL }},
10105 { &hf_tetra_access_code,
10106 { "access-code", "tetra.access_code",
10107 FT_UINT32, BASE_DEC, NULL, 0,
10108 "INTEGER_0_3", HFILL }},
10109 { &hf_tetra_imm_01,
10110 { "imm", "tetra.imm",
10111 FT_UINT32, BASE_DEC, NULL, 0,
10112 "INTEGER_0_15", HFILL }},
10113 { &hf_tetra_wt_01,
10114 { "wt", "tetra.wt",
10115 FT_UINT32, BASE_DEC, NULL, 0,
10116 "INTEGER_0_15", HFILL }},
10117 { &hf_tetra_nu_01,
10118 { "nu", "tetra.nu",
10119 FT_UINT32, BASE_DEC, NULL, 0,
10120 "INTEGER_0_15", HFILL }},
10121 { &hf_tetra_frame_len_factor_01,
10122 { "frame-len-factor", "tetra.frame_len_factor",
10123 FT_UINT32, BASE_DEC, NULL, 0,
10124 "INTEGER_0_1", HFILL }},
10125 { &hf_tetra_timeslot_pointer_01,
10126 { "timeslot-pointer", "tetra.timeslot_pointer",
10127 FT_UINT32, BASE_DEC, NULL, 0,
10128 "INTEGER_0_15", HFILL }},
10129 { &hf_tetra_min_priority,
10130 { "min-priority", "tetra.min_priority",
10131 FT_UINT32, BASE_DEC, NULL, 0,
10132 "INTEGER_0_7", HFILL }},
10133 { &hf_tetra_optional_field,
10134 { "optional-field", "tetra.optional_field",
10135 FT_UINT32, BASE_DEC, VALS(tetra_T_optional_field_vals), 0,
10136 NULL, HFILL }},
10137 { &hf_tetra_class_bitmap,
10138 { "class-bitmap", "tetra.class_bitmap",
10139 FT_UINT32, BASE_DEC, NULL, 0,
10140 "INTEGER_0_65535", HFILL }},
10141 { &hf_tetra_gssi,
10142 { "gssi", "tetra.gssi",
10143 FT_UINT32, BASE_DEC, NULL, 0,
10144 "INTEGER_0_33554431", HFILL }},
10145 { &hf_tetra_reserved_03,
10146 { "reserved", "tetra.reserved_element",
10147 FT_NONE, BASE_NONE, NULL, 0,
10148 NULL, HFILL }},
10149 { &hf_tetra_filler_bits,
10150 { "filler-bits", "tetra.filler_bits",
10151 FT_UINT32, BASE_DEC, NULL, 0,
10152 "INTEGER_0_7", HFILL }},
10153 { &hf_tetra_bl_adata_01,
10154 { "bl-adata", "tetra.bl_adata_element",
10155 FT_NONE, BASE_NONE, NULL, 0,
10156 "D_BL_ADATA", HFILL }},
10157 { &hf_tetra_bl_data_01,
10158 { "bl-data", "tetra.bl_data_element",
10159 FT_NONE, BASE_NONE, NULL, 0,
10160 "D_BL_DATA", HFILL }},
10161 { &hf_tetra_bl_udata_01,
10162 { "bl-udata", "tetra.bl_udata",
10163 FT_UINT32, BASE_DEC, VALS(tetra_D_MLE_PDU_vals), 0,
10164 "D_MLE_PDU", HFILL }},
10165 { &hf_tetra_bl_ack_01,
10166 { "bl-ack", "tetra.bl_ack_element",
10167 FT_NONE, BASE_NONE, NULL, 0,
10168 "D_BL_ACK", HFILL }},
10169 { &hf_tetra_bl_adata_fcs_01,
10170 { "bl-adata-fcs", "tetra.bl_adata_fcs_element",
10171 FT_NONE, BASE_NONE, NULL, 0,
10172 "D_BL_ADATA_FCS", HFILL }},
10173 { &hf_tetra_bl_data_fcs_01,
10174 { "bl-data-fcs", "tetra.bl_data_fcs_element",
10175 FT_NONE, BASE_NONE, NULL, 0,
10176 "D_BL_DATA_FCS", HFILL }},
10177 { &hf_tetra_bl_udata_fcs_01,
10178 { "bl-udata-fcs", "tetra.bl_udata_fcs_element",
10179 FT_NONE, BASE_NONE, NULL, 0,
10180 "D_MLE_PDU_FCS", HFILL }},
10181 { &hf_tetra_bl_ack_fcs_01,
10182 { "bl-ack-fcs", "tetra.bl_ack_fcs_element",
10183 FT_NONE, BASE_NONE, NULL, 0,
10184 "D_BL_ACK_FCS", HFILL }},
10185 { &hf_tetra_tl_sdu_01,
10186 { "tl-sdu", "tetra.tl_sdu",
10187 FT_UINT32, BASE_DEC, VALS(tetra_D_MLE_PDU_vals), 0,
10188 "D_MLE_PDU", HFILL }},
10189 { &hf_tetra_d_mle_pdu,
10190 { "d-mle-pdu", "tetra.d_mle_pdu",
10191 FT_UINT32, BASE_DEC, VALS(tetra_D_MLE_PDU_vals), 0,
10192 NULL, HFILL }},
10193 { &hf_tetra_mm_01,
10194 { "mm", "tetra.mm",
10195 FT_UINT32, BASE_DEC, VALS(tetra_D_MM_PDU_vals), 0,
10196 "D_MM_PDU", HFILL }},
10197 { &hf_tetra_cmce_01,
10198 { "cmce", "tetra.cmce",
10199 FT_UINT32, BASE_DEC, VALS(tetra_D_CMCE_PDU_vals), 0,
10200 "D_CMCE_PDU", HFILL }},
10201 { &hf_tetra_mle_01,
10202 { "mle", "tetra.mle",
10203 FT_UINT32, BASE_DEC, VALS(tetra_DMLE_PDU_vals), 0,
10204 "DMLE_PDU", HFILL }},
10205 { &hf_tetra_u_prepare,
10206 { "u-prepare", "tetra.u_prepare_element",
10207 FT_NONE, BASE_NONE, NULL, 0,
10208 NULL, HFILL }},
10209 { &hf_tetra_umle_reserved1,
10210 { "umle-reserved1", "tetra.umle_reserved1_element",
10211 FT_NONE, BASE_NONE, NULL, 0,
10212 NULL, HFILL }},
10213 { &hf_tetra_umle_reserved2,
10214 { "umle-reserved2", "tetra.umle_reserved2_element",
10215 FT_NONE, BASE_NONE, NULL, 0,
10216 NULL, HFILL }},
10217 { &hf_tetra_umle_reserved3,
10218 { "umle-reserved3", "tetra.umle_reserved3_element",
10219 FT_NONE, BASE_NONE, NULL, 0,
10220 NULL, HFILL }},
10221 { &hf_tetra_u_restore,
10222 { "u-restore", "tetra.u_restore_element",
10223 FT_NONE, BASE_NONE, NULL, 0,
10224 NULL, HFILL }},
10225 { &hf_tetra_umle_reserved4,
10226 { "umle-reserved4", "tetra.umle_reserved4_element",
10227 FT_NONE, BASE_NONE, NULL, 0,
10228 NULL, HFILL }},
10229 { &hf_tetra_umle_reserved5,
10230 { "umle-reserved5", "tetra.umle_reserved5_element",
10231 FT_NONE, BASE_NONE, NULL, 0,
10232 NULL, HFILL }},
10233 { &hf_tetra_umle_reserved6,
10234 { "umle-reserved6", "tetra.umle_reserved6_element",
10235 FT_NONE, BASE_NONE, NULL, 0,
10236 NULL, HFILL }},
10237 { &hf_tetra_d_new_cell,
10238 { "d-new-cell", "tetra.d_new_cell_element",
10239 FT_NONE, BASE_NONE, NULL, 0,
10240 NULL, HFILL }},
10241 { &hf_tetra_d_prepare_fail,
10242 { "d-prepare-fail", "tetra.d_prepare_fail_element",
10243 FT_NONE, BASE_NONE, NULL, 0,
10244 NULL, HFILL }},
10245 { &hf_tetra_d_nwrk_broadcast,
10246 { "d-nwrk-broadcast", "tetra.d_nwrk_broadcast_element",
10247 FT_NONE, BASE_NONE, NULL, 0,
10248 "D_NWRK_BRDADCAST", HFILL }},
10249 { &hf_tetra_dmle_reserved1,
10250 { "dmle-reserved1", "tetra.dmle_reserved1_element",
10251 FT_NONE, BASE_NONE, NULL, 0,
10252 NULL, HFILL }},
10253 { &hf_tetra_d_restore_ack,
10254 { "d-restore-ack", "tetra.d_restore_ack_element",
10255 FT_NONE, BASE_NONE, NULL, 0,
10256 NULL, HFILL }},
10257 { &hf_tetra_d_restore_fail,
10258 { "d-restore-fail", "tetra.d_restore_fail_element",
10259 FT_NONE, BASE_NONE, NULL, 0,
10260 NULL, HFILL }},
10261 { &hf_tetra_dmle_reserved2,
10262 { "dmle-reserved2", "tetra.dmle_reserved2_element",
10263 FT_NONE, BASE_NONE, NULL, 0,
10264 NULL, HFILL }},
10265 { &hf_tetra_dmle_reserved3,
10266 { "dmle-reserved3", "tetra.dmle_reserved3_element",
10267 FT_NONE, BASE_NONE, NULL, 0,
10268 NULL, HFILL }},
10269 { &hf_tetra_optional_elements,
10270 { "optional-elements", "tetra.optional_elements",
10271 FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_vals), 0,
10272 NULL, HFILL }},
10273 { &hf_tetra_no_type2,
10274 { "no-type2", "tetra.no_type2_element",
10275 FT_NONE, BASE_NONE, NULL, 0,
10276 NULL, HFILL }},
10277 { &hf_tetra_type2_parameters,
10278 { "type2-parameters", "tetra.type2_parameters_element",
10279 FT_NONE, BASE_NONE, NULL, 0,
10280 NULL, HFILL }},
10281 { &hf_tetra_cell_number,
10282 { "cell-number", "tetra.cell_number",
10283 FT_UINT32, BASE_DEC, VALS(tetra_T_cell_number_vals), 0,
10284 NULL, HFILL }},
10285 { &hf_tetra_cell_number_01,
10286 { "cell-number", "tetra.cell_number",
10287 FT_UINT32, BASE_DEC, NULL, 0,
10288 "INTEGER_0_65535", HFILL }},
10289 { &hf_tetra_sdu,
10290 { "sdu", "tetra.sdu",
10291 FT_BYTES, BASE_NONE, NULL, 0,
10292 "BIT_STRING", HFILL }},
10293 { &hf_tetra_optional_elements_01,
10294 { "optional-elements", "tetra.optional_elements",
10295 FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_01_vals), 0,
10296 "T_optional_elements_01", HFILL }},
10297 { &hf_tetra_type2_parameters_01,
10298 { "type2-parameters", "tetra.type2_parameters_element",
10299 FT_NONE, BASE_NONE, NULL, 0,
10300 "T_type2_parameters_01", HFILL }},
10301 { &hf_tetra_mcc_01,
10302 { "mcc", "tetra.mcc",
10303 FT_UINT32, BASE_DEC, VALS(tetra_T_mcc_vals), 0,
10304 NULL, HFILL }},
10305 { &hf_tetra_mnc_01,
10306 { "mnc", "tetra.mnc",
10307 FT_UINT32, BASE_DEC, VALS(tetra_T_mnc_vals), 0,
10308 NULL, HFILL }},
10309 { &hf_tetra_la_01,
10310 { "la", "tetra.la",
10311 FT_UINT32, BASE_DEC, VALS(tetra_T_la_vals), 0,
10312 NULL, HFILL }},
10313 { &hf_tetra_channel_command_valid,
10314 { "channel-command-valid", "tetra.channel_command_valid",
10315 FT_UINT32, BASE_DEC, NULL, 0,
10316 "INTEGER_0_3", HFILL }},
10317 { &hf_tetra_optional_elements_02,
10318 { "optional-elements", "tetra.optional_elements",
10319 FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_02_vals), 0,
10320 "T_optional_elements_02", HFILL }},
10321 { &hf_tetra_fail_cause,
10322 { "fail-cause", "tetra.fail_cause",
10323 FT_UINT32, BASE_DEC, NULL, 0,
10324 "INTEGER_0_3", HFILL }},
10325 { &hf_tetra_optional_elements_03,
10326 { "optional-elements", "tetra.optional_elements",
10327 FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_03_vals), 0,
10328 "T_optional_elements_03", HFILL }},
10329 { &hf_tetra_cell_re_select_parameters,
10330 { "cell-re-select-parameters", "tetra.cell_re_select_parameters",
10331 FT_UINT32, BASE_DEC, NULL, 0,
10332 "INTEGER_0_65535", HFILL }},
10333 { &hf_tetra_optional_elements_04,
10334 { "optional-elements", "tetra.optional_elements",
10335 FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_04_vals), 0,
10336 "T_optional_elements_04", HFILL }},
10337 { &hf_tetra_type2_parameters_02,
10338 { "type2-parameters", "tetra.type2_parameters_element",
10339 FT_NONE, BASE_NONE, NULL, 0,
10340 "T_type2_parameters_02", HFILL }},
10341 { &hf_tetra_tetra_network_time,
10342 { "tetra-network-time", "tetra.tetra_network_time",
10343 FT_UINT32, BASE_DEC, VALS(tetra_T_tetra_network_time_vals), 0,
10344 NULL, HFILL }},
10345 { &hf_tetra_tetra_network_time_01,
10346 { "tetra-network-time", "tetra.tetra_network_time_element",
10347 FT_NONE, BASE_NONE, NULL, 0,
10348 NULL, HFILL }},
10349 { &hf_tetra_number_of_neighbour_cells,
10350 { "number-of-neighbour-cells", "tetra.number_of_neighbour_cells",
10351 FT_UINT32, BASE_DEC, VALS(tetra_T_number_of_neighbour_cells_vals), 0,
10352 NULL, HFILL }},
10353 { &hf_tetra_number_of_neighbour_cells_01,
10354 { "number-of-neighbour-cells", "tetra.number_of_neighbour_cells",
10355 FT_UINT32, BASE_DEC, NULL, 0,
10356 "INTEGER_0_7", HFILL }},
10357 { &hf_tetra_network_time,
10358 { "network-time", "tetra.network_time",
10359 FT_UINT64, BASE_DEC, NULL, 0,
10360 NULL, HFILL }},
10361 { &hf_tetra_local_time_offset_sign,
10362 { "local-time-offset-sign", "tetra.local_time_offset_sign",
10363 FT_UINT32, BASE_DEC, NULL, 0,
10364 "INTEGER_0_1", HFILL }},
10365 { &hf_tetra_local_time_offset,
10366 { "local-time-offset", "tetra.local_time_offset",
10367 FT_UINT32, BASE_DEC, NULL, 0,
10368 "INTEGER_0_63", HFILL }},
10369 { &hf_tetra_year,
10370 { "year", "tetra.year",
10371 FT_UINT32, BASE_DEC, NULL, 0,
10372 "INTEGER_0_63", HFILL }},
10373 { &hf_tetra_reserved_04,
10374 { "reserved", "tetra.reserved",
10375 FT_UINT64, BASE_DEC, NULL, 0,
10376 NULL, HFILL }},
10377 { &hf_tetra_u_Authentication,
10378 { "u-Authentication", "tetra.u_Authentication_element",
10379 FT_NONE, BASE_NONE, NULL, 0,
10380 NULL, HFILL }},
10381 { &hf_tetra_u_Itsi_Detach,
10382 { "u-Itsi-Detach", "tetra.u_Itsi_Detach_element",
10383 FT_NONE, BASE_NONE, NULL, 0,
10384 NULL, HFILL }},
10385 { &hf_tetra_u_Location_Update_Demand,
10386 { "u-Location-Update-Demand", "tetra.u_Location_Update_Demand_element",
10387 FT_NONE, BASE_NONE, NULL, 0,
10388 NULL, HFILL }},
10389 { &hf_tetra_u_MM_Status,
10390 { "u-MM-Status", "tetra.u_MM_Status_element",
10391 FT_NONE, BASE_NONE, NULL, 0,
10392 NULL, HFILL }},
10393 { &hf_tetra_u_MM_reserved1,
10394 { "u-MM-reserved1", "tetra.u_MM_reserved1_element",
10395 FT_NONE, BASE_NONE, NULL, 0,
10396 NULL, HFILL }},
10397 { &hf_tetra_u_WK,
10398 { "u-WK", "tetra.u_WK_element",
10399 FT_NONE, BASE_NONE, NULL, 0,
10400 NULL, HFILL }},
10401 { &hf_tetra_u_MM_reserved3,
10402 { "u-MM-reserved3", "tetra.u_MM_reserved3_element",
10403 FT_NONE, BASE_NONE, NULL, 0,
10404 NULL, HFILL }},
10405 { &hf_tetra_u_Attach_Detach_Group_Identity,
10406 { "u-Attach-Detach-Group-Identity", "tetra.u_Attach_Detach_Group_Identity_element",
10407 FT_NONE, BASE_NONE, NULL, 0,
10408 NULL, HFILL }},
10409 { &hf_tetra_u_Attach_Detach_Group_Identity_Ack,
10410 { "u-Attach-Detach-Group-Identity-Ack", "tetra.u_Attach_Detach_Group_Identity_Ack_element",
10411 FT_NONE, BASE_NONE, NULL, 0,
10412 NULL, HFILL }},
10413 { &hf_tetra_u_TEI_Provide,
10414 { "u-TEI-Provide", "tetra.u_TEI_Provide_element",
10415 FT_NONE, BASE_NONE, NULL, 0,
10416 NULL, HFILL }},
10417 { &hf_tetra_u_MM_reserved6,
10418 { "u-MM-reserved6", "tetra.u_MM_reserved6_element",
10419 FT_NONE, BASE_NONE, NULL, 0,
10420 NULL, HFILL }},
10421 { &hf_tetra_u_Disabled_Status,
10422 { "u-Disabled-Status", "tetra.u_Disabled_Status_element",
10423 FT_NONE, BASE_NONE, NULL, 0,
10424 NULL, HFILL }},
10425 { &hf_tetra_u_MM_reserved7,
10426 { "u-MM-reserved7", "tetra.u_MM_reserved7_element",
10427 FT_NONE, BASE_NONE, NULL, 0,
10428 NULL, HFILL }},
10429 { &hf_tetra_u_MM_reserved8,
10430 { "u-MM-reserved8", "tetra.u_MM_reserved8_element",
10431 FT_NONE, BASE_NONE, NULL, 0,
10432 NULL, HFILL }},
10433 { &hf_tetra_u_MM_reserved9,
10434 { "u-MM-reserved9", "tetra.u_MM_reserved9_element",
10435 FT_NONE, BASE_NONE, NULL, 0,
10436 NULL, HFILL }},
10437 { &hf_tetra_u_MM_Function_Not_Support,
10438 { "u-MM-Function-Not-Support", "tetra.u_MM_Function_Not_Support_element",
10439 FT_NONE, BASE_NONE, NULL, 0,
10440 NULL, HFILL }},
10441 { &hf_tetra_d_Otar,
10442 { "d-Otar", "tetra.d_Otar_element",
10443 FT_NONE, BASE_NONE, NULL, 0,
10444 NULL, HFILL }},
10445 { &hf_tetra_d_Authentication,
10446 { "d-Authentication", "tetra.d_Authentication_element",
10447 FT_NONE, BASE_NONE, NULL, 0,
10448 NULL, HFILL }},
10449 { &hf_tetra_d_Authentication_Reject,
10450 { "d-Authentication-Reject", "tetra.d_Authentication_Reject_element",
10451 FT_NONE, BASE_NONE, NULL, 0,
10452 NULL, HFILL }},
10453 { &hf_tetra_d_Disable,
10454 { "d-Disable", "tetra.d_Disable_element",
10455 FT_NONE, BASE_NONE, NULL, 0,
10456 NULL, HFILL }},
10457 { &hf_tetra_d_Enable,
10458 { "d-Enable", "tetra.d_Enable_element",
10459 FT_NONE, BASE_NONE, NULL, 0,
10460 NULL, HFILL }},
10461 { &hf_tetra_d_Location_Update_Accept,
10462 { "d-Location-Update-Accept", "tetra.d_Location_Update_Accept_element",
10463 FT_NONE, BASE_NONE, NULL, 0,
10464 NULL, HFILL }},
10465 { &hf_tetra_d_Location_Update_Command,
10466 { "d-Location-Update-Command", "tetra.d_Location_Update_Command_element",
10467 FT_NONE, BASE_NONE, NULL, 0,
10468 NULL, HFILL }},
10469 { &hf_tetra_d_Location_Update_Reject,
10470 { "d-Location-Update-Reject", "tetra.d_Location_Update_Reject_element",
10471 FT_NONE, BASE_NONE, NULL, 0,
10472 NULL, HFILL }},
10473 { &hf_tetra_d_MM_reserved2,
10474 { "d-MM-reserved2", "tetra.d_MM_reserved2_element",
10475 FT_NONE, BASE_NONE, NULL, 0,
10476 NULL, HFILL }},
10477 { &hf_tetra_d_Location_Update_Proceeding,
10478 { "d-Location-Update-Proceeding", "tetra.d_Location_Update_Proceeding_element",
10479 FT_NONE, BASE_NONE, NULL, 0,
10480 NULL, HFILL }},
10481 { &hf_tetra_d_Attach_Detach_Group_Identity,
10482 { "d-Attach-Detach-Group-Identity", "tetra.d_Attach_Detach_Group_Identity_element",
10483 FT_NONE, BASE_NONE, NULL, 0,
10484 NULL, HFILL }},
10485 { &hf_tetra_d_Attach_Detach_Group_Identity_Ack,
10486 { "d-Attach-Detach-Group-Identity-Ack", "tetra.d_Attach_Detach_Group_Identity_Ack_element",
10487 FT_NONE, BASE_NONE, NULL, 0,
10488 NULL, HFILL }},
10489 { &hf_tetra_d_MM_Status,
10490 { "d-MM-Status", "tetra.d_MM_Status_element",
10491 FT_NONE, BASE_NONE, NULL, 0,
10492 NULL, HFILL }},
10493 { &hf_tetra_d_MM_reserved5,
10494 { "d-MM-reserved5", "tetra.d_MM_reserved5_element",
10495 FT_NONE, BASE_NONE, NULL, 0,
10496 NULL, HFILL }},
10497 { &hf_tetra_d_MM_reserved6,
10498 { "d-MM-reserved6", "tetra.d_MM_reserved6_element",
10499 FT_NONE, BASE_NONE, NULL, 0,
10500 NULL, HFILL }},
10501 { &hf_tetra_d_MM_Function_Not_Support,
10502 { "d-MM-Function-Not-Support", "tetra.d_MM_Function_Not_Support_element",
10503 FT_NONE, BASE_NONE, NULL, 0,
10504 NULL, HFILL }},
10505 { &hf_tetra_attach_detach_identifier,
10506 { "attach-detach-identifier", "tetra.attach_detach_identifier",
10507 FT_UINT32, BASE_DEC, VALS(tetra_T_attach_detach_identifier_vals), 0,
10508 NULL, HFILL }},
10509 { &hf_tetra_attach,
10510 { "attach", "tetra.attach_element",
10511 FT_NONE, BASE_NONE, NULL, 0,
10512 NULL, HFILL }},
10513 { &hf_tetra_lifetime,
10514 { "lifetime", "tetra.lifetime",
10515 FT_UINT32, BASE_DEC, NULL, 0,
10516 "INTEGER_0_3", HFILL }},
10517 { &hf_tetra_class_of_usage,
10518 { "class-of-usage", "tetra.class_of_usage",
10519 FT_UINT32, BASE_DEC, NULL, 0,
10520 "INTEGER_0_7", HFILL }},
10521 { &hf_tetra_detach,
10522 { "detach", "tetra.detach_element",
10523 FT_NONE, BASE_NONE, NULL, 0,
10524 NULL, HFILL }},
10525 { &hf_tetra_detach_downlike,
10526 { "detach-downlike", "tetra.detach_downlike",
10527 FT_UINT32, BASE_DEC, VALS(tetra_T_detach_downlike_vals), 0,
10528 NULL, HFILL }},
10529 { &hf_tetra_address_type,
10530 { "address-type", "tetra.address_type",
10531 FT_UINT32, BASE_DEC, VALS(tetra_T_address_type_vals), 0,
10532 NULL, HFILL }},
10533 { &hf_tetra_gssi_01,
10534 { "gssi", "tetra.gssi",
10535 FT_BYTES, BASE_NONE, NULL, 0,
10536 "OCTET_STRING_SIZE_3", HFILL }},
10537 { &hf_tetra_gssi_extension,
10538 { "gssi-extension", "tetra.gssi_extension_element",
10539 FT_NONE, BASE_NONE, NULL, 0,
10540 NULL, HFILL }},
10541 { &hf_tetra_extension,
10542 { "extension", "tetra.extension",
10543 FT_BYTES, BASE_NONE, NULL, 0,
10544 "OCTET_STRING_SIZE_3", HFILL }},
10545 { &hf_tetra_vgssi,
10546 { "vgssi", "tetra.vgssi",
10547 FT_BYTES, BASE_NONE, NULL, 0,
10548 "OCTET_STRING_SIZE_3", HFILL }},
10549 { &hf_tetra_attach_detach_identifier_01,
10550 { "attach-detach-identifier", "tetra.attach_detach_identifier",
10551 FT_UINT32, BASE_DEC, VALS(tetra_T_attach_detach_identifier_01_vals), 0,
10552 "T_attach_detach_identifier_01", HFILL }},
10553 { &hf_tetra_attach_01,
10554 { "attach", "tetra.attach_element",
10555 FT_NONE, BASE_NONE, NULL, 0,
10556 "T_attach_01", HFILL }},
10557 { &hf_tetra_detach_01,
10558 { "detach", "tetra.detach_element",
10559 FT_NONE, BASE_NONE, NULL, 0,
10560 "T_detach_01", HFILL }},
10561 { &hf_tetra_detach_uplike,
10562 { "detach-uplike", "tetra.detach_uplike",
10563 FT_UINT32, BASE_DEC, VALS(tetra_T_detach_uplike_vals), 0,
10564 NULL, HFILL }},
10565 { &hf_tetra_address_type_01,
10566 { "address-type", "tetra.address_type",
10567 FT_UINT32, BASE_DEC, VALS(tetra_T_address_type_01_vals), 0,
10568 "T_address_type_01", HFILL }},
10569 { &hf_tetra_gssi_extension_01,
10570 { "gssi-extension", "tetra.gssi_extension_element",
10571 FT_NONE, BASE_NONE, NULL, 0,
10572 "T_gssi_extension_01", HFILL }},
10573 { &hf_tetra_location_update_type,
10574 { "location-update-type", "tetra.location_update_type",
10575 FT_UINT32, BASE_DEC, VALS(tetra_UPDATE_TYPE_vals), 0,
10576 "UPDATE_TYPE", HFILL }},
10577 { &hf_tetra_optional_elements_05,
10578 { "optional-elements", "tetra.optional_elements",
10579 FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_05_vals), 0,
10580 "T_optional_elements_05", HFILL }},
10581 { &hf_tetra_type2_parameters_03,
10582 { "type2-parameters", "tetra.type2_parameters_element",
10583 FT_NONE, BASE_NONE, NULL, 0,
10584 "T_type2_parameters_03", HFILL }},
10585 { &hf_tetra_ssi_02,
10586 { "ssi", "tetra.ssi",
10587 FT_UINT32, BASE_DEC, VALS(tetra_T_ssi_vals), 0,
10588 NULL, HFILL }},
10589 { &hf_tetra_ssi_03,
10590 { "ssi", "tetra.ssi",
10591 FT_BYTES, BASE_NONE, NULL, 0,
10592 "OCTET_STRING_SIZE_3", HFILL }},
10593 { &hf_tetra_address_extension,
10594 { "address-extension", "tetra.address_extension",
10595 FT_UINT32, BASE_DEC, VALS(tetra_T_address_extension_vals), 0,
10596 NULL, HFILL }},
10597 { &hf_tetra_address_extension_01,
10598 { "address-extension", "tetra.address_extension",
10599 FT_BYTES, BASE_NONE, NULL, 0,
10600 "OCTET_STRING_SIZE_3", HFILL }},
10601 { &hf_tetra_subscriber_class_01,
10602 { "subscriber-class", "tetra.subscriber_class",
10603 FT_UINT32, BASE_DEC, VALS(tetra_T_subscriber_class_vals), 0,
10604 NULL, HFILL }},
10605 { &hf_tetra_energy_saving_mode,
10606 { "energy-saving-mode", "tetra.energy_saving_mode",
10607 FT_UINT32, BASE_DEC, VALS(tetra_T_energy_saving_mode_vals), 0,
10608 NULL, HFILL }},
10609 { &hf_tetra_energy_saving_mode_01,
10610 { "energy-saving-mode", "tetra.energy_saving_mode",
10611 FT_UINT32, BASE_DEC, NULL, 0,
10612 "INTEGER_0_7", HFILL }},
10613 { &hf_tetra_scch_info,
10614 { "scch-info", "tetra.scch_info",
10615 FT_UINT32, BASE_DEC, VALS(tetra_T_scch_info_vals), 0,
10616 NULL, HFILL }},
10617 { &hf_tetra_scch_info_01,
10618 { "scch-info", "tetra.scch_info",
10619 FT_UINT32, BASE_DEC, NULL, 0,
10620 "INTEGER_0_16383", HFILL }},
10621 { &hf_tetra_type3,
10622 { "type3", "tetra.type3",
10623 FT_UINT32, BASE_DEC, VALS(tetra_T_type3_vals), 0,
10624 NULL, HFILL }},
10625 { &hf_tetra_no_type3,
10626 { "no-type3", "tetra.no_type3_element",
10627 FT_NONE, BASE_NONE, NULL, 0,
10628 NULL, HFILL }},
10629 { &hf_tetra_type3_elements,
10630 { "type3-elements", "tetra.type3_elements_element",
10631 FT_NONE, BASE_NONE, NULL, 0,
10632 NULL, HFILL }},
10633 { &hf_tetra_type2_existance,
10634 { "type2-existance", "tetra.type2_existance",
10635 FT_BOOLEAN, BASE_NONE, NULL, 0,
10636 "BOOLEAN", HFILL }},
10637 { &hf_tetra_type3_identifier,
10638 { "type3-identifier", "tetra.type3_identifier",
10639 FT_UINT32, BASE_DEC, VALS(tetra_TYPE3_IDENTIFIER_vals), 0,
10640 NULL, HFILL }},
10641 { &hf_tetra_new_ra,
10642 { "new-ra", "tetra.new_ra",
10643 FT_UINT32, BASE_DEC, VALS(tetra_T_new_ra_vals), 0,
10644 NULL, HFILL }},
10645 { &hf_tetra_new_ra_01,
10646 { "new-ra", "tetra.new_ra",
10647 FT_UINT32, BASE_DEC, NULL, 0,
10648 "INTEGER_0_3", HFILL }},
10649 { &hf_tetra_group_identity_location_accept,
10650 { "group-identity-location-accept", "tetra.group_identity_location_accept",
10651 FT_UINT32, BASE_DEC, VALS(tetra_T_group_identity_location_accept_vals), 0,
10652 NULL, HFILL }},
10653 { &hf_tetra_group_identity_location_accept_01,
10654 { "group-identity-location-accept", "tetra.group_identity_location_accept",
10655 FT_UINT32, BASE_DEC, NULL, 0,
10656 "INTEGER_0_3", HFILL }},
10657 { &hf_tetra_group_predefined_lifetime,
10658 { "group-predefined-lifetime", "tetra.group_predefined_lifetime",
10659 FT_UINT32, BASE_DEC, VALS(tetra_T_group_predefined_lifetime_vals), 0,
10660 NULL, HFILL }},
10661 { &hf_tetra_group_predefined_lifetime_01,
10662 { "group-predefined-lifetime", "tetra.group_predefined_lifetime",
10663 FT_UINT32, BASE_DEC, NULL, 0,
10664 "INTEGER_0_3", HFILL }},
10665 { &hf_tetra_group_identity_downlink,
10666 { "group-identity-downlink", "tetra.group_identity_downlink",
10667 FT_UINT32, BASE_DEC, VALS(tetra_T_group_identity_downlink_vals), 0,
10668 NULL, HFILL }},
10669 { &hf_tetra_group_identity_downlink_01,
10670 { "group-identity-downlink", "tetra.group_identity_downlink",
10671 FT_UINT32, BASE_DEC, NULL, 0,
10672 "INTEGER_0_15", HFILL }},
10673 { &hf_tetra_proprietary,
10674 { "proprietary", "tetra.proprietary",
10675 FT_UINT32, BASE_DEC, VALS(tetra_T_proprietary_vals), 0,
10676 NULL, HFILL }},
10677 { &hf_tetra_proprietary_01,
10678 { "proprietary", "tetra.proprietary",
10679 FT_UINT32, BASE_DEC, NULL, 0,
10680 "INTEGER_0_7", HFILL }},
10681 { &hf_tetra_reject_cause,
10682 { "reject-cause", "tetra.reject_cause",
10683 FT_UINT32, BASE_DEC, NULL, 0,
10684 "INTEGER_0_31", HFILL }},
10685 { &hf_tetra_cipher_control,
10686 { "cipher-control", "tetra.cipher_control",
10687 FT_BOOLEAN, BASE_NONE, NULL, 0,
10688 "BOOLEAN", HFILL }},
10689 { &hf_tetra_status_uplink,
10690 { "status-uplink", "tetra.status_uplink",
10691 FT_UINT32, BASE_DEC, NULL, 0,
10692 "INTEGER_0_63", HFILL }},
10693 { &hf_tetra_scanning_on_off,
10694 { "scanning-on-off", "tetra.scanning_on_off",
10695 FT_UINT32, BASE_DEC, VALS(tetra_T_scanning_on_off_vals), 0,
10696 NULL, HFILL }},
10697 { &hf_tetra_status_downlink,
10698 { "status-downlink", "tetra.status_downlink",
10699 FT_UINT32, BASE_DEC, NULL, 0,
10700 "INTEGER_0_63", HFILL }},
10701 { &hf_tetra_u_Alert,
10702 { "u-Alert", "tetra.u_Alert_element",
10703 FT_NONE, BASE_NONE, NULL, 0,
10704 NULL, HFILL }},
10705 { &hf_tetra_reserved1,
10706 { "reserved1", "tetra.reserved1_element",
10707 FT_NONE, BASE_NONE, NULL, 0,
10708 NULL, HFILL }},
10709 { &hf_tetra_u_Connect,
10710 { "u-Connect", "tetra.u_Connect_element",
10711 FT_NONE, BASE_NONE, NULL, 0,
10712 NULL, HFILL }},
10713 { &hf_tetra_reserved2,
10714 { "reserved2", "tetra.reserved2_element",
10715 FT_NONE, BASE_NONE, NULL, 0,
10716 NULL, HFILL }},
10717 { &hf_tetra_u_Disconnect,
10718 { "u-Disconnect", "tetra.u_Disconnect_element",
10719 FT_NONE, BASE_NONE, NULL, 0,
10720 NULL, HFILL }},
10721 { &hf_tetra_u_Info,
10722 { "u-Info", "tetra.u_Info_element",
10723 FT_NONE, BASE_NONE, NULL, 0,
10724 NULL, HFILL }},
10725 { &hf_tetra_u_Release,
10726 { "u-Release", "tetra.u_Release_element",
10727 FT_NONE, BASE_NONE, NULL, 0,
10728 NULL, HFILL }},
10729 { &hf_tetra_u_Setup,
10730 { "u-Setup", "tetra.u_Setup_element",
10731 FT_NONE, BASE_NONE, NULL, 0,
10732 NULL, HFILL }},
10733 { &hf_tetra_u_Status,
10734 { "u-Status", "tetra.u_Status_element",
10735 FT_NONE, BASE_NONE, NULL, 0,
10736 NULL, HFILL }},
10737 { &hf_tetra_u_Tx_Ceased,
10738 { "u-Tx-Ceased", "tetra.u_Tx_Ceased_element",
10739 FT_NONE, BASE_NONE, NULL, 0,
10740 NULL, HFILL }},
10741 { &hf_tetra_u_Tx_Demand,
10742 { "u-Tx-Demand", "tetra.u_Tx_Demand_element",
10743 FT_NONE, BASE_NONE, NULL, 0,
10744 NULL, HFILL }},
10745 { &hf_tetra_reserved3,
10746 { "reserved3", "tetra.reserved3_element",
10747 FT_NONE, BASE_NONE, NULL, 0,
10748 NULL, HFILL }},
10749 { &hf_tetra_reserved4,
10750 { "reserved4", "tetra.reserved4_element",
10751 FT_NONE, BASE_NONE, NULL, 0,
10752 NULL, HFILL }},
10753 { &hf_tetra_reserved5,
10754 { "reserved5", "tetra.reserved5_element",
10755 FT_NONE, BASE_NONE, NULL, 0,
10756 NULL, HFILL }},
10757 { &hf_tetra_u_Call_Restore,
10758 { "u-Call-Restore", "tetra.u_Call_Restore_element",
10759 FT_NONE, BASE_NONE, NULL, 0,
10760 NULL, HFILL }},
10761 { &hf_tetra_u_SDS_Data,
10762 { "u-SDS-Data", "tetra.u_SDS_Data_element",
10763 FT_NONE, BASE_NONE, NULL, 0,
10764 NULL, HFILL }},
10765 { &hf_tetra_u_Facility,
10766 { "u-Facility", "tetra.u_Facility_element",
10767 FT_NONE, BASE_NONE, NULL, 0,
10768 NULL, HFILL }},
10769 { &hf_tetra_call_identifier,
10770 { "call-identifier", "tetra.call_identifier",
10771 FT_UINT32, BASE_DEC, NULL, 0,
10772 "INTEGER_0_16383", HFILL }},
10773 { &hf_tetra_disconnect_cause,
10774 { "disconnect-cause", "tetra.disconnect_cause",
10775 FT_UINT32, BASE_DEC, NULL, 0,
10776 "INTEGER_0_31", HFILL }},
10777 { &hf_tetra_area_selection,
10778 { "area-selection", "tetra.area_selection",
10779 FT_UINT32, BASE_DEC, NULL, 0,
10780 "INTEGER_0_15", HFILL }},
10781 { &hf_tetra_called_party_type_identifier,
10782 { "called-party-type-identifier", "tetra.called_party_type_identifier",
10783 FT_UINT32, BASE_DEC, VALS(tetra_T_called_party_type_identifier_vals), 0,
10784 NULL, HFILL }},
10785 { &hf_tetra_sna,
10786 { "sna", "tetra.sna",
10787 FT_UINT32, BASE_DEC, NULL, 0,
10788 "INTEGER_0_255", HFILL }},
10789 { &hf_tetra_ssi_extension,
10790 { "ssi-extension", "tetra.ssi_extension",
10791 FT_BYTES, BASE_NONE, NULL, 0,
10792 "BIT_STRING_SIZE_48", HFILL }},
10793 { &hf_tetra_short_data_type_identifier,
10794 { "short-data-type-identifier", "tetra.short_data_type_identifier",
10795 FT_UINT32, BASE_DEC, VALS(tetra_T_short_data_type_identifier_vals), 0,
10796 "T_short_data_type_identifier", HFILL }},
10797 { &hf_tetra_data_1,
10798 { "data-1", "tetra.data_1",
10799 FT_UINT32, BASE_DEC, NULL, 0,
10800 "INTEGER_0_65535", HFILL }},
10801 { &hf_tetra_data_2,
10802 { "data-2", "tetra.data_2",
10803 FT_BYTES, BASE_NONE, NULL, 0,
10804 "OCTET_STRING_SIZE_4", HFILL }},
10805 { &hf_tetra_data_3,
10806 { "data-3", "tetra.data_3",
10807 FT_BYTES, BASE_NONE, NULL, 0,
10808 "BIT_STRING_SIZE_64", HFILL }},
10809 { &hf_tetra_length_indicator_data_4,
10810 { "length-indicator-data-4", "tetra.length_indicator_data_4",
10811 FT_UINT32, BASE_DEC, NULL, 0,
10812 "INTEGER_0_4194304", HFILL }},
10813 { &hf_tetra_called_party_type_identifier_01,
10814 { "called-party-type-identifier", "tetra.called_party_type_identifier",
10815 FT_UINT32, BASE_DEC, VALS(tetra_T_called_party_type_identifier_01_vals), 0,
10816 "T_called_party_type_identifier_01", HFILL }},
10817 { &hf_tetra_short_number_address,
10818 { "short-number-address", "tetra.short_number_address",
10819 FT_UINT32, BASE_DEC, NULL, 0,
10820 "INTEGER_0_255", HFILL }},
10821 { &hf_tetra_called_ssi_called_extension,
10822 { "called-ssi-called-extension", "tetra.called_ssi_called_extension",
10823 FT_BYTES, BASE_NONE, NULL, 0,
10824 "BIT_STRING_SIZE_48", HFILL }},
10825 { &hf_tetra_pre_coded_status,
10826 { "pre-coded-status", "tetra.pre_coded_status",
10827 FT_UINT32, BASE_DEC, NULL, 0,
10828 "INTEGER_0_65535", HFILL }},
10829 { &hf_tetra_call_id,
10830 { "call-id", "tetra.call_id",
10831 FT_UINT32, BASE_DEC, NULL, 0,
10832 "INTEGER_0_16383", HFILL }},
10833 { &hf_tetra_poll_response,
10834 { "poll-response", "tetra.poll_response",
10835 FT_UINT32, BASE_DEC, NULL, 0,
10836 "INTEGER_0_1", HFILL }},
10837 { &hf_tetra_d_Alert,
10838 { "d-Alert", "tetra.d_Alert_element",
10839 FT_NONE, BASE_NONE, NULL, 0,
10840 NULL, HFILL }},
10841 { &hf_tetra_d_Call_Proceeding,
10842 { "d-Call-Proceeding", "tetra.d_Call_Proceeding_element",
10843 FT_NONE, BASE_NONE, NULL, 0,
10844 NULL, HFILL }},
10845 { &hf_tetra_d_Connect,
10846 { "d-Connect", "tetra.d_Connect_element",
10847 FT_NONE, BASE_NONE, NULL, 0,
10848 NULL, HFILL }},
10849 { &hf_tetra_d_Connect_Ack,
10850 { "d-Connect-Ack", "tetra.d_Connect_Ack_element",
10851 FT_NONE, BASE_NONE, NULL, 0,
10852 NULL, HFILL }},
10853 { &hf_tetra_d_Disconnect,
10854 { "d-Disconnect", "tetra.d_Disconnect_element",
10855 FT_NONE, BASE_NONE, NULL, 0,
10856 NULL, HFILL }},
10857 { &hf_tetra_d_Info,
10858 { "d-Info", "tetra.d_Info_element",
10859 FT_NONE, BASE_NONE, NULL, 0,
10860 NULL, HFILL }},
10861 { &hf_tetra_d_Release,
10862 { "d-Release", "tetra.d_Release_element",
10863 FT_NONE, BASE_NONE, NULL, 0,
10864 NULL, HFILL }},
10865 { &hf_tetra_d_Setup,
10866 { "d-Setup", "tetra.d_Setup_element",
10867 FT_NONE, BASE_NONE, NULL, 0,
10868 NULL, HFILL }},
10869 { &hf_tetra_d_Status,
10870 { "d-Status", "tetra.d_Status_element",
10871 FT_NONE, BASE_NONE, NULL, 0,
10872 NULL, HFILL }},
10873 { &hf_tetra_d_Tx_Ceased,
10874 { "d-Tx-Ceased", "tetra.d_Tx_Ceased_element",
10875 FT_NONE, BASE_NONE, NULL, 0,
10876 NULL, HFILL }},
10877 { &hf_tetra_d_Tx_Continue,
10878 { "d-Tx-Continue", "tetra.d_Tx_Continue_element",
10879 FT_NONE, BASE_NONE, NULL, 0,
10880 NULL, HFILL }},
10881 { &hf_tetra_d_Tx_Granted,
10882 { "d-Tx-Granted", "tetra.d_Tx_Granted_element",
10883 FT_NONE, BASE_NONE, NULL, 0,
10884 NULL, HFILL }},
10885 { &hf_tetra_d_Tx_Wait,
10886 { "d-Tx-Wait", "tetra.d_Tx_Wait_element",
10887 FT_NONE, BASE_NONE, NULL, 0,
10888 NULL, HFILL }},
10889 { &hf_tetra_d_Tx_Interrupt,
10890 { "d-Tx-Interrupt", "tetra.d_Tx_Interrupt_element",
10891 FT_NONE, BASE_NONE, NULL, 0,
10892 NULL, HFILL }},
10893 { &hf_tetra_d_Call_Restore,
10894 { "d-Call-Restore", "tetra.d_Call_Restore_element",
10895 FT_NONE, BASE_NONE, NULL, 0,
10896 NULL, HFILL }},
10897 { &hf_tetra_d_SDS_Data,
10898 { "d-SDS-Data", "tetra.d_SDS_Data_element",
10899 FT_NONE, BASE_NONE, NULL, 0,
10900 NULL, HFILL }},
10901 { &hf_tetra_d_Facility,
10902 { "d-Facility", "tetra.d_Facility_element",
10903 FT_NONE, BASE_NONE, NULL, 0,
10904 NULL, HFILL }},
10905 { &hf_tetra_calling_party_type_identifier,
10906 { "calling-party-type-identifier", "tetra.calling_party_type_identifier",
10907 FT_UINT32, BASE_DEC, VALS(tetra_T_calling_party_type_identifier_vals), 0,
10908 NULL, HFILL }},
10909 { &hf_tetra_ssi_extension_01,
10910 { "ssi-extension", "tetra.ssi_extension",
10911 FT_BYTES, BASE_NONE, NULL, 0,
10912 "OCTET_STRING_SIZE_6", HFILL }},
10913 { &hf_tetra_short_data_type_identifier_01,
10914 { "short-data-type-identifier", "tetra.short_data_type_identifier",
10915 FT_UINT32, BASE_DEC, VALS(tetra_T_short_data_type_identifier_01_vals), 0,
10916 "T_short_data_type_identifier_01", HFILL }},
10917 { &hf_tetra_data_3_01,
10918 { "data-3", "tetra.data_3",
10919 FT_BYTES, BASE_NONE, NULL, 0,
10920 "OCTET_STRING_SIZE_8", HFILL }},
10921 { &hf_tetra_calling_party_type_identifier_01,
10922 { "calling-party-type-identifier", "tetra.calling_party_type_identifier",
10923 FT_UINT32, BASE_DEC, VALS(tetra_T_calling_party_type_identifier_01_vals), 0,
10924 "T_calling_party_type_identifier_01", HFILL }},
10925 { &hf_tetra_calling_party_address_SSI,
10926 { "calling-party-address-SSI", "tetra.calling_party_address_SSI",
10927 FT_UINT32, BASE_DEC, NULL, 0,
10928 "INTEGER_0_16777215", HFILL }},
10929 { &hf_tetra_reset_call_time_out_timer,
10930 { "reset-call-time-out-timer", "tetra.reset_call_time_out_timer",
10931 FT_UINT32, BASE_DEC, NULL, 0,
10932 "INTEGER_0_1", HFILL }},
10933 { &hf_tetra_poll_request,
10934 { "poll-request", "tetra.poll_request",
10935 FT_UINT32, BASE_DEC, NULL, 0,
10936 "INTEGER_0_1", HFILL }},
10937 { &hf_tetra_transmission_request_permission,
10938 { "transmission-request-permission", "tetra.transmission_request_permission",
10939 FT_UINT32, BASE_DEC, NULL, 0,
10940 "INTEGER_0_1", HFILL }},
10941 { &hf_tetra_continue,
10942 { "continue", "tetra.continue",
10943 FT_UINT32, BASE_DEC, NULL, 0,
10944 "INTEGER_0_1", HFILL }},
10945 { &hf_tetra_request_to_append_LA,
10946 { "request-to-append-LA", "tetra.request_to_append_LA",
10947 FT_BOOLEAN, BASE_NONE, NULL, 0,
10948 "BOOLEAN", HFILL }},
10949 { &hf_tetra_cipher_control_01,
10950 { "cipher-control", "tetra.cipher_control",
10951 FT_UINT32, BASE_DEC, VALS(tetra_T_cipher_control_vals), 0,
10952 NULL, HFILL }},
10953 { &hf_tetra_no_cipher,
10954 { "no-cipher", "tetra.no_cipher_element",
10955 FT_NONE, BASE_NONE, NULL, 0,
10956 NULL, HFILL }},
10957 { &hf_tetra_ciphering_parameters,
10958 { "ciphering-parameters", "tetra.ciphering_parameters",
10959 FT_UINT32, BASE_DEC, NULL, 0,
10960 "INTEGER_0_1023", HFILL }},
10961 { &hf_tetra_optional_elements_06,
10962 { "optional-elements", "tetra.optional_elements",
10963 FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_06_vals), 0,
10964 "T_optional_elements_06", HFILL }},
10965 { &hf_tetra_type2_parameters_04,
10966 { "type2-parameters", "tetra.type2_parameters_element",
10967 FT_NONE, BASE_NONE, NULL, 0,
10968 "T_type2_parameters_04", HFILL }},
10969 { &hf_tetra_class_of_MS,
10970 { "class-of-MS", "tetra.class_of_MS",
10971 FT_UINT32, BASE_DEC, VALS(tetra_T_class_of_MS_vals), 0,
10972 NULL, HFILL }},
10973 { &hf_tetra_class_of_MS_01,
10974 { "class-of-MS", "tetra.class_of_MS",
10975 FT_UINT32, BASE_DEC, NULL, 0,
10976 "INTEGER_0_16777215", HFILL }},
10977 { &hf_tetra_energy_saving_mode_02,
10978 { "energy-saving-mode", "tetra.energy_saving_mode",
10979 FT_UINT32, BASE_DEC, VALS(tetra_T_energy_saving_mode_01_vals), 0,
10980 "T_energy_saving_mode_01", HFILL }},
10981 { &hf_tetra_la_information,
10982 { "la-information", "tetra.la_information",
10983 FT_UINT32, BASE_DEC, VALS(tetra_T_la_information_vals), 0,
10984 NULL, HFILL }},
10985 { &hf_tetra_la_information_01,
10986 { "la-information", "tetra.la_information",
10987 FT_UINT32, BASE_DEC, NULL, 0,
10988 "INTEGER_0_16383", HFILL }},
10989 { &hf_tetra_ssi_04,
10990 { "ssi", "tetra.ssi",
10991 FT_UINT32, BASE_DEC, VALS(tetra_T_ssi_01_vals), 0,
10992 "T_ssi_01", HFILL }},
10993 { &hf_tetra_address_extension_02,
10994 { "address-extension", "tetra.address_extension",
10995 FT_UINT32, BASE_DEC, VALS(tetra_T_address_extension_01_vals), 0,
10996 "T_address_extension_01", HFILL }},
10997 { &hf_tetra_type3_01,
10998 { "type3", "tetra.type3",
10999 FT_UINT32, BASE_DEC, VALS(tetra_T_type3_01_vals), 0,
11000 "T_type3_01", HFILL }},
11001 { &hf_tetra_type3_elements_01,
11002 { "type3-elements", "tetra.type3_elements_element",
11003 FT_NONE, BASE_NONE, NULL, 0,
11004 "T_type3_elements_01", HFILL }},
11005 { &hf_tetra_group_identity_location_demand,
11006 { "group-identity-location-demand", "tetra.group_identity_location_demand",
11007 FT_UINT32, BASE_DEC, VALS(tetra_T_group_identity_location_demand_vals), 0,
11008 NULL, HFILL }},
11009 { &hf_tetra_group_identity_location_demand_01,
11010 { "group-identity-location-demand", "tetra.group_identity_location_demand",
11011 FT_UINT32, BASE_DEC, NULL, 0,
11012 "INTEGER_0_3", HFILL }},
11013 { &hf_tetra_group_report_response,
11014 { "group-report-response", "tetra.group_report_response",
11015 FT_UINT32, BASE_DEC, VALS(tetra_T_group_report_response_vals), 0,
11016 "T_group_report_response", HFILL }},
11017 { &hf_tetra_group_report_response_01,
11018 { "group-report-response", "tetra.group_report_response",
11019 FT_BOOLEAN, BASE_NONE, NULL, 0,
11020 "BOOLEAN", HFILL }},
11021 { &hf_tetra_group_identity_uplink,
11022 { "group-identity-uplink", "tetra.group_identity_uplink",
11023 FT_UINT32, BASE_DEC, VALS(tetra_T_group_identity_uplink_vals), 0,
11024 NULL, HFILL }},
11025 { &hf_tetra_group_identity_uplink_01,
11026 { "group-identity-uplink", "tetra.group_identity_uplink",
11027 FT_UINT32, BASE_DEC, NULL, 0,
11028 "INTEGER_0_15", HFILL }},
11029 { &hf_tetra_proprietary_02,
11030 { "proprietary", "tetra.proprietary",
11031 FT_UINT32, BASE_DEC, VALS(tetra_T_proprietary_01_vals), 0,
11032 "T_proprietary_01", HFILL }},
11033 { &hf_tetra_group_identity_report,
11034 { "group-identity-report", "tetra.group_identity_report",
11035 FT_BOOLEAN, BASE_NONE, NULL, 0,
11036 "BOOLEAN", HFILL }},
11037 { &hf_tetra_group_identity_attach_detach_mode,
11038 { "group-identity-attach-detach-mode", "tetra.group_identity_attach_detach_mode",
11039 FT_BOOLEAN, BASE_NONE, NULL, 0,
11040 "BOOLEAN", HFILL }},
11041 { &hf_tetra_optional_elements_07,
11042 { "optional-elements", "tetra.optional_elements",
11043 FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_07_vals), 0,
11044 "T_optional_elements_07", HFILL }},
11045 { &hf_tetra_type2_element,
11046 { "type2-element", "tetra.type2_element_element",
11047 FT_NONE, BASE_NONE, NULL, 0,
11048 NULL, HFILL }},
11049 { &hf_tetra_type3_02,
11050 { "type3", "tetra.type3",
11051 FT_UINT32, BASE_DEC, VALS(tetra_T_type3_02_vals), 0,
11052 "T_type3_02", HFILL }},
11053 { &hf_tetra_type3_elements_02,
11054 { "type3-elements", "tetra.type3_elements_element",
11055 FT_NONE, BASE_NONE, NULL, 0,
11056 "T_type3_elements_02", HFILL }},
11057 { &hf_tetra_length,
11058 { "length", "tetra.length",
11059 FT_UINT32, BASE_DEC, NULL, 0,
11060 "INTEGER_0_2047", HFILL }},
11061 { &hf_tetra_repeat_num,
11062 { "repeat-num", "tetra.repeat_num",
11063 FT_UINT32, BASE_DEC, NULL, 0,
11064 "INTEGER_0_63", HFILL }},
11065 { &hf_tetra_group_identity_uplink_02,
11066 { "group-identity-uplink", "tetra.group_identity_uplink_element",
11067 FT_NONE, BASE_NONE, NULL, 0,
11068 NULL, HFILL }},
11069 { &hf_tetra_group_identity_ack_type,
11070 { "group-identity-ack-type", "tetra.group_identity_ack_type",
11071 FT_BOOLEAN, BASE_NONE, NULL, 0,
11072 "BOOLEAN", HFILL }},
11073 { &hf_tetra_optional_elements_08,
11074 { "optional-elements", "tetra.optional_elements",
11075 FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_08_vals), 0,
11076 "T_optional_elements_08", HFILL }},
11077 { &hf_tetra_type2_element_01,
11078 { "type2-element", "tetra.type2_element_element",
11079 FT_NONE, BASE_NONE, NULL, 0,
11080 "T_type2_element_01", HFILL }},
11081 { &hf_tetra_type3_03,
11082 { "type3", "tetra.type3",
11083 FT_UINT32, BASE_DEC, VALS(tetra_T_type3_03_vals), 0,
11084 "T_type3_03", HFILL }},
11085 { &hf_tetra_type3_elements_03,
11086 { "type3-elements", "tetra.type3_elements_element",
11087 FT_NONE, BASE_NONE, NULL, 0,
11088 "T_type3_elements_03", HFILL }},
11089 { &hf_tetra_hook_method_selection,
11090 { "hook-method-selection", "tetra.hook_method_selection",
11091 FT_BOOLEAN, BASE_NONE, NULL, 0,
11092 "BOOLEAN", HFILL }},
11093 { &hf_tetra_simple_duplex_selection,
11094 { "simple-duplex-selection", "tetra.simple_duplex_selection",
11095 FT_UINT32, BASE_DEC, VALS(tetra_T_simple_duplex_selection_vals), 0,
11096 NULL, HFILL }},
11097 { &hf_tetra_basic_service_information,
11098 { "basic-service-information", "tetra.basic_service_information_element",
11099 FT_NONE, BASE_NONE, NULL, 0,
11100 NULL, HFILL }},
11101 { &hf_tetra_request_transmit_send_data,
11102 { "request-transmit-send-data", "tetra.request_transmit_send_data",
11103 FT_UINT32, BASE_DEC, NULL, 0,
11104 "INTEGER_0_1", HFILL }},
11105 { &hf_tetra_call_priority,
11106 { "call-priority", "tetra.call_priority",
11107 FT_UINT32, BASE_DEC, NULL, 0,
11108 "INTEGER_0_15", HFILL }},
11109 { &hf_tetra_clir_control,
11110 { "clir-control", "tetra.clir_control",
11111 FT_UINT32, BASE_DEC, NULL, 0,
11112 "INTEGER_0_3", HFILL }},
11113 { &hf_tetra_called_party_address,
11114 { "called-party-address", "tetra.called_party_address",
11115 FT_UINT32, BASE_DEC, VALS(tetra_Calling_party_address_type_vals), 0,
11116 "Called_party_address_type", HFILL }},
11117 { &hf_tetra_optional_elements_09,
11118 { "optional-elements", "tetra.optional_elements",
11119 FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_09_vals), 0,
11120 "T_optional_elements_09", HFILL }},
11121 { &hf_tetra_type2_parameters_05,
11122 { "type2-parameters", "tetra.type2_parameters_element",
11123 FT_NONE, BASE_NONE, NULL, 0,
11124 "T_type2_parameters_05", HFILL }},
11125 { &hf_tetra_external_subscriber_number,
11126 { "external-subscriber-number", "tetra.external_subscriber_number",
11127 FT_UINT32, BASE_DEC, VALS(tetra_T_external_subscriber_number_vals), 0,
11128 NULL, HFILL }},
11129 { &hf_tetra_external_subscriber_number_01,
11130 { "external-subscriber-number", "tetra.external_subscriber_number",
11131 FT_UINT32, BASE_DEC, NULL, 0,
11132 "INTEGER_0_31", HFILL }},
11133 { &hf_tetra_prop,
11134 { "prop", "tetra.prop",
11135 FT_UINT32, BASE_DEC, VALS(tetra_T_prop_vals), 0,
11136 NULL, HFILL }},
11137 { &hf_tetra_prop_01,
11138 { "prop", "tetra.prop_element",
11139 FT_NONE, BASE_NONE, NULL, 0,
11140 "Proprietary", HFILL }},
11141 { &hf_tetra_circuit_mode,
11142 { "circuit-mode", "tetra.circuit_mode",
11143 FT_UINT32, BASE_DEC, VALS(tetra_CIRCUIT_vals), 0,
11144 "CIRCUIT", HFILL }},
11145 { &hf_tetra_encryption,
11146 { "encryption", "tetra.encryption",
11147 FT_UINT32, BASE_DEC, NULL, 0,
11148 "INTEGER_0_1", HFILL }},
11149 { &hf_tetra_communication,
11150 { "communication", "tetra.communication",
11151 FT_UINT32, BASE_DEC, NULL, 0,
11152 "INTEGER_0_3", HFILL }},
11153 { &hf_tetra_slots_or_speech,
11154 { "slots-or-speech", "tetra.slots_or_speech",
11155 FT_UINT32, BASE_DEC, NULL, 0,
11156 "INTEGER_0_3", HFILL }},
11157 { &hf_tetra_call_identifier_01,
11158 { "call-identifier", "tetra.call_identifier",
11159 FT_UINT32, BASE_DEC, NULL, 0,
11160 "INTEGER_0_1023", HFILL }},
11161 { &hf_tetra_simplex_duplex_selection,
11162 { "simplex-duplex-selection", "tetra.simplex_duplex_selection",
11163 FT_UINT32, BASE_DEC, VALS(tetra_T_simplex_duplex_selection_vals), 0,
11164 NULL, HFILL }},
11165 { &hf_tetra_optional_elements_10,
11166 { "optional-elements", "tetra.optional_elements",
11167 FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_10_vals), 0,
11168 "T_optional_elements_10", HFILL }},
11169 { &hf_tetra_type2_parameters_06,
11170 { "type2-parameters", "tetra.type2_parameters_element",
11171 FT_NONE, BASE_NONE, NULL, 0,
11172 "T_type2_parameters_06", HFILL }},
11173 { &hf_tetra_basic_service_information_01,
11174 { "basic-service-information", "tetra.basic_service_information",
11175 FT_UINT32, BASE_DEC, VALS(tetra_T_basic_service_information_vals), 0,
11176 NULL, HFILL }},
11177 { &hf_tetra_prop_02,
11178 { "prop", "tetra.prop",
11179 FT_UINT32, BASE_DEC, VALS(tetra_T_prop_01_vals), 0,
11180 "T_prop_01", HFILL }},
11181 { &hf_tetra_simplex_duplex_selection_01,
11182 { "simplex-duplex-selection", "tetra.simplex_duplex_selection",
11183 FT_UINT32, BASE_DEC, VALS(tetra_T_simplex_duplex_selection_01_vals), 0,
11184 "T_simplex_duplex_selection_01", HFILL }},
11185 { &hf_tetra_optional_elements_11,
11186 { "optional-elements", "tetra.optional_elements",
11187 FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_11_vals), 0,
11188 "T_optional_elements_11", HFILL }},
11189 { &hf_tetra_type2_parameters_07,
11190 { "type2-parameters", "tetra.type2_parameters_element",
11191 FT_NONE, BASE_NONE, NULL, 0,
11192 "T_type2_parameters_07", HFILL }},
11193 { &hf_tetra_basic_service_information_02,
11194 { "basic-service-information", "tetra.basic_service_information",
11195 FT_UINT32, BASE_DEC, VALS(tetra_T_basic_service_information_01_vals), 0,
11196 "T_basic_service_information_01", HFILL }},
11197 { &hf_tetra_prop_03,
11198 { "prop", "tetra.prop",
11199 FT_UINT32, BASE_DEC, VALS(tetra_T_prop_02_vals), 0,
11200 "T_prop_02", HFILL }},
11201 { &hf_tetra_optional_elements_12,
11202 { "optional-elements", "tetra.optional_elements",
11203 FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_12_vals), 0,
11204 "T_optional_elements_12", HFILL }},
11205 { &hf_tetra_type2_parameters_08,
11206 { "type2-parameters", "tetra.type2_parameters_element",
11207 FT_NONE, BASE_NONE, NULL, 0,
11208 "T_type2_parameters_08", HFILL }},
11209 { &hf_tetra_prop_04,
11210 { "prop", "tetra.prop",
11211 FT_UINT32, BASE_DEC, VALS(tetra_T_prop_03_vals), 0,
11212 "T_prop_03", HFILL }},
11213 { &hf_tetra_tx_demand_priority,
11214 { "tx-demand-priority", "tetra.tx_demand_priority",
11215 FT_UINT32, BASE_DEC, NULL, 0,
11216 "INTEGER_0_3", HFILL }},
11217 { &hf_tetra_encryption_control,
11218 { "encryption-control", "tetra.encryption_control",
11219 FT_UINT32, BASE_DEC, NULL, 0,
11220 "INTEGER_0_1", HFILL }},
11221 { &hf_tetra_optional_elements_13,
11222 { "optional-elements", "tetra.optional_elements",
11223 FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_13_vals), 0,
11224 "T_optional_elements_13", HFILL }},
11225 { &hf_tetra_type2_parameters_09,
11226 { "type2-parameters", "tetra.type2_parameters_element",
11227 FT_NONE, BASE_NONE, NULL, 0,
11228 "T_type2_parameters_09", HFILL }},
11229 { &hf_tetra_prop_05,
11230 { "prop", "tetra.prop",
11231 FT_UINT32, BASE_DEC, VALS(tetra_T_prop_04_vals), 0,
11232 "T_prop_04", HFILL }},
11233 { &hf_tetra_optional_elements_14,
11234 { "optional-elements", "tetra.optional_elements",
11235 FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_14_vals), 0,
11236 "T_optional_elements_14", HFILL }},
11237 { &hf_tetra_type2_parameters_10,
11238 { "type2-parameters", "tetra.type2_parameters_element",
11239 FT_NONE, BASE_NONE, NULL, 0,
11240 "T_type2_parameters_10", HFILL }},
11241 { &hf_tetra_prop_06,
11242 { "prop", "tetra.prop",
11243 FT_UINT32, BASE_DEC, VALS(tetra_T_prop_05_vals), 0,
11244 "T_prop_05", HFILL }},
11245 { &hf_tetra_request_to_transmit_send_data,
11246 { "request-to-transmit-send-data", "tetra.request_to_transmit_send_data",
11247 FT_UINT32, BASE_DEC, NULL, 0,
11248 "INTEGER_0_1", HFILL }},
11249 { &hf_tetra_other_party_address,
11250 { "other-party-address", "tetra.other_party_address",
11251 FT_UINT32, BASE_DEC, VALS(tetra_Calling_party_address_type_vals), 0,
11252 "Other_party_address_type", HFILL }},
11253 { &hf_tetra_optional_elements_15,
11254 { "optional-elements", "tetra.optional_elements",
11255 FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_15_vals), 0,
11256 "T_optional_elements_15", HFILL }},
11257 { &hf_tetra_type2_parameters_11,
11258 { "type2-parameters", "tetra.type2_parameters_element",
11259 FT_NONE, BASE_NONE, NULL, 0,
11260 "T_type2_parameters_11", HFILL }},
11261 { &hf_tetra_prop_07,
11262 { "prop", "tetra.prop",
11263 FT_UINT32, BASE_DEC, VALS(tetra_T_prop_06_vals), 0,
11264 "T_prop_06", HFILL }},
11265 { &hf_tetra_call_time_out,
11266 { "call-time-out", "tetra.call_time_out",
11267 FT_UINT32, BASE_DEC, NULL, 0,
11268 "INTEGER_0_15", HFILL }},
11269 { &hf_tetra_hook_method_selection_01,
11270 { "hook-method-selection", "tetra.hook_method_selection",
11271 FT_UINT32, BASE_DEC, NULL, 0,
11272 "INTEGER_0_1", HFILL }},
11273 { &hf_tetra_simplex_duplex_selection_02,
11274 { "simplex-duplex-selection", "tetra.simplex_duplex_selection",
11275 FT_UINT32, BASE_DEC, VALS(tetra_T_simplex_duplex_selection_02_vals), 0,
11276 "T_simplex_duplex_selection_02", HFILL }},
11277 { &hf_tetra_transmission_grant,
11278 { "transmission-grant", "tetra.transmission_grant",
11279 FT_UINT32, BASE_DEC, NULL, 0,
11280 "INTEGER_0_3", HFILL }},
11281 { &hf_tetra_optional_elements_16,
11282 { "optional-elements", "tetra.optional_elements",
11283 FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_16_vals), 0,
11284 "T_optional_elements_16", HFILL }},
11285 { &hf_tetra_type2_parameters_12,
11286 { "type2-parameters", "tetra.type2_parameters_element",
11287 FT_NONE, BASE_NONE, NULL, 0,
11288 "T_type2_parameters_12", HFILL }},
11289 { &hf_tetra_calling_party_address,
11290 { "calling-party-address", "tetra.calling_party_address",
11291 FT_UINT32, BASE_DEC, VALS(tetra_T_calling_party_address_vals), 0,
11292 NULL, HFILL }},
11293 { &hf_tetra_calling_party_address_01,
11294 { "calling-party-address", "tetra.calling_party_address",
11295 FT_UINT32, BASE_DEC, VALS(tetra_Calling_party_address_type_vals), 0,
11296 "Calling_party_address_type", HFILL }},
11297 { &hf_tetra_external_subscriber_number_02,
11298 { "external-subscriber-number", "tetra.external_subscriber_number",
11299 FT_UINT32, BASE_DEC, VALS(tetra_T_external_subscriber_number_01_vals), 0,
11300 "T_external_subscriber_number_01", HFILL }},
11301 { &hf_tetra_external_subscriber_number_03,
11302 { "external-subscriber-number", "tetra.external_subscriber_number",
11303 FT_UINT32, BASE_DEC, NULL, 0,
11304 "INTEGER_0_15", HFILL }},
11305 { &hf_tetra_prop_08,
11306 { "prop", "tetra.prop",
11307 FT_UINT32, BASE_DEC, VALS(tetra_T_prop_07_vals), 0,
11308 "T_prop_07", HFILL }},
11309 { &hf_tetra_call_time_out_setup_phase,
11310 { "call-time-out-setup-phase", "tetra.call_time_out_setup_phase",
11311 FT_UINT32, BASE_DEC, NULL, 0,
11312 "INTEGER_0_7", HFILL }},
11313 { &hf_tetra_simplex_duplex_selection_03,
11314 { "simplex-duplex-selection", "tetra.simplex_duplex_selection",
11315 FT_UINT32, BASE_DEC, NULL, 0,
11316 "INTEGER_0_1", HFILL }},
11317 { &hf_tetra_optional_elements_17,
11318 { "optional-elements", "tetra.optional_elements",
11319 FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_17_vals), 0,
11320 "T_optional_elements_17", HFILL }},
11321 { &hf_tetra_type2_parameters_13,
11322 { "type2-parameters", "tetra.type2_parameters_element",
11323 FT_NONE, BASE_NONE, NULL, 0,
11324 "T_type2_parameters_13", HFILL }},
11325 { &hf_tetra_basic_service_information_03,
11326 { "basic-service-information", "tetra.basic_service_information",
11327 FT_UINT32, BASE_DEC, VALS(tetra_T_basic_service_information_02_vals), 0,
11328 "T_basic_service_information_02", HFILL }},
11329 { &hf_tetra_call_status,
11330 { "call-status", "tetra.call_status",
11331 FT_UINT32, BASE_DEC, VALS(tetra_T_call_status_vals), 0,
11332 NULL, HFILL }},
11333 { &hf_tetra_call_status_01,
11334 { "call-status", "tetra.call_status",
11335 FT_UINT32, BASE_DEC, NULL, 0,
11336 "INTEGER_0_7", HFILL }},
11337 { &hf_tetra_notification_indicator,
11338 { "notification-indicator", "tetra.notification_indicator",
11339 FT_UINT32, BASE_DEC, VALS(tetra_T_notification_indicator_vals), 0,
11340 NULL, HFILL }},
11341 { &hf_tetra_notification_indicator_01,
11342 { "notification-indicator", "tetra.notification_indicator",
11343 FT_UINT32, BASE_DEC, NULL, 0,
11344 "INTEGER_0_63", HFILL }},
11345 { &hf_tetra_prop_09,
11346 { "prop", "tetra.prop",
11347 FT_UINT32, BASE_DEC, VALS(tetra_T_prop_08_vals), 0,
11348 "T_prop_08", HFILL }},
11349 { &hf_tetra_simplex_duplex_selection_04,
11350 { "simplex-duplex-selection", "tetra.simplex_duplex_selection",
11351 FT_UINT32, BASE_DEC, VALS(tetra_T_simplex_duplex_selection_03_vals), 0,
11352 "T_simplex_duplex_selection_03", HFILL }},
11353 { &hf_tetra_call_queued,
11354 { "call-queued", "tetra.call_queued",
11355 FT_BOOLEAN, BASE_NONE, NULL, 0,
11356 "BOOLEAN", HFILL }},
11357 { &hf_tetra_optional_elements_18,
11358 { "optional-elements", "tetra.optional_elements",
11359 FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_18_vals), 0,
11360 "T_optional_elements_18", HFILL }},
11361 { &hf_tetra_type2_parameters_14,
11362 { "type2-parameters", "tetra.type2_parameters_element",
11363 FT_NONE, BASE_NONE, NULL, 0,
11364 "T_type2_parameters_14", HFILL }},
11365 { &hf_tetra_basic_service_infomation,
11366 { "basic-service-infomation", "tetra.basic_service_infomation",
11367 FT_UINT32, BASE_DEC, VALS(tetra_T_basic_service_infomation_vals), 0,
11368 NULL, HFILL }},
11369 { &hf_tetra_basic_service_infomation_01,
11370 { "basic-service-infomation", "tetra.basic_service_infomation_element",
11371 FT_NONE, BASE_NONE, NULL, 0,
11372 "Basic_service_information", HFILL }},
11373 { &hf_tetra_notification_indicator_02,
11374 { "notification-indicator", "tetra.notification_indicator",
11375 FT_UINT32, BASE_DEC, VALS(tetra_T_notification_indicator_01_vals), 0,
11376 "T_notification_indicator_01", HFILL }},
11377 { &hf_tetra_prop_10,
11378 { "prop", "tetra.prop",
11379 FT_UINT32, BASE_DEC, VALS(tetra_T_prop_09_vals), 0,
11380 "T_prop_09", HFILL }},
11381 { &hf_tetra_call_time_out_01,
11382 { "call-time-out", "tetra.call_time_out",
11383 FT_UINT32, BASE_DEC, NULL, 0,
11384 "INTEGER_0_31", HFILL }},
11385 { &hf_tetra_simplex_duplex_selection_05,
11386 { "simplex-duplex-selection", "tetra.simplex_duplex_selection",
11387 FT_UINT32, BASE_DEC, VALS(tetra_T_simplex_duplex_selection_04_vals), 0,
11388 "T_simplex_duplex_selection_04", HFILL }},
11389 { &hf_tetra_call_ownership,
11390 { "call-ownership", "tetra.call_ownership",
11391 FT_UINT32, BASE_DEC, NULL, 0,
11392 "INTEGER_0_1", HFILL }},
11393 { &hf_tetra_optional_elements_19,
11394 { "optional-elements", "tetra.optional_elements",
11395 FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_19_vals), 0,
11396 "T_optional_elements_19", HFILL }},
11397 { &hf_tetra_type2_parameters_15,
11398 { "type2-parameters", "tetra.type2_parameters_element",
11399 FT_NONE, BASE_NONE, NULL, 0,
11400 "T_type2_parameters_15", HFILL }},
11401 { &hf_tetra_call_priority_01,
11402 { "call-priority", "tetra.call_priority",
11403 FT_UINT32, BASE_DEC, VALS(tetra_T_call_priority_vals), 0,
11404 NULL, HFILL }},
11405 { &hf_tetra_basic_service_information_04,
11406 { "basic-service-information", "tetra.basic_service_information",
11407 FT_UINT32, BASE_DEC, VALS(tetra_T_basic_service_information_03_vals), 0,
11408 "T_basic_service_information_03", HFILL }},
11409 { &hf_tetra_temporary_address,
11410 { "temporary-address", "tetra.temporary_address",
11411 FT_UINT32, BASE_DEC, VALS(tetra_T_temporary_address_vals), 0,
11412 NULL, HFILL }},
11413 { &hf_tetra_temporary_address_01,
11414 { "temporary-address", "tetra.temporary_address",
11415 FT_UINT32, BASE_DEC, VALS(tetra_Calling_party_address_type_vals), 0,
11416 "Calling_party_address_type", HFILL }},
11417 { &hf_tetra_notification_indicator_03,
11418 { "notification-indicator", "tetra.notification_indicator",
11419 FT_UINT32, BASE_DEC, VALS(tetra_T_notification_indicator_02_vals), 0,
11420 "T_notification_indicator_02", HFILL }},
11421 { &hf_tetra_prop_11,
11422 { "prop", "tetra.prop",
11423 FT_UINT32, BASE_DEC, VALS(tetra_T_prop_10_vals), 0,
11424 "T_prop_10", HFILL }},
11425 { &hf_tetra_optional_elements_20,
11426 { "optional-elements", "tetra.optional_elements",
11427 FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_20_vals), 0,
11428 "T_optional_elements_20", HFILL }},
11429 { &hf_tetra_type2_parameters_16,
11430 { "type2-parameters", "tetra.type2_parameters_element",
11431 FT_NONE, BASE_NONE, NULL, 0,
11432 "T_type2_parameters_16", HFILL }},
11433 { &hf_tetra_notification_indicator_04,
11434 { "notification-indicator", "tetra.notification_indicator",
11435 FT_UINT32, BASE_DEC, VALS(tetra_T_notification_indicator_03_vals), 0,
11436 "T_notification_indicator_03", HFILL }},
11437 { &hf_tetra_prop_12,
11438 { "prop", "tetra.prop",
11439 FT_UINT32, BASE_DEC, VALS(tetra_T_prop_11_vals), 0,
11440 "T_prop_11", HFILL }},
11441 { &hf_tetra_optional_elements_21,
11442 { "optional-elements", "tetra.optional_elements",
11443 FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_21_vals), 0,
11444 "T_optional_elements_21", HFILL }},
11445 { &hf_tetra_type2_parameters_17,
11446 { "type2-parameters", "tetra.type2_parameters_element",
11447 FT_NONE, BASE_NONE, NULL, 0,
11448 "T_type2_parameters_17", HFILL }},
11449 { &hf_tetra_notification_indicator_05,
11450 { "notification-indicator", "tetra.notification_indicator",
11451 FT_UINT32, BASE_DEC, VALS(tetra_T_notification_indicator_04_vals), 0,
11452 "T_notification_indicator_04", HFILL }},
11453 { &hf_tetra_prop_13,
11454 { "prop", "tetra.prop",
11455 FT_UINT32, BASE_DEC, VALS(tetra_T_prop_12_vals), 0,
11456 "T_prop_12", HFILL }},
11457 { &hf_tetra_reset_call_time_out,
11458 { "reset-call-time-out", "tetra.reset_call_time_out",
11459 FT_UINT32, BASE_DEC, NULL, 0,
11460 "INTEGER_0_1", HFILL }},
11461 { &hf_tetra_optional_elements_22,
11462 { "optional-elements", "tetra.optional_elements",
11463 FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_22_vals), 0,
11464 "T_optional_elements_22", HFILL }},
11465 { &hf_tetra_type2_parameters_18,
11466 { "type2-parameters", "tetra.type2_parameters_element",
11467 FT_NONE, BASE_NONE, NULL, 0,
11468 "T_type2_parameters_18", HFILL }},
11469 { &hf_tetra_new_call_identifier,
11470 { "new-call-identifier", "tetra.new_call_identifier",
11471 FT_UINT32, BASE_DEC, VALS(tetra_T_new_call_identifier_vals), 0,
11472 NULL, HFILL }},
11473 { &hf_tetra_new_call_identifier_01,
11474 { "new-call-identifier", "tetra.new_call_identifier",
11475 FT_UINT32, BASE_DEC, NULL, 0,
11476 "INTEGER_0_1023", HFILL }},
11477 { &hf_tetra_call_time_out_02,
11478 { "call-time-out", "tetra.call_time_out",
11479 FT_UINT32, BASE_DEC, VALS(tetra_T_call_time_out_vals), 0,
11480 NULL, HFILL }},
11481 { &hf_tetra_call_time_out_03,
11482 { "call-time-out", "tetra.call_time_out",
11483 FT_UINT32, BASE_DEC, NULL, 0,
11484 "INTEGER_0_7", HFILL }},
11485 { &hf_tetra_call_status_02,
11486 { "call-status", "tetra.call_status",
11487 FT_UINT32, BASE_DEC, VALS(tetra_T_call_status_01_vals), 0,
11488 "T_call_status_01", HFILL }},
11489 { &hf_tetra_modify,
11490 { "modify", "tetra.modify",
11491 FT_UINT32, BASE_DEC, VALS(tetra_T_modify_vals), 0,
11492 NULL, HFILL }},
11493 { &hf_tetra_modify_01,
11494 { "modify", "tetra.modify_element",
11495 FT_NONE, BASE_NONE, NULL, 0,
11496 "Modify_type", HFILL }},
11497 { &hf_tetra_notification_indicator_06,
11498 { "notification-indicator", "tetra.notification_indicator",
11499 FT_UINT32, BASE_DEC, VALS(tetra_T_notification_indicator_05_vals), 0,
11500 "T_notification_indicator_05", HFILL }},
11501 { &hf_tetra_prop_14,
11502 { "prop", "tetra.prop",
11503 FT_UINT32, BASE_DEC, VALS(tetra_T_prop_13_vals), 0,
11504 "T_prop_13", HFILL }},
11505 { &hf_tetra_optional_elements_23,
11506 { "optional-elements", "tetra.optional_elements",
11507 FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_23_vals), 0,
11508 "T_optional_elements_23", HFILL }},
11509 { &hf_tetra_type2_parameters_19,
11510 { "type2-parameters", "tetra.type2_parameters_element",
11511 FT_NONE, BASE_NONE, NULL, 0,
11512 "T_type2_parameters_19", HFILL }},
11513 { &hf_tetra_notification_indicator_07,
11514 { "notification-indicator", "tetra.notification_indicator",
11515 FT_UINT32, BASE_DEC, VALS(tetra_T_notification_indicator_06_vals), 0,
11516 "T_notification_indicator_06", HFILL }},
11517 { &hf_tetra_prop_15,
11518 { "prop", "tetra.prop",
11519 FT_UINT32, BASE_DEC, VALS(tetra_T_prop_14_vals), 0,
11520 "T_prop_14", HFILL }},
11521 { &hf_tetra_group_identity_ack_request,
11522 { "group-identity-ack-request", "tetra.group_identity_ack_request",
11523 FT_BOOLEAN, BASE_NONE, NULL, 0,
11524 "BOOLEAN", HFILL }},
11525 { &hf_tetra_optional_elements_24,
11526 { "optional-elements", "tetra.optional_elements",
11527 FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_24_vals), 0,
11528 "T_optional_elements_24", HFILL }},
11529 { &hf_tetra_type2_element_02,
11530 { "type2-element", "tetra.type2_element_element",
11531 FT_NONE, BASE_NONE, NULL, 0,
11532 "T_type2_element_02", HFILL }},
11533 { &hf_tetra_type3_04,
11534 { "type3", "tetra.type3",
11535 FT_UINT32, BASE_DEC, VALS(tetra_T_type3_04_vals), 0,
11536 "T_type3_04", HFILL }},
11537 { &hf_tetra_type3_elements_04,
11538 { "type3-elements", "tetra.type3_elements_element",
11539 FT_NONE, BASE_NONE, NULL, 0,
11540 "T_type3_elements_04", HFILL }},
11541 { &hf_tetra_group_identity_downlink_02,
11542 { "group-identity-downlink", "tetra.group_identity_downlink_element",
11543 FT_NONE, BASE_NONE, NULL, 0,
11544 NULL, HFILL }},
11545 { &hf_tetra_group_identity_attach_detach_accept,
11546 { "group-identity-attach-detach-accept", "tetra.group_identity_attach_detach_accept",
11547 FT_BOOLEAN, BASE_NONE, NULL, 0,
11548 "BOOLEAN", HFILL }},
11549 { &hf_tetra_optional_elements_25,
11550 { "optional-elements", "tetra.optional_elements",
11551 FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_25_vals), 0,
11552 "T_optional_elements_25", HFILL }},
11553 { &hf_tetra_type2_element_03,
11554 { "type2-element", "tetra.type2_element_element",
11555 FT_NONE, BASE_NONE, NULL, 0,
11556 "T_type2_element_03", HFILL }},
11557 { &hf_tetra_type3_05,
11558 { "type3", "tetra.type3",
11559 FT_UINT32, BASE_DEC, VALS(tetra_T_type3_05_vals), 0,
11560 "T_type3_05", HFILL }},
11561 { &hf_tetra_type3_elements_05,
11562 { "type3-elements", "tetra.type3_elements_element",
11563 FT_NONE, BASE_NONE, NULL, 0,
11564 "T_type3_elements_05", HFILL }},
11565 { &hf_tetra_called_party_sna,
11566 { "called-party-sna", "tetra.called_party_sna",
11567 FT_UINT32, BASE_DEC, NULL, 0,
11568 "INTEGER_0_255", HFILL }},
11569 { &hf_tetra_called_party_ssi,
11570 { "called-party-ssi", "tetra.called_party_ssi",
11571 FT_UINT32, BASE_DEC, NULL, 0,
11572 "INTEGER_0_16777215", HFILL }},
11573 { &hf_tetra_called_party_ssi_extension,
11574 { "called-party-ssi-extension", "tetra.called_party_ssi_extension_element",
11575 FT_NONE, BASE_NONE, NULL, 0,
11576 NULL, HFILL }},
11577 { &hf_tetra_called_party_extention,
11578 { "called-party-extention", "tetra.called_party_extention",
11579 FT_UINT32, BASE_DEC, NULL, 0,
11580 "INTEGER_0_16777215", HFILL }},
11581 { &hf_tetra_data_01,
11582 { "data", "tetra.data",
11583 FT_UINT32, BASE_DEC, VALS(tetra_T_data_01_vals), 0,
11584 "T_data_01", HFILL }},
11585 { &hf_tetra_element1,
11586 { "element1", "tetra.element1_element",
11587 FT_NONE, BASE_NONE, NULL, 0,
11588 "Type1", HFILL }},
11589 { &hf_tetra_element,
11590 { "element", "tetra.element_element",
11591 FT_NONE, BASE_NONE, NULL, 0,
11592 "Type2", HFILL }},
11593 { &hf_tetra_proprietary_element_owner,
11594 { "proprietary-element-owner", "tetra.proprietary_element_owner",
11595 FT_UINT32, BASE_DEC, NULL, 0,
11596 NULL, HFILL }},
11597 { &hf_tetra_proprietary_element_owner_extension,
11598 { "proprietary-element-owner-extension", "tetra.proprietary_element_owner_extension",
11599 FT_BYTES, BASE_NONE, NULL, 0,
11600 "BIT_STRING", HFILL }},
11601 { &hf_tetra_simplex_duplex_selection_06,
11602 { "simplex-duplex-selection", "tetra.simplex_duplex_selection",
11603 FT_UINT32, BASE_DEC, VALS(tetra_T_simplex_duplex_selection_05_vals), 0,
11604 "T_simplex_duplex_selection_05", HFILL }},
11607 /* List of subtrees */
11608 static int *ett[] = {
11609 &ett_tetra,
11610 &ett_tetra_header,
11611 &ett_tetra_length,
11612 &ett_tetra_txreg,
11613 &ett_tetra_text,
11614 &ett_tetra_AACH,
11615 &ett_tetra_BSCH,
11616 &ett_tetra_MLE_Sync,
11617 &ett_tetra_BNCH,
11618 &ett_tetra_T_hyperframe_or_cck,
11619 &ett_tetra_T_optional_params,
11620 &ett_tetra_TS_COMMON_FRAMES,
11621 &ett_tetra_Default_Code_A,
11622 &ett_tetra_Extended_Services_Broadcast,
11623 &ett_tetra_T_section,
11624 &ett_tetra_PRESENT1,
11625 &ett_tetra_MAC_ACCESS,
11626 &ett_tetra_T_data,
11627 &ett_tetra_Address,
11628 &ett_tetra_U_LLC_PDU,
11629 &ett_tetra_U_BL_ACK_FCS,
11630 &ett_tetra_U_MLE_PDU_FCS,
11631 &ett_tetra_U_BL_DATA_FCS,
11632 &ett_tetra_U_BL_ADATA_FCS,
11633 &ett_tetra_U_MLE_PDU,
11634 &ett_tetra_ComplexSDU,
11635 &ett_tetra_T_lengthIndicationOrCapacityRequest,
11636 &ett_tetra_FRAG,
11637 &ett_tetra_MAC_DATA,
11638 &ett_tetra_T_lengthIndicationOrCapacityRequest_01,
11639 &ett_tetra_FRAG6,
11640 &ett_tetra_MAC_FRAG,
11641 &ett_tetra_MAC_FRAG120,
11642 &ett_tetra_MAC_END_UPLINK,
11643 &ett_tetra_MAC_END_UP114,
11644 &ett_tetra_MAC_END_HU,
11645 &ett_tetra_T_lengthInd_ReservationReq,
11646 &ett_tetra_MAC_END_DOWNLINK,
11647 &ett_tetra_T_slot_granting,
11648 &ett_tetra_T_channel_allocation,
11649 &ett_tetra_SlotGranting,
11650 &ett_tetra_ChannelAllocation,
11651 &ett_tetra_T_extend_carrier_flag,
11652 &ett_tetra_T_monitoring_pattern,
11653 &ett_tetra_Extended_carrier_flag,
11654 &ett_tetra_MAC_END_DOWN111,
11655 &ett_tetra_T_slot_granting_01,
11656 &ett_tetra_T_channel_allocation_01,
11657 &ett_tetra_MAC_RESOURCE,
11658 &ett_tetra_OTHER_DATA,
11659 &ett_tetra_T_power_control,
11660 &ett_tetra_T_slot_granting_02,
11661 &ett_tetra_T_channel_allocation_02,
11662 &ett_tetra_AddressMacResource,
11663 &ett_tetra_SSI_NEED,
11664 &ett_tetra_EVENT_NEED,
11665 &ett_tetra_USSI_NEED,
11666 &ett_tetra_SMI_NEED,
11667 &ett_tetra_SSI_EVENT_NEED,
11668 &ett_tetra_SSI_USAGE_NEED,
11669 &ett_tetra_SMI_EVENT_NEED,
11670 &ett_tetra_MAC_ACCESS_DEFINE,
11671 &ett_tetra_T_optional_field,
11672 &ett_tetra_D_LLC_PDU,
11673 &ett_tetra_D_BL_ACK_FCS,
11674 &ett_tetra_D_MLE_PDU_FCS,
11675 &ett_tetra_D_BL_ADATA_FCS,
11676 &ett_tetra_D_BL_DATA_FCS,
11677 &ett_tetra_U_BL_ACK,
11678 &ett_tetra_D_BL_ACK,
11679 &ett_tetra_U_BL_DATA,
11680 &ett_tetra_D_BL_DATA,
11681 &ett_tetra_U_BL_ADATA,
11682 &ett_tetra_D_BL_ADATA,
11683 &ett_tetra_D_MLE_PDU,
11684 &ett_tetra_UMLE_PDU,
11685 &ett_tetra_DMLE_PDU,
11686 &ett_tetra_U_PREPARE,
11687 &ett_tetra_T_optional_elements,
11688 &ett_tetra_T_type2_parameters,
11689 &ett_tetra_T_cell_number,
11690 &ett_tetra_U_RESTORE,
11691 &ett_tetra_T_optional_elements_01,
11692 &ett_tetra_T_type2_parameters_01,
11693 &ett_tetra_T_mcc,
11694 &ett_tetra_T_mnc,
11695 &ett_tetra_T_la,
11696 &ett_tetra_D_NEW_CELL,
11697 &ett_tetra_T_optional_elements_02,
11698 &ett_tetra_D_PREPARE_FAIL,
11699 &ett_tetra_T_optional_elements_03,
11700 &ett_tetra_D_NWRK_BRDADCAST,
11701 &ett_tetra_T_optional_elements_04,
11702 &ett_tetra_T_type2_parameters_02,
11703 &ett_tetra_T_tetra_network_time,
11704 &ett_tetra_T_number_of_neighbour_cells,
11705 &ett_tetra_TETRA_NETWORK_TIME,
11706 &ett_tetra_D_RESTORE_ACK,
11707 &ett_tetra_D_RESTORE_FAIL,
11708 &ett_tetra_U_MM_PDU,
11709 &ett_tetra_D_MM_PDU,
11710 &ett_tetra_GROUP_IDENTITY_DOWNLINK,
11711 &ett_tetra_T_attach_detach_identifier,
11712 &ett_tetra_T_attach,
11713 &ett_tetra_T_detach,
11714 &ett_tetra_T_address_type,
11715 &ett_tetra_T_gssi_extension,
11716 &ett_tetra_GROUP_IDENTITY_UPLINK,
11717 &ett_tetra_T_attach_detach_identifier_01,
11718 &ett_tetra_T_attach_01,
11719 &ett_tetra_T_detach_01,
11720 &ett_tetra_T_address_type_01,
11721 &ett_tetra_T_gssi_extension_01,
11722 &ett_tetra_D_LOCATION_UPDATE_ACCEPT,
11723 &ett_tetra_T_optional_elements_05,
11724 &ett_tetra_T_type2_parameters_03,
11725 &ett_tetra_T_ssi,
11726 &ett_tetra_T_address_extension,
11727 &ett_tetra_T_subscriber_class,
11728 &ett_tetra_T_energy_saving_mode,
11729 &ett_tetra_T_scch_info,
11730 &ett_tetra_T_type3,
11731 &ett_tetra_T_type3_elements,
11732 &ett_tetra_T_new_ra,
11733 &ett_tetra_T_group_identity_location_accept,
11734 &ett_tetra_T_group_predefined_lifetime,
11735 &ett_tetra_T_group_identity_downlink,
11736 &ett_tetra_T_proprietary,
11737 &ett_tetra_D_LOCATION_UPDATE_REJECT,
11738 &ett_tetra_U_MM_STATUS,
11739 &ett_tetra_D_MM_STATUS,
11740 &ett_tetra_U_CMCE_PDU,
11741 &ett_tetra_U_RELEASE,
11742 &ett_tetra_U_SDS_DATA,
11743 &ett_tetra_T_called_party_type_identifier,
11744 &ett_tetra_T_short_data_type_identifier,
11745 &ett_tetra_U_STATUS,
11746 &ett_tetra_T_called_party_type_identifier_01,
11747 &ett_tetra_U_INFO,
11748 &ett_tetra_D_CMCE_PDU,
11749 &ett_tetra_D_SDS_DATA,
11750 &ett_tetra_T_calling_party_type_identifier,
11751 &ett_tetra_T_short_data_type_identifier_01,
11752 &ett_tetra_D_STATUS,
11753 &ett_tetra_T_calling_party_type_identifier_01,
11754 &ett_tetra_D_DISCONNECT,
11755 &ett_tetra_D_INFO,
11756 &ett_tetra_D_TX_WAIT,
11757 &ett_tetra_D_TX_CONTINUE,
11758 &ett_tetra_U_LOCATION_UPDATE_DEMAND,
11759 &ett_tetra_T_cipher_control,
11760 &ett_tetra_T_optional_elements_06,
11761 &ett_tetra_T_type2_parameters_04,
11762 &ett_tetra_T_class_of_MS,
11763 &ett_tetra_T_energy_saving_mode_01,
11764 &ett_tetra_T_la_information,
11765 &ett_tetra_T_ssi_01,
11766 &ett_tetra_T_address_extension_01,
11767 &ett_tetra_T_type3_01,
11768 &ett_tetra_T_type3_elements_01,
11769 &ett_tetra_T_group_identity_location_demand,
11770 &ett_tetra_T_group_report_response,
11771 &ett_tetra_T_group_identity_uplink,
11772 &ett_tetra_T_proprietary_01,
11773 &ett_tetra_U_ATTACH_DETACH_GROUP_IDENTITY,
11774 &ett_tetra_T_optional_elements_07,
11775 &ett_tetra_T_type2_element,
11776 &ett_tetra_T_type3_02,
11777 &ett_tetra_T_type3_elements_02,
11778 &ett_tetra_U_ATTACH_DETACH_GROUP_IDENTITY_ACK,
11779 &ett_tetra_T_optional_elements_08,
11780 &ett_tetra_T_type2_element_01,
11781 &ett_tetra_T_type3_03,
11782 &ett_tetra_T_type3_elements_03,
11783 &ett_tetra_U_SETUP,
11784 &ett_tetra_T_optional_elements_09,
11785 &ett_tetra_T_type2_parameters_05,
11786 &ett_tetra_T_external_subscriber_number,
11787 &ett_tetra_T_prop,
11788 &ett_tetra_Basic_service_information,
11789 &ett_tetra_U_ALERT,
11790 &ett_tetra_T_optional_elements_10,
11791 &ett_tetra_T_type2_parameters_06,
11792 &ett_tetra_T_basic_service_information,
11793 &ett_tetra_T_prop_01,
11794 &ett_tetra_U_CONNECT,
11795 &ett_tetra_T_optional_elements_11,
11796 &ett_tetra_T_type2_parameters_07,
11797 &ett_tetra_T_basic_service_information_01,
11798 &ett_tetra_T_prop_02,
11799 &ett_tetra_U_TX_CEASED,
11800 &ett_tetra_T_optional_elements_12,
11801 &ett_tetra_T_type2_parameters_08,
11802 &ett_tetra_T_prop_03,
11803 &ett_tetra_U_TX_DEMAND,
11804 &ett_tetra_T_optional_elements_13,
11805 &ett_tetra_T_type2_parameters_09,
11806 &ett_tetra_T_prop_04,
11807 &ett_tetra_U_DISCONNECT,
11808 &ett_tetra_T_optional_elements_14,
11809 &ett_tetra_T_type2_parameters_10,
11810 &ett_tetra_T_prop_05,
11811 &ett_tetra_U_CALL_RESTORE,
11812 &ett_tetra_T_optional_elements_15,
11813 &ett_tetra_T_type2_parameters_11,
11814 &ett_tetra_T_prop_06,
11815 &ett_tetra_D_SETUP,
11816 &ett_tetra_T_optional_elements_16,
11817 &ett_tetra_T_type2_parameters_12,
11818 &ett_tetra_T_calling_party_address,
11819 &ett_tetra_T_external_subscriber_number_01,
11820 &ett_tetra_T_prop_07,
11821 &ett_tetra_D_CALL_PROCEEDING,
11822 &ett_tetra_T_optional_elements_17,
11823 &ett_tetra_T_type2_parameters_13,
11824 &ett_tetra_T_basic_service_information_02,
11825 &ett_tetra_T_call_status,
11826 &ett_tetra_T_notification_indicator,
11827 &ett_tetra_T_prop_08,
11828 &ett_tetra_D_ALERT,
11829 &ett_tetra_T_optional_elements_18,
11830 &ett_tetra_T_type2_parameters_14,
11831 &ett_tetra_T_basic_service_infomation,
11832 &ett_tetra_T_notification_indicator_01,
11833 &ett_tetra_T_prop_09,
11834 &ett_tetra_D_CONNECT,
11835 &ett_tetra_T_optional_elements_19,
11836 &ett_tetra_T_type2_parameters_15,
11837 &ett_tetra_T_call_priority,
11838 &ett_tetra_T_basic_service_information_03,
11839 &ett_tetra_T_temporary_address,
11840 &ett_tetra_T_notification_indicator_02,
11841 &ett_tetra_T_prop_10,
11842 &ett_tetra_D_CONNECT_ACK,
11843 &ett_tetra_T_optional_elements_20,
11844 &ett_tetra_T_type2_parameters_16,
11845 &ett_tetra_T_notification_indicator_03,
11846 &ett_tetra_T_prop_11,
11847 &ett_tetra_D_RELEASE,
11848 &ett_tetra_T_optional_elements_21,
11849 &ett_tetra_T_type2_parameters_17,
11850 &ett_tetra_T_notification_indicator_04,
11851 &ett_tetra_T_prop_12,
11852 &ett_tetra_D_CALL_RESTORE,
11853 &ett_tetra_T_optional_elements_22,
11854 &ett_tetra_T_type2_parameters_18,
11855 &ett_tetra_T_new_call_identifier,
11856 &ett_tetra_T_call_time_out,
11857 &ett_tetra_T_call_status_01,
11858 &ett_tetra_T_modify,
11859 &ett_tetra_T_notification_indicator_05,
11860 &ett_tetra_T_prop_13,
11861 &ett_tetra_D_TX_CEASED,
11862 &ett_tetra_T_optional_elements_23,
11863 &ett_tetra_T_type2_parameters_19,
11864 &ett_tetra_T_notification_indicator_06,
11865 &ett_tetra_T_prop_14,
11866 &ett_tetra_D_TX_GRANTED,
11867 &ett_tetra_D_ATTACH_DETACH_GROUP_IDENTITY,
11868 &ett_tetra_T_optional_elements_24,
11869 &ett_tetra_T_type2_element_02,
11870 &ett_tetra_T_type3_04,
11871 &ett_tetra_T_type3_elements_04,
11872 &ett_tetra_D_ATTACH_DETACH_GROUP_IDENTITY_ACK,
11873 &ett_tetra_T_optional_elements_25,
11874 &ett_tetra_T_type2_element_03,
11875 &ett_tetra_T_type3_05,
11876 &ett_tetra_T_type3_elements_05,
11877 &ett_tetra_Calling_party_address_type,
11878 &ett_tetra_T_called_party_ssi_extension,
11879 &ett_tetra_Proprietary,
11880 &ett_tetra_T_data_01,
11881 &ett_tetra_Type1,
11882 &ett_tetra_Type2,
11883 &ett_tetra_Modify_type,
11886 static ei_register_info ei[] = {
11887 { &ei_tetra_channels_incorrect, { "tetra.channels.incorrect", PI_MALFORMED, PI_WARN, "Channel count incorrect, must be <= 3", EXPFILL }},
11890 proto_tetra = proto_register_protocol("TETRA Protocol", "TETRA", "tetra");
11891 proto_register_field_array (proto_tetra, hf, array_length (hf));
11892 proto_register_subtree_array (ett, array_length (ett));
11893 tetra_handle = register_dissector("tetra", dissect_tetra, proto_tetra);
11894 expert_tetra = expert_register_protocol(proto_tetra);
11895 expert_register_field_array(expert_tetra, ei, array_length(ei));
11897 tetra_module = prefs_register_protocol(proto_tetra, NULL);
11898 prefs_register_bool_preference(tetra_module, "include_carrier_number",
11899 "The data include carrier numbers",
11900 "Whether the captured data include carrier number",
11901 &include_carrier_number);