MSWSP: fix dissect_mswsp_smb()
[wireshark-wip.git] / epan / dissectors / packet-tetra.c
blob049e35f30c2ce9e3b7bb62a0f054ad38f30637d9
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 /* ../../tools/asn2wrs.py -u -p tetra -c ./tetra.cnf -s ./packet-tetra-template -D . -O ../../epan/dissectors tetra.asn */
6 /* Input file: packet-tetra-template.c */
8 #line 1 "../../asn1/tetra/packet-tetra-template.c"
9 /* packet-tetra.c
10 * Routines for TETRA packet dissection
12 *$Id$
14 * Copyright (c) 2007 - 2011 Professional Mobile Communication Research Group,
15 * Beijing Institute of Technology, China
16 * Copyright (c) 2011 Holger Hans Peter Freyther
18 * Wireshark - Network traffic analyzer
19 * By Gerald Combs <gerald@wireshark.org>
20 * Copyright 1998 Gerald Combs
22 * This program is free software; you can redistribute it and/or
23 * modify it under the terms of the GNU General Public License
24 * as published by the Free Software Foundation; either version 2
25 * of the License, or (at your option) any later version.
27 * This program is distributed in the hope that it will be useful,
28 * but WITHOUT ANY WARRANTY; without even the implied warranty of
29 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
30 * GNU General Public License for more details.
32 * You should have received a copy of the GNU General Public License
33 * along with this program; if not, write to the Free Software
34 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
36 * REF: ETSI EN 300 392-2 V3.2.1
39 #include "config.h"
41 #include <glib.h>
42 #include <epan/expert.h>
43 #include <epan/packet.h>
44 #include <epan/prefs.h>
45 #include <epan/oids.h>
46 #include <epan/conversation.h>
47 #include <epan/asn1.h>
49 #include <stdio.h>
50 #include <string.h>
52 #include <epan/dissectors/packet-per.h>
53 #include "packet-tetra.h"
55 #define PROTO_TAG_tetra "TETRA"
57 /* Wireshark ID of the tetra protocol */
58 static int proto_tetra = -1;
60 /* These are the handles of our subdissectors */
61 static dissector_handle_t data_handle = NULL;
63 static dissector_handle_t tetra_handle;
64 static void dissect_tetra(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
66 static int global_tetra_port = 7074;
68 /* Whether the capture data include carrier numbers */
69 static gboolean include_carrier_number = TRUE;
71 /* The following hf_* variables are used to hold the Wireshark IDs of
72 * our header fields; they are filled out when we call
73 * proto_register_field_array() in proto_register_tetra()
75 /** Kts attempt at defining the protocol */
76 static gint hf_tetra = -1;
77 static gint hf_tetra_header = -1;
78 static gint hf_tetra_channels = -1;
79 static gint hf_tetra_channel1 = -1;
80 static gint hf_tetra_channel2 = -1;
81 static gint hf_tetra_channel3 = -1;
82 static gint hf_tetra_txreg = -1;
83 static gint hf_tetra_timer = -1;
84 static gint hf_tetra_pdu = -1;
85 static gint hf_tetra_rvstr = -1;
86 static gint hf_tetra_carriernumber = -1;
87 static gint hf_tetra_rxchannel1 = -1;
88 static gint hf_tetra_rxchannel2 = -1;
89 static gint hf_tetra_rxchannel3 = -1;
90 static gint hf_tetra_crc = -1;
91 static gint hf_tetra_len0 = -1;
94 /*--- Included file: packet-tetra-hf.c ---*/
95 #line 1 "../../asn1/tetra/packet-tetra-hf.c"
96 static int hf_tetra_AACH_PDU = -1; /* AACH */
97 static int hf_tetra_BSCH_PDU = -1; /* BSCH */
98 static int hf_tetra_BNCH_PDU = -1; /* BNCH */
99 static int hf_tetra_MAC_ACCESS_PDU = -1; /* MAC_ACCESS */
100 static int hf_tetra_MAC_DATA_PDU = -1; /* MAC_DATA */
101 static int hf_tetra_MAC_FRAG_PDU = -1; /* MAC_FRAG */
102 static int hf_tetra_MAC_FRAG120_PDU = -1; /* MAC_FRAG120 */
103 static int hf_tetra_MAC_END_UPLINK_PDU = -1; /* MAC_END_UPLINK */
104 static int hf_tetra_MAC_END_UP114_PDU = -1; /* MAC_END_UP114 */
105 static int hf_tetra_MAC_END_HU_PDU = -1; /* MAC_END_HU */
106 static int hf_tetra_MAC_END_DOWNLINK_PDU = -1; /* MAC_END_DOWNLINK */
107 static int hf_tetra_MAC_END_DOWN111_PDU = -1; /* MAC_END_DOWN111 */
108 static int hf_tetra_MAC_RESOURCE_PDU = -1; /* MAC_RESOURCE */
109 static int hf_tetra_MAC_ACCESS_DEFINE_PDU = -1; /* MAC_ACCESS_DEFINE */
110 static int hf_tetra_function = -1; /* INTEGER_0_3 */
111 static int hf_tetra_field1 = -1; /* INTEGER_0_63 */
112 static int hf_tetra_field2 = -1; /* INTEGER_0_63 */
113 static int hf_tetra_system_code = -1; /* System_Code */
114 static int hf_tetra_colour_code = -1; /* Colour_Code */
115 static int hf_tetra_timeslot_number = -1; /* Timeslot_Number */
116 static int hf_tetra_frame_number = -1; /* Frame_Number */
117 static int hf_tetra_multiple_frame_number = -1; /* Multiple_Frame_Number */
118 static int hf_tetra_sharing_mod = -1; /* Sharing_Mod */
119 static int hf_tetra_ts_reserved_frames = -1; /* TS_Reserved_Frames */
120 static int hf_tetra_u_plane_dtx = -1; /* U_Plane_DTX */
121 static int hf_tetra_frame_18_extension = -1; /* Frame_18_Extension */
122 static int hf_tetra_reserved = -1; /* Reserved */
123 static int hf_tetra_tm_sdu = -1; /* MLE_Sync */
124 static int hf_tetra_mcc = -1; /* INTEGER_0_1023 */
125 static int hf_tetra_mnc = -1; /* INTEGER_0_16383 */
126 static int hf_tetra_neighbour_cell_broadcast = -1; /* INTEGER_0_3 */
127 static int hf_tetra_cell_service_level = -1; /* INTEGER_0_3 */
128 static int hf_tetra_late_entry_information = -1; /* INTEGER_0_1 */
129 static int hf_tetra_pdu_type = -1; /* INTEGER_0_3 */
130 static int hf_tetra_broadcast_type = -1; /* INTEGER_0_3 */
131 static int hf_tetra_main_carrier = -1; /* INTEGER_0_4095 */
132 static int hf_tetra_frequency_band = -1; /* INTEGER_0_15 */
133 static int hf_tetra_offset = -1; /* Offset */
134 static int hf_tetra_duplex_spacing = -1; /* INTEGER_0_7 */
135 static int hf_tetra_reverse_operation = -1; /* Reverse_Operation */
136 static int hf_tetra_sencond_ctl_carrier = -1; /* Sencond_Ctl_Carrier */
137 static int hf_tetra_ms_txpwr_max_cell = -1; /* MS_TXPWR_MAX_CELL */
138 static int hf_tetra_rxlev_access_min = -1; /* RXLEV_ACCESS_MIN */
139 static int hf_tetra_access_parameter = -1; /* ACCESS_PARAMETER */
140 static int hf_tetra_radio_downlink_timeout = -1; /* RADIO_DOWNLINK_TIMEOUT */
141 static int hf_tetra_hyperframe_or_cck = -1; /* T_hyperframe_or_cck */
142 static int hf_tetra_hyperframe = -1; /* INTEGER_0_65535 */
143 static int hf_tetra_cckid = -1; /* INTEGER_0_65535 */
144 static int hf_tetra_optional_params = -1; /* T_optional_params */
145 static int hf_tetra_even_multiframe = -1; /* TS_COMMON_FRAMES */
146 static int hf_tetra_odd_multiframe = -1; /* TS_COMMON_FRAMES */
147 static int hf_tetra_access_a_code = -1; /* Default_Code_A */
148 static int hf_tetra_extend_service = -1; /* Extended_Services_Broadcast */
149 static int hf_tetra_la = -1; /* INTEGER_0_16383 */
150 static int hf_tetra_subscriber_class = -1; /* Subscriber_class */
151 static int hf_tetra_registriation = -1; /* INTEGER_0_1 */
152 static int hf_tetra_de_registration = -1; /* INTEGER_0_1 */
153 static int hf_tetra_priority_cell = -1; /* INTEGER_0_1 */
154 static int hf_tetra_minimum_mode_service = -1; /* INTEGER_0_1 */
155 static int hf_tetra_migration = -1; /* INTEGER_0_1 */
156 static int hf_tetra_system_wide_service = -1; /* INTEGER_0_1 */
157 static int hf_tetra_tetra_voice_service = -1; /* INTEGER_0_1 */
158 static int hf_tetra_circuit_mode_data_service = -1; /* INTEGER_0_1 */
159 static int hf_tetra_reserved_01 = -1; /* INTEGER_0_1 */
160 static int hf_tetra_sndcp_service = -1; /* INTEGER_0_1 */
161 static int hf_tetra_air_interface_encryption = -1; /* INTEGER_0_1 */
162 static int hf_tetra_advanced_link_support = -1; /* INTEGER_0_1 */
163 static int hf_tetra_frame1 = -1; /* FRAME */
164 static int hf_tetra_frame2 = -1; /* FRAME */
165 static int hf_tetra_frame3 = -1; /* FRAME */
166 static int hf_tetra_frame4 = -1; /* FRAME */
167 static int hf_tetra_frame5 = -1; /* FRAME */
168 static int hf_tetra_frame6 = -1; /* FRAME */
169 static int hf_tetra_frame7 = -1; /* FRAME */
170 static int hf_tetra_frame8 = -1; /* FRAME */
171 static int hf_tetra_frame9 = -1; /* FRAME */
172 static int hf_tetra_frame10 = -1; /* FRAME */
173 static int hf_tetra_frame11 = -1; /* FRAME */
174 static int hf_tetra_frame12 = -1; /* FRAME */
175 static int hf_tetra_frame13 = -1; /* FRAME */
176 static int hf_tetra_frame14 = -1; /* FRAME */
177 static int hf_tetra_frame15 = -1; /* FRAME */
178 static int hf_tetra_frame16 = -1; /* FRAME */
179 static int hf_tetra_frame17 = -1; /* FRAME */
180 static int hf_tetra_frame18 = -1; /* FRAME */
181 static int hf_tetra_imm = -1; /* IMM */
182 static int hf_tetra_wt = -1; /* WT */
183 static int hf_tetra_nu = -1; /* NU */
184 static int hf_tetra_frame_len_factor = -1; /* Frame_Len_Factor */
185 static int hf_tetra_timeslot_pointer = -1; /* Timeslot_Pointer */
186 static int hf_tetra_min_pdu_priority = -1; /* Min_Pdu_Priority */
187 static int hf_tetra_security_information = -1; /* INTEGER_0_255 */
188 static int hf_tetra_sds_tl_addressing_method = -1; /* SDS_TL_Addressing_Method */
189 static int hf_tetra_gck_supported = -1; /* INTEGER_0_1 */
190 static int hf_tetra_section = -1; /* T_section */
191 static int hf_tetra_present_1 = -1; /* PRESENT1 */
192 static int hf_tetra_present_2 = -1; /* INTEGER_0_127 */
193 static int hf_tetra_present_3 = -1; /* INTEGER_0_127 */
194 static int hf_tetra_present_4 = -1; /* INTEGER_0_127 */
195 static int hf_tetra_data_priority_supported = -1; /* Data_Priority_Supported */
196 static int hf_tetra_reserved_02 = -1; /* INTEGER_0_7 */
197 static int hf_tetra_section_2_information = -1; /* Section_Information */
198 static int hf_tetra_section_3_information = -1; /* Section_Information */
199 static int hf_tetra_section_4_information = -1; /* Section_Information */
200 static int hf_tetra_pdu_type_01 = -1; /* INTEGER_0_1 */
201 static int hf_tetra_fill_bit_indication = -1; /* Fill_Bit_Indication */
202 static int hf_tetra_encrypted_flag = -1; /* Encrypted_Flag */
203 static int hf_tetra_address = -1; /* Address */
204 static int hf_tetra_data = -1; /* T_data */
205 static int hf_tetra_sdu1 = -1; /* U_LLC_PDU */
206 static int hf_tetra_sdu2 = -1; /* ComplexSDU */
207 static int hf_tetra_ssi = -1; /* INTEGER_0_16777215 */
208 static int hf_tetra_eventLabel = -1; /* INTEGER_0_1023 */
209 static int hf_tetra_ussi = -1; /* INTEGER_0_16777215 */
210 static int hf_tetra_smi = -1; /* INTEGER_0_16777215 */
211 static int hf_tetra_bl_adata = -1; /* U_BL_ADATA */
212 static int hf_tetra_bl_data = -1; /* U_BL_DATA */
213 static int hf_tetra_bl_udata = -1; /* U_MLE_PDU */
214 static int hf_tetra_bl_ack = -1; /* U_BL_ACK */
215 static int hf_tetra_bl_adata_fcs = -1; /* U_BL_ADATA_FCS */
216 static int hf_tetra_bl_data_fcs = -1; /* U_BL_DATA_FCS */
217 static int hf_tetra_bl_udata_fcs = -1; /* U_MLE_PDU_FCS */
218 static int hf_tetra_bl_ack_fcs = -1; /* U_BL_ACK_FCS */
219 static int hf_tetra_al_setup = -1; /* NULL */
220 static int hf_tetra_al_data = -1; /* NULL */
221 static int hf_tetra_al_udata = -1; /* NULL */
222 static int hf_tetra_al_ack = -1; /* NULL */
223 static int hf_tetra_al_reconnect = -1; /* NULL */
224 static int hf_tetra_reserve1 = -1; /* NULL */
225 static int hf_tetra_reserve2 = -1; /* NULL */
226 static int hf_tetra_al_disc = -1; /* NULL */
227 static int hf_tetra_nr = -1; /* INTEGER_0_1 */
228 static int hf_tetra_tl_sdu = -1; /* U_MLE_PDU */
229 static int hf_tetra_fcs = -1; /* OCTET_STRING_SIZE_4 */
230 static int hf_tetra_u_mle_pdu = -1; /* U_MLE_PDU */
231 static int hf_tetra_ns = -1; /* INTEGER_0_1 */
232 static int hf_tetra_u_mle_reserved1 = -1; /* NULL */
233 static int hf_tetra_mm = -1; /* U_MM_PDU */
234 static int hf_tetra_cmce = -1; /* U_CMCE_PDU */
235 static int hf_tetra_u_mle_reserved2 = -1; /* NULL */
236 static int hf_tetra_sndcp = -1; /* NULL */
237 static int hf_tetra_mle = -1; /* UMLE_PDU */
238 static int hf_tetra_tetra_management_entity_protocol = -1; /* NULL */
239 static int hf_tetra_u_mle_reserved3 = -1; /* NULL */
240 static int hf_tetra_lengthIndicationOrCapacityRequest = -1; /* T_lengthIndicationOrCapacityRequest */
241 static int hf_tetra_lengthIndication = -1; /* LengthIndication */
242 static int hf_tetra_capacityRequest = -1; /* FRAG */
243 static int hf_tetra_tm_sdu_01 = -1; /* U_LLC_PDU */
244 static int hf_tetra_frag = -1; /* Frag1 */
245 static int hf_tetra_reservation_requirement = -1; /* SLOT_APPLY */
246 static int hf_tetra_lengthIndicationOrCapacityRequest_01 = -1; /* T_lengthIndicationOrCapacityRequest_01 */
247 static int hf_tetra_lengthIndication_01 = -1; /* LengthIndicationMacData */
248 static int hf_tetra_capacityRequest_01 = -1; /* FRAG6 */
249 static int hf_tetra_sub_type = -1; /* INTEGER_0_1 */
250 static int hf_tetra_tm_sdu_02 = -1; /* BIT_STRING_SIZE_264 */
251 static int hf_tetra_tm_sdu_03 = -1; /* BIT_STRING_SIZE_120 */
252 static int hf_tetra_lengthInd_ReservationReq = -1; /* LengthIndOrReservationReq */
253 static int hf_tetra_tm_sdu_04 = -1; /* BIT_STRING_SIZE_258 */
254 static int hf_tetra_pdu_subtype = -1; /* INTEGER_0_1 */
255 static int hf_tetra_tm_sdu_05 = -1; /* BIT_STRING_SIZE_114 */
256 static int hf_tetra_lengthInd_ReservationReq_01 = -1; /* T_lengthInd_ReservationReq */
257 static int hf_tetra_lengthInd = -1; /* LengthIndMacHu */
258 static int hf_tetra_tm_sdu_06 = -1; /* BIT_STRING_SIZE_85 */
259 static int hf_tetra_position_of_grant = -1; /* Position_Of_Grant */
260 static int hf_tetra_lengthIndication_02 = -1; /* LengthIndicationMacEndDl */
261 static int hf_tetra_slot_granting = -1; /* T_slot_granting */
262 static int hf_tetra_none = -1; /* NULL */
263 static int hf_tetra_slot_granting_param = -1; /* SlotGranting */
264 static int hf_tetra_channel_allocation = -1; /* T_channel_allocation */
265 static int hf_tetra_channel_allocation_element = -1; /* ChannelAllocation */
266 static int hf_tetra_tm_sdu_07 = -1; /* BIT_STRING_SIZE_255 */
267 static int hf_tetra_capacity_allocation = -1; /* Capacity_Allocation */
268 static int hf_tetra_granting_delay = -1; /* Granting_delay */
269 static int hf_tetra_allocation_type = -1; /* T_allocation_type */
270 static int hf_tetra_timeslot_assigned = -1; /* Timeslot_Assigned */
271 static int hf_tetra_up_down_assigned = -1; /* T_up_down_assigned */
272 static int hf_tetra_clch_permission = -1; /* CLCH_permission */
273 static int hf_tetra_cell_change = -1; /* Cell_change_flag */
274 static int hf_tetra_carrier_number = -1; /* INTEGER_0_4095 */
275 static int hf_tetra_extend_carrier_flag = -1; /* T_extend_carrier_flag */
276 static int hf_tetra_extended = -1; /* Extended_carrier_flag */
277 static int hf_tetra_monitoring_pattern = -1; /* T_monitoring_pattern */
278 static int hf_tetra_one = -1; /* Monitoring_pattern */
279 static int hf_tetra_none1 = -1; /* NULL */
280 static int hf_tetra_none2 = -1; /* NULL */
281 static int hf_tetra_none3 = -1; /* NULL */
282 static int hf_tetra_offset_01 = -1; /* INTEGER_0_3 */
283 static int hf_tetra_reverse_operation_01 = -1; /* T_reverse_operation */
284 static int hf_tetra_pdu_type_02 = -1; /* INTEGER_0_7 */
285 static int hf_tetra_fill_bit_ind = -1; /* BOOLEAN */
286 static int hf_tetra_position_of_grant_01 = -1; /* INTEGER_0_1 */
287 static int hf_tetra_slot_granting_01 = -1; /* T_slot_granting_01 */
288 static int hf_tetra_channel_allocation_01 = -1; /* T_channel_allocation_01 */
289 static int hf_tetra_tm_sdu_08 = -1; /* BIT_STRING_SIZE_111 */
290 static int hf_tetra_encryption_mode = -1; /* INTEGER_0_3 */
291 static int hf_tetra_access_ack = -1; /* T_access_ack */
292 static int hf_tetra_lengthIndication_03 = -1; /* LengthIndicationMacResource */
293 static int hf_tetra_address_01 = -1; /* AddressMacResource */
294 static int hf_tetra_power_control = -1; /* T_power_control */
295 static int hf_tetra_powerParameters = -1; /* PowerControl */
296 static int hf_tetra_slot_granting_02 = -1; /* T_slot_granting_02 */
297 static int hf_tetra_channel_allocation_02 = -1; /* T_channel_allocation_02 */
298 static int hf_tetra_tm_sdu_09 = -1; /* D_LLC_PDU */
299 static int hf_tetra_null_pdu = -1; /* NULL */
300 static int hf_tetra_ssi_01 = -1; /* SSI_NEED */
301 static int hf_tetra_eventLabel_01 = -1; /* EVENT_NEED */
302 static int hf_tetra_ussi_01 = -1; /* USSI_NEED */
303 static int hf_tetra_smi_01 = -1; /* SMI_NEED */
304 static int hf_tetra_ssi_eventLabel = -1; /* SSI_EVENT_NEED */
305 static int hf_tetra_ssi_usage_maker = -1; /* SSI_USAGE_NEED */
306 static int hf_tetra_smi_eventLabel = -1; /* SMI_EVENT_NEED */
307 static int hf_tetra_other = -1; /* OTHER_DATA */
308 static int hf_tetra_eventlabel = -1; /* INTEGER_0_1023 */
309 static int hf_tetra_ventlabel = -1; /* INTEGER_0_1023 */
310 static int hf_tetra_usage_maker = -1; /* INTEGER_0_63 */
311 static int hf_tetra_smi_eventlabel = -1; /* BIT_STRING_SIZE_34 */
312 static int hf_tetra_broadcast_channel = -1; /* INTEGER_0_1 */
313 static int hf_tetra_access_code = -1; /* INTEGER_0_3 */
314 static int hf_tetra_imm_01 = -1; /* INTEGER_0_15 */
315 static int hf_tetra_wt_01 = -1; /* INTEGER_0_15 */
316 static int hf_tetra_nu_01 = -1; /* INTEGER_0_15 */
317 static int hf_tetra_frame_len_factor_01 = -1; /* INTEGER_0_1 */
318 static int hf_tetra_timeslot_pointer_01 = -1; /* INTEGER_0_15 */
319 static int hf_tetra_min_priority = -1; /* INTEGER_0_7 */
320 static int hf_tetra_optional_field = -1; /* T_optional_field */
321 static int hf_tetra_class_bitmap = -1; /* INTEGER_0_65535 */
322 static int hf_tetra_gssi = -1; /* INTEGER_0_33554431 */
323 static int hf_tetra_reserved_03 = -1; /* NULL */
324 static int hf_tetra_filler_bits = -1; /* INTEGER_0_7 */
325 static int hf_tetra_bl_adata_01 = -1; /* D_BL_ADATA */
326 static int hf_tetra_bl_data_01 = -1; /* D_BL_DATA */
327 static int hf_tetra_bl_udata_01 = -1; /* D_MLE_PDU */
328 static int hf_tetra_bl_ack_01 = -1; /* D_BL_ACK */
329 static int hf_tetra_bl_adata_fcs_01 = -1; /* D_BL_ADATA_FCS */
330 static int hf_tetra_bl_data_fcs_01 = -1; /* D_BL_DATA_FCS */
331 static int hf_tetra_bl_udata_fcs_01 = -1; /* D_MLE_PDU_FCS */
332 static int hf_tetra_bl_ack_fcs_01 = -1; /* D_BL_ACK_FCS */
333 static int hf_tetra_tl_sdu_01 = -1; /* D_MLE_PDU */
334 static int hf_tetra_d_mle_pdu = -1; /* D_MLE_PDU */
335 static int hf_tetra_mm_01 = -1; /* D_MM_PDU */
336 static int hf_tetra_cmce_01 = -1; /* D_CMCE_PDU */
337 static int hf_tetra_mle_01 = -1; /* DMLE_PDU */
338 static int hf_tetra_u_prepare = -1; /* U_PREPARE */
339 static int hf_tetra_umle_reserved1 = -1; /* NULL */
340 static int hf_tetra_umle_reserved2 = -1; /* NULL */
341 static int hf_tetra_umle_reserved3 = -1; /* NULL */
342 static int hf_tetra_u_restore = -1; /* U_RESTORE */
343 static int hf_tetra_umle_reserved4 = -1; /* NULL */
344 static int hf_tetra_umle_reserved5 = -1; /* NULL */
345 static int hf_tetra_umle_reserved6 = -1; /* NULL */
346 static int hf_tetra_d_new_cell = -1; /* D_NEW_CELL */
347 static int hf_tetra_d_prepare_fail = -1; /* D_PREPARE_FAIL */
348 static int hf_tetra_d_nwrk_broadcast = -1; /* D_NWRK_BRDADCAST */
349 static int hf_tetra_dmle_reserved1 = -1; /* NULL */
350 static int hf_tetra_d_restore_ack = -1; /* D_RESTORE_ACK */
351 static int hf_tetra_d_restore_fail = -1; /* D_RESTORE_FAIL */
352 static int hf_tetra_dmle_reserved2 = -1; /* NULL */
353 static int hf_tetra_dmle_reserved3 = -1; /* NULL */
354 static int hf_tetra_optional_elements = -1; /* T_optional_elements */
355 static int hf_tetra_no_type2 = -1; /* NULL */
356 static int hf_tetra_type2_parameters = -1; /* T_type2_parameters */
357 static int hf_tetra_cell_number = -1; /* T_cell_number */
358 static int hf_tetra_cell_number_01 = -1; /* INTEGER_0_65535 */
359 static int hf_tetra_sdu = -1; /* BIT_STRING */
360 static int hf_tetra_optional_elements_01 = -1; /* T_optional_elements_01 */
361 static int hf_tetra_type2_parameters_01 = -1; /* T_type2_parameters_01 */
362 static int hf_tetra_mcc_01 = -1; /* T_mcc */
363 static int hf_tetra_mnc_01 = -1; /* T_mnc */
364 static int hf_tetra_la_01 = -1; /* T_la */
365 static int hf_tetra_channel_command_valid = -1; /* INTEGER_0_3 */
366 static int hf_tetra_optional_elements_02 = -1; /* T_optional_elements_02 */
367 static int hf_tetra_fail_cause = -1; /* INTEGER_0_3 */
368 static int hf_tetra_optional_elements_03 = -1; /* T_optional_elements_03 */
369 static int hf_tetra_cell_re_select_parameters = -1; /* INTEGER_0_65535 */
370 static int hf_tetra_optional_elements_04 = -1; /* T_optional_elements_04 */
371 static int hf_tetra_type2_parameters_02 = -1; /* T_type2_parameters_02 */
372 static int hf_tetra_tetra_network_time = -1; /* T_tetra_network_time */
373 static int hf_tetra_tetra_network_time_01 = -1; /* TETRA_NETWORK_TIME */
374 static int hf_tetra_number_of_neighbour_cells = -1; /* T_number_of_neighbour_cells */
375 static int hf_tetra_number_of_neighbour_cells_01 = -1; /* INTEGER_0_7 */
376 static int hf_tetra_network_time = -1; /* T_network_time */
377 static int hf_tetra_local_time_offset_sign = -1; /* INTEGER_0_1 */
378 static int hf_tetra_local_time_offset = -1; /* INTEGER_0_63 */
379 static int hf_tetra_year = -1; /* INTEGER_0_63 */
380 static int hf_tetra_reserved_04 = -1; /* T_reserved */
381 static int hf_tetra_u_Authentication = -1; /* NULL */
382 static int hf_tetra_u_Itsi_Detach = -1; /* NULL */
383 static int hf_tetra_u_Location_Update_Demand = -1; /* U_LOCATION_UPDATE_DEMAND */
384 static int hf_tetra_u_MM_Status = -1; /* U_MM_STATUS */
385 static int hf_tetra_u_MM_reserved1 = -1; /* NULL */
386 static int hf_tetra_u_WK = -1; /* NULL */
387 static int hf_tetra_u_MM_reserved3 = -1; /* NULL */
388 static int hf_tetra_u_Attach_Detach_Group_Identity = -1; /* U_ATTACH_DETACH_GROUP_IDENTITY */
389 static int hf_tetra_u_Attach_Detach_Group_Identity_Ack = -1; /* U_ATTACH_DETACH_GROUP_IDENTITY_ACK */
390 static int hf_tetra_u_TEI_Provide = -1; /* NULL */
391 static int hf_tetra_u_MM_reserved6 = -1; /* NULL */
392 static int hf_tetra_u_Disabled_Status = -1; /* NULL */
393 static int hf_tetra_u_MM_reserved7 = -1; /* NULL */
394 static int hf_tetra_u_MM_reserved8 = -1; /* NULL */
395 static int hf_tetra_u_MM_reserved9 = -1; /* NULL */
396 static int hf_tetra_u_MM_Function_Not_Support = -1; /* NULL */
397 static int hf_tetra_d_Otar = -1; /* NULL */
398 static int hf_tetra_d_Authentication = -1; /* NULL */
399 static int hf_tetra_d_Authentication_Reject = -1; /* NULL */
400 static int hf_tetra_d_Disable = -1; /* NULL */
401 static int hf_tetra_d_Enable = -1; /* NULL */
402 static int hf_tetra_d_Location_Update_Accept = -1; /* D_LOCATION_UPDATE_ACCEPT */
403 static int hf_tetra_d_Location_Update_Command = -1; /* NULL */
404 static int hf_tetra_d_Location_Update_Reject = -1; /* D_LOCATION_UPDATE_REJECT */
405 static int hf_tetra_d_MM_reserved2 = -1; /* NULL */
406 static int hf_tetra_d_Location_Update_Proceeding = -1; /* NULL */
407 static int hf_tetra_d_Attach_Detach_Group_Identity = -1; /* D_ATTACH_DETACH_GROUP_IDENTITY */
408 static int hf_tetra_d_Attach_Detach_Group_Identity_Ack = -1; /* D_ATTACH_DETACH_GROUP_IDENTITY_ACK */
409 static int hf_tetra_d_MM_Status = -1; /* D_MM_STATUS */
410 static int hf_tetra_d_MM_reserved5 = -1; /* NULL */
411 static int hf_tetra_d_MM_reserved6 = -1; /* NULL */
412 static int hf_tetra_d_MM_Function_Not_Support = -1; /* NULL */
413 static int hf_tetra_attach_detach_identifiet = -1; /* T_attach_detach_identifiet */
414 static int hf_tetra_attach = -1; /* T_attach */
415 static int hf_tetra_lifetime = -1; /* INTEGER_0_3 */
416 static int hf_tetra_class_of_usage = -1; /* INTEGER_0_7 */
417 static int hf_tetra_detach = -1; /* T_detach */
418 static int hf_tetra_detach_downlike = -1; /* T_detach_downlike */
419 static int hf_tetra_address_type = -1; /* T_address_type */
420 static int hf_tetra_gssi_01 = -1; /* OCTET_STRING_SIZE_3 */
421 static int hf_tetra_gssi_extension = -1; /* T_gssi_extension */
422 static int hf_tetra_extension = -1; /* OCTET_STRING_SIZE_3 */
423 static int hf_tetra_vgssi = -1; /* OCTET_STRING_SIZE_3 */
424 static int hf_tetra_attach_detach_identifiet_01 = -1; /* T_attach_detach_identifiet_01 */
425 static int hf_tetra_attach_01 = -1; /* T_attach_01 */
426 static int hf_tetra_detach_01 = -1; /* T_detach_01 */
427 static int hf_tetra_detach_uplike = -1; /* T_detach_uplike */
428 static int hf_tetra_address_type_01 = -1; /* T_address_type_01 */
429 static int hf_tetra_gssi_extension_01 = -1; /* T_gssi_extension_01 */
430 static int hf_tetra_location_update_type = -1; /* UPDATE_TYPE */
431 static int hf_tetra_optional_elements_05 = -1; /* T_optional_elements_05 */
432 static int hf_tetra_type2_parameters_03 = -1; /* T_type2_parameters_03 */
433 static int hf_tetra_ssi_02 = -1; /* T_ssi */
434 static int hf_tetra_ssi_03 = -1; /* OCTET_STRING_SIZE_3 */
435 static int hf_tetra_address_extension = -1; /* T_address_extension */
436 static int hf_tetra_address_extension_01 = -1; /* OCTET_STRING_SIZE_3 */
437 static int hf_tetra_subscriber_class_01 = -1; /* T_subscriber_class */
438 static int hf_tetra_energy_saving_mode = -1; /* T_energy_saving_mode */
439 static int hf_tetra_energy_saving_mode_01 = -1; /* INTEGER_0_7 */
440 static int hf_tetra_scch_info = -1; /* T_scch_info */
441 static int hf_tetra_scch_info_01 = -1; /* INTEGER_0_16383 */
442 static int hf_tetra_type3 = -1; /* T_type3 */
443 static int hf_tetra_no_type3 = -1; /* NULL */
444 static int hf_tetra_type3_elements = -1; /* T_type3_elements */
445 static int hf_tetra_type2_existance = -1; /* BOOLEAN */
446 static int hf_tetra_type3_identifier = -1; /* TYPE3_IDENTIFIER */
447 static int hf_tetra_new_ra = -1; /* T_new_ra */
448 static int hf_tetra_new_ra_01 = -1; /* INTEGER_0_3 */
449 static int hf_tetra_group_identity_location_accept = -1; /* T_group_identity_location_accept */
450 static int hf_tetra_group_identity_location_accept_01 = -1; /* INTEGER_0_3 */
451 static int hf_tetra_group_predefined_lifetime = -1; /* T_group_predefined_lifetime */
452 static int hf_tetra_group_predefined_lifetime_01 = -1; /* INTEGER_0_3 */
453 static int hf_tetra_group_identity_downlink = -1; /* T_group_identity_downlink */
454 static int hf_tetra_group_identity_downlink_01 = -1; /* INTEGER_0_15 */
455 static int hf_tetra_proprietary = -1; /* T_proprietary */
456 static int hf_tetra_proprietary_01 = -1; /* INTEGER_0_7 */
457 static int hf_tetra_reject_cause = -1; /* INTEGER_0_31 */
458 static int hf_tetra_cipher_control = -1; /* BOOLEAN */
459 static int hf_tetra_status_uplink = -1; /* INTEGER_0_63 */
460 static int hf_tetra_scanning_on_off = -1; /* T_scanning_on_off */
461 static int hf_tetra_status_downlink = -1; /* INTEGER_0_63 */
462 static int hf_tetra_u_Alert = -1; /* U_ALERT */
463 static int hf_tetra_reserved1 = -1; /* NULL */
464 static int hf_tetra_u_Connect = -1; /* U_CONNECT */
465 static int hf_tetra_reserved2 = -1; /* NULL */
466 static int hf_tetra_u_Disconnect = -1; /* U_DISCONNECT */
467 static int hf_tetra_u_Info = -1; /* U_INFO */
468 static int hf_tetra_u_Release = -1; /* U_RELEASE */
469 static int hf_tetra_u_Setup = -1; /* U_SETUP */
470 static int hf_tetra_u_Status = -1; /* U_STATUS */
471 static int hf_tetra_u_Tx_Ceased = -1; /* U_TX_CEASED */
472 static int hf_tetra_u_Tx_Demand = -1; /* U_TX_DEMAND */
473 static int hf_tetra_reserved3 = -1; /* NULL */
474 static int hf_tetra_reserved4 = -1; /* NULL */
475 static int hf_tetra_reserved5 = -1; /* NULL */
476 static int hf_tetra_u_Call_Restore = -1; /* U_CALL_RESTORE */
477 static int hf_tetra_u_SDS_Data = -1; /* U_SDS_DATA */
478 static int hf_tetra_u_Facility = -1; /* NULL */
479 static int hf_tetra_call_identifier = -1; /* INTEGER_0_16383 */
480 static int hf_tetra_disconnect_cause = -1; /* INTEGER_0_31 */
481 static int hf_tetra_area_selection = -1; /* INTEGER_0_15 */
482 static int hf_tetra_called_party_type_identifier = -1; /* T_called_party_type_identifier */
483 static int hf_tetra_sna = -1; /* INTEGER_0_255 */
484 static int hf_tetra_ssi_extension = -1; /* BIT_STRING_SIZE_48 */
485 static int hf_tetra_short_data_type_identifier = -1; /* T_short_data_type_identifier */
486 static int hf_tetra_data_1 = -1; /* INTEGER_0_65535 */
487 static int hf_tetra_data_2 = -1; /* OCTET_STRING_SIZE_4 */
488 static int hf_tetra_data_3 = -1; /* BIT_STRING_SIZE_64 */
489 static int hf_tetra_length_indicator_data_4 = -1; /* INTEGER_0_4194304 */
490 static int hf_tetra_called_party_type_identifier_01 = -1; /* T_called_party_type_identifier_01 */
491 static int hf_tetra_short_number_address = -1; /* INTEGER_0_255 */
492 static int hf_tetra_called_ssi_called_extension = -1; /* BIT_STRING_SIZE_48 */
493 static int hf_tetra_pre_coded_status = -1; /* INTEGER_0_65535 */
494 static int hf_tetra_call_id = -1; /* INTEGER_0_16383 */
495 static int hf_tetra_poll_response = -1; /* INTEGER_0_1 */
496 static int hf_tetra_d_Alert = -1; /* D_ALERT */
497 static int hf_tetra_d_Call_Proceeding = -1; /* D_CALL_PROCEEDING */
498 static int hf_tetra_d_Connect = -1; /* D_CONNECT */
499 static int hf_tetra_d_Connect_Ack = -1; /* D_CONNECT_ACK */
500 static int hf_tetra_d_Disconnect = -1; /* D_DISCONNECT */
501 static int hf_tetra_d_Info = -1; /* D_INFO */
502 static int hf_tetra_d_Release = -1; /* D_RELEASE */
503 static int hf_tetra_d_Setup = -1; /* D_SETUP */
504 static int hf_tetra_d_Status = -1; /* D_STATUS */
505 static int hf_tetra_d_Tx_Ceased = -1; /* D_TX_CEASED */
506 static int hf_tetra_d_Tx_Continue = -1; /* D_TX_CONTINUE */
507 static int hf_tetra_d_Tx_Granted = -1; /* D_TX_GRANTED */
508 static int hf_tetra_d_Tx_Wait = -1; /* D_TX_WAIT */
509 static int hf_tetra_d_Tx_Interrupt = -1; /* NULL */
510 static int hf_tetra_d_Call_Restore = -1; /* D_CALL_RESTORE */
511 static int hf_tetra_d_SDS_Data = -1; /* D_SDS_DATA */
512 static int hf_tetra_d_Facility = -1; /* NULL */
513 static int hf_tetra_calling_party_type_identifier = -1; /* T_calling_party_type_identifier */
514 static int hf_tetra_ssi_extension_01 = -1; /* OCTET_STRING_SIZE_6 */
515 static int hf_tetra_short_data_type_identifier_01 = -1; /* T_short_data_type_identifier_01 */
516 static int hf_tetra_data_3_01 = -1; /* OCTET_STRING_SIZE_8 */
517 static int hf_tetra_calling_party_type_identifier_01 = -1; /* T_calling_party_type_identifier_01 */
518 static int hf_tetra_calling_party_address_SSI = -1; /* INTEGER_0_16777215 */
519 static int hf_tetra_reset_call_time_out_timer = -1; /* INTEGER_0_1 */
520 static int hf_tetra_poll_request = -1; /* INTEGER_0_1 */
521 static int hf_tetra_transmission_request_permission = -1; /* INTEGER_0_1 */
522 static int hf_tetra_continue = -1; /* INTEGER_0_1 */
523 static int hf_tetra_request_to_append_LA = -1; /* BOOLEAN */
524 static int hf_tetra_cipher_control_01 = -1; /* T_cipher_control */
525 static int hf_tetra_no_cipher = -1; /* NULL */
526 static int hf_tetra_ciphering_parameters = -1; /* INTEGER_0_1023 */
527 static int hf_tetra_optional_elements_06 = -1; /* T_optional_elements_06 */
528 static int hf_tetra_type2_parameters_04 = -1; /* T_type2_parameters_04 */
529 static int hf_tetra_class_of_MS = -1; /* T_class_of_MS */
530 static int hf_tetra_class_of_MS_01 = -1; /* INTEGER_0_16777215 */
531 static int hf_tetra_energy_saving_mode_02 = -1; /* T_energy_saving_mode_01 */
532 static int hf_tetra_la_information = -1; /* T_la_information */
533 static int hf_tetra_la_information_01 = -1; /* INTEGER_0_16383 */
534 static int hf_tetra_ssi_04 = -1; /* T_ssi_01 */
535 static int hf_tetra_address_extension_02 = -1; /* T_address_extension_01 */
536 static int hf_tetra_type3_01 = -1; /* T_type3_01 */
537 static int hf_tetra_type3_elements_01 = -1; /* T_type3_elements_01 */
538 static int hf_tetra_group_identity_location_demand = -1; /* T_group_identity_location_demand */
539 static int hf_tetra_group_identity_location_demand_01 = -1; /* INTEGER_0_3 */
540 static int hf_tetra_group_report_response = -1; /* T_group_report_response */
541 static int hf_tetra_group_report_response_01 = -1; /* BOOLEAN */
542 static int hf_tetra_group_identity_uplink = -1; /* T_group_identity_uplink */
543 static int hf_tetra_group_identity_uplink_01 = -1; /* INTEGER_0_15 */
544 static int hf_tetra_proprietary_02 = -1; /* T_proprietary_01 */
545 static int hf_tetra_group_identity_report = -1; /* BOOLEAN */
546 static int hf_tetra_group_identity_attach_detach_mode = -1; /* BOOLEAN */
547 static int hf_tetra_optional_elements_07 = -1; /* T_optional_elements_07 */
548 static int hf_tetra_type2_element = -1; /* T_type2_element */
549 static int hf_tetra_type3_02 = -1; /* T_type3_02 */
550 static int hf_tetra_type3_elements_02 = -1; /* T_type3_elements_02 */
551 static int hf_tetra_length = -1; /* INTEGER_0_2047 */
552 static int hf_tetra_repeat_num = -1; /* INTEGER_0_63 */
553 static int hf_tetra_group_identity_uplink_02 = -1; /* GROUP_IDENTITY_UPLINK */
554 static int hf_tetra_group_identity_ack_type = -1; /* BOOLEAN */
555 static int hf_tetra_optional_elements_08 = -1; /* T_optional_elements_08 */
556 static int hf_tetra_type2_element_01 = -1; /* T_type2_element_01 */
557 static int hf_tetra_type3_03 = -1; /* T_type3_03 */
558 static int hf_tetra_type3_elements_03 = -1; /* T_type3_elements_03 */
559 static int hf_tetra_hook_method_selection = -1; /* BOOLEAN */
560 static int hf_tetra_simple_duplex_selection = -1; /* T_simple_duplex_selection */
561 static int hf_tetra_basic_service_information = -1; /* Basic_service_information */
562 static int hf_tetra_request_transmit_send_data = -1; /* INTEGER_0_1 */
563 static int hf_tetra_call_priority = -1; /* INTEGER_0_15 */
564 static int hf_tetra_clir_control = -1; /* INTEGER_0_3 */
565 static int hf_tetra_called_party_address = -1; /* Called_party_address_type */
566 static int hf_tetra_optional_elements_09 = -1; /* T_optional_elements_09 */
567 static int hf_tetra_type2_parameters_05 = -1; /* T_type2_parameters_05 */
568 static int hf_tetra_external_subscriber_number = -1; /* T_external_subscriber_number */
569 static int hf_tetra_external_subscriber_number_01 = -1; /* INTEGER_0_31 */
570 static int hf_tetra_prop = -1; /* T_prop */
571 static int hf_tetra_prop_01 = -1; /* Proprietary */
572 static int hf_tetra_circuit_mode = -1; /* CIRCUIT */
573 static int hf_tetra_encryption = -1; /* INTEGER_0_1 */
574 static int hf_tetra_communication = -1; /* INTEGER_0_3 */
575 static int hf_tetra_slots_or_speech = -1; /* INTEGER_0_3 */
576 static int hf_tetra_call_identifier_01 = -1; /* INTEGER_0_1023 */
577 static int hf_tetra_simplex_duplex_selection = -1; /* T_simplex_duplex_selection */
578 static int hf_tetra_optional_elements_10 = -1; /* T_optional_elements_10 */
579 static int hf_tetra_type2_parameters_06 = -1; /* T_type2_parameters_06 */
580 static int hf_tetra_basic_service_information_01 = -1; /* T_basic_service_information */
581 static int hf_tetra_prop_02 = -1; /* T_prop_01 */
582 static int hf_tetra_simplex_duplex_selection_01 = -1; /* T_simplex_duplex_selection_01 */
583 static int hf_tetra_optional_elements_11 = -1; /* T_optional_elements_11 */
584 static int hf_tetra_type2_parameters_07 = -1; /* T_type2_parameters_07 */
585 static int hf_tetra_basic_service_information_02 = -1; /* T_basic_service_information_01 */
586 static int hf_tetra_prop_03 = -1; /* T_prop_02 */
587 static int hf_tetra_optional_elements_12 = -1; /* T_optional_elements_12 */
588 static int hf_tetra_type2_parameters_08 = -1; /* T_type2_parameters_08 */
589 static int hf_tetra_prop_04 = -1; /* T_prop_03 */
590 static int hf_tetra_tx_demand_priority = -1; /* INTEGER_0_3 */
591 static int hf_tetra_encryption_control = -1; /* INTEGER_0_1 */
592 static int hf_tetra_optional_elements_13 = -1; /* T_optional_elements_13 */
593 static int hf_tetra_type2_parameters_09 = -1; /* T_type2_parameters_09 */
594 static int hf_tetra_prop_05 = -1; /* T_prop_04 */
595 static int hf_tetra_optional_elements_14 = -1; /* T_optional_elements_14 */
596 static int hf_tetra_type2_parameters_10 = -1; /* T_type2_parameters_10 */
597 static int hf_tetra_prop_06 = -1; /* T_prop_05 */
598 static int hf_tetra_request_to_transmit_send_data = -1; /* INTEGER_0_1 */
599 static int hf_tetra_other_party_address = -1; /* Other_party_address_type */
600 static int hf_tetra_optional_elements_15 = -1; /* T_optional_elements_15 */
601 static int hf_tetra_type2_parameters_11 = -1; /* T_type2_parameters_11 */
602 static int hf_tetra_prop_07 = -1; /* T_prop_06 */
603 static int hf_tetra_call_time_out = -1; /* INTEGER_0_15 */
604 static int hf_tetra_hook_method_selection_01 = -1; /* INTEGER_0_1 */
605 static int hf_tetra_simplex_duplex_selection_02 = -1; /* T_simplex_duplex_selection_02 */
606 static int hf_tetra_transmission_grant = -1; /* INTEGER_0_3 */
607 static int hf_tetra_optional_elements_16 = -1; /* T_optional_elements_16 */
608 static int hf_tetra_type2_parameters_12 = -1; /* T_type2_parameters_12 */
609 static int hf_tetra_calling_party_address = -1; /* T_calling_party_address */
610 static int hf_tetra_calling_party_address_01 = -1; /* Calling_party_address_type */
611 static int hf_tetra_external_subscriber_number_02 = -1; /* T_external_subscriber_number_01 */
612 static int hf_tetra_external_subscriber_number_03 = -1; /* INTEGER_0_15 */
613 static int hf_tetra_prop_08 = -1; /* T_prop_07 */
614 static int hf_tetra_call_time_out_setup_phase = -1; /* INTEGER_0_7 */
615 static int hf_tetra_simplex_duplex_selection_03 = -1; /* INTEGER_0_1 */
616 static int hf_tetra_optional_elements_17 = -1; /* T_optional_elements_17 */
617 static int hf_tetra_type2_parameters_13 = -1; /* T_type2_parameters_13 */
618 static int hf_tetra_basic_service_information_03 = -1; /* T_basic_service_information_02 */
619 static int hf_tetra_call_status = -1; /* T_call_status */
620 static int hf_tetra_call_status_01 = -1; /* INTEGER_0_7 */
621 static int hf_tetra_notification_indicator = -1; /* T_notification_indicator */
622 static int hf_tetra_notification_indicator_01 = -1; /* INTEGER_0_63 */
623 static int hf_tetra_prop_09 = -1; /* T_prop_08 */
624 static int hf_tetra_simplex_duplex_selection_04 = -1; /* T_simplex_duplex_selection_03 */
625 static int hf_tetra_call_queued = -1; /* BOOLEAN */
626 static int hf_tetra_optional_elements_18 = -1; /* T_optional_elements_18 */
627 static int hf_tetra_type2_parameters_14 = -1; /* T_type2_parameters_14 */
628 static int hf_tetra_basic_service_infomation = -1; /* T_basic_service_infomation */
629 static int hf_tetra_basic_service_infomation_01 = -1; /* Basic_service_information */
630 static int hf_tetra_notification_indicator_02 = -1; /* T_notification_indicator_01 */
631 static int hf_tetra_prop_10 = -1; /* T_prop_09 */
632 static int hf_tetra_call_time_out_01 = -1; /* INTEGER_0_31 */
633 static int hf_tetra_simplex_duplex_selection_05 = -1; /* T_simplex_duplex_selection_04 */
634 static int hf_tetra_call_ownership = -1; /* INTEGER_0_1 */
635 static int hf_tetra_optional_elements_19 = -1; /* T_optional_elements_19 */
636 static int hf_tetra_type2_parameters_15 = -1; /* T_type2_parameters_15 */
637 static int hf_tetra_call_priority_01 = -1; /* T_call_priority */
638 static int hf_tetra_basic_service_information_04 = -1; /* T_basic_service_information_03 */
639 static int hf_tetra_temporary_address = -1; /* T_temporary_address */
640 static int hf_tetra_temporary_address_01 = -1; /* Calling_party_address_type */
641 static int hf_tetra_notification_indicator_03 = -1; /* T_notification_indicator_02 */
642 static int hf_tetra_prop_11 = -1; /* T_prop_10 */
643 static int hf_tetra_optional_elements_20 = -1; /* T_optional_elements_20 */
644 static int hf_tetra_type2_parameters_16 = -1; /* T_type2_parameters_16 */
645 static int hf_tetra_notification_indicator_04 = -1; /* T_notification_indicator_03 */
646 static int hf_tetra_prop_12 = -1; /* T_prop_11 */
647 static int hf_tetra_optional_elements_21 = -1; /* T_optional_elements_21 */
648 static int hf_tetra_type2_parameters_17 = -1; /* T_type2_parameters_17 */
649 static int hf_tetra_notification_indicator_05 = -1; /* T_notification_indicator_04 */
650 static int hf_tetra_prop_13 = -1; /* T_prop_12 */
651 static int hf_tetra_reset_call_time_out = -1; /* INTEGER_0_1 */
652 static int hf_tetra_optional_elements_22 = -1; /* T_optional_elements_22 */
653 static int hf_tetra_type2_parameters_18 = -1; /* T_type2_parameters_18 */
654 static int hf_tetra_new_call_identifier = -1; /* T_new_call_identifier */
655 static int hf_tetra_new_call_identifier_01 = -1; /* INTEGER_0_1023 */
656 static int hf_tetra_call_time_out_02 = -1; /* T_call_time_out */
657 static int hf_tetra_call_time_out_03 = -1; /* INTEGER_0_7 */
658 static int hf_tetra_call_status_02 = -1; /* T_call_status_01 */
659 static int hf_tetra_modify = -1; /* T_modify */
660 static int hf_tetra_modify_01 = -1; /* Modify_type */
661 static int hf_tetra_notification_indicator_06 = -1; /* T_notification_indicator_05 */
662 static int hf_tetra_prop_14 = -1; /* T_prop_13 */
663 static int hf_tetra_optional_elements_23 = -1; /* T_optional_elements_23 */
664 static int hf_tetra_type2_parameters_19 = -1; /* T_type2_parameters_19 */
665 static int hf_tetra_notification_indicator_07 = -1; /* T_notification_indicator_06 */
666 static int hf_tetra_prop_15 = -1; /* T_prop_14 */
667 static int hf_tetra_group_identity_ack_request = -1; /* BOOLEAN */
668 static int hf_tetra_optional_elements_24 = -1; /* T_optional_elements_24 */
669 static int hf_tetra_type2_element_02 = -1; /* T_type2_element_02 */
670 static int hf_tetra_type3_04 = -1; /* T_type3_04 */
671 static int hf_tetra_type3_elements_04 = -1; /* T_type3_elements_04 */
672 static int hf_tetra_group_identity_downlink_02 = -1; /* GROUP_IDENTITY_DOWNLINK */
673 static int hf_tetra_group_identity_attach_detach_accept = -1; /* BOOLEAN */
674 static int hf_tetra_optional_elements_25 = -1; /* T_optional_elements_25 */
675 static int hf_tetra_type2_element_03 = -1; /* T_type2_element_03 */
676 static int hf_tetra_type3_05 = -1; /* T_type3_05 */
677 static int hf_tetra_type3_elements_05 = -1; /* T_type3_elements_05 */
678 static int hf_tetra_called_party_sna = -1; /* INTEGER_0_255 */
679 static int hf_tetra_called_party_ssi = -1; /* INTEGER_0_16777215 */
680 static int hf_tetra_called_party_ssi_extention = -1; /* T_called_party_ssi_extention */
681 static int hf_tetra_called_party_extention = -1; /* INTEGER_0_16777215 */
682 static int hf_tetra_data_01 = -1; /* T_data_01 */
683 static int hf_tetra_element1 = -1; /* Type1 */
684 static int hf_tetra_element = -1; /* Type2 */
685 static int hf_tetra_proprietary_element_owner = -1; /* Proprietary_element_owner */
686 static int hf_tetra_proprietary_element_owner_extension = -1; /* BIT_STRING */
687 static int hf_tetra_simplex_duplex_selection_06 = -1; /* T_simplex_duplex_selection_05 */
689 /*--- End of included file: packet-tetra-hf.c ---*/
690 #line 86 "../../asn1/tetra/packet-tetra-template.c"
692 /* Initialize the subtree pointers */
693 /* These are the ids of the subtrees that we may be creating */
694 static gint ett_tetra = -1;
695 static gint ett_tetra_header = -1;
696 static gint ett_tetra_length = -1;
697 static gint ett_tetra_txreg = -1;
698 static gint ett_tetra_text = -1;
701 /*--- Included file: packet-tetra-ett.c ---*/
702 #line 1 "../../asn1/tetra/packet-tetra-ett.c"
703 static gint ett_tetra_AACH = -1;
704 static gint ett_tetra_BSCH = -1;
705 static gint ett_tetra_MLE_Sync = -1;
706 static gint ett_tetra_BNCH = -1;
707 static gint ett_tetra_T_hyperframe_or_cck = -1;
708 static gint ett_tetra_T_optional_params = -1;
709 static gint ett_tetra_TS_COMMON_FRAMES = -1;
710 static gint ett_tetra_Default_Code_A = -1;
711 static gint ett_tetra_Extended_Services_Broadcast = -1;
712 static gint ett_tetra_T_section = -1;
713 static gint ett_tetra_PRESENT1 = -1;
714 static gint ett_tetra_MAC_ACCESS = -1;
715 static gint ett_tetra_T_data = -1;
716 static gint ett_tetra_Address = -1;
717 static gint ett_tetra_U_LLC_PDU = -1;
718 static gint ett_tetra_U_BL_ACK_FCS = -1;
719 static gint ett_tetra_U_MLE_PDU_FCS = -1;
720 static gint ett_tetra_U_BL_DATA_FCS = -1;
721 static gint ett_tetra_U_BL_ADATA_FCS = -1;
722 static gint ett_tetra_U_MLE_PDU = -1;
723 static gint ett_tetra_ComplexSDU = -1;
724 static gint ett_tetra_T_lengthIndicationOrCapacityRequest = -1;
725 static gint ett_tetra_FRAG = -1;
726 static gint ett_tetra_MAC_DATA = -1;
727 static gint ett_tetra_T_lengthIndicationOrCapacityRequest_01 = -1;
728 static gint ett_tetra_FRAG6 = -1;
729 static gint ett_tetra_MAC_FRAG = -1;
730 static gint ett_tetra_MAC_FRAG120 = -1;
731 static gint ett_tetra_MAC_END_UPLINK = -1;
732 static gint ett_tetra_MAC_END_UP114 = -1;
733 static gint ett_tetra_MAC_END_HU = -1;
734 static gint ett_tetra_T_lengthInd_ReservationReq = -1;
735 static gint ett_tetra_MAC_END_DOWNLINK = -1;
736 static gint ett_tetra_T_slot_granting = -1;
737 static gint ett_tetra_T_channel_allocation = -1;
738 static gint ett_tetra_SlotGranting = -1;
739 static gint ett_tetra_ChannelAllocation = -1;
740 static gint ett_tetra_T_extend_carrier_flag = -1;
741 static gint ett_tetra_T_monitoring_pattern = -1;
742 static gint ett_tetra_Extended_carrier_flag = -1;
743 static gint ett_tetra_MAC_END_DOWN111 = -1;
744 static gint ett_tetra_T_slot_granting_01 = -1;
745 static gint ett_tetra_T_channel_allocation_01 = -1;
746 static gint ett_tetra_MAC_RESOURCE = -1;
747 static gint ett_tetra_OTHER_DATA = -1;
748 static gint ett_tetra_T_power_control = -1;
749 static gint ett_tetra_T_slot_granting_02 = -1;
750 static gint ett_tetra_T_channel_allocation_02 = -1;
751 static gint ett_tetra_AddressMacResource = -1;
752 static gint ett_tetra_SSI_NEED = -1;
753 static gint ett_tetra_EVENT_NEED = -1;
754 static gint ett_tetra_USSI_NEED = -1;
755 static gint ett_tetra_SMI_NEED = -1;
756 static gint ett_tetra_SSI_EVENT_NEED = -1;
757 static gint ett_tetra_SSI_USAGE_NEED = -1;
758 static gint ett_tetra_SMI_EVENT_NEED = -1;
759 static gint ett_tetra_MAC_ACCESS_DEFINE = -1;
760 static gint ett_tetra_T_optional_field = -1;
761 static gint ett_tetra_D_LLC_PDU = -1;
762 static gint ett_tetra_D_BL_ACK_FCS = -1;
763 static gint ett_tetra_D_MLE_PDU_FCS = -1;
764 static gint ett_tetra_D_BL_ADATA_FCS = -1;
765 static gint ett_tetra_D_BL_DATA_FCS = -1;
766 static gint ett_tetra_U_BL_ACK = -1;
767 static gint ett_tetra_D_BL_ACK = -1;
768 static gint ett_tetra_U_BL_DATA = -1;
769 static gint ett_tetra_D_BL_DATA = -1;
770 static gint ett_tetra_U_BL_ADATA = -1;
771 static gint ett_tetra_D_BL_ADATA = -1;
772 static gint ett_tetra_D_MLE_PDU = -1;
773 static gint ett_tetra_UMLE_PDU = -1;
774 static gint ett_tetra_DMLE_PDU = -1;
775 static gint ett_tetra_U_PREPARE = -1;
776 static gint ett_tetra_T_optional_elements = -1;
777 static gint ett_tetra_T_type2_parameters = -1;
778 static gint ett_tetra_T_cell_number = -1;
779 static gint ett_tetra_U_RESTORE = -1;
780 static gint ett_tetra_T_optional_elements_01 = -1;
781 static gint ett_tetra_T_type2_parameters_01 = -1;
782 static gint ett_tetra_T_mcc = -1;
783 static gint ett_tetra_T_mnc = -1;
784 static gint ett_tetra_T_la = -1;
785 static gint ett_tetra_D_NEW_CELL = -1;
786 static gint ett_tetra_T_optional_elements_02 = -1;
787 static gint ett_tetra_D_PREPARE_FAIL = -1;
788 static gint ett_tetra_T_optional_elements_03 = -1;
789 static gint ett_tetra_D_NWRK_BRDADCAST = -1;
790 static gint ett_tetra_T_optional_elements_04 = -1;
791 static gint ett_tetra_T_type2_parameters_02 = -1;
792 static gint ett_tetra_T_tetra_network_time = -1;
793 static gint ett_tetra_T_number_of_neighbour_cells = -1;
794 static gint ett_tetra_TETRA_NETWORK_TIME = -1;
795 static gint ett_tetra_D_RESTORE_ACK = -1;
796 static gint ett_tetra_D_RESTORE_FAIL = -1;
797 static gint ett_tetra_U_MM_PDU = -1;
798 static gint ett_tetra_D_MM_PDU = -1;
799 static gint ett_tetra_GROUP_IDENTITY_DOWNLINK = -1;
800 static gint ett_tetra_T_attach_detach_identifiet = -1;
801 static gint ett_tetra_T_attach = -1;
802 static gint ett_tetra_T_detach = -1;
803 static gint ett_tetra_T_address_type = -1;
804 static gint ett_tetra_T_gssi_extension = -1;
805 static gint ett_tetra_GROUP_IDENTITY_UPLINK = -1;
806 static gint ett_tetra_T_attach_detach_identifiet_01 = -1;
807 static gint ett_tetra_T_attach_01 = -1;
808 static gint ett_tetra_T_detach_01 = -1;
809 static gint ett_tetra_T_address_type_01 = -1;
810 static gint ett_tetra_T_gssi_extension_01 = -1;
811 static gint ett_tetra_D_LOCATION_UPDATE_ACCEPT = -1;
812 static gint ett_tetra_T_optional_elements_05 = -1;
813 static gint ett_tetra_T_type2_parameters_03 = -1;
814 static gint ett_tetra_T_ssi = -1;
815 static gint ett_tetra_T_address_extension = -1;
816 static gint ett_tetra_T_subscriber_class = -1;
817 static gint ett_tetra_T_energy_saving_mode = -1;
818 static gint ett_tetra_T_scch_info = -1;
819 static gint ett_tetra_T_type3 = -1;
820 static gint ett_tetra_T_type3_elements = -1;
821 static gint ett_tetra_T_new_ra = -1;
822 static gint ett_tetra_T_group_identity_location_accept = -1;
823 static gint ett_tetra_T_group_predefined_lifetime = -1;
824 static gint ett_tetra_T_group_identity_downlink = -1;
825 static gint ett_tetra_T_proprietary = -1;
826 static gint ett_tetra_D_LOCATION_UPDATE_REJECT = -1;
827 static gint ett_tetra_U_MM_STATUS = -1;
828 static gint ett_tetra_D_MM_STATUS = -1;
829 static gint ett_tetra_U_CMCE_PDU = -1;
830 static gint ett_tetra_U_RELEASE = -1;
831 static gint ett_tetra_U_SDS_DATA = -1;
832 static gint ett_tetra_T_called_party_type_identifier = -1;
833 static gint ett_tetra_T_short_data_type_identifier = -1;
834 static gint ett_tetra_U_STATUS = -1;
835 static gint ett_tetra_T_called_party_type_identifier_01 = -1;
836 static gint ett_tetra_U_INFO = -1;
837 static gint ett_tetra_D_CMCE_PDU = -1;
838 static gint ett_tetra_D_SDS_DATA = -1;
839 static gint ett_tetra_T_calling_party_type_identifier = -1;
840 static gint ett_tetra_T_short_data_type_identifier_01 = -1;
841 static gint ett_tetra_D_STATUS = -1;
842 static gint ett_tetra_T_calling_party_type_identifier_01 = -1;
843 static gint ett_tetra_D_DISCONNECT = -1;
844 static gint ett_tetra_D_INFO = -1;
845 static gint ett_tetra_D_TX_WAIT = -1;
846 static gint ett_tetra_D_TX_CONTINUE = -1;
847 static gint ett_tetra_U_LOCATION_UPDATE_DEMAND = -1;
848 static gint ett_tetra_T_cipher_control = -1;
849 static gint ett_tetra_T_optional_elements_06 = -1;
850 static gint ett_tetra_T_type2_parameters_04 = -1;
851 static gint ett_tetra_T_class_of_MS = -1;
852 static gint ett_tetra_T_energy_saving_mode_01 = -1;
853 static gint ett_tetra_T_la_information = -1;
854 static gint ett_tetra_T_ssi_01 = -1;
855 static gint ett_tetra_T_address_extension_01 = -1;
856 static gint ett_tetra_T_type3_01 = -1;
857 static gint ett_tetra_T_type3_elements_01 = -1;
858 static gint ett_tetra_T_group_identity_location_demand = -1;
859 static gint ett_tetra_T_group_report_response = -1;
860 static gint ett_tetra_T_group_identity_uplink = -1;
861 static gint ett_tetra_T_proprietary_01 = -1;
862 static gint ett_tetra_U_ATTACH_DETACH_GROUP_IDENTITY = -1;
863 static gint ett_tetra_T_optional_elements_07 = -1;
864 static gint ett_tetra_T_type2_element = -1;
865 static gint ett_tetra_T_type3_02 = -1;
866 static gint ett_tetra_T_type3_elements_02 = -1;
867 static gint ett_tetra_U_ATTACH_DETACH_GROUP_IDENTITY_ACK = -1;
868 static gint ett_tetra_T_optional_elements_08 = -1;
869 static gint ett_tetra_T_type2_element_01 = -1;
870 static gint ett_tetra_T_type3_03 = -1;
871 static gint ett_tetra_T_type3_elements_03 = -1;
872 static gint ett_tetra_U_SETUP = -1;
873 static gint ett_tetra_T_optional_elements_09 = -1;
874 static gint ett_tetra_T_type2_parameters_05 = -1;
875 static gint ett_tetra_T_external_subscriber_number = -1;
876 static gint ett_tetra_T_prop = -1;
877 static gint ett_tetra_Basic_service_information = -1;
878 static gint ett_tetra_U_ALERT = -1;
879 static gint ett_tetra_T_optional_elements_10 = -1;
880 static gint ett_tetra_T_type2_parameters_06 = -1;
881 static gint ett_tetra_T_basic_service_information = -1;
882 static gint ett_tetra_T_prop_01 = -1;
883 static gint ett_tetra_U_CONNECT = -1;
884 static gint ett_tetra_T_optional_elements_11 = -1;
885 static gint ett_tetra_T_type2_parameters_07 = -1;
886 static gint ett_tetra_T_basic_service_information_01 = -1;
887 static gint ett_tetra_T_prop_02 = -1;
888 static gint ett_tetra_U_TX_CEASED = -1;
889 static gint ett_tetra_T_optional_elements_12 = -1;
890 static gint ett_tetra_T_type2_parameters_08 = -1;
891 static gint ett_tetra_T_prop_03 = -1;
892 static gint ett_tetra_U_TX_DEMAND = -1;
893 static gint ett_tetra_T_optional_elements_13 = -1;
894 static gint ett_tetra_T_type2_parameters_09 = -1;
895 static gint ett_tetra_T_prop_04 = -1;
896 static gint ett_tetra_U_DISCONNECT = -1;
897 static gint ett_tetra_T_optional_elements_14 = -1;
898 static gint ett_tetra_T_type2_parameters_10 = -1;
899 static gint ett_tetra_T_prop_05 = -1;
900 static gint ett_tetra_U_CALL_RESTORE = -1;
901 static gint ett_tetra_T_optional_elements_15 = -1;
902 static gint ett_tetra_T_type2_parameters_11 = -1;
903 static gint ett_tetra_T_prop_06 = -1;
904 static gint ett_tetra_D_SETUP = -1;
905 static gint ett_tetra_T_optional_elements_16 = -1;
906 static gint ett_tetra_T_type2_parameters_12 = -1;
907 static gint ett_tetra_T_calling_party_address = -1;
908 static gint ett_tetra_T_external_subscriber_number_01 = -1;
909 static gint ett_tetra_T_prop_07 = -1;
910 static gint ett_tetra_D_CALL_PROCEEDING = -1;
911 static gint ett_tetra_T_optional_elements_17 = -1;
912 static gint ett_tetra_T_type2_parameters_13 = -1;
913 static gint ett_tetra_T_basic_service_information_02 = -1;
914 static gint ett_tetra_T_call_status = -1;
915 static gint ett_tetra_T_notification_indicator = -1;
916 static gint ett_tetra_T_prop_08 = -1;
917 static gint ett_tetra_D_ALERT = -1;
918 static gint ett_tetra_T_optional_elements_18 = -1;
919 static gint ett_tetra_T_type2_parameters_14 = -1;
920 static gint ett_tetra_T_basic_service_infomation = -1;
921 static gint ett_tetra_T_notification_indicator_01 = -1;
922 static gint ett_tetra_T_prop_09 = -1;
923 static gint ett_tetra_D_CONNECT = -1;
924 static gint ett_tetra_T_optional_elements_19 = -1;
925 static gint ett_tetra_T_type2_parameters_15 = -1;
926 static gint ett_tetra_T_call_priority = -1;
927 static gint ett_tetra_T_basic_service_information_03 = -1;
928 static gint ett_tetra_T_temporary_address = -1;
929 static gint ett_tetra_T_notification_indicator_02 = -1;
930 static gint ett_tetra_T_prop_10 = -1;
931 static gint ett_tetra_D_CONNECT_ACK = -1;
932 static gint ett_tetra_T_optional_elements_20 = -1;
933 static gint ett_tetra_T_type2_parameters_16 = -1;
934 static gint ett_tetra_T_notification_indicator_03 = -1;
935 static gint ett_tetra_T_prop_11 = -1;
936 static gint ett_tetra_D_RELEASE = -1;
937 static gint ett_tetra_T_optional_elements_21 = -1;
938 static gint ett_tetra_T_type2_parameters_17 = -1;
939 static gint ett_tetra_T_notification_indicator_04 = -1;
940 static gint ett_tetra_T_prop_12 = -1;
941 static gint ett_tetra_D_CALL_RESTORE = -1;
942 static gint ett_tetra_T_optional_elements_22 = -1;
943 static gint ett_tetra_T_type2_parameters_18 = -1;
944 static gint ett_tetra_T_new_call_identifier = -1;
945 static gint ett_tetra_T_call_time_out = -1;
946 static gint ett_tetra_T_call_status_01 = -1;
947 static gint ett_tetra_T_modify = -1;
948 static gint ett_tetra_T_notification_indicator_05 = -1;
949 static gint ett_tetra_T_prop_13 = -1;
950 static gint ett_tetra_D_TX_CEASED = -1;
951 static gint ett_tetra_T_optional_elements_23 = -1;
952 static gint ett_tetra_T_type2_parameters_19 = -1;
953 static gint ett_tetra_T_notification_indicator_06 = -1;
954 static gint ett_tetra_T_prop_14 = -1;
955 static gint ett_tetra_D_TX_GRANTED = -1;
956 static gint ett_tetra_D_ATTACH_DETACH_GROUP_IDENTITY = -1;
957 static gint ett_tetra_T_optional_elements_24 = -1;
958 static gint ett_tetra_T_type2_element_02 = -1;
959 static gint ett_tetra_T_type3_04 = -1;
960 static gint ett_tetra_T_type3_elements_04 = -1;
961 static gint ett_tetra_D_ATTACH_DETACH_GROUP_IDENTITY_ACK = -1;
962 static gint ett_tetra_T_optional_elements_25 = -1;
963 static gint ett_tetra_T_type2_element_03 = -1;
964 static gint ett_tetra_T_type3_05 = -1;
965 static gint ett_tetra_T_type3_elements_05 = -1;
966 static gint ett_tetra_Calling_party_address_type = -1;
967 static gint ett_tetra_T_called_party_ssi_extention = -1;
968 static gint ett_tetra_Proprietary = -1;
969 static gint ett_tetra_T_data_01 = -1;
970 static gint ett_tetra_Type1 = -1;
971 static gint ett_tetra_Type2 = -1;
972 static gint ett_tetra_Modify_type = -1;
974 /*--- End of included file: packet-tetra-ett.c ---*/
975 #line 96 "../../asn1/tetra/packet-tetra-template.c"
977 static expert_field ei_tetra_channels_incorrect = EI_INIT;
980 /*--- Included file: packet-tetra-fn.c ---*/
981 #line 1 "../../asn1/tetra/packet-tetra-fn.c"
984 static int
985 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_) {
986 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
987 0U, 3U, NULL, FALSE);
989 return offset;
994 static int
995 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_) {
996 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
997 0U, 63U, NULL, FALSE);
999 return offset;
1003 static const per_sequence_t AACH_sequence[] = {
1004 { &hf_tetra_function , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
1005 { &hf_tetra_field1 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_63 },
1006 { &hf_tetra_field2 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_63 },
1007 { NULL, 0, 0, NULL }
1010 static int
1011 dissect_tetra_AACH(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1012 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1013 ett_tetra_AACH, AACH_sequence);
1015 return offset;
1019 static const value_string tetra_System_Code_vals[] = {
1020 { 0, "ets-300-392-2" },
1021 { 1, "ets-300-392-2anden-300-392-7" },
1022 { 2, "en-300-392-2-v2-3-2orlateranden-300-392-7" },
1023 { 3, "v-d-reserved" },
1024 { 4, "v-d-reserved" },
1025 { 5, "v-d-reserved" },
1026 { 6, "v-d-reserved" },
1027 { 7, "v-d-reserved" },
1028 { 8, "reserved" },
1029 { 9, "reserved" },
1030 { 10, "direct-mode-operation" },
1031 { 11, "direct-mode-operation" },
1032 { 12, "direct-mode-operation" },
1033 { 13, "direct-mode-operation" },
1034 { 14, "direct-mode-operation" },
1035 { 15, "direct-mode-operation" },
1036 { 0, NULL }
1040 static int
1041 dissect_tetra_System_Code(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1042 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1043 16, NULL, FALSE, 0, NULL);
1045 return offset;
1049 static const value_string tetra_Colour_Code_vals[] = {
1050 { 0, "pre-defined" },
1051 { 1, "operator-defined" },
1052 { 2, "operator-defined" },
1053 { 3, "operator-defined" },
1054 { 4, "operator-defined" },
1055 { 5, "operator-defined" },
1056 { 6, "operator-defined" },
1057 { 7, "operator-defined" },
1058 { 8, "operator-defined" },
1059 { 9, "operator-defined" },
1060 { 10, "operator-defined" },
1061 { 11, "operator-defined" },
1062 { 12, "operator-defined" },
1063 { 13, "operator-defined" },
1064 { 14, "operator-defined" },
1065 { 15, "operator-defined" },
1066 { 16, "operator-defined" },
1067 { 17, "operator-defined" },
1068 { 18, "operator-defined" },
1069 { 19, "operator-defined" },
1070 { 20, "operator-defined" },
1071 { 21, "operator-defined" },
1072 { 22, "operator-defined" },
1073 { 23, "operator-defined" },
1074 { 24, "operator-defined" },
1075 { 25, "operator-defined" },
1076 { 26, "operator-defined" },
1077 { 27, "operator-defined" },
1078 { 28, "operator-defined" },
1079 { 29, "operator-defined" },
1080 { 30, "operator-defined" },
1081 { 31, "operator-defined" },
1082 { 32, "operator-defined" },
1083 { 33, "operator-defined" },
1084 { 34, "operator-defined" },
1085 { 35, "operator-defined" },
1086 { 36, "operator-defined" },
1087 { 37, "operator-defined" },
1088 { 38, "operator-defined" },
1089 { 39, "operator-defined" },
1090 { 40, "operator-defined" },
1091 { 41, "operator-defined" },
1092 { 42, "operator-defined" },
1093 { 43, "operator-defined" },
1094 { 44, "operator-defined" },
1095 { 45, "operator-defined" },
1096 { 46, "operator-defined" },
1097 { 47, "operator-defined" },
1098 { 48, "operator-defined" },
1099 { 49, "operator-defined" },
1100 { 50, "operator-defined" },
1101 { 51, "operator-defined" },
1102 { 52, "operator-defined" },
1103 { 53, "operator-defined" },
1104 { 54, "operator-defined" },
1105 { 55, "operator-defined" },
1106 { 56, "operator-defined" },
1107 { 57, "operator-defined" },
1108 { 58, "operator-defined" },
1109 { 59, "operator-defined" },
1110 { 60, "operator-defined" },
1111 { 61, "operator-defined" },
1112 { 62, "operator-defined" },
1113 { 63, "operator-defined" },
1114 { 0, NULL }
1118 static int
1119 dissect_tetra_Colour_Code(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1120 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1121 64, NULL, FALSE, 0, NULL);
1123 return offset;
1127 static const value_string tetra_Timeslot_Number_vals[] = {
1128 { 0, "timeslot-1" },
1129 { 1, "timeslot-2" },
1130 { 2, "timeslot-3" },
1131 { 3, "timeslot-4" },
1132 { 0, NULL }
1136 static int
1137 dissect_tetra_Timeslot_Number(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1138 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1139 4, NULL, FALSE, 0, NULL);
1141 return offset;
1145 static const value_string tetra_Frame_Number_vals[] = {
1146 { 0, "reserved" },
1147 { 1, "frame-1" },
1148 { 2, "frame-2" },
1149 { 3, "frame-3" },
1150 { 4, "frame-4" },
1151 { 5, "frame-5" },
1152 { 6, "frame-6" },
1153 { 7, "frame-7" },
1154 { 8, "frame-8" },
1155 { 9, "frame-9" },
1156 { 10, "frame-10" },
1157 { 11, "frame-11" },
1158 { 12, "frame-12" },
1159 { 13, "frame-13" },
1160 { 14, "frame-14" },
1161 { 15, "frame-15" },
1162 { 16, "frame-16" },
1163 { 17, "frame-17" },
1164 { 18, "frame-18" },
1165 { 19, "reserved" },
1166 { 20, "reserved" },
1167 { 21, "reserved" },
1168 { 22, "reserved" },
1169 { 23, "reserved" },
1170 { 24, "reserved" },
1171 { 25, "reserved" },
1172 { 26, "reserved" },
1173 { 27, "reserved" },
1174 { 28, "reserved" },
1175 { 29, "reserved" },
1176 { 30, "reserved" },
1177 { 31, "reserved" },
1178 { 0, NULL }
1182 static int
1183 dissect_tetra_Frame_Number(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1184 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1185 32, NULL, FALSE, 0, NULL);
1187 return offset;
1191 static const value_string tetra_Multiple_Frame_Number_vals[] = {
1192 { 0, "reserved" },
1193 { 1, "multiframe-1" },
1194 { 2, "multiframe-2" },
1195 { 3, "multiframe-3" },
1196 { 4, "multiframe-4" },
1197 { 5, "multiframe-5" },
1198 { 6, "multiframe-6" },
1199 { 7, "multiframe-7" },
1200 { 8, "multiframe-8" },
1201 { 9, "multiframe-9" },
1202 { 10, "multiframe-10" },
1203 { 11, "multiframe-11" },
1204 { 12, "multiframe-12" },
1205 { 13, "multiframe-13" },
1206 { 14, "multiframe-14" },
1207 { 15, "multiframe-15" },
1208 { 16, "multiframe-16" },
1209 { 17, "multiframe-17" },
1210 { 18, "multiframe-18" },
1211 { 19, "multiframe-19" },
1212 { 20, "multiframe-20" },
1213 { 21, "multiframe-21" },
1214 { 22, "multiframe-22" },
1215 { 23, "multiframe-23" },
1216 { 24, "multiframe-24" },
1217 { 25, "multiframe-25" },
1218 { 26, "multiframe-26" },
1219 { 27, "multiframe-27" },
1220 { 28, "multiframe-28" },
1221 { 29, "multiframe-29" },
1222 { 30, "multiframe-30" },
1223 { 31, "multiframe-31" },
1224 { 32, "multiframe-32" },
1225 { 33, "multiframe-33" },
1226 { 34, "multiframe-34" },
1227 { 35, "multiframe-35" },
1228 { 36, "multiframe-36" },
1229 { 37, "multiframe-37" },
1230 { 38, "multiframe-38" },
1231 { 39, "multiframe-39" },
1232 { 40, "multiframe-40" },
1233 { 41, "multiframe-41" },
1234 { 42, "multiframe-42" },
1235 { 43, "multiframe-43" },
1236 { 44, "multiframe-44" },
1237 { 45, "multiframe-45" },
1238 { 46, "multiframe-46" },
1239 { 47, "multiframe-47" },
1240 { 48, "multiframe-48" },
1241 { 49, "multiframe-49" },
1242 { 50, "multiframe-50" },
1243 { 51, "multiframe-51" },
1244 { 52, "multiframe-52" },
1245 { 53, "multiframe-53" },
1246 { 54, "multiframe-54" },
1247 { 55, "multiframe-55" },
1248 { 56, "multiframe-56" },
1249 { 57, "multiframe-57" },
1250 { 58, "multiframe-58" },
1251 { 59, "multiframe-59" },
1252 { 60, "multiframe-60" },
1253 { 61, "reserved" },
1254 { 62, "reserved" },
1255 { 63, "reserved" },
1256 { 0, NULL }
1260 static int
1261 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_) {
1262 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1263 64, NULL, FALSE, 0, NULL);
1265 return offset;
1269 static const value_string tetra_Sharing_Mod_vals[] = {
1270 { 0, "continuous-transmission" },
1271 { 1, "carrier-sharing" },
1272 { 2, "mcch-sharing" },
1273 { 3, "traffic-carrier-sharing" },
1274 { 0, NULL }
1278 static int
1279 dissect_tetra_Sharing_Mod(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1280 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1281 4, NULL, FALSE, 0, NULL);
1283 return offset;
1287 static const value_string tetra_TS_Reserved_Frames_vals[] = {
1288 { 0, "frame-reserved-1" },
1289 { 1, "frames-reserved-2" },
1290 { 2, "frames-reserved-3" },
1291 { 3, "frames-reserved-4" },
1292 { 4, "frames-reserved-6" },
1293 { 5, "frames-reserved-9" },
1294 { 6, "frames-reserved-12" },
1295 { 7, "frames-reserved-18" },
1296 { 0, NULL }
1300 static int
1301 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_) {
1302 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1303 8, NULL, FALSE, 0, NULL);
1305 return offset;
1309 static const value_string tetra_U_Plane_DTX_vals[] = {
1310 { 0, "not-allowed" },
1311 { 1, "allowed" },
1312 { 0, NULL }
1316 static int
1317 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_) {
1318 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1319 2, NULL, FALSE, 0, NULL);
1321 return offset;
1325 static const value_string tetra_Frame_18_Extension_vals[] = {
1326 { 0, "not-allowed" },
1327 { 1, "allowed" },
1328 { 0, NULL }
1332 static int
1333 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_) {
1334 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1335 2, NULL, FALSE, 0, NULL);
1337 return offset;
1341 static const value_string tetra_Reserved_vals[] = {
1342 { 0, "default" },
1343 { 1, "not-used" },
1344 { 0, NULL }
1348 static int
1349 dissect_tetra_Reserved(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1350 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1351 2, NULL, FALSE, 0, NULL);
1353 return offset;
1358 static int
1359 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_) {
1360 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1361 0U, 1023U, NULL, FALSE);
1363 return offset;
1368 static int
1369 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_) {
1370 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1371 0U, 16383U, NULL, FALSE);
1373 return offset;
1378 static int
1379 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_) {
1380 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1381 0U, 1U, NULL, FALSE);
1383 return offset;
1387 static const per_sequence_t MLE_Sync_sequence[] = {
1388 { &hf_tetra_mcc , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1023 },
1389 { &hf_tetra_mnc , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
1390 { &hf_tetra_neighbour_cell_broadcast, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
1391 { &hf_tetra_cell_service_level, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
1392 { &hf_tetra_late_entry_information, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
1393 { NULL, 0, 0, NULL }
1396 static int
1397 dissect_tetra_MLE_Sync(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1398 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1399 ett_tetra_MLE_Sync, MLE_Sync_sequence);
1401 return offset;
1405 static const per_sequence_t BSCH_sequence[] = {
1406 { &hf_tetra_system_code , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_System_Code },
1407 { &hf_tetra_colour_code , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Colour_Code },
1408 { &hf_tetra_timeslot_number, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Timeslot_Number },
1409 { &hf_tetra_frame_number , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Frame_Number },
1410 { &hf_tetra_multiple_frame_number, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Multiple_Frame_Number },
1411 { &hf_tetra_sharing_mod , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Sharing_Mod },
1412 { &hf_tetra_ts_reserved_frames, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_TS_Reserved_Frames },
1413 { &hf_tetra_u_plane_dtx , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_U_Plane_DTX },
1414 { &hf_tetra_frame_18_extension, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Frame_18_Extension },
1415 { &hf_tetra_reserved , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Reserved },
1416 { &hf_tetra_tm_sdu , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_MLE_Sync },
1417 { NULL, 0, 0, NULL }
1420 static int
1421 dissect_tetra_BSCH(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1422 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1423 ett_tetra_BSCH, BSCH_sequence);
1425 return offset;
1430 static int
1431 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_) {
1432 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1433 0U, 4095U, NULL, FALSE);
1435 return offset;
1440 static int
1441 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_) {
1442 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1443 0U, 15U, NULL, FALSE);
1445 return offset;
1449 static const value_string tetra_Offset_vals[] = {
1450 { 0, "offset-0" },
1451 { 1, "offset-positive-6-point-25" },
1452 { 2, "offset-minus-6-point-25" },
1453 { 3, "offset-12-point-5" },
1454 { 0, NULL }
1458 static int
1459 dissect_tetra_Offset(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1460 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1461 4, NULL, FALSE, 0, NULL);
1463 return offset;
1468 static int
1469 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_) {
1470 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1471 0U, 7U, NULL, FALSE);
1473 return offset;
1477 static const value_string tetra_Reverse_Operation_vals[] = {
1478 { 0, "normal" },
1479 { 1, "reverse" },
1480 { 0, NULL }
1484 static int
1485 dissect_tetra_Reverse_Operation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1486 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1487 2, NULL, FALSE, 0, NULL);
1489 return offset;
1493 static const value_string tetra_Sencond_Ctl_Carrier_vals[] = {
1494 { 0, "none" },
1495 { 1, "timeslot-2" },
1496 { 2, "timeslots-2and3" },
1497 { 3, "timeslots-2and3and4" },
1498 { 0, NULL }
1502 static int
1503 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_) {
1504 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1505 4, NULL, FALSE, 0, NULL);
1507 return offset;
1511 static const value_string tetra_MS_TXPWR_MAX_CELL_vals[] = {
1512 { 0, "reserved" },
1513 { 1, "dbm-15" },
1514 { 2, "dbm-20" },
1515 { 3, "dbm-25" },
1516 { 4, "dbm-30" },
1517 { 5, "dbm-35" },
1518 { 6, "dbm-40" },
1519 { 7, "dbm-45" },
1520 { 0, NULL }
1524 static int
1525 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_) {
1526 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1527 8, NULL, FALSE, 0, NULL);
1529 return offset;
1533 static const value_string tetra_RXLEV_ACCESS_MIN_vals[] = {
1534 { 0, "dbm-125" },
1535 { 1, "dbm-120" },
1536 { 2, "dbm-115" },
1537 { 3, "dbm-110" },
1538 { 4, "dbm-105" },
1539 { 5, "dbm-100" },
1540 { 6, "dbm-95" },
1541 { 7, "dnm-90" },
1542 { 8, "dbm-85" },
1543 { 9, "dbm-80" },
1544 { 10, "dbm-75" },
1545 { 11, "dbm-70" },
1546 { 12, "dbm-65" },
1547 { 13, "dbm-60" },
1548 { 14, "dbm-55" },
1549 { 15, "dbm-50" },
1550 { 0, NULL }
1554 static int
1555 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_) {
1556 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1557 16, NULL, FALSE, 0, NULL);
1559 return offset;
1563 static const value_string tetra_ACCESS_PARAMETER_vals[] = {
1564 { 0, "dbm-53" },
1565 { 1, "dbm-51" },
1566 { 2, "dbm-49" },
1567 { 3, "dbm-47" },
1568 { 4, "dbm-45" },
1569 { 5, "dbm-43" },
1570 { 6, "dbm-41" },
1571 { 7, "dbm-39" },
1572 { 8, "dbm-37" },
1573 { 9, "dbm-35" },
1574 { 10, "dbm-33" },
1575 { 11, "dbm-31" },
1576 { 12, "dbm-29" },
1577 { 13, "dbm-27" },
1578 { 14, "dbm-25" },
1579 { 15, "dbm-23" },
1580 { 0, NULL }
1584 static int
1585 dissect_tetra_ACCESS_PARAMETER(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1586 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1587 16, NULL, FALSE, 0, NULL);
1589 return offset;
1593 static const value_string tetra_RADIO_DOWNLINK_TIMEOUT_vals[] = {
1594 { 0, "disable" },
1595 { 1, "timeslots-144" },
1596 { 2, "timeslots-288" },
1597 { 3, "timeslots-432" },
1598 { 4, "timeslots-576" },
1599 { 5, "timeslots-720" },
1600 { 6, "timeslots-864" },
1601 { 7, "timeslots-1008" },
1602 { 8, "timeslots-1152" },
1603 { 9, "timeslots-1296" },
1604 { 10, "timeslots-1440" },
1605 { 11, "timeslots-1584" },
1606 { 12, "timeslots-1728" },
1607 { 13, "timeslots-1872" },
1608 { 14, "timeslots-2016" },
1609 { 15, "timeslots-2160" },
1610 { 0, NULL }
1614 static int
1615 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_) {
1616 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1617 16, NULL, FALSE, 0, NULL);
1619 return offset;
1624 static int
1625 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_) {
1626 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1627 0U, 65535U, NULL, FALSE);
1629 return offset;
1633 static const value_string tetra_T_hyperframe_or_cck_vals[] = {
1634 { 0, "hyperframe" },
1635 { 1, "cckid" },
1636 { 0, NULL }
1639 static const per_choice_t T_hyperframe_or_cck_choice[] = {
1640 { 0, &hf_tetra_hyperframe , ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_65535 },
1641 { 1, &hf_tetra_cckid , ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_65535 },
1642 { 0, NULL, 0, NULL }
1645 static int
1646 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_) {
1647 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
1648 ett_tetra_T_hyperframe_or_cck, T_hyperframe_or_cck_choice,
1649 NULL);
1651 return offset;
1655 static const value_string tetra_FRAME_vals[] = {
1656 { 0, "not-common" },
1657 { 1, "common" },
1658 { 0, NULL }
1662 static int
1663 dissect_tetra_FRAME(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1664 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1665 2, NULL, FALSE, 0, NULL);
1667 return offset;
1671 static const per_sequence_t TS_COMMON_FRAMES_sequence[] = {
1672 { &hf_tetra_frame1 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1673 { &hf_tetra_frame2 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1674 { &hf_tetra_frame3 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1675 { &hf_tetra_frame4 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1676 { &hf_tetra_frame5 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1677 { &hf_tetra_frame6 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1678 { &hf_tetra_frame7 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1679 { &hf_tetra_frame8 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1680 { &hf_tetra_frame9 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1681 { &hf_tetra_frame10 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1682 { &hf_tetra_frame11 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1683 { &hf_tetra_frame12 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1684 { &hf_tetra_frame13 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1685 { &hf_tetra_frame14 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1686 { &hf_tetra_frame15 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1687 { &hf_tetra_frame16 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1688 { &hf_tetra_frame17 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1689 { &hf_tetra_frame18 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1690 { NULL, 0, 0, NULL }
1693 static int
1694 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_) {
1695 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1696 ett_tetra_TS_COMMON_FRAMES, TS_COMMON_FRAMES_sequence);
1698 return offset;
1702 static const value_string tetra_IMM_vals[] = {
1703 { 0, "always-randomize" },
1704 { 1, "randomize-after-imm-tdma" },
1705 { 2, "randomize-after-imm-tdma" },
1706 { 3, "randomize-after-imm-tdma" },
1707 { 4, "randomize-after-imm-tdma" },
1708 { 5, "randomize-after-imm-tdma" },
1709 { 6, "randomize-after-imm-tdma" },
1710 { 7, "randomize-after-imm-tdma" },
1711 { 8, "randomize-after-imm-tdma" },
1712 { 9, "randomize-after-imm-tdma" },
1713 { 10, "randomize-after-imm-tdma" },
1714 { 11, "randomize-after-imm-tdma" },
1715 { 12, "randomize-after-imm-tdma" },
1716 { 13, "randomize-after-imm-tdma" },
1717 { 14, "randomize-after-imm-tdma" },
1718 { 15, "immediate-access-allowed" },
1719 { 0, NULL }
1723 static int
1724 dissect_tetra_IMM(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1725 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1726 16, NULL, FALSE, 0, NULL);
1728 return offset;
1732 static const value_string tetra_WT_vals[] = {
1733 { 0, "reserved" },
1734 { 1, "response-within-wt-downlink" },
1735 { 2, "response-within-wt-downlink" },
1736 { 3, "response-within-wt-downlink" },
1737 { 4, "response-within-wt-downlink" },
1738 { 5, "response-within-wt-downlink" },
1739 { 6, "response-within-wt-downlink" },
1740 { 7, "response-within-wt-downlink" },
1741 { 8, "response-within-wt-downlink" },
1742 { 9, "response-within-wt-downlink" },
1743 { 10, "response-within-wt-downlink" },
1744 { 11, "response-within-wt-downlink" },
1745 { 12, "response-within-wt-downlink" },
1746 { 13, "response-within-wt-downlink" },
1747 { 14, "response-within-wt-downlink" },
1748 { 15, "response-within-wt-downlink" },
1749 { 0, NULL }
1753 static int
1754 dissect_tetra_WT(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1755 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1756 16, NULL, FALSE, 0, NULL);
1758 return offset;
1762 static const value_string tetra_NU_vals[] = {
1763 { 0, "no-random" },
1764 { 1, "random-1" },
1765 { 2, "random-2" },
1766 { 3, "random-3" },
1767 { 4, "random-4" },
1768 { 5, "random-5" },
1769 { 6, "random-6" },
1770 { 7, "random-7" },
1771 { 8, "random-8" },
1772 { 9, "random-9" },
1773 { 10, "random-10" },
1774 { 11, "random-11" },
1775 { 12, "random-12" },
1776 { 13, "random-13" },
1777 { 14, "random-14" },
1778 { 15, "random-15" },
1779 { 0, NULL }
1783 static int
1784 dissect_tetra_NU(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1785 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1786 16, NULL, FALSE, 0, NULL);
1788 return offset;
1792 static const value_string tetra_Frame_Len_Factor_vals[] = {
1793 { 0, "multiply-1" },
1794 { 1, "multiply-4" },
1795 { 0, NULL }
1799 static int
1800 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_) {
1801 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1802 2, NULL, FALSE, 0, NULL);
1804 return offset;
1808 static const value_string tetra_Timeslot_Pointer_vals[] = {
1809 { 0, "same-as-downlink" },
1810 { 1, "timeslot-4" },
1811 { 2, "timeslot-bit-map" },
1812 { 3, "timeslot-bit-map" },
1813 { 4, "timeslot-bit-map" },
1814 { 5, "timeslot-bit-map" },
1815 { 6, "timeslot-bit-map" },
1816 { 7, "timeslot-bit-map" },
1817 { 8, "timeslot-bit-map" },
1818 { 9, "timeslot-bit-map" },
1819 { 10, "timeslot-bit-map" },
1820 { 11, "timeslot-bit-map" },
1821 { 12, "timeslot-bit-map" },
1822 { 13, "timeslot-bit-map" },
1823 { 14, "timeslot-bit-map" },
1824 { 15, "all-four-timeslots" },
1825 { 0, NULL }
1829 static int
1830 dissect_tetra_Timeslot_Pointer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1831 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1832 16, NULL, FALSE, 0, NULL);
1834 return offset;
1838 static const value_string tetra_Min_Pdu_Priority_vals[] = {
1839 { 0, "priority-0" },
1840 { 1, "priority-1" },
1841 { 2, "priority-2" },
1842 { 3, "priority-3" },
1843 { 4, "priority-4" },
1844 { 5, "priority-5" },
1845 { 6, "priority-6" },
1846 { 7, "priority-7" },
1847 { 0, NULL }
1851 static int
1852 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_) {
1853 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1854 8, NULL, FALSE, 0, NULL);
1856 return offset;
1860 static const per_sequence_t Default_Code_A_sequence[] = {
1861 { &hf_tetra_imm , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_IMM },
1862 { &hf_tetra_wt , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_WT },
1863 { &hf_tetra_nu , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_NU },
1864 { &hf_tetra_frame_len_factor, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Frame_Len_Factor },
1865 { &hf_tetra_timeslot_pointer, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Timeslot_Pointer },
1866 { &hf_tetra_min_pdu_priority, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Min_Pdu_Priority },
1867 { NULL, 0, 0, NULL }
1870 static int
1871 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_) {
1872 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1873 ett_tetra_Default_Code_A, Default_Code_A_sequence);
1875 return offset;
1880 static int
1881 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_) {
1882 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1883 0U, 255U, NULL, FALSE);
1885 return offset;
1889 static const value_string tetra_SDS_TL_Addressing_Method_vals[] = {
1890 { 0, "reserved" },
1891 { 1, "service-centre" },
1892 { 2, "never-use-service-centre" },
1893 { 3, "ms-choice-to-use-service-centre" },
1894 { 0, NULL }
1898 static int
1899 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_) {
1900 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1901 4, NULL, FALSE, 0, NULL);
1903 return offset;
1907 static const value_string tetra_Data_Priority_Supported_vals[] = {
1908 { 0, "not-supported" },
1909 { 1, "supported" },
1910 { 0, NULL }
1914 static int
1915 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_) {
1916 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1917 2, NULL, FALSE, 0, NULL);
1919 return offset;
1923 static const value_string tetra_Section_Information_vals[] = {
1924 { 0, "no-information" },
1925 { 1, "futher-information" },
1926 { 0, NULL }
1930 static int
1931 dissect_tetra_Section_Information(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1932 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1933 2, NULL, FALSE, 0, NULL);
1935 return offset;
1939 static const per_sequence_t PRESENT1_sequence[] = {
1940 { &hf_tetra_data_priority_supported, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Data_Priority_Supported },
1941 { &hf_tetra_reserved_02 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
1942 { &hf_tetra_section_2_information, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Section_Information },
1943 { &hf_tetra_section_3_information, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Section_Information },
1944 { &hf_tetra_section_4_information, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Section_Information },
1945 { NULL, 0, 0, NULL }
1948 static int
1949 dissect_tetra_PRESENT1(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1950 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1951 ett_tetra_PRESENT1, PRESENT1_sequence);
1953 return offset;
1958 static int
1959 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_) {
1960 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1961 0U, 127U, NULL, FALSE);
1963 return offset;
1967 static const value_string tetra_T_section_vals[] = {
1968 { 0, "present-1" },
1969 { 1, "present-2" },
1970 { 2, "present-3" },
1971 { 3, "present-4" },
1972 { 0, NULL }
1975 static const per_choice_t T_section_choice[] = {
1976 { 0, &hf_tetra_present_1 , ASN1_NO_EXTENSIONS , dissect_tetra_PRESENT1 },
1977 { 1, &hf_tetra_present_2 , ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_127 },
1978 { 2, &hf_tetra_present_3 , ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_127 },
1979 { 3, &hf_tetra_present_4 , ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_127 },
1980 { 0, NULL, 0, NULL }
1983 static int
1984 dissect_tetra_T_section(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1985 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
1986 ett_tetra_T_section, T_section_choice,
1987 NULL);
1989 return offset;
1993 static const per_sequence_t Extended_Services_Broadcast_sequence[] = {
1994 { &hf_tetra_security_information, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_255 },
1995 { &hf_tetra_sds_tl_addressing_method, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_SDS_TL_Addressing_Method },
1996 { &hf_tetra_gck_supported , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
1997 { &hf_tetra_section , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_section },
1998 { NULL, 0, 0, NULL }
2001 static int
2002 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_) {
2003 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2004 ett_tetra_Extended_Services_Broadcast, Extended_Services_Broadcast_sequence);
2006 return offset;
2010 static const value_string tetra_T_optional_params_vals[] = {
2011 { 0, "even-multiframe" },
2012 { 1, "odd-multiframe" },
2013 { 2, "access-a-code" },
2014 { 3, "extend-service" },
2015 { 0, NULL }
2018 static const per_choice_t T_optional_params_choice[] = {
2019 { 0, &hf_tetra_even_multiframe, ASN1_NO_EXTENSIONS , dissect_tetra_TS_COMMON_FRAMES },
2020 { 1, &hf_tetra_odd_multiframe, ASN1_NO_EXTENSIONS , dissect_tetra_TS_COMMON_FRAMES },
2021 { 2, &hf_tetra_access_a_code , ASN1_NO_EXTENSIONS , dissect_tetra_Default_Code_A },
2022 { 3, &hf_tetra_extend_service, ASN1_NO_EXTENSIONS , dissect_tetra_Extended_Services_Broadcast },
2023 { 0, NULL, 0, NULL }
2026 static int
2027 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_) {
2028 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2029 ett_tetra_T_optional_params, T_optional_params_choice,
2030 NULL);
2032 return offset;
2037 static int
2038 dissect_tetra_Subscriber_class(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2039 offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
2040 16, 16, FALSE, NULL);
2042 return offset;
2046 static const per_sequence_t BNCH_sequence[] = {
2047 { &hf_tetra_pdu_type , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
2048 { &hf_tetra_broadcast_type, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
2049 { &hf_tetra_main_carrier , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_4095 },
2050 { &hf_tetra_frequency_band, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_15 },
2051 { &hf_tetra_offset , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Offset },
2052 { &hf_tetra_duplex_spacing, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
2053 { &hf_tetra_reverse_operation, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Reverse_Operation },
2054 { &hf_tetra_sencond_ctl_carrier, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Sencond_Ctl_Carrier },
2055 { &hf_tetra_ms_txpwr_max_cell, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_MS_TXPWR_MAX_CELL },
2056 { &hf_tetra_rxlev_access_min, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_RXLEV_ACCESS_MIN },
2057 { &hf_tetra_access_parameter, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_ACCESS_PARAMETER },
2058 { &hf_tetra_radio_downlink_timeout, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_RADIO_DOWNLINK_TIMEOUT },
2059 { &hf_tetra_hyperframe_or_cck, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_hyperframe_or_cck },
2060 { &hf_tetra_optional_params, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_params },
2061 { &hf_tetra_la , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
2062 { &hf_tetra_subscriber_class, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Subscriber_class },
2063 { &hf_tetra_registriation , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
2064 { &hf_tetra_de_registration, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
2065 { &hf_tetra_priority_cell , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
2066 { &hf_tetra_minimum_mode_service, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
2067 { &hf_tetra_migration , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
2068 { &hf_tetra_system_wide_service, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
2069 { &hf_tetra_tetra_voice_service, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
2070 { &hf_tetra_circuit_mode_data_service, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
2071 { &hf_tetra_reserved_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
2072 { &hf_tetra_sndcp_service , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
2073 { &hf_tetra_air_interface_encryption, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
2074 { &hf_tetra_advanced_link_support, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
2075 { NULL, 0, 0, NULL }
2078 static int
2079 dissect_tetra_BNCH(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2080 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2081 ett_tetra_BNCH, BNCH_sequence);
2083 return offset;
2087 static const value_string tetra_Fill_Bit_Indication_vals[] = {
2088 { 0, "no-present" },
2089 { 1, "present" },
2090 { 0, NULL }
2094 static int
2095 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_) {
2096 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2097 2, NULL, FALSE, 0, NULL);
2099 return offset;
2103 static const value_string tetra_Encrypted_Flag_vals[] = {
2104 { 0, "not-encrypted" },
2105 { 1, "encrypted" },
2106 { 0, NULL }
2110 static int
2111 dissect_tetra_Encrypted_Flag(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2112 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2113 2, NULL, FALSE, 0, NULL);
2115 return offset;
2120 static int
2121 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_) {
2122 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
2123 0U, 16777215U, NULL, FALSE);
2125 return offset;
2129 static const value_string tetra_Address_vals[] = {
2130 { 0, "ssi" },
2131 { 1, "eventLabel" },
2132 { 2, "ussi" },
2133 { 3, "smi" },
2134 { 0, NULL }
2137 static const per_choice_t Address_choice[] = {
2138 { 0, &hf_tetra_ssi , ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_16777215 },
2139 { 1, &hf_tetra_eventLabel , ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_1023 },
2140 { 2, &hf_tetra_ussi , ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_16777215 },
2141 { 3, &hf_tetra_smi , ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_16777215 },
2142 { 0, NULL, 0, NULL }
2145 static int
2146 dissect_tetra_Address(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2147 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2148 ett_tetra_Address, Address_choice,
2149 NULL);
2151 return offset;
2156 static int
2157 dissect_tetra_NULL(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2158 offset = dissect_per_null(tvb, offset, actx, tree, hf_index);
2160 return offset;
2164 static const value_string tetra_UPDATE_TYPE_vals[] = {
2165 { 0, "roaming-location-updating" },
2166 { 1, "temporary-registration" },
2167 { 2, "periodic-location-updating" },
2168 { 3, "itsi-attach" },
2169 { 4, "call-restoration-roaming" },
2170 { 5, "migrating-or-call-restoration-migrating" },
2171 { 6, "demand-location-updating" },
2172 { 7, "disabled-MS-updating" },
2173 { 0, NULL }
2177 static int
2178 dissect_tetra_UPDATE_TYPE(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2179 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2180 8, NULL, FALSE, 0, NULL);
2182 return offset;
2187 static int
2188 dissect_tetra_BOOLEAN(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2189 offset = dissect_per_boolean(tvb, offset, actx, tree, hf_index, NULL);
2191 return offset;
2195 static const value_string tetra_T_cipher_control_vals[] = {
2196 { 0, "no-cipher" },
2197 { 1, "ciphering-parameters" },
2198 { 0, NULL }
2201 static const per_choice_t T_cipher_control_choice[] = {
2202 { 0, &hf_tetra_no_cipher , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
2203 { 1, &hf_tetra_ciphering_parameters, ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_1023 },
2204 { 0, NULL, 0, NULL }
2207 static int
2208 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_) {
2209 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2210 ett_tetra_T_cipher_control, T_cipher_control_choice,
2211 NULL);
2213 return offset;
2217 static const value_string tetra_T_class_of_MS_vals[] = {
2218 { 0, "none" },
2219 { 1, "class-of-MS" },
2220 { 0, NULL }
2223 static const per_choice_t T_class_of_MS_choice[] = {
2224 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
2225 { 1, &hf_tetra_class_of_MS_01, ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_16777215 },
2226 { 0, NULL, 0, NULL }
2229 static int
2230 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_) {
2231 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2232 ett_tetra_T_class_of_MS, T_class_of_MS_choice,
2233 NULL);
2235 return offset;
2239 static const value_string tetra_T_energy_saving_mode_01_vals[] = {
2240 { 0, "none" },
2241 { 1, "energy-saving-mode" },
2242 { 0, NULL }
2245 static const per_choice_t T_energy_saving_mode_01_choice[] = {
2246 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
2247 { 1, &hf_tetra_energy_saving_mode_01, ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_7 },
2248 { 0, NULL, 0, NULL }
2251 static int
2252 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_) {
2253 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2254 ett_tetra_T_energy_saving_mode_01, T_energy_saving_mode_01_choice,
2255 NULL);
2257 return offset;
2261 static const value_string tetra_T_la_information_vals[] = {
2262 { 0, "none" },
2263 { 1, "la-information" },
2264 { 0, NULL }
2267 static const per_choice_t T_la_information_choice[] = {
2268 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
2269 { 1, &hf_tetra_la_information_01, ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_16383 },
2270 { 0, NULL, 0, NULL }
2273 static int
2274 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_) {
2275 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2276 ett_tetra_T_la_information, T_la_information_choice,
2277 NULL);
2279 return offset;
2284 static int
2285 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_) {
2286 offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
2287 3, 3, FALSE, NULL);
2289 return offset;
2293 static const value_string tetra_T_ssi_01_vals[] = {
2294 { 0, "none" },
2295 { 1, "ssi" },
2296 { 0, NULL }
2299 static const per_choice_t T_ssi_01_choice[] = {
2300 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
2301 { 1, &hf_tetra_ssi_03 , ASN1_NO_EXTENSIONS , dissect_tetra_OCTET_STRING_SIZE_3 },
2302 { 0, NULL, 0, NULL }
2305 static int
2306 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_) {
2307 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2308 ett_tetra_T_ssi_01, T_ssi_01_choice,
2309 NULL);
2311 return offset;
2315 static const value_string tetra_T_address_extension_01_vals[] = {
2316 { 0, "none" },
2317 { 1, "address-extension" },
2318 { 0, NULL }
2321 static const per_choice_t T_address_extension_01_choice[] = {
2322 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
2323 { 1, &hf_tetra_address_extension_01, ASN1_NO_EXTENSIONS , dissect_tetra_OCTET_STRING_SIZE_3 },
2324 { 0, NULL, 0, NULL }
2327 static int
2328 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_) {
2329 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2330 ett_tetra_T_address_extension_01, T_address_extension_01_choice,
2331 NULL);
2333 return offset;
2337 static const value_string tetra_TYPE3_IDENTIFIER_vals[] = {
2338 { 0, "reserved" },
2339 { 1, "default-group-attachment-lifetime" },
2340 { 2, "new-registered-area" },
2341 { 3, "group-identity-location-demand" },
2342 { 4, "group-report-response" },
2343 { 5, "group-identity-location-accept" },
2344 { 6, "dm-ms-address" },
2345 { 7, "group-identity-downlink" },
2346 { 8, "group-identity-uplink" },
2347 { 9, "authentication-uplink" },
2348 { 10, "authentication-downlink" },
2349 { 11, "reserved" },
2350 { 12, "reserved1" },
2351 { 13, "reserved2" },
2352 { 14, "reserved3" },
2353 { 15, "proprietary" },
2354 { 0, NULL }
2358 static int
2359 dissect_tetra_TYPE3_IDENTIFIER(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2360 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2361 16, NULL, FALSE, 0, NULL);
2363 return offset;
2367 static const value_string tetra_T_group_identity_location_demand_vals[] = {
2368 { 0, "none" },
2369 { 1, "group-identity-location-demand" },
2370 { 0, NULL }
2373 static const per_choice_t T_group_identity_location_demand_choice[] = {
2374 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
2375 { 1, &hf_tetra_group_identity_location_demand_01, ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_3 },
2376 { 0, NULL, 0, NULL }
2379 static int
2380 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_) {
2381 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2382 ett_tetra_T_group_identity_location_demand, T_group_identity_location_demand_choice,
2383 NULL);
2385 return offset;
2389 static const value_string tetra_T_group_report_response_vals[] = {
2390 { 0, "none" },
2391 { 1, "group-report-response" },
2392 { 0, NULL }
2395 static const per_choice_t T_group_report_response_choice[] = {
2396 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
2397 { 1, &hf_tetra_group_report_response_01, ASN1_NO_EXTENSIONS , dissect_tetra_BOOLEAN },
2398 { 0, NULL, 0, NULL }
2401 static int
2402 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_) {
2403 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2404 ett_tetra_T_group_report_response, T_group_report_response_choice,
2405 NULL);
2407 return offset;
2411 static const value_string tetra_T_group_identity_uplink_vals[] = {
2412 { 0, "none" },
2413 { 1, "group-identity-uplink" },
2414 { 0, NULL }
2417 static const per_choice_t T_group_identity_uplink_choice[] = {
2418 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
2419 { 1, &hf_tetra_group_identity_uplink_01, ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_15 },
2420 { 0, NULL, 0, NULL }
2423 static int
2424 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_) {
2425 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2426 ett_tetra_T_group_identity_uplink, T_group_identity_uplink_choice,
2427 NULL);
2429 return offset;
2433 static const value_string tetra_T_proprietary_01_vals[] = {
2434 { 0, "none" },
2435 { 1, "proprietary" },
2436 { 0, NULL }
2439 static const per_choice_t T_proprietary_01_choice[] = {
2440 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
2441 { 1, &hf_tetra_proprietary_01, ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_7 },
2442 { 0, NULL, 0, NULL }
2445 static int
2446 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_) {
2447 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2448 ett_tetra_T_proprietary_01, T_proprietary_01_choice,
2449 NULL);
2451 return offset;
2455 static const per_sequence_t T_type3_elements_01_sequence[] = {
2456 { &hf_tetra_type3_identifier, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_TYPE3_IDENTIFIER },
2457 { &hf_tetra_group_identity_location_demand, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_group_identity_location_demand },
2458 { &hf_tetra_group_report_response, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_group_report_response },
2459 { &hf_tetra_group_identity_uplink, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_group_identity_uplink },
2460 { &hf_tetra_proprietary_02, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_proprietary_01 },
2461 { NULL, 0, 0, NULL }
2464 static int
2465 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_) {
2466 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2467 ett_tetra_T_type3_elements_01, T_type3_elements_01_sequence);
2469 return offset;
2473 static const value_string tetra_T_type3_01_vals[] = {
2474 { 0, "no-type3" },
2475 { 1, "type3-elements" },
2476 { 0, NULL }
2479 static const per_choice_t T_type3_01_choice[] = {
2480 { 0, &hf_tetra_no_type3 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
2481 { 1, &hf_tetra_type3_elements_01, ASN1_NO_EXTENSIONS , dissect_tetra_T_type3_elements_01 },
2482 { 0, NULL, 0, NULL }
2485 static int
2486 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_) {
2487 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2488 ett_tetra_T_type3_01, T_type3_01_choice,
2489 NULL);
2491 return offset;
2495 static const per_sequence_t T_type2_parameters_04_sequence[] = {
2496 { &hf_tetra_class_of_MS , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_class_of_MS },
2497 { &hf_tetra_energy_saving_mode_02, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_energy_saving_mode_01 },
2498 { &hf_tetra_la_information, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_la_information },
2499 { &hf_tetra_ssi_04 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_ssi_01 },
2500 { &hf_tetra_address_extension_02, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_address_extension_01 },
2501 { &hf_tetra_type3_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_type3_01 },
2502 { NULL, 0, 0, NULL }
2505 static int
2506 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_) {
2507 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2508 ett_tetra_T_type2_parameters_04, T_type2_parameters_04_sequence);
2510 return offset;
2514 static const value_string tetra_T_optional_elements_06_vals[] = {
2515 { 0, "no-type2" },
2516 { 1, "type2-parameters" },
2517 { 0, NULL }
2520 static const per_choice_t T_optional_elements_06_choice[] = {
2521 { 0, &hf_tetra_no_type2 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
2522 { 1, &hf_tetra_type2_parameters_04, ASN1_NO_EXTENSIONS , dissect_tetra_T_type2_parameters_04 },
2523 { 0, NULL, 0, NULL }
2526 static int
2527 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_) {
2528 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2529 ett_tetra_T_optional_elements_06, T_optional_elements_06_choice,
2530 NULL);
2532 return offset;
2536 static const per_sequence_t U_LOCATION_UPDATE_DEMAND_sequence[] = {
2537 { &hf_tetra_location_update_type, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_UPDATE_TYPE },
2538 { &hf_tetra_request_to_append_LA, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
2539 { &hf_tetra_cipher_control_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_cipher_control },
2540 { &hf_tetra_optional_elements_06, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_06 },
2541 { NULL, 0, 0, NULL }
2544 static int
2545 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_) {
2546 #line 99 "../../asn1/tetra/tetra.cnf"
2547 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2548 ett_tetra_U_LOCATION_UPDATE_DEMAND, U_LOCATION_UPDATE_DEMAND_sequence);
2550 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-LOCATION-UPDATE-DEMAND");
2553 return offset;
2557 static const value_string tetra_T_scanning_on_off_vals[] = {
2558 { 0, "on" },
2559 { 1, "off" },
2560 { 0, NULL }
2564 static int
2565 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_) {
2566 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2567 2, NULL, FALSE, 0, NULL);
2569 return offset;
2573 static const per_sequence_t U_MM_STATUS_sequence[] = {
2574 { &hf_tetra_status_uplink , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_63 },
2575 { &hf_tetra_scanning_on_off, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_scanning_on_off },
2576 { NULL, 0, 0, NULL }
2579 static int
2580 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_) {
2581 #line 230 "../../asn1/tetra/tetra.cnf"
2582 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2583 ett_tetra_U_MM_STATUS, U_MM_STATUS_sequence);
2585 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-MM-STATUS");
2588 return offset;
2593 static int
2594 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_) {
2595 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
2596 0U, 2047U, NULL, FALSE);
2598 return offset;
2602 static const per_sequence_t T_attach_01_sequence[] = {
2603 { &hf_tetra_class_of_usage, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
2604 { NULL, 0, 0, NULL }
2607 static int
2608 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_) {
2609 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2610 ett_tetra_T_attach_01, T_attach_01_sequence);
2612 return offset;
2616 static const value_string tetra_T_detach_uplike_vals[] = {
2617 { 0, "unknow-gssi" },
2618 { 1, "unvaild-cipher" },
2619 { 2, "user-intitial" },
2620 { 3, "reseverd" },
2621 { 0, NULL }
2625 static int
2626 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_) {
2627 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2628 4, NULL, FALSE, 0, NULL);
2630 return offset;
2634 static const per_sequence_t T_detach_01_sequence[] = {
2635 { &hf_tetra_detach_uplike , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_detach_uplike },
2636 { NULL, 0, 0, NULL }
2639 static int
2640 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_) {
2641 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2642 ett_tetra_T_detach_01, T_detach_01_sequence);
2644 return offset;
2648 static const value_string tetra_T_attach_detach_identifiet_01_vals[] = {
2649 { 0, "attach" },
2650 { 1, "detach" },
2651 { 0, NULL }
2654 static const per_choice_t T_attach_detach_identifiet_01_choice[] = {
2655 { 0, &hf_tetra_attach_01 , ASN1_NO_EXTENSIONS , dissect_tetra_T_attach_01 },
2656 { 1, &hf_tetra_detach_01 , ASN1_NO_EXTENSIONS , dissect_tetra_T_detach_01 },
2657 { 0, NULL, 0, NULL }
2660 static int
2661 dissect_tetra_T_attach_detach_identifiet_01(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2662 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2663 ett_tetra_T_attach_detach_identifiet_01, T_attach_detach_identifiet_01_choice,
2664 NULL);
2666 return offset;
2670 static const per_sequence_t T_gssi_extension_01_sequence[] = {
2671 { &hf_tetra_gssi_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_OCTET_STRING_SIZE_3 },
2672 { &hf_tetra_extension , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_OCTET_STRING_SIZE_3 },
2673 { NULL, 0, 0, NULL }
2676 static int
2677 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_) {
2678 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2679 ett_tetra_T_gssi_extension_01, T_gssi_extension_01_sequence);
2681 return offset;
2685 static const value_string tetra_T_address_type_01_vals[] = {
2686 { 0, "gssi" },
2687 { 1, "gssi-extension" },
2688 { 2, "vgssi" },
2689 { 0, NULL }
2692 static const per_choice_t T_address_type_01_choice[] = {
2693 { 0, &hf_tetra_gssi_01 , ASN1_NO_EXTENSIONS , dissect_tetra_OCTET_STRING_SIZE_3 },
2694 { 1, &hf_tetra_gssi_extension_01, ASN1_NO_EXTENSIONS , dissect_tetra_T_gssi_extension_01 },
2695 { 2, &hf_tetra_vgssi , ASN1_NO_EXTENSIONS , dissect_tetra_OCTET_STRING_SIZE_3 },
2696 { 0, NULL, 0, NULL }
2699 static int
2700 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_) {
2701 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2702 ett_tetra_T_address_type_01, T_address_type_01_choice,
2703 NULL);
2705 return offset;
2709 static const per_sequence_t GROUP_IDENTITY_UPLINK_sequence[] = {
2710 { &hf_tetra_attach_detach_identifiet_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_attach_detach_identifiet_01 },
2711 { &hf_tetra_address_type_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_address_type_01 },
2712 { NULL, 0, 0, NULL }
2715 static int
2716 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_) {
2717 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2718 ett_tetra_GROUP_IDENTITY_UPLINK, GROUP_IDENTITY_UPLINK_sequence);
2720 return offset;
2724 static const per_sequence_t T_type3_elements_02_sequence[] = {
2725 { &hf_tetra_type3_identifier, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_TYPE3_IDENTIFIER },
2726 { &hf_tetra_length , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_2047 },
2727 { &hf_tetra_repeat_num , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_63 },
2728 { &hf_tetra_group_identity_uplink_02, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_GROUP_IDENTITY_UPLINK },
2729 { NULL, 0, 0, NULL }
2732 static int
2733 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_) {
2734 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2735 ett_tetra_T_type3_elements_02, T_type3_elements_02_sequence);
2737 return offset;
2741 static const value_string tetra_T_type3_02_vals[] = {
2742 { 0, "no-type3" },
2743 { 1, "type3-elements" },
2744 { 0, NULL }
2747 static const per_choice_t T_type3_02_choice[] = {
2748 { 0, &hf_tetra_no_type3 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
2749 { 1, &hf_tetra_type3_elements_02, ASN1_NO_EXTENSIONS , dissect_tetra_T_type3_elements_02 },
2750 { 0, NULL, 0, NULL }
2753 static int
2754 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_) {
2755 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2756 ett_tetra_T_type3_02, T_type3_02_choice,
2757 NULL);
2759 return offset;
2763 static const per_sequence_t T_type2_element_sequence[] = {
2764 { &hf_tetra_type3_02 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_type3_02 },
2765 { NULL, 0, 0, NULL }
2768 static int
2769 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_) {
2770 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2771 ett_tetra_T_type2_element, T_type2_element_sequence);
2773 return offset;
2777 static const value_string tetra_T_optional_elements_07_vals[] = {
2778 { 0, "no-type2" },
2779 { 1, "type2-element" },
2780 { 0, NULL }
2783 static const per_choice_t T_optional_elements_07_choice[] = {
2784 { 0, &hf_tetra_no_type2 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
2785 { 1, &hf_tetra_type2_element , ASN1_NO_EXTENSIONS , dissect_tetra_T_type2_element },
2786 { 0, NULL, 0, NULL }
2789 static int
2790 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_) {
2791 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2792 ett_tetra_T_optional_elements_07, T_optional_elements_07_choice,
2793 NULL);
2795 return offset;
2799 static const per_sequence_t U_ATTACH_DETACH_GROUP_IDENTITY_sequence[] = {
2800 { &hf_tetra_group_identity_report, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
2801 { &hf_tetra_group_identity_attach_detach_mode, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
2802 { &hf_tetra_optional_elements_07, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_07 },
2803 { NULL, 0, 0, NULL }
2806 static int
2807 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_) {
2808 #line 240 "../../asn1/tetra/tetra.cnf"
2809 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2810 ett_tetra_U_ATTACH_DETACH_GROUP_IDENTITY, U_ATTACH_DETACH_GROUP_IDENTITY_sequence);
2812 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-ATTACH-DETACH-GROUP-IDENTITY");
2815 return offset;
2819 static const per_sequence_t T_type3_elements_03_sequence[] = {
2820 { &hf_tetra_type3_identifier, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_TYPE3_IDENTIFIER },
2821 { &hf_tetra_length , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_2047 },
2822 { &hf_tetra_repeat_num , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_63 },
2823 { &hf_tetra_group_identity_uplink_02, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_GROUP_IDENTITY_UPLINK },
2824 { NULL, 0, 0, NULL }
2827 static int
2828 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_) {
2829 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2830 ett_tetra_T_type3_elements_03, T_type3_elements_03_sequence);
2832 return offset;
2836 static const value_string tetra_T_type3_03_vals[] = {
2837 { 0, "no-type3" },
2838 { 1, "type3-elements" },
2839 { 0, NULL }
2842 static const per_choice_t T_type3_03_choice[] = {
2843 { 0, &hf_tetra_no_type3 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
2844 { 1, &hf_tetra_type3_elements_03, ASN1_NO_EXTENSIONS , dissect_tetra_T_type3_elements_03 },
2845 { 0, NULL, 0, NULL }
2848 static int
2849 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_) {
2850 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2851 ett_tetra_T_type3_03, T_type3_03_choice,
2852 NULL);
2854 return offset;
2858 static const per_sequence_t T_type2_element_01_sequence[] = {
2859 { &hf_tetra_type3_03 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_type3_03 },
2860 { NULL, 0, 0, NULL }
2863 static int
2864 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_) {
2865 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2866 ett_tetra_T_type2_element_01, T_type2_element_01_sequence);
2868 return offset;
2872 static const value_string tetra_T_optional_elements_08_vals[] = {
2873 { 0, "no-type2" },
2874 { 1, "type2-element" },
2875 { 0, NULL }
2878 static const per_choice_t T_optional_elements_08_choice[] = {
2879 { 0, &hf_tetra_no_type2 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
2880 { 1, &hf_tetra_type2_element_01, ASN1_NO_EXTENSIONS , dissect_tetra_T_type2_element_01 },
2881 { 0, NULL, 0, NULL }
2884 static int
2885 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_) {
2886 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2887 ett_tetra_T_optional_elements_08, T_optional_elements_08_choice,
2888 NULL);
2890 return offset;
2894 static const per_sequence_t U_ATTACH_DETACH_GROUP_IDENTITY_ACK_sequence[] = {
2895 { &hf_tetra_group_identity_ack_type, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
2896 { &hf_tetra_group_identity_attach_detach_mode, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
2897 { &hf_tetra_optional_elements_08, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_08 },
2898 { NULL, 0, 0, NULL }
2901 static int
2902 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_) {
2903 #line 245 "../../asn1/tetra/tetra.cnf"
2904 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2905 ett_tetra_U_ATTACH_DETACH_GROUP_IDENTITY_ACK, U_ATTACH_DETACH_GROUP_IDENTITY_ACK_sequence);
2907 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-ATTACH-DETACH-GROUP-IDENTITY-ACK");
2910 return offset;
2914 static const value_string tetra_U_MM_PDU_vals[] = {
2915 { 0, "u-Authentication" },
2916 { 1, "u-Itsi-Detach" },
2917 { 2, "u-Location-Update-Demand" },
2918 { 3, "u-MM-Status" },
2919 { 4, "u-MM-reserved1" },
2920 { 5, "u-WK" },
2921 { 6, "u-MM-reserved3" },
2922 { 7, "u-Attach-Detach-Group-Identity" },
2923 { 8, "u-Attach-Detach-Group-Identity-Ack" },
2924 { 9, "u-TEI-Provide" },
2925 { 10, "u-MM-reserved6" },
2926 { 11, "u-Disabled-Status" },
2927 { 12, "u-MM-reserved7" },
2928 { 13, "u-MM-reserved8" },
2929 { 14, "u-MM-reserved9" },
2930 { 15, "u-MM-Function-Not-Support" },
2931 { 0, NULL }
2934 static const per_choice_t U_MM_PDU_choice[] = {
2935 { 0, &hf_tetra_u_Authentication, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
2936 { 1, &hf_tetra_u_Itsi_Detach , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
2937 { 2, &hf_tetra_u_Location_Update_Demand, ASN1_NO_EXTENSIONS , dissect_tetra_U_LOCATION_UPDATE_DEMAND },
2938 { 3, &hf_tetra_u_MM_Status , ASN1_NO_EXTENSIONS , dissect_tetra_U_MM_STATUS },
2939 { 4, &hf_tetra_u_MM_reserved1, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
2940 { 5, &hf_tetra_u_WK , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
2941 { 6, &hf_tetra_u_MM_reserved3, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
2942 { 7, &hf_tetra_u_Attach_Detach_Group_Identity, ASN1_NO_EXTENSIONS , dissect_tetra_U_ATTACH_DETACH_GROUP_IDENTITY },
2943 { 8, &hf_tetra_u_Attach_Detach_Group_Identity_Ack, ASN1_NO_EXTENSIONS , dissect_tetra_U_ATTACH_DETACH_GROUP_IDENTITY_ACK },
2944 { 9, &hf_tetra_u_TEI_Provide , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
2945 { 10, &hf_tetra_u_MM_reserved6, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
2946 { 11, &hf_tetra_u_Disabled_Status, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
2947 { 12, &hf_tetra_u_MM_reserved7, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
2948 { 13, &hf_tetra_u_MM_reserved8, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
2949 { 14, &hf_tetra_u_MM_reserved9, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
2950 { 15, &hf_tetra_u_MM_Function_Not_Support, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
2951 { 0, NULL, 0, NULL }
2954 static int
2955 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_) {
2956 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2957 ett_tetra_U_MM_PDU, U_MM_PDU_choice,
2958 NULL);
2960 return offset;
2964 static const value_string tetra_T_simplex_duplex_selection_vals[] = {
2965 { 0, "simplex" },
2966 { 1, "duplex" },
2967 { 0, NULL }
2971 static int
2972 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_) {
2973 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2974 2, NULL, FALSE, 0, NULL);
2976 return offset;
2980 static const value_string tetra_CIRCUIT_vals[] = {
2981 { 0, "speech-tch-s" },
2982 { 1, "unprotected-tch-7-2" },
2983 { 2, "low-protection-tch-4-8" },
2984 { 3, "low-protection-tch-4-8" },
2985 { 4, "low-protection-tch-4-8" },
2986 { 5, "high-protection-tch-2-4" },
2987 { 6, "high-protection-tch-2-4" },
2988 { 7, "high-protection-tch-2-4" },
2989 { 0, NULL }
2993 static int
2994 dissect_tetra_CIRCUIT(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2995 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2996 8, NULL, FALSE, 0, NULL);
2998 return offset;
3002 static const per_sequence_t Basic_service_information_sequence[] = {
3003 { &hf_tetra_circuit_mode , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_CIRCUIT },
3004 { &hf_tetra_encryption , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
3005 { &hf_tetra_communication , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
3006 { &hf_tetra_slots_or_speech, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
3007 { NULL, 0, 0, NULL }
3010 static int
3011 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_) {
3012 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3013 ett_tetra_Basic_service_information, Basic_service_information_sequence);
3015 return offset;
3019 static const value_string tetra_T_basic_service_information_vals[] = {
3020 { 0, "none" },
3021 { 1, "basic-service-information" },
3022 { 0, NULL }
3025 static const per_choice_t T_basic_service_information_choice[] = {
3026 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
3027 { 1, &hf_tetra_basic_service_information, ASN1_NO_EXTENSIONS , dissect_tetra_Basic_service_information },
3028 { 0, NULL, 0, NULL }
3031 static int
3032 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_) {
3033 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3034 ett_tetra_T_basic_service_information, T_basic_service_information_choice,
3035 NULL);
3037 return offset;
3042 static int
3043 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_) {
3044 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
3045 0U, 255U, NULL, FALSE);
3047 return offset;
3052 static int
3053 dissect_tetra_BIT_STRING(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3054 offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
3055 NO_BOUND, NO_BOUND, FALSE, NULL);
3057 return offset;
3061 static const per_sequence_t Type1_sequence[] = {
3062 { &hf_tetra_proprietary_element_owner, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Proprietary_element_owner },
3063 { &hf_tetra_proprietary_element_owner_extension, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_BIT_STRING },
3064 { NULL, 0, 0, NULL }
3067 static int
3068 dissect_tetra_Type1(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3069 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3070 ett_tetra_Type1, Type1_sequence);
3072 return offset;
3076 static const per_sequence_t Type2_sequence[] = {
3077 { &hf_tetra_proprietary_element_owner, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Proprietary_element_owner },
3078 { NULL, 0, 0, NULL }
3081 static int
3082 dissect_tetra_Type2(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3083 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3084 ett_tetra_Type2, Type2_sequence);
3086 return offset;
3090 static const value_string tetra_T_data_01_vals[] = {
3091 { 0, "element1" },
3092 { 1, "element" },
3093 { 0, NULL }
3096 static const per_choice_t T_data_01_choice[] = {
3097 { 0, &hf_tetra_element1 , ASN1_NO_EXTENSIONS , dissect_tetra_Type1 },
3098 { 1, &hf_tetra_element , ASN1_NO_EXTENSIONS , dissect_tetra_Type2 },
3099 { 0, NULL, 0, NULL }
3102 static int
3103 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_) {
3104 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3105 ett_tetra_T_data_01, T_data_01_choice,
3106 NULL);
3108 return offset;
3112 static const per_sequence_t Proprietary_sequence[] = {
3113 { &hf_tetra_data_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_data_01 },
3114 { NULL, 0, 0, NULL }
3117 static int
3118 dissect_tetra_Proprietary(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3119 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3120 ett_tetra_Proprietary, Proprietary_sequence);
3122 return offset;
3126 static const value_string tetra_T_prop_01_vals[] = {
3127 { 0, "none" },
3128 { 1, "prop" },
3129 { 0, NULL }
3132 static const per_choice_t T_prop_01_choice[] = {
3133 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
3134 { 1, &hf_tetra_prop_01 , ASN1_NO_EXTENSIONS , dissect_tetra_Proprietary },
3135 { 0, NULL, 0, NULL }
3138 static int
3139 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_) {
3140 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3141 ett_tetra_T_prop_01, T_prop_01_choice,
3142 NULL);
3144 return offset;
3148 static const per_sequence_t T_type2_parameters_06_sequence[] = {
3149 { &hf_tetra_basic_service_information_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_basic_service_information },
3150 { &hf_tetra_prop_02 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop_01 },
3151 { NULL, 0, 0, NULL }
3154 static int
3155 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_) {
3156 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3157 ett_tetra_T_type2_parameters_06, T_type2_parameters_06_sequence);
3159 return offset;
3163 static const value_string tetra_T_optional_elements_10_vals[] = {
3164 { 0, "no-type2" },
3165 { 1, "type2-parameters" },
3166 { 0, NULL }
3169 static const per_choice_t T_optional_elements_10_choice[] = {
3170 { 0, &hf_tetra_no_type2 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
3171 { 1, &hf_tetra_type2_parameters_06, ASN1_NO_EXTENSIONS , dissect_tetra_T_type2_parameters_06 },
3172 { 0, NULL, 0, NULL }
3175 static int
3176 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_) {
3177 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3178 ett_tetra_T_optional_elements_10, T_optional_elements_10_choice,
3179 NULL);
3181 return offset;
3185 static const per_sequence_t U_ALERT_sequence[] = {
3186 { &hf_tetra_call_identifier_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1023 },
3187 { &hf_tetra_reserved_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
3188 { &hf_tetra_simplex_duplex_selection, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_simplex_duplex_selection },
3189 { &hf_tetra_optional_elements_10, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_10 },
3190 { NULL, 0, 0, NULL }
3193 static int
3194 dissect_tetra_U_ALERT(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3195 #line 179 "../../asn1/tetra/tetra.cnf"
3196 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3197 ett_tetra_U_ALERT, U_ALERT_sequence);
3199 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-ALERT");
3202 return offset;
3206 static const value_string tetra_T_simplex_duplex_selection_01_vals[] = {
3207 { 0, "simplex" },
3208 { 1, "duplex" },
3209 { 0, NULL }
3213 static int
3214 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_) {
3215 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
3216 2, NULL, FALSE, 0, NULL);
3218 return offset;
3222 static const value_string tetra_T_basic_service_information_01_vals[] = {
3223 { 0, "none" },
3224 { 1, "basic-service-information" },
3225 { 0, NULL }
3228 static const per_choice_t T_basic_service_information_01_choice[] = {
3229 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
3230 { 1, &hf_tetra_basic_service_information, ASN1_NO_EXTENSIONS , dissect_tetra_Basic_service_information },
3231 { 0, NULL, 0, NULL }
3234 static int
3235 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_) {
3236 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3237 ett_tetra_T_basic_service_information_01, T_basic_service_information_01_choice,
3238 NULL);
3240 return offset;
3244 static const value_string tetra_T_prop_02_vals[] = {
3245 { 0, "none" },
3246 { 1, "prop" },
3247 { 0, NULL }
3250 static const per_choice_t T_prop_02_choice[] = {
3251 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
3252 { 1, &hf_tetra_prop_01 , ASN1_NO_EXTENSIONS , dissect_tetra_Proprietary },
3253 { 0, NULL, 0, NULL }
3256 static int
3257 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_) {
3258 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3259 ett_tetra_T_prop_02, T_prop_02_choice,
3260 NULL);
3262 return offset;
3266 static const per_sequence_t T_type2_parameters_07_sequence[] = {
3267 { &hf_tetra_basic_service_information_02, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_basic_service_information_01 },
3268 { &hf_tetra_prop_03 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop_02 },
3269 { NULL, 0, 0, NULL }
3272 static int
3273 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_) {
3274 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3275 ett_tetra_T_type2_parameters_07, T_type2_parameters_07_sequence);
3277 return offset;
3281 static const value_string tetra_T_optional_elements_11_vals[] = {
3282 { 0, "no-type2" },
3283 { 1, "type2-parameters" },
3284 { 0, NULL }
3287 static const per_choice_t T_optional_elements_11_choice[] = {
3288 { 0, &hf_tetra_no_type2 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
3289 { 1, &hf_tetra_type2_parameters_07, ASN1_NO_EXTENSIONS , dissect_tetra_T_type2_parameters_07 },
3290 { 0, NULL, 0, NULL }
3293 static int
3294 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_) {
3295 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3296 ett_tetra_T_optional_elements_11, T_optional_elements_11_choice,
3297 NULL);
3299 return offset;
3303 static const per_sequence_t U_CONNECT_sequence[] = {
3304 { &hf_tetra_call_identifier_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1023 },
3305 { &hf_tetra_hook_method_selection, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
3306 { &hf_tetra_simplex_duplex_selection_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_simplex_duplex_selection_01 },
3307 { &hf_tetra_optional_elements_11, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_11 },
3308 { NULL, 0, 0, NULL }
3311 static int
3312 dissect_tetra_U_CONNECT(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3313 #line 184 "../../asn1/tetra/tetra.cnf"
3314 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3315 ett_tetra_U_CONNECT, U_CONNECT_sequence);
3317 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-CONNECT");
3320 return offset;
3325 static int
3326 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_) {
3327 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
3328 0U, 31U, NULL, FALSE);
3330 return offset;
3334 static const value_string tetra_T_prop_05_vals[] = {
3335 { 0, "none" },
3336 { 1, "prop" },
3337 { 0, NULL }
3340 static const per_choice_t T_prop_05_choice[] = {
3341 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
3342 { 1, &hf_tetra_prop_01 , ASN1_NO_EXTENSIONS , dissect_tetra_Proprietary },
3343 { 0, NULL, 0, NULL }
3346 static int
3347 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_) {
3348 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3349 ett_tetra_T_prop_05, T_prop_05_choice,
3350 NULL);
3352 return offset;
3356 static const per_sequence_t T_type2_parameters_10_sequence[] = {
3357 { &hf_tetra_prop_06 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop_05 },
3358 { NULL, 0, 0, NULL }
3361 static int
3362 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_) {
3363 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3364 ett_tetra_T_type2_parameters_10, T_type2_parameters_10_sequence);
3366 return offset;
3370 static const value_string tetra_T_optional_elements_14_vals[] = {
3371 { 0, "no-type2" },
3372 { 1, "type2-parameters" },
3373 { 0, NULL }
3376 static const per_choice_t T_optional_elements_14_choice[] = {
3377 { 0, &hf_tetra_no_type2 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
3378 { 1, &hf_tetra_type2_parameters_10, ASN1_NO_EXTENSIONS , dissect_tetra_T_type2_parameters_10 },
3379 { 0, NULL, 0, NULL }
3382 static int
3383 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_) {
3384 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3385 ett_tetra_T_optional_elements_14, T_optional_elements_14_choice,
3386 NULL);
3388 return offset;
3392 static const per_sequence_t U_DISCONNECT_sequence[] = {
3393 { &hf_tetra_call_identifier_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1023 },
3394 { &hf_tetra_disconnect_cause, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_31 },
3395 { &hf_tetra_optional_elements_14, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_14 },
3396 { NULL, 0, 0, NULL }
3399 static int
3400 dissect_tetra_U_DISCONNECT(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3401 #line 189 "../../asn1/tetra/tetra.cnf"
3402 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3403 ett_tetra_U_DISCONNECT, U_DISCONNECT_sequence);
3405 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-DISCONNECT");
3408 return offset;
3412 static const per_sequence_t U_INFO_sequence[] = {
3413 { &hf_tetra_call_id , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
3414 { &hf_tetra_poll_response , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
3415 { NULL, 0, 0, NULL }
3418 static int
3419 dissect_tetra_U_INFO(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3420 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3421 ett_tetra_U_INFO, U_INFO_sequence);
3423 return offset;
3427 static const per_sequence_t U_RELEASE_sequence[] = {
3428 { &hf_tetra_call_identifier, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
3429 { &hf_tetra_disconnect_cause, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_31 },
3430 { NULL, 0, 0, NULL }
3433 static int
3434 dissect_tetra_U_RELEASE(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3435 #line 76 "../../asn1/tetra/tetra.cnf"
3436 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3437 ett_tetra_U_RELEASE, U_RELEASE_sequence);
3439 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-RELEASE");
3440 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3441 ett_tetra_U_RELEASE, U_RELEASE_sequence);
3443 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-RELEASE");
3446 return offset;
3450 static const value_string tetra_T_simple_duplex_selection_vals[] = {
3451 { 0, "simplex" },
3452 { 1, "duplex" },
3453 { 0, NULL }
3457 static int
3458 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_) {
3459 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
3460 2, NULL, FALSE, 0, NULL);
3462 return offset;
3466 static const per_sequence_t T_called_party_ssi_extention_sequence[] = {
3467 { &hf_tetra_called_party_ssi, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16777215 },
3468 { &hf_tetra_called_party_extention, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16777215 },
3469 { NULL, 0, 0, NULL }
3472 static int
3473 dissect_tetra_T_called_party_ssi_extention(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3474 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3475 ett_tetra_T_called_party_ssi_extention, T_called_party_ssi_extention_sequence);
3477 return offset;
3481 static const value_string tetra_Calling_party_address_type_vals[] = {
3482 { 0, "called-party-sna" },
3483 { 1, "called-party-ssi" },
3484 { 2, "called-party-ssi-extention" },
3485 { 0, NULL }
3488 static const per_choice_t Calling_party_address_type_choice[] = {
3489 { 0, &hf_tetra_called_party_sna, ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_255 },
3490 { 1, &hf_tetra_called_party_ssi, ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_16777215 },
3491 { 2, &hf_tetra_called_party_ssi_extention, ASN1_NO_EXTENSIONS , dissect_tetra_T_called_party_ssi_extention },
3492 { 0, NULL, 0, NULL }
3495 static int
3496 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_) {
3497 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3498 ett_tetra_Calling_party_address_type, Calling_party_address_type_choice,
3499 NULL);
3501 return offset;
3506 static int
3507 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_) {
3508 offset = dissect_tetra_Calling_party_address_type(tvb, offset, actx, tree, hf_index);
3510 return offset;
3514 static const value_string tetra_T_external_subscriber_number_vals[] = {
3515 { 0, "none" },
3516 { 1, "external-subscriber-number" },
3517 { 0, NULL }
3520 static const per_choice_t T_external_subscriber_number_choice[] = {
3521 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
3522 { 1, &hf_tetra_external_subscriber_number_01, ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_31 },
3523 { 0, NULL, 0, NULL }
3526 static int
3527 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_) {
3528 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3529 ett_tetra_T_external_subscriber_number, T_external_subscriber_number_choice,
3530 NULL);
3532 return offset;
3536 static const value_string tetra_T_prop_vals[] = {
3537 { 0, "none" },
3538 { 1, "prop" },
3539 { 0, NULL }
3542 static const per_choice_t T_prop_choice[] = {
3543 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
3544 { 1, &hf_tetra_prop_01 , ASN1_NO_EXTENSIONS , dissect_tetra_Proprietary },
3545 { 0, NULL, 0, NULL }
3548 static int
3549 dissect_tetra_T_prop(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3550 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3551 ett_tetra_T_prop, T_prop_choice,
3552 NULL);
3554 return offset;
3558 static const per_sequence_t T_type2_parameters_05_sequence[] = {
3559 { &hf_tetra_external_subscriber_number, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_external_subscriber_number },
3560 { &hf_tetra_prop , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop },
3561 { NULL, 0, 0, NULL }
3564 static int
3565 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_) {
3566 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3567 ett_tetra_T_type2_parameters_05, T_type2_parameters_05_sequence);
3569 return offset;
3573 static const value_string tetra_T_optional_elements_09_vals[] = {
3574 { 0, "no-type2" },
3575 { 1, "type2-parameters" },
3576 { 0, NULL }
3579 static const per_choice_t T_optional_elements_09_choice[] = {
3580 { 0, &hf_tetra_no_type2 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
3581 { 1, &hf_tetra_type2_parameters_05, ASN1_NO_EXTENSIONS , dissect_tetra_T_type2_parameters_05 },
3582 { 0, NULL, 0, NULL }
3585 static int
3586 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_) {
3587 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3588 ett_tetra_T_optional_elements_09, T_optional_elements_09_choice,
3589 NULL);
3591 return offset;
3595 static const per_sequence_t U_SETUP_sequence[] = {
3596 { &hf_tetra_area_selection, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_15 },
3597 { &hf_tetra_hook_method_selection, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
3598 { &hf_tetra_simple_duplex_selection, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_simple_duplex_selection },
3599 { &hf_tetra_basic_service_information, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Basic_service_information },
3600 { &hf_tetra_request_transmit_send_data, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
3601 { &hf_tetra_call_priority , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_15 },
3602 { &hf_tetra_clir_control , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
3603 { &hf_tetra_called_party_address, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Called_party_address_type },
3604 { &hf_tetra_optional_elements_09, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_09 },
3605 { NULL, 0, 0, NULL }
3608 static int
3609 dissect_tetra_U_SETUP(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3610 #line 199 "../../asn1/tetra/tetra.cnf"
3611 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3612 ett_tetra_U_SETUP, U_SETUP_sequence);
3614 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-SETUP");
3617 return offset;
3622 static int
3623 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_) {
3624 offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
3625 48, 48, FALSE, NULL);
3627 return offset;
3631 static const value_string tetra_T_called_party_type_identifier_01_vals[] = {
3632 { 0, "short-number-address" },
3633 { 1, "ssi" },
3634 { 2, "called-ssi-called-extension" },
3635 { 3, "none" },
3636 { 0, NULL }
3639 static const per_choice_t T_called_party_type_identifier_01_choice[] = {
3640 { 0, &hf_tetra_short_number_address, ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_255 },
3641 { 1, &hf_tetra_ssi , ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_16777215 },
3642 { 2, &hf_tetra_called_ssi_called_extension, ASN1_NO_EXTENSIONS , dissect_tetra_BIT_STRING_SIZE_48 },
3643 { 3, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
3644 { 0, NULL, 0, NULL }
3647 static int
3648 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_) {
3649 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3650 ett_tetra_T_called_party_type_identifier_01, T_called_party_type_identifier_01_choice,
3651 NULL);
3653 return offset;
3657 static const per_sequence_t U_STATUS_sequence[] = {
3658 { &hf_tetra_area_selection, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_15 },
3659 { &hf_tetra_called_party_type_identifier_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_called_party_type_identifier_01 },
3660 { &hf_tetra_pre_coded_status, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_65535 },
3661 { NULL, 0, 0, NULL }
3664 static int
3665 dissect_tetra_U_STATUS(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3666 #line 204 "../../asn1/tetra/tetra.cnf"
3667 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3668 ett_tetra_U_STATUS, U_STATUS_sequence);
3670 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-STATUS");
3673 return offset;
3677 static const value_string tetra_T_prop_03_vals[] = {
3678 { 0, "none" },
3679 { 1, "prop" },
3680 { 0, NULL }
3683 static const per_choice_t T_prop_03_choice[] = {
3684 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
3685 { 1, &hf_tetra_prop_01 , ASN1_NO_EXTENSIONS , dissect_tetra_Proprietary },
3686 { 0, NULL, 0, NULL }
3689 static int
3690 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_) {
3691 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3692 ett_tetra_T_prop_03, T_prop_03_choice,
3693 NULL);
3695 return offset;
3699 static const per_sequence_t T_type2_parameters_08_sequence[] = {
3700 { &hf_tetra_prop_04 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop_03 },
3701 { NULL, 0, 0, NULL }
3704 static int
3705 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_) {
3706 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3707 ett_tetra_T_type2_parameters_08, T_type2_parameters_08_sequence);
3709 return offset;
3713 static const value_string tetra_T_optional_elements_12_vals[] = {
3714 { 0, "no-type2" },
3715 { 1, "type2-parameters" },
3716 { 0, NULL }
3719 static const per_choice_t T_optional_elements_12_choice[] = {
3720 { 0, &hf_tetra_no_type2 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
3721 { 1, &hf_tetra_type2_parameters_08, ASN1_NO_EXTENSIONS , dissect_tetra_T_type2_parameters_08 },
3722 { 0, NULL, 0, NULL }
3725 static int
3726 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_) {
3727 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3728 ett_tetra_T_optional_elements_12, T_optional_elements_12_choice,
3729 NULL);
3731 return offset;
3735 static const per_sequence_t U_TX_CEASED_sequence[] = {
3736 { &hf_tetra_call_identifier_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1023 },
3737 { &hf_tetra_optional_elements_12, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_12 },
3738 { NULL, 0, 0, NULL }
3741 static int
3742 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_) {
3743 #line 224 "../../asn1/tetra/tetra.cnf"
3744 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3745 ett_tetra_U_TX_CEASED, U_TX_CEASED_sequence);
3747 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-TX-CEASED");
3750 return offset;
3754 static const value_string tetra_T_prop_04_vals[] = {
3755 { 0, "none" },
3756 { 1, "prop" },
3757 { 0, NULL }
3760 static const per_choice_t T_prop_04_choice[] = {
3761 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
3762 { 1, &hf_tetra_prop_01 , ASN1_NO_EXTENSIONS , dissect_tetra_Proprietary },
3763 { 0, NULL, 0, NULL }
3766 static int
3767 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_) {
3768 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3769 ett_tetra_T_prop_04, T_prop_04_choice,
3770 NULL);
3772 return offset;
3776 static const per_sequence_t T_type2_parameters_09_sequence[] = {
3777 { &hf_tetra_prop_05 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop_04 },
3778 { NULL, 0, 0, NULL }
3781 static int
3782 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_) {
3783 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3784 ett_tetra_T_type2_parameters_09, T_type2_parameters_09_sequence);
3786 return offset;
3790 static const value_string tetra_T_optional_elements_13_vals[] = {
3791 { 0, "no-type2" },
3792 { 1, "type2-parameters" },
3793 { 0, NULL }
3796 static const per_choice_t T_optional_elements_13_choice[] = {
3797 { 0, &hf_tetra_no_type2 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
3798 { 1, &hf_tetra_type2_parameters_09, ASN1_NO_EXTENSIONS , dissect_tetra_T_type2_parameters_09 },
3799 { 0, NULL, 0, NULL }
3802 static int
3803 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_) {
3804 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3805 ett_tetra_T_optional_elements_13, T_optional_elements_13_choice,
3806 NULL);
3808 return offset;
3812 static const per_sequence_t U_TX_DEMAND_sequence[] = {
3813 { &hf_tetra_call_identifier_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1023 },
3814 { &hf_tetra_tx_demand_priority, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
3815 { &hf_tetra_encryption_control, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
3816 { &hf_tetra_reserved_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
3817 { &hf_tetra_optional_elements_13, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_13 },
3818 { NULL, 0, 0, NULL }
3821 static int
3822 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_) {
3823 #line 219 "../../asn1/tetra/tetra.cnf"
3824 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3825 ett_tetra_U_TX_DEMAND, U_TX_DEMAND_sequence);
3827 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-TX-DEMAND");
3830 return offset;
3835 static int
3836 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_) {
3837 offset = dissect_tetra_Calling_party_address_type(tvb, offset, actx, tree, hf_index);
3839 return offset;
3843 static const value_string tetra_T_prop_06_vals[] = {
3844 { 0, "none" },
3845 { 1, "prop" },
3846 { 0, NULL }
3849 static const per_choice_t T_prop_06_choice[] = {
3850 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
3851 { 1, &hf_tetra_prop_01 , ASN1_NO_EXTENSIONS , dissect_tetra_Proprietary },
3852 { 0, NULL, 0, NULL }
3855 static int
3856 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_) {
3857 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3858 ett_tetra_T_prop_06, T_prop_06_choice,
3859 NULL);
3861 return offset;
3865 static const per_sequence_t T_type2_parameters_11_sequence[] = {
3866 { &hf_tetra_prop_07 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop_06 },
3867 { NULL, 0, 0, NULL }
3870 static int
3871 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_) {
3872 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3873 ett_tetra_T_type2_parameters_11, T_type2_parameters_11_sequence);
3875 return offset;
3879 static const value_string tetra_T_optional_elements_15_vals[] = {
3880 { 0, "no-type2" },
3881 { 1, "type2-parameters" },
3882 { 0, NULL }
3885 static const per_choice_t T_optional_elements_15_choice[] = {
3886 { 0, &hf_tetra_no_type2 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
3887 { 1, &hf_tetra_type2_parameters_11, ASN1_NO_EXTENSIONS , dissect_tetra_T_type2_parameters_11 },
3888 { 0, NULL, 0, NULL }
3891 static int
3892 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_) {
3893 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3894 ett_tetra_T_optional_elements_15, T_optional_elements_15_choice,
3895 NULL);
3897 return offset;
3901 static const per_sequence_t U_CALL_RESTORE_sequence[] = {
3902 { &hf_tetra_call_identifier_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1023 },
3903 { &hf_tetra_request_to_transmit_send_data, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
3904 { &hf_tetra_other_party_address, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Other_party_address_type },
3905 { &hf_tetra_basic_service_information, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Basic_service_information },
3906 { &hf_tetra_optional_elements_15, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_15 },
3907 { NULL, 0, 0, NULL }
3910 static int
3911 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_) {
3912 #line 214 "../../asn1/tetra/tetra.cnf"
3913 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3914 ett_tetra_U_CALL_RESTORE, U_CALL_RESTORE_sequence);
3916 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-CALL-RESTORE");
3919 return offset;
3923 static const value_string tetra_T_called_party_type_identifier_vals[] = {
3924 { 0, "sna" },
3925 { 1, "ssi" },
3926 { 2, "ssi-extension" },
3927 { 3, "none" },
3928 { 0, NULL }
3931 static const per_choice_t T_called_party_type_identifier_choice[] = {
3932 { 0, &hf_tetra_sna , ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_255 },
3933 { 1, &hf_tetra_ssi , ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_16777215 },
3934 { 2, &hf_tetra_ssi_extension , ASN1_NO_EXTENSIONS , dissect_tetra_BIT_STRING_SIZE_48 },
3935 { 3, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
3936 { 0, NULL, 0, NULL }
3939 static int
3940 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_) {
3941 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3942 ett_tetra_T_called_party_type_identifier, T_called_party_type_identifier_choice,
3943 NULL);
3945 return offset;
3950 static int
3951 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_) {
3952 offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
3953 4, 4, FALSE, NULL);
3955 return offset;
3960 static int
3961 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_) {
3962 offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
3963 64, 64, FALSE, NULL);
3965 return offset;
3970 static int
3971 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_) {
3972 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
3973 0U, 4194304U, NULL, FALSE);
3975 return offset;
3979 static const value_string tetra_T_short_data_type_identifier_vals[] = {
3980 { 0, "data-1" },
3981 { 1, "data-2" },
3982 { 2, "data-3" },
3983 { 3, "length-indicator-data-4" },
3984 { 0, NULL }
3987 static const per_choice_t T_short_data_type_identifier_choice[] = {
3988 { 0, &hf_tetra_data_1 , ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_65535 },
3989 { 1, &hf_tetra_data_2 , ASN1_NO_EXTENSIONS , dissect_tetra_OCTET_STRING_SIZE_4 },
3990 { 2, &hf_tetra_data_3 , ASN1_NO_EXTENSIONS , dissect_tetra_BIT_STRING_SIZE_64 },
3991 { 3, &hf_tetra_length_indicator_data_4, ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_4194304 },
3992 { 0, NULL, 0, NULL }
3995 static int
3996 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_) {
3997 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3998 ett_tetra_T_short_data_type_identifier, T_short_data_type_identifier_choice,
3999 NULL);
4001 return offset;
4005 static const per_sequence_t U_SDS_DATA_sequence[] = {
4006 { &hf_tetra_area_selection, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_15 },
4007 { &hf_tetra_called_party_type_identifier, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_called_party_type_identifier },
4008 { &hf_tetra_short_data_type_identifier, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_short_data_type_identifier },
4009 { NULL, 0, 0, NULL }
4012 static int
4013 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_) {
4014 #line 209 "../../asn1/tetra/tetra.cnf"
4015 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4016 ett_tetra_U_SDS_DATA, U_SDS_DATA_sequence);
4018 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-SDS-DATA");
4021 return offset;
4025 static const value_string tetra_U_CMCE_PDU_vals[] = {
4026 { 0, "u-Alert" },
4027 { 1, "reserved1" },
4028 { 2, "u-Connect" },
4029 { 3, "reserved2" },
4030 { 4, "u-Disconnect" },
4031 { 5, "u-Info" },
4032 { 6, "u-Release" },
4033 { 7, "u-Setup" },
4034 { 8, "u-Status" },
4035 { 9, "u-Tx-Ceased" },
4036 { 10, "u-Tx-Demand" },
4037 { 11, "reserved3" },
4038 { 12, "reserved4" },
4039 { 13, "reserved5" },
4040 { 14, "u-Call-Restore" },
4041 { 15, "u-SDS-Data" },
4042 { 16, "u-Facility" },
4043 { 0, NULL }
4046 static const per_choice_t U_CMCE_PDU_choice[] = {
4047 { 0, &hf_tetra_u_Alert , ASN1_NO_EXTENSIONS , dissect_tetra_U_ALERT },
4048 { 1, &hf_tetra_reserved1 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
4049 { 2, &hf_tetra_u_Connect , ASN1_NO_EXTENSIONS , dissect_tetra_U_CONNECT },
4050 { 3, &hf_tetra_reserved2 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
4051 { 4, &hf_tetra_u_Disconnect , ASN1_NO_EXTENSIONS , dissect_tetra_U_DISCONNECT },
4052 { 5, &hf_tetra_u_Info , ASN1_NO_EXTENSIONS , dissect_tetra_U_INFO },
4053 { 6, &hf_tetra_u_Release , ASN1_NO_EXTENSIONS , dissect_tetra_U_RELEASE },
4054 { 7, &hf_tetra_u_Setup , ASN1_NO_EXTENSIONS , dissect_tetra_U_SETUP },
4055 { 8, &hf_tetra_u_Status , ASN1_NO_EXTENSIONS , dissect_tetra_U_STATUS },
4056 { 9, &hf_tetra_u_Tx_Ceased , ASN1_NO_EXTENSIONS , dissect_tetra_U_TX_CEASED },
4057 { 10, &hf_tetra_u_Tx_Demand , ASN1_NO_EXTENSIONS , dissect_tetra_U_TX_DEMAND },
4058 { 11, &hf_tetra_reserved3 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
4059 { 12, &hf_tetra_reserved4 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
4060 { 13, &hf_tetra_reserved5 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
4061 { 14, &hf_tetra_u_Call_Restore, ASN1_NO_EXTENSIONS , dissect_tetra_U_CALL_RESTORE },
4062 { 15, &hf_tetra_u_SDS_Data , ASN1_NO_EXTENSIONS , dissect_tetra_U_SDS_DATA },
4063 { 16, &hf_tetra_u_Facility , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
4064 { 0, NULL, 0, NULL }
4067 static int
4068 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_) {
4069 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
4070 ett_tetra_U_CMCE_PDU, U_CMCE_PDU_choice,
4071 NULL);
4073 return offset;
4077 static const value_string tetra_T_cell_number_vals[] = {
4078 { 0, "none" },
4079 { 1, "cell-number" },
4080 { 0, NULL }
4083 static const per_choice_t T_cell_number_choice[] = {
4084 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
4085 { 1, &hf_tetra_cell_number_01, ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_65535 },
4086 { 0, NULL, 0, NULL }
4089 static int
4090 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_) {
4091 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
4092 ett_tetra_T_cell_number, T_cell_number_choice,
4093 NULL);
4095 return offset;
4099 static const per_sequence_t T_type2_parameters_sequence[] = {
4100 { &hf_tetra_cell_number , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_cell_number },
4101 { &hf_tetra_sdu , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_BIT_STRING },
4102 { NULL, 0, 0, NULL }
4105 static int
4106 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_) {
4107 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4108 ett_tetra_T_type2_parameters, T_type2_parameters_sequence);
4110 return offset;
4114 static const value_string tetra_T_optional_elements_vals[] = {
4115 { 0, "no-type2" },
4116 { 1, "type2-parameters" },
4117 { 0, NULL }
4120 static const per_choice_t T_optional_elements_choice[] = {
4121 { 0, &hf_tetra_no_type2 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
4122 { 1, &hf_tetra_type2_parameters, ASN1_NO_EXTENSIONS , dissect_tetra_T_type2_parameters },
4123 { 0, NULL, 0, NULL }
4126 static int
4127 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_) {
4128 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
4129 ett_tetra_T_optional_elements, T_optional_elements_choice,
4130 NULL);
4132 return offset;
4136 static const per_sequence_t U_PREPARE_sequence[] = {
4137 { &hf_tetra_pdu_type_02 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
4138 { &hf_tetra_optional_elements, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements },
4139 { NULL, 0, 0, NULL }
4142 static int
4143 dissect_tetra_U_PREPARE(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4144 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4145 ett_tetra_U_PREPARE, U_PREPARE_sequence);
4147 return offset;
4151 static const value_string tetra_T_mcc_vals[] = {
4152 { 0, "none" },
4153 { 1, "mcc" },
4154 { 0, NULL }
4157 static const per_choice_t T_mcc_choice[] = {
4158 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
4159 { 1, &hf_tetra_mcc , ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_1023 },
4160 { 0, NULL, 0, NULL }
4163 static int
4164 dissect_tetra_T_mcc(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4165 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
4166 ett_tetra_T_mcc, T_mcc_choice,
4167 NULL);
4169 return offset;
4173 static const value_string tetra_T_mnc_vals[] = {
4174 { 0, "none" },
4175 { 1, "mnc" },
4176 { 0, NULL }
4179 static const per_choice_t T_mnc_choice[] = {
4180 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
4181 { 1, &hf_tetra_mnc , ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_16383 },
4182 { 0, NULL, 0, NULL }
4185 static int
4186 dissect_tetra_T_mnc(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4187 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
4188 ett_tetra_T_mnc, T_mnc_choice,
4189 NULL);
4191 return offset;
4195 static const value_string tetra_T_la_vals[] = {
4196 { 0, "none" },
4197 { 1, "la" },
4198 { 0, NULL }
4201 static const per_choice_t T_la_choice[] = {
4202 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
4203 { 1, &hf_tetra_la , ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_16383 },
4204 { 0, NULL, 0, NULL }
4207 static int
4208 dissect_tetra_T_la(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4209 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
4210 ett_tetra_T_la, T_la_choice,
4211 NULL);
4213 return offset;
4217 static const per_sequence_t T_type2_parameters_01_sequence[] = {
4218 { &hf_tetra_mcc_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_mcc },
4219 { &hf_tetra_mnc_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_mnc },
4220 { &hf_tetra_la_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_la },
4221 { &hf_tetra_sdu , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_BIT_STRING },
4222 { NULL, 0, 0, NULL }
4225 static int
4226 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_) {
4227 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4228 ett_tetra_T_type2_parameters_01, T_type2_parameters_01_sequence);
4230 return offset;
4234 static const value_string tetra_T_optional_elements_01_vals[] = {
4235 { 0, "no-type2" },
4236 { 1, "type2-parameters" },
4237 { 0, NULL }
4240 static const per_choice_t T_optional_elements_01_choice[] = {
4241 { 0, &hf_tetra_no_type2 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
4242 { 1, &hf_tetra_type2_parameters_01, ASN1_NO_EXTENSIONS , dissect_tetra_T_type2_parameters_01 },
4243 { 0, NULL, 0, NULL }
4246 static int
4247 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_) {
4248 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
4249 ett_tetra_T_optional_elements_01, T_optional_elements_01_choice,
4250 NULL);
4252 return offset;
4256 static const per_sequence_t U_RESTORE_sequence[] = {
4257 { &hf_tetra_pdu_type_02 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
4258 { &hf_tetra_optional_elements_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_01 },
4259 { NULL, 0, 0, NULL }
4262 static int
4263 dissect_tetra_U_RESTORE(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4264 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4265 ett_tetra_U_RESTORE, U_RESTORE_sequence);
4267 return offset;
4271 static const value_string tetra_UMLE_PDU_vals[] = {
4272 { 0, "u-prepare" },
4273 { 1, "umle-reserved1" },
4274 { 2, "umle-reserved2" },
4275 { 3, "umle-reserved3" },
4276 { 4, "u-restore" },
4277 { 5, "umle-reserved4" },
4278 { 6, "umle-reserved5" },
4279 { 7, "umle-reserved6" },
4280 { 0, NULL }
4283 static const per_choice_t UMLE_PDU_choice[] = {
4284 { 0, &hf_tetra_u_prepare , ASN1_NO_EXTENSIONS , dissect_tetra_U_PREPARE },
4285 { 1, &hf_tetra_umle_reserved1, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
4286 { 2, &hf_tetra_umle_reserved2, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
4287 { 3, &hf_tetra_umle_reserved3, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
4288 { 4, &hf_tetra_u_restore , ASN1_NO_EXTENSIONS , dissect_tetra_U_RESTORE },
4289 { 5, &hf_tetra_umle_reserved4, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
4290 { 6, &hf_tetra_umle_reserved5, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
4291 { 7, &hf_tetra_umle_reserved6, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
4292 { 0, NULL, 0, NULL }
4295 static int
4296 dissect_tetra_UMLE_PDU(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4297 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
4298 ett_tetra_UMLE_PDU, UMLE_PDU_choice,
4299 NULL);
4301 return offset;
4305 static const value_string tetra_U_MLE_PDU_vals[] = {
4306 { 0, "u-mle-reserved1" },
4307 { 1, "mm" },
4308 { 2, "cmce" },
4309 { 3, "u-mle-reserved2" },
4310 { 4, "sndcp" },
4311 { 5, "mle" },
4312 { 6, "tetra-management-entity-protocol" },
4313 { 7, "u-mle-reserved3" },
4314 { 0, NULL }
4317 static const per_choice_t U_MLE_PDU_choice[] = {
4318 { 0, &hf_tetra_u_mle_reserved1, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
4319 { 1, &hf_tetra_mm , ASN1_NO_EXTENSIONS , dissect_tetra_U_MM_PDU },
4320 { 2, &hf_tetra_cmce , ASN1_NO_EXTENSIONS , dissect_tetra_U_CMCE_PDU },
4321 { 3, &hf_tetra_u_mle_reserved2, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
4322 { 4, &hf_tetra_sndcp , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
4323 { 5, &hf_tetra_mle , ASN1_NO_EXTENSIONS , dissect_tetra_UMLE_PDU },
4324 { 6, &hf_tetra_tetra_management_entity_protocol, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
4325 { 7, &hf_tetra_u_mle_reserved3, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
4326 { 0, NULL, 0, NULL }
4329 static int
4330 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_) {
4331 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
4332 ett_tetra_U_MLE_PDU, U_MLE_PDU_choice,
4333 NULL);
4335 return offset;
4339 static const per_sequence_t U_BL_ADATA_sequence[] = {
4340 { &hf_tetra_nr , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4341 { &hf_tetra_ns , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4342 { &hf_tetra_tl_sdu , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_U_MLE_PDU },
4343 { NULL, 0, 0, NULL }
4346 static int
4347 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_) {
4348 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4349 ett_tetra_U_BL_ADATA, U_BL_ADATA_sequence);
4351 return offset;
4355 static const per_sequence_t U_BL_DATA_sequence[] = {
4356 { &hf_tetra_ns , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4357 { &hf_tetra_tl_sdu , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_U_MLE_PDU },
4358 { NULL, 0, 0, NULL }
4361 static int
4362 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_) {
4363 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4364 ett_tetra_U_BL_DATA, U_BL_DATA_sequence);
4366 return offset;
4370 static const per_sequence_t U_BL_ACK_sequence[] = {
4371 { &hf_tetra_nr , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4372 { &hf_tetra_tl_sdu , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_U_MLE_PDU },
4373 { NULL, 0, 0, NULL }
4376 static int
4377 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_) {
4378 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4379 ett_tetra_U_BL_ACK, U_BL_ACK_sequence);
4381 return offset;
4385 static const per_sequence_t U_BL_ADATA_FCS_sequence[] = {
4386 { &hf_tetra_nr , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4387 { &hf_tetra_ns , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4388 { &hf_tetra_tl_sdu , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_U_MLE_PDU },
4389 { &hf_tetra_fcs , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_OCTET_STRING_SIZE_4 },
4390 { NULL, 0, 0, NULL }
4393 static int
4394 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_) {
4395 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4396 ett_tetra_U_BL_ADATA_FCS, U_BL_ADATA_FCS_sequence);
4398 return offset;
4402 static const per_sequence_t U_BL_DATA_FCS_sequence[] = {
4403 { &hf_tetra_ns , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4404 { &hf_tetra_tl_sdu , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_U_MLE_PDU },
4405 { &hf_tetra_fcs , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_OCTET_STRING_SIZE_4 },
4406 { NULL, 0, 0, NULL }
4409 static int
4410 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_) {
4411 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4412 ett_tetra_U_BL_DATA_FCS, U_BL_DATA_FCS_sequence);
4414 return offset;
4418 static const per_sequence_t U_MLE_PDU_FCS_sequence[] = {
4419 { &hf_tetra_u_mle_pdu , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_U_MLE_PDU },
4420 { &hf_tetra_fcs , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_OCTET_STRING_SIZE_4 },
4421 { NULL, 0, 0, NULL }
4424 static int
4425 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_) {
4426 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4427 ett_tetra_U_MLE_PDU_FCS, U_MLE_PDU_FCS_sequence);
4429 return offset;
4433 static const per_sequence_t U_BL_ACK_FCS_sequence[] = {
4434 { &hf_tetra_nr , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4435 { &hf_tetra_tl_sdu , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_U_MLE_PDU },
4436 { &hf_tetra_fcs , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_OCTET_STRING_SIZE_4 },
4437 { NULL, 0, 0, NULL }
4440 static int
4441 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_) {
4442 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4443 ett_tetra_U_BL_ACK_FCS, U_BL_ACK_FCS_sequence);
4445 return offset;
4449 static const value_string tetra_U_LLC_PDU_vals[] = {
4450 { 0, "bl-adata" },
4451 { 1, "bl-data" },
4452 { 2, "bl-udata" },
4453 { 3, "bl-ack" },
4454 { 4, "bl-adata-fcs" },
4455 { 5, "bl-data-fcs" },
4456 { 6, "bl-udata-fcs" },
4457 { 7, "bl-ack-fcs" },
4458 { 8, "al-setup" },
4459 { 9, "al-data" },
4460 { 10, "al-udata" },
4461 { 11, "al-ack" },
4462 { 12, "al-reconnect" },
4463 { 13, "reserve1" },
4464 { 14, "reserve2" },
4465 { 15, "al-disc" },
4466 { 0, NULL }
4469 static const per_choice_t U_LLC_PDU_choice[] = {
4470 { 0, &hf_tetra_bl_adata , ASN1_NO_EXTENSIONS , dissect_tetra_U_BL_ADATA },
4471 { 1, &hf_tetra_bl_data , ASN1_NO_EXTENSIONS , dissect_tetra_U_BL_DATA },
4472 { 2, &hf_tetra_bl_udata , ASN1_NO_EXTENSIONS , dissect_tetra_U_MLE_PDU },
4473 { 3, &hf_tetra_bl_ack , ASN1_NO_EXTENSIONS , dissect_tetra_U_BL_ACK },
4474 { 4, &hf_tetra_bl_adata_fcs , ASN1_NO_EXTENSIONS , dissect_tetra_U_BL_ADATA_FCS },
4475 { 5, &hf_tetra_bl_data_fcs , ASN1_NO_EXTENSIONS , dissect_tetra_U_BL_DATA_FCS },
4476 { 6, &hf_tetra_bl_udata_fcs , ASN1_NO_EXTENSIONS , dissect_tetra_U_MLE_PDU_FCS },
4477 { 7, &hf_tetra_bl_ack_fcs , ASN1_NO_EXTENSIONS , dissect_tetra_U_BL_ACK_FCS },
4478 { 8, &hf_tetra_al_setup , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
4479 { 9, &hf_tetra_al_data , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
4480 { 10, &hf_tetra_al_udata , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
4481 { 11, &hf_tetra_al_ack , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
4482 { 12, &hf_tetra_al_reconnect , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
4483 { 13, &hf_tetra_reserve1 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
4484 { 14, &hf_tetra_reserve2 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
4485 { 15, &hf_tetra_al_disc , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
4486 { 0, NULL, 0, NULL }
4489 static int
4490 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_) {
4491 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
4492 ett_tetra_U_LLC_PDU, U_LLC_PDU_choice,
4493 NULL);
4495 return offset;
4499 static const value_string tetra_LengthIndication_vals[] = {
4500 { 0, "null" },
4501 { 1, "reserved-1" },
4502 { 2, "reserved-2" },
4503 { 3, "bits-24" },
4504 { 4, "bits-32" },
4505 { 5, "bits-40" },
4506 { 6, "bits-48" },
4507 { 7, "bits-56" },
4508 { 8, "bits-64" },
4509 { 9, "bits-72" },
4510 { 10, "bits-80" },
4511 { 11, "bits-88" },
4512 { 12, "bits-96" },
4513 { 13, "reserved-13" },
4514 { 14, "reserved-14" },
4515 { 15, "reserved-15" },
4516 { 16, "reserved-16" },
4517 { 17, "reserved-17" },
4518 { 18, "reserved-18" },
4519 { 19, "reserved-19" },
4520 { 20, "reserved-20" },
4521 { 21, "reserved-21" },
4522 { 22, "reserved-22" },
4523 { 23, "reserved-23" },
4524 { 24, "reserved-24" },
4525 { 25, "reserved-25" },
4526 { 26, "reserved-26" },
4527 { 27, "reserved-27" },
4528 { 28, "reserved-28" },
4529 { 29, "reserved-29" },
4530 { 30, "reserved-30" },
4531 { 31, "reserved-31" },
4532 { 0, NULL }
4536 static int
4537 dissect_tetra_LengthIndication(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4538 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
4539 32, NULL, FALSE, 0, NULL);
4541 return offset;
4545 static const value_string tetra_Frag1_vals[] = {
4546 { 0, "not-fragmented" },
4547 { 1, "start-of-fragmentation" },
4548 { 0, NULL }
4552 static int
4553 dissect_tetra_Frag1(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4554 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
4555 2, NULL, FALSE, 0, NULL);
4557 return offset;
4561 static const value_string tetra_SLOT_APPLY_vals[] = {
4562 { 0, "subslot" },
4563 { 1, "slot-1" },
4564 { 2, "slot-2" },
4565 { 3, "slot-3" },
4566 { 4, "slot-4" },
4567 { 5, "slot-5" },
4568 { 6, "slot-6" },
4569 { 7, "slot-8" },
4570 { 8, "slot-10" },
4571 { 9, "slot-13" },
4572 { 10, "slot-17" },
4573 { 11, "slot-24" },
4574 { 12, "slot-34" },
4575 { 13, "slot-51" },
4576 { 14, "slot-68" },
4577 { 15, "more-than-68" },
4578 { 0, NULL }
4582 static int
4583 dissect_tetra_SLOT_APPLY(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4584 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
4585 16, NULL, FALSE, 0, NULL);
4587 return offset;
4591 static const per_sequence_t FRAG_sequence[] = {
4592 { &hf_tetra_frag , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Frag1 },
4593 { &hf_tetra_reservation_requirement, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_SLOT_APPLY },
4594 { NULL, 0, 0, NULL }
4597 static int
4598 dissect_tetra_FRAG(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4599 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4600 ett_tetra_FRAG, FRAG_sequence);
4602 return offset;
4606 static const value_string tetra_T_lengthIndicationOrCapacityRequest_vals[] = {
4607 { 0, "lengthIndication" },
4608 { 1, "capacityRequest" },
4609 { 0, NULL }
4612 static const per_choice_t T_lengthIndicationOrCapacityRequest_choice[] = {
4613 { 0, &hf_tetra_lengthIndication, ASN1_NO_EXTENSIONS , dissect_tetra_LengthIndication },
4614 { 1, &hf_tetra_capacityRequest, ASN1_NO_EXTENSIONS , dissect_tetra_FRAG },
4615 { 0, NULL, 0, NULL }
4618 static int
4619 dissect_tetra_T_lengthIndicationOrCapacityRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4620 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
4621 ett_tetra_T_lengthIndicationOrCapacityRequest, T_lengthIndicationOrCapacityRequest_choice,
4622 NULL);
4624 return offset;
4628 static const per_sequence_t ComplexSDU_sequence[] = {
4629 { &hf_tetra_lengthIndicationOrCapacityRequest, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_lengthIndicationOrCapacityRequest },
4630 { &hf_tetra_tm_sdu_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_U_LLC_PDU },
4631 { NULL, 0, 0, NULL }
4634 static int
4635 dissect_tetra_ComplexSDU(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4636 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4637 ett_tetra_ComplexSDU, ComplexSDU_sequence);
4639 return offset;
4643 static const value_string tetra_T_data_vals[] = {
4644 { 0, "sdu1" },
4645 { 1, "sdu2" },
4646 { 0, NULL }
4649 static const per_choice_t T_data_choice[] = {
4650 { 0, &hf_tetra_sdu1 , ASN1_NO_EXTENSIONS , dissect_tetra_U_LLC_PDU },
4651 { 1, &hf_tetra_sdu2 , ASN1_NO_EXTENSIONS , dissect_tetra_ComplexSDU },
4652 { 0, NULL, 0, NULL }
4655 static int
4656 dissect_tetra_T_data(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4657 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
4658 ett_tetra_T_data, T_data_choice,
4659 NULL);
4661 return offset;
4665 static const per_sequence_t MAC_ACCESS_sequence[] = {
4666 { &hf_tetra_pdu_type_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4667 { &hf_tetra_fill_bit_indication, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Fill_Bit_Indication },
4668 { &hf_tetra_encrypted_flag, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Encrypted_Flag },
4669 { &hf_tetra_address , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Address },
4670 { &hf_tetra_data , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_data },
4671 { NULL, 0, 0, NULL }
4674 static int
4675 dissect_tetra_MAC_ACCESS(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4676 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4677 ett_tetra_MAC_ACCESS, MAC_ACCESS_sequence);
4679 return offset;
4683 static const value_string tetra_LengthIndicationMacData_vals[] = {
4684 { 0, "null" },
4685 { 1, "reserved-1" },
4686 { 2, "reserved-2" },
4687 { 3, "bits-24" },
4688 { 4, "bits-32" },
4689 { 5, "bits-40" },
4690 { 6, "bits-48" },
4691 { 7, "bits-56" },
4692 { 8, "bits-64" },
4693 { 9, "bits-72" },
4694 { 10, "bits-80" },
4695 { 11, "bits-88" },
4696 { 12, "bits-96" },
4697 { 13, "bits-104" },
4698 { 14, "bits-112" },
4699 { 15, "bits-120" },
4700 { 16, "bits-128" },
4701 { 17, "bits-136" },
4702 { 18, "bits-144" },
4703 { 19, "bits-152" },
4704 { 20, "bits-160" },
4705 { 21, "bits-168" },
4706 { 22, "bits-176" },
4707 { 23, "bits-184" },
4708 { 24, "bits-192" },
4709 { 25, "bits-200" },
4710 { 26, "bits-208" },
4711 { 27, "bits-216" },
4712 { 28, "bits-224" },
4713 { 29, "bits-232" },
4714 { 30, "bits-240" },
4715 { 31, "bits-248" },
4716 { 32, "bits-256" },
4717 { 33, "bits-264" },
4718 { 34, "bits-272" },
4719 { 35, "reserved-35" },
4720 { 36, "reserved-36" },
4721 { 37, "reserved-37" },
4722 { 38, "reserved-38" },
4723 { 39, "reserved-39" },
4724 { 40, "reserved-40" },
4725 { 41, "reserved-41" },
4726 { 42, "reserved-42" },
4727 { 43, "reserved-43" },
4728 { 44, "reserved-44" },
4729 { 45, "reserved-45" },
4730 { 46, "reserved-46" },
4731 { 47, "reserved-47" },
4732 { 48, "reserved-48" },
4733 { 49, "reserved-49" },
4734 { 50, "reserved-50" },
4735 { 51, "reserved-51" },
4736 { 52, "reserved-52" },
4737 { 53, "reserved-53" },
4738 { 54, "reserved-54" },
4739 { 55, "reserved-55" },
4740 { 56, "reserved-56" },
4741 { 57, "reserved-57" },
4742 { 58, "reserved-58" },
4743 { 59, "reserved-59" },
4744 { 60, "reserved-60" },
4745 { 61, "reserved-61" },
4746 { 62, "second-halfslot-stolen" },
4747 { 63, "start-frag" },
4748 { 0, NULL }
4752 static int
4753 dissect_tetra_LengthIndicationMacData(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4754 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
4755 64, NULL, FALSE, 0, NULL);
4757 return offset;
4761 static const per_sequence_t FRAG6_sequence[] = {
4762 { &hf_tetra_frag , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Frag1 },
4763 { &hf_tetra_reservation_requirement, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_SLOT_APPLY },
4764 { &hf_tetra_reserved_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4765 { NULL, 0, 0, NULL }
4768 static int
4769 dissect_tetra_FRAG6(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4770 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4771 ett_tetra_FRAG6, FRAG6_sequence);
4773 return offset;
4777 static const value_string tetra_T_lengthIndicationOrCapacityRequest_01_vals[] = {
4778 { 0, "lengthIndication" },
4779 { 1, "capacityRequest" },
4780 { 0, NULL }
4783 static const per_choice_t T_lengthIndicationOrCapacityRequest_01_choice[] = {
4784 { 0, &hf_tetra_lengthIndication_01, ASN1_NO_EXTENSIONS , dissect_tetra_LengthIndicationMacData },
4785 { 1, &hf_tetra_capacityRequest_01, ASN1_NO_EXTENSIONS , dissect_tetra_FRAG6 },
4786 { 0, NULL, 0, NULL }
4789 static int
4790 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_) {
4791 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
4792 ett_tetra_T_lengthIndicationOrCapacityRequest_01, T_lengthIndicationOrCapacityRequest_01_choice,
4793 NULL);
4795 return offset;
4799 static const per_sequence_t MAC_DATA_sequence[] = {
4800 { &hf_tetra_pdu_type , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
4801 { &hf_tetra_fill_bit_indication, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Fill_Bit_Indication },
4802 { &hf_tetra_encrypted_flag, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Encrypted_Flag },
4803 { &hf_tetra_address , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Address },
4804 { &hf_tetra_lengthIndicationOrCapacityRequest_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_lengthIndicationOrCapacityRequest_01 },
4805 { &hf_tetra_tm_sdu_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_U_LLC_PDU },
4806 { NULL, 0, 0, NULL }
4809 static int
4810 dissect_tetra_MAC_DATA(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4811 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4812 ett_tetra_MAC_DATA, MAC_DATA_sequence);
4814 return offset;
4819 static int
4820 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_) {
4821 offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
4822 264, 264, FALSE, NULL);
4824 return offset;
4828 static const per_sequence_t MAC_FRAG_sequence[] = {
4829 { &hf_tetra_pdu_type , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
4830 { &hf_tetra_sub_type , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4831 { &hf_tetra_fill_bit_indication, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Fill_Bit_Indication },
4832 { &hf_tetra_tm_sdu_02 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_BIT_STRING_SIZE_264 },
4833 { NULL, 0, 0, NULL }
4836 static int
4837 dissect_tetra_MAC_FRAG(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4838 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4839 ett_tetra_MAC_FRAG, MAC_FRAG_sequence);
4841 return offset;
4846 static int
4847 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_) {
4848 offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
4849 120, 120, FALSE, NULL);
4851 return offset;
4855 static const per_sequence_t MAC_FRAG120_sequence[] = {
4856 { &hf_tetra_pdu_type , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
4857 { &hf_tetra_sub_type , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4858 { &hf_tetra_fill_bit_indication, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Fill_Bit_Indication },
4859 { &hf_tetra_tm_sdu_03 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_BIT_STRING_SIZE_120 },
4860 { NULL, 0, 0, NULL }
4863 static int
4864 dissect_tetra_MAC_FRAG120(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4865 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4866 ett_tetra_MAC_FRAG120, MAC_FRAG120_sequence);
4868 return offset;
4872 static const value_string tetra_LengthIndOrReservationReq_vals[] = {
4873 { 0, "reserved-0" },
4874 { 1, "reserved-1" },
4875 { 2, "bits-16" },
4876 { 3, "bits-24" },
4877 { 4, "bits-32" },
4878 { 5, "bits-40" },
4879 { 6, "bits-48" },
4880 { 7, "bits-56" },
4881 { 8, "bits-64" },
4882 { 9, "bits-72" },
4883 { 10, "bits-80" },
4884 { 11, "bits-88" },
4885 { 12, "bits-96" },
4886 { 13, "bits-104" },
4887 { 14, "bits-112" },
4888 { 15, "bits-120" },
4889 { 16, "bits-128" },
4890 { 17, "bits-136" },
4891 { 18, "bits-144" },
4892 { 19, "bits-152" },
4893 { 20, "bits-160" },
4894 { 21, "bits-168" },
4895 { 22, "bits-176" },
4896 { 23, "bits-184" },
4897 { 24, "bits-192" },
4898 { 25, "bits-200" },
4899 { 26, "bits-208" },
4900 { 27, "bits-216" },
4901 { 28, "bits-224" },
4902 { 29, "bits-232" },
4903 { 30, "bits-240" },
4904 { 31, "bits-248" },
4905 { 32, "bits-256" },
4906 { 33, "bits-264" },
4907 { 34, "bits-272" },
4908 { 35, "reserved-35" },
4909 { 36, "reserved-36" },
4910 { 37, "reserved-37" },
4911 { 38, "reserved-38" },
4912 { 39, "reserved-39" },
4913 { 40, "reserved-40" },
4914 { 41, "reserved-41" },
4915 { 42, "reserved-42" },
4916 { 43, "reserved-43" },
4917 { 44, "reserved-44" },
4918 { 45, "reserved-45" },
4919 { 46, "reserved-46" },
4920 { 47, "reserved-47" },
4921 { 48, "subslot" },
4922 { 49, "slot-1" },
4923 { 50, "slot-2" },
4924 { 51, "slot-3" },
4925 { 52, "slot-4" },
4926 { 53, "slot-5" },
4927 { 54, "slot-6" },
4928 { 55, "slot-8" },
4929 { 56, "slot-10" },
4930 { 57, "slot-13" },
4931 { 58, "slot-17" },
4932 { 59, "slot-24" },
4933 { 60, "slot-34" },
4934 { 61, "slot-51" },
4935 { 62, "slot-68" },
4936 { 63, "more-than-68" },
4937 { 0, NULL }
4941 static int
4942 dissect_tetra_LengthIndOrReservationReq(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4943 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
4944 64, NULL, FALSE, 0, NULL);
4946 return offset;
4951 static int
4952 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_) {
4953 offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
4954 258, 258, FALSE, NULL);
4956 return offset;
4960 static const per_sequence_t MAC_END_UPLINK_sequence[] = {
4961 { &hf_tetra_pdu_type , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
4962 { &hf_tetra_sub_type , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4963 { &hf_tetra_fill_bit_indication, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Fill_Bit_Indication },
4964 { &hf_tetra_lengthInd_ReservationReq, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_LengthIndOrReservationReq },
4965 { &hf_tetra_tm_sdu_04 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_BIT_STRING_SIZE_258 },
4966 { NULL, 0, 0, NULL }
4969 static int
4970 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_) {
4971 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4972 ett_tetra_MAC_END_UPLINK, MAC_END_UPLINK_sequence);
4974 return offset;
4979 static int
4980 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_) {
4981 offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
4982 114, 114, FALSE, NULL);
4984 return offset;
4988 static const per_sequence_t MAC_END_UP114_sequence[] = {
4989 { &hf_tetra_pdu_type , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
4990 { &hf_tetra_pdu_subtype , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4991 { &hf_tetra_fill_bit_indication, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Fill_Bit_Indication },
4992 { &hf_tetra_lengthInd_ReservationReq, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_LengthIndOrReservationReq },
4993 { &hf_tetra_tm_sdu_05 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_BIT_STRING_SIZE_114 },
4994 { NULL, 0, 0, NULL }
4997 static int
4998 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_) {
4999 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
5000 ett_tetra_MAC_END_UP114, MAC_END_UP114_sequence);
5002 return offset;
5006 static const value_string tetra_LengthIndMacHu_vals[] = {
5007 { 0, "reserved-0" },
5008 { 1, "bits-8" },
5009 { 2, "bits-16" },
5010 { 3, "bits-24" },
5011 { 4, "bits-32" },
5012 { 5, "bits-40" },
5013 { 6, "bits-48" },
5014 { 7, "bits-56" },
5015 { 8, "bits-64" },
5016 { 9, "bits-72" },
5017 { 10, "bits-80" },
5018 { 11, "bits-88" },
5019 { 12, "bits-96" },
5020 { 13, "reserved-13" },
5021 { 14, "reserved-14" },
5022 { 15, "reserved-15" },
5023 { 0, NULL }
5027 static int
5028 dissect_tetra_LengthIndMacHu(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5029 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5030 16, NULL, FALSE, 0, NULL);
5032 return offset;
5036 static const value_string tetra_T_lengthInd_ReservationReq_vals[] = {
5037 { 0, "lengthInd" },
5038 { 1, "reservation-requirement" },
5039 { 0, NULL }
5042 static const per_choice_t T_lengthInd_ReservationReq_choice[] = {
5043 { 0, &hf_tetra_lengthInd , ASN1_NO_EXTENSIONS , dissect_tetra_LengthIndMacHu },
5044 { 1, &hf_tetra_reservation_requirement, ASN1_NO_EXTENSIONS , dissect_tetra_SLOT_APPLY },
5045 { 0, NULL, 0, NULL }
5048 static int
5049 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_) {
5050 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5051 ett_tetra_T_lengthInd_ReservationReq, T_lengthInd_ReservationReq_choice,
5052 NULL);
5054 return offset;
5059 static int
5060 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_) {
5061 offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
5062 85, 85, FALSE, NULL);
5064 return offset;
5068 static const per_sequence_t MAC_END_HU_sequence[] = {
5069 { &hf_tetra_pdu_type_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
5070 { &hf_tetra_fill_bit_indication, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Fill_Bit_Indication },
5071 { &hf_tetra_lengthInd_ReservationReq_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_lengthInd_ReservationReq },
5072 { &hf_tetra_tm_sdu_06 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_BIT_STRING_SIZE_85 },
5073 { NULL, 0, 0, NULL }
5076 static int
5077 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_) {
5078 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
5079 ett_tetra_MAC_END_HU, MAC_END_HU_sequence);
5081 return offset;
5085 static const value_string tetra_Position_Of_Grant_vals[] = {
5086 { 0, "on-current" },
5087 { 1, "on-allocated" },
5088 { 0, NULL }
5092 static int
5093 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_) {
5094 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5095 2, NULL, FALSE, 0, NULL);
5097 return offset;
5101 static const value_string tetra_LengthIndicationMacEndDl_vals[] = {
5102 { 0, "reserved-0" },
5103 { 1, "reserved-1" },
5104 { 2, "bits-16" },
5105 { 3, "bits-24" },
5106 { 4, "bits-32" },
5107 { 5, "bits-40" },
5108 { 6, "bits-48" },
5109 { 7, "bits-56" },
5110 { 8, "bits-64" },
5111 { 9, "bits-72" },
5112 { 10, "bits-80" },
5113 { 11, "bits-88" },
5114 { 12, "bits-96" },
5115 { 13, "bits-104" },
5116 { 14, "bits-112" },
5117 { 15, "bits-120" },
5118 { 16, "bits-128" },
5119 { 17, "bits-136" },
5120 { 18, "bits-144" },
5121 { 19, "bits-152" },
5122 { 20, "bits-160" },
5123 { 21, "bits-168" },
5124 { 22, "bits-176" },
5125 { 23, "bits-184" },
5126 { 24, "bits-192" },
5127 { 25, "bits-200" },
5128 { 26, "bits-208" },
5129 { 27, "bits-216" },
5130 { 28, "bits-224" },
5131 { 29, "bits-232" },
5132 { 30, "bits-240" },
5133 { 31, "bits-248" },
5134 { 32, "bits-256" },
5135 { 33, "bits-264" },
5136 { 34, "bits-272" },
5137 { 35, "reserved-35" },
5138 { 36, "reserved-36" },
5139 { 37, "reserved-37" },
5140 { 38, "reserved-38" },
5141 { 39, "reserved-39" },
5142 { 40, "reserved-40" },
5143 { 41, "reserved-41" },
5144 { 42, "reserved-42" },
5145 { 43, "reserved-43" },
5146 { 44, "reserved-44" },
5147 { 45, "reserved-45" },
5148 { 46, "reserved-46" },
5149 { 47, "reserved-47" },
5150 { 48, "reserved-48" },
5151 { 49, "reserved-49" },
5152 { 50, "reserved-50" },
5153 { 51, "reserved-51" },
5154 { 52, "reserved-52" },
5155 { 53, "reserved-53" },
5156 { 54, "reserved-54" },
5157 { 55, "reserved-55" },
5158 { 56, "reserved-56" },
5159 { 57, "reserved-57" },
5160 { 58, "reserved-58" },
5161 { 59, "reserved-59" },
5162 { 60, "reserved-60" },
5163 { 61, "reserved-61" },
5164 { 62, "reserved-62" },
5165 { 63, "reserved-63" },
5166 { 0, NULL }
5170 static int
5171 dissect_tetra_LengthIndicationMacEndDl(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5172 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5173 64, NULL, FALSE, 0, NULL);
5175 return offset;
5179 static const value_string tetra_Capacity_Allocation_vals[] = {
5180 { 0, "first-subslot" },
5181 { 1, "slot-allocated-1" },
5182 { 2, "slot-allocated-2" },
5183 { 3, "slot-allocated-3" },
5184 { 4, "slot-allocated-4" },
5185 { 5, "slot-allocated-5" },
5186 { 6, "slot-allocated-6" },
5187 { 7, "slot-allocated-8" },
5188 { 8, "slot-allocated-10" },
5189 { 9, "slot-allocated-13" },
5190 { 10, "slot-allocated-17" },
5191 { 11, "slot-allocated-24" },
5192 { 12, "slot-allocated-34" },
5193 { 13, "lot-allocated-51" },
5194 { 14, "slot-allocated-68" },
5195 { 15, "second-subslot" },
5196 { 0, NULL }
5200 static int
5201 dissect_tetra_Capacity_Allocation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5202 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5203 16, NULL, FALSE, 0, NULL);
5205 return offset;
5209 static const value_string tetra_Granting_delay_vals[] = {
5210 { 0, "capacity-allocation-at-next-opportunity" },
5211 { 1, "number-of-opportunities-delay" },
5212 { 2, "number-of-opportunities-delay" },
5213 { 3, "number-of-opportunities-delay" },
5214 { 4, "number-of-opportunities-delay" },
5215 { 5, "number-of-opportunities-delay" },
5216 { 6, "number-of-opportunities-delay" },
5217 { 7, "number-of-opportunities-delay" },
5218 { 8, "number-of-opportunities-delay" },
5219 { 9, "number-of-opportunities-delay" },
5220 { 10, "number-of-opportunities-delay" },
5221 { 11, "number-of-opportunities-delay" },
5222 { 12, "number-of-opportunities-delay" },
5223 { 13, "number-of-opportunities-delay" },
5224 { 14, "allocation-starts-at-frame-18" },
5225 { 15, "wait" },
5226 { 0, NULL }
5230 static int
5231 dissect_tetra_Granting_delay(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5232 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5233 16, NULL, FALSE, 0, NULL);
5235 return offset;
5239 static const per_sequence_t SlotGranting_sequence[] = {
5240 { &hf_tetra_capacity_allocation, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Capacity_Allocation },
5241 { &hf_tetra_granting_delay, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Granting_delay },
5242 { NULL, 0, 0, NULL }
5245 static int
5246 dissect_tetra_SlotGranting(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5247 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
5248 ett_tetra_SlotGranting, SlotGranting_sequence);
5250 return offset;
5254 static const value_string tetra_T_slot_granting_vals[] = {
5255 { 0, "none" },
5256 { 1, "slot-granting-param" },
5257 { 0, NULL }
5260 static const per_choice_t T_slot_granting_choice[] = {
5261 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
5262 { 1, &hf_tetra_slot_granting_param, ASN1_NO_EXTENSIONS , dissect_tetra_SlotGranting },
5263 { 0, NULL, 0, NULL }
5266 static int
5267 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_) {
5268 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5269 ett_tetra_T_slot_granting, T_slot_granting_choice,
5270 NULL);
5272 return offset;
5276 static const value_string tetra_T_allocation_type_vals[] = {
5277 { 0, "replace" },
5278 { 1, "add" },
5279 { 2, "quit" },
5280 { 3, "reserved" },
5281 { 0, NULL }
5285 static int
5286 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_) {
5287 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5288 4, NULL, FALSE, 0, NULL);
5290 return offset;
5294 static const value_string tetra_Timeslot_Assigned_vals[] = {
5295 { 0, "go-to-control-channel" },
5296 { 1, "timeslot-4" },
5297 { 2, "timeslot-bit-map" },
5298 { 3, "timeslot-bit-map" },
5299 { 4, "timeslot-bit-map" },
5300 { 5, "timeslot-bit-map" },
5301 { 6, "timeslot-bit-map" },
5302 { 7, "timeslot-bit-map" },
5303 { 8, "timeslot-bit-map" },
5304 { 9, "timeslot-bit-map" },
5305 { 10, "timeslot-bit-map" },
5306 { 11, "timeslot-bit-map" },
5307 { 12, "timeslot-bit-map" },
5308 { 13, "timeslot-bit-map" },
5309 { 14, "timeslot-bit-map" },
5310 { 15, "all-four-timeslots" },
5311 { 0, NULL }
5315 static int
5316 dissect_tetra_Timeslot_Assigned(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5317 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5318 16, NULL, FALSE, 0, NULL);
5320 return offset;
5324 static const value_string tetra_T_up_down_assigned_vals[] = {
5325 { 0, "reserve" },
5326 { 1, "downlink-only" },
5327 { 2, "uplink-only" },
5328 { 3, "uplink-downlink" },
5329 { 0, NULL }
5333 static int
5334 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_) {
5335 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5336 4, NULL, FALSE, 0, NULL);
5338 return offset;
5342 static const value_string tetra_CLCH_permission_vals[] = {
5343 { 0, "no-permission" },
5344 { 1, "permission" },
5345 { 0, NULL }
5349 static int
5350 dissect_tetra_CLCH_permission(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5351 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5352 2, NULL, FALSE, 0, NULL);
5354 return offset;
5358 static const value_string tetra_Cell_change_flag_vals[] = {
5359 { 0, "no-change" },
5360 { 1, "change" },
5361 { 0, NULL }
5365 static int
5366 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_) {
5367 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5368 2, NULL, FALSE, 0, NULL);
5370 return offset;
5374 static const value_string tetra_T_reverse_operation_vals[] = {
5375 { 0, "normal" },
5376 { 1, "reverse" },
5377 { 0, NULL }
5381 static int
5382 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_) {
5383 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5384 2, NULL, FALSE, 0, NULL);
5386 return offset;
5390 static const per_sequence_t Extended_carrier_flag_sequence[] = {
5391 { &hf_tetra_frequency_band, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_15 },
5392 { &hf_tetra_offset_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
5393 { &hf_tetra_duplex_spacing, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
5394 { &hf_tetra_reverse_operation_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_reverse_operation },
5395 { NULL, 0, 0, NULL }
5398 static int
5399 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_) {
5400 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
5401 ett_tetra_Extended_carrier_flag, Extended_carrier_flag_sequence);
5403 return offset;
5407 static const value_string tetra_T_extend_carrier_flag_vals[] = {
5408 { 0, "none" },
5409 { 1, "extended" },
5410 { 0, NULL }
5413 static const per_choice_t T_extend_carrier_flag_choice[] = {
5414 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
5415 { 1, &hf_tetra_extended , ASN1_NO_EXTENSIONS , dissect_tetra_Extended_carrier_flag },
5416 { 0, NULL, 0, NULL }
5419 static int
5420 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_) {
5421 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5422 ett_tetra_T_extend_carrier_flag, T_extend_carrier_flag_choice,
5423 NULL);
5425 return offset;
5429 static const value_string tetra_Monitoring_pattern_vals[] = {
5430 { 0, "no" },
5431 { 1, "one" },
5432 { 2, "two" },
5433 { 3, "three" },
5434 { 0, NULL }
5438 static int
5439 dissect_tetra_Monitoring_pattern(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5440 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5441 4, NULL, FALSE, 0, NULL);
5443 return offset;
5447 static const value_string tetra_T_monitoring_pattern_vals[] = {
5448 { 0, "one" },
5449 { 1, "none1" },
5450 { 2, "none2" },
5451 { 3, "none3" },
5452 { 0, NULL }
5455 static const per_choice_t T_monitoring_pattern_choice[] = {
5456 { 0, &hf_tetra_one , ASN1_NO_EXTENSIONS , dissect_tetra_Monitoring_pattern },
5457 { 1, &hf_tetra_none1 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
5458 { 2, &hf_tetra_none2 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
5459 { 3, &hf_tetra_none3 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
5460 { 0, NULL, 0, NULL }
5463 static int
5464 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_) {
5465 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5466 ett_tetra_T_monitoring_pattern, T_monitoring_pattern_choice,
5467 NULL);
5469 return offset;
5473 static const per_sequence_t ChannelAllocation_sequence[] = {
5474 { &hf_tetra_allocation_type, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_allocation_type },
5475 { &hf_tetra_timeslot_assigned, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Timeslot_Assigned },
5476 { &hf_tetra_up_down_assigned, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_up_down_assigned },
5477 { &hf_tetra_clch_permission, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_CLCH_permission },
5478 { &hf_tetra_cell_change , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Cell_change_flag },
5479 { &hf_tetra_carrier_number, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_4095 },
5480 { &hf_tetra_extend_carrier_flag, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_extend_carrier_flag },
5481 { &hf_tetra_monitoring_pattern, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_monitoring_pattern },
5482 { NULL, 0, 0, NULL }
5485 static int
5486 dissect_tetra_ChannelAllocation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5487 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
5488 ett_tetra_ChannelAllocation, ChannelAllocation_sequence);
5490 return offset;
5494 static const value_string tetra_T_channel_allocation_vals[] = {
5495 { 0, "none" },
5496 { 1, "channel-allocation-element" },
5497 { 0, NULL }
5500 static const per_choice_t T_channel_allocation_choice[] = {
5501 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
5502 { 1, &hf_tetra_channel_allocation_element, ASN1_NO_EXTENSIONS , dissect_tetra_ChannelAllocation },
5503 { 0, NULL, 0, NULL }
5506 static int
5507 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_) {
5508 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5509 ett_tetra_T_channel_allocation, T_channel_allocation_choice,
5510 NULL);
5512 return offset;
5517 static int
5518 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_) {
5519 offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
5520 255, 255, FALSE, NULL);
5522 return offset;
5526 static const per_sequence_t MAC_END_DOWNLINK_sequence[] = {
5527 { &hf_tetra_pdu_type , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
5528 { &hf_tetra_sub_type , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
5529 { &hf_tetra_fill_bit_indication, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Fill_Bit_Indication },
5530 { &hf_tetra_position_of_grant, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Position_Of_Grant },
5531 { &hf_tetra_lengthIndication_02, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_LengthIndicationMacEndDl },
5532 { &hf_tetra_slot_granting , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_slot_granting },
5533 { &hf_tetra_channel_allocation, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_channel_allocation },
5534 { &hf_tetra_tm_sdu_07 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_BIT_STRING_SIZE_255 },
5535 { NULL, 0, 0, NULL }
5538 static int
5539 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_) {
5540 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
5541 ett_tetra_MAC_END_DOWNLINK, MAC_END_DOWNLINK_sequence);
5543 return offset;
5547 static const value_string tetra_T_slot_granting_01_vals[] = {
5548 { 0, "none" },
5549 { 1, "slot-granting-param" },
5550 { 0, NULL }
5553 static const per_choice_t T_slot_granting_01_choice[] = {
5554 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
5555 { 1, &hf_tetra_slot_granting_param, ASN1_NO_EXTENSIONS , dissect_tetra_SlotGranting },
5556 { 0, NULL, 0, NULL }
5559 static int
5560 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_) {
5561 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5562 ett_tetra_T_slot_granting_01, T_slot_granting_01_choice,
5563 NULL);
5565 return offset;
5569 static const value_string tetra_T_channel_allocation_01_vals[] = {
5570 { 0, "none" },
5571 { 1, "channel-allocation-element" },
5572 { 0, NULL }
5575 static const per_choice_t T_channel_allocation_01_choice[] = {
5576 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
5577 { 1, &hf_tetra_channel_allocation_element, ASN1_NO_EXTENSIONS , dissect_tetra_ChannelAllocation },
5578 { 0, NULL, 0, NULL }
5581 static int
5582 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_) {
5583 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5584 ett_tetra_T_channel_allocation_01, T_channel_allocation_01_choice,
5585 NULL);
5587 return offset;
5592 static int
5593 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_) {
5594 offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
5595 111, 111, FALSE, NULL);
5597 return offset;
5601 static const per_sequence_t MAC_END_DOWN111_sequence[] = {
5602 { &hf_tetra_pdu_type_02 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
5603 { &hf_tetra_fill_bit_ind , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
5604 { &hf_tetra_position_of_grant_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
5605 { &hf_tetra_lengthIndication_02, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_LengthIndicationMacEndDl },
5606 { &hf_tetra_slot_granting_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_slot_granting_01 },
5607 { &hf_tetra_channel_allocation_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_channel_allocation_01 },
5608 { &hf_tetra_tm_sdu_08 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_BIT_STRING_SIZE_111 },
5609 { NULL, 0, 0, NULL }
5612 static int
5613 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_) {
5614 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
5615 ett_tetra_MAC_END_DOWN111, MAC_END_DOWN111_sequence);
5617 return offset;
5621 static const value_string tetra_T_access_ack_vals[] = {
5622 { 0, "undefined" },
5623 { 1, "random-access-acknowledged" },
5624 { 0, NULL }
5628 static int
5629 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_) {
5630 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5631 2, NULL, FALSE, 0, NULL);
5633 return offset;
5637 static const value_string tetra_LengthIndicationMacResource_vals[] = {
5638 { 0, "reserved-0" },
5639 { 1, "reserved-1" },
5640 { 2, "null-pdu" },
5641 { 3, "reserved" },
5642 { 4, "bits-32" },
5643 { 5, "bits-40" },
5644 { 6, "bits-48" },
5645 { 7, "bits-56" },
5646 { 8, "bits-64" },
5647 { 9, "bits-72" },
5648 { 10, "bits-80" },
5649 { 11, "bits-88" },
5650 { 12, "bits-96" },
5651 { 13, "bits-104" },
5652 { 14, "bits-112" },
5653 { 15, "bits-120" },
5654 { 16, "bits-128" },
5655 { 17, "bits-136" },
5656 { 18, "bits-144" },
5657 { 19, "bits-152" },
5658 { 20, "bits-160" },
5659 { 21, "bits-168" },
5660 { 22, "bits-176" },
5661 { 23, "bits-184" },
5662 { 24, "bits-192" },
5663 { 25, "bits-200" },
5664 { 26, "bits-208" },
5665 { 27, "bits-216" },
5666 { 28, "bits-224" },
5667 { 29, "bits-232" },
5668 { 30, "bits-240" },
5669 { 31, "bits-248" },
5670 { 32, "bits-256" },
5671 { 33, "bits-264" },
5672 { 34, "bits-272" },
5673 { 35, "reserved-35" },
5674 { 36, "reserved-36" },
5675 { 37, "reserved-37" },
5676 { 38, "reserved-38" },
5677 { 39, "reserved-39" },
5678 { 40, "reserved-40" },
5679 { 41, "reserved-41" },
5680 { 42, "reserved-42" },
5681 { 43, "reserved-43" },
5682 { 44, "reserved-44" },
5683 { 45, "reserved-45" },
5684 { 46, "reserved-46" },
5685 { 47, "reserved-47" },
5686 { 48, "reserved-48" },
5687 { 49, "reserved-49" },
5688 { 50, "reserved-50" },
5689 { 51, "reserved-51" },
5690 { 52, "reserved-52" },
5691 { 53, "reserved-53" },
5692 { 54, "reserved-54" },
5693 { 55, "reserved-55" },
5694 { 56, "reserved-56" },
5695 { 57, "reserved-57" },
5696 { 58, "reserved-58" },
5697 { 59, "reserved-59" },
5698 { 60, "reserved-60" },
5699 { 61, "reserved-61" },
5700 { 62, "second-halfslot-stolen" },
5701 { 63, "start-frag" },
5702 { 0, NULL }
5706 static int
5707 dissect_tetra_LengthIndicationMacResource(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5708 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5709 64, NULL, FALSE, 0, NULL);
5711 return offset;
5715 static const value_string tetra_PowerControl_vals[] = {
5716 { 0, "no-change" },
5717 { 1, "increase-1" },
5718 { 2, "increase-2" },
5719 { 3, "increase-3" },
5720 { 4, "increase-4" },
5721 { 5, "increase-5" },
5722 { 6, "increase-6" },
5723 { 7, "maximum-xceeded" },
5724 { 8, "revert-open-loop-control" },
5725 { 9, "decrease-1" },
5726 { 10, "decrease-2" },
5727 { 11, "decrease-3" },
5728 { 12, "decrease-4" },
5729 { 13, "decrease-5" },
5730 { 14, "decrease-6" },
5731 { 15, "radio-uplink-failure" },
5732 { 0, NULL }
5736 static int
5737 dissect_tetra_PowerControl(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5738 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5739 16, NULL, FALSE, 0, NULL);
5741 return offset;
5745 static const value_string tetra_T_power_control_vals[] = {
5746 { 0, "none" },
5747 { 1, "powerParameters" },
5748 { 0, NULL }
5751 static const per_choice_t T_power_control_choice[] = {
5752 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
5753 { 1, &hf_tetra_powerParameters, ASN1_NO_EXTENSIONS , dissect_tetra_PowerControl },
5754 { 0, NULL, 0, NULL }
5757 static int
5758 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_) {
5759 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5760 ett_tetra_T_power_control, T_power_control_choice,
5761 NULL);
5763 return offset;
5767 static const value_string tetra_T_slot_granting_02_vals[] = {
5768 { 0, "none" },
5769 { 1, "slot-granting-param" },
5770 { 0, NULL }
5773 static const per_choice_t T_slot_granting_02_choice[] = {
5774 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
5775 { 1, &hf_tetra_slot_granting_param, ASN1_NO_EXTENSIONS , dissect_tetra_SlotGranting },
5776 { 0, NULL, 0, NULL }
5779 static int
5780 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_) {
5781 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5782 ett_tetra_T_slot_granting_02, T_slot_granting_02_choice,
5783 NULL);
5785 return offset;
5789 static const value_string tetra_T_channel_allocation_02_vals[] = {
5790 { 0, "none" },
5791 { 1, "channel-allocation-element" },
5792 { 0, NULL }
5795 static const per_choice_t T_channel_allocation_02_choice[] = {
5796 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
5797 { 1, &hf_tetra_channel_allocation_element, ASN1_NO_EXTENSIONS , dissect_tetra_ChannelAllocation },
5798 { 0, NULL, 0, NULL }
5801 static int
5802 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_) {
5803 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5804 ett_tetra_T_channel_allocation_02, T_channel_allocation_02_choice,
5805 NULL);
5807 return offset;
5811 static const value_string tetra_T_ssi_vals[] = {
5812 { 0, "none" },
5813 { 1, "ssi" },
5814 { 0, NULL }
5817 static const per_choice_t T_ssi_choice[] = {
5818 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
5819 { 1, &hf_tetra_ssi_03 , ASN1_NO_EXTENSIONS , dissect_tetra_OCTET_STRING_SIZE_3 },
5820 { 0, NULL, 0, NULL }
5823 static int
5824 dissect_tetra_T_ssi(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5825 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5826 ett_tetra_T_ssi, T_ssi_choice,
5827 NULL);
5829 return offset;
5833 static const value_string tetra_T_address_extension_vals[] = {
5834 { 0, "none" },
5835 { 1, "address-extension" },
5836 { 0, NULL }
5839 static const per_choice_t T_address_extension_choice[] = {
5840 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
5841 { 1, &hf_tetra_address_extension_01, ASN1_NO_EXTENSIONS , dissect_tetra_OCTET_STRING_SIZE_3 },
5842 { 0, NULL, 0, NULL }
5845 static int
5846 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_) {
5847 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5848 ett_tetra_T_address_extension, T_address_extension_choice,
5849 NULL);
5851 return offset;
5855 static const value_string tetra_T_subscriber_class_vals[] = {
5856 { 0, "none" },
5857 { 1, "subscriber-class" },
5858 { 0, NULL }
5861 static const per_choice_t T_subscriber_class_choice[] = {
5862 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
5863 { 1, &hf_tetra_subscriber_class, ASN1_NO_EXTENSIONS , dissect_tetra_Subscriber_class },
5864 { 0, NULL, 0, NULL }
5867 static int
5868 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_) {
5869 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5870 ett_tetra_T_subscriber_class, T_subscriber_class_choice,
5871 NULL);
5873 return offset;
5877 static const value_string tetra_T_energy_saving_mode_vals[] = {
5878 { 0, "none" },
5879 { 1, "energy-saving-mode" },
5880 { 0, NULL }
5883 static const per_choice_t T_energy_saving_mode_choice[] = {
5884 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
5885 { 1, &hf_tetra_energy_saving_mode_01, ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_7 },
5886 { 0, NULL, 0, NULL }
5889 static int
5890 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_) {
5891 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5892 ett_tetra_T_energy_saving_mode, T_energy_saving_mode_choice,
5893 NULL);
5895 return offset;
5899 static const value_string tetra_T_scch_info_vals[] = {
5900 { 0, "none" },
5901 { 1, "scch-info" },
5902 { 0, NULL }
5905 static const per_choice_t T_scch_info_choice[] = {
5906 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
5907 { 1, &hf_tetra_scch_info_01 , ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_16383 },
5908 { 0, NULL, 0, NULL }
5911 static int
5912 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_) {
5913 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5914 ett_tetra_T_scch_info, T_scch_info_choice,
5915 NULL);
5917 return offset;
5921 static const value_string tetra_T_new_ra_vals[] = {
5922 { 0, "none" },
5923 { 1, "new-ra" },
5924 { 0, NULL }
5927 static const per_choice_t T_new_ra_choice[] = {
5928 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
5929 { 1, &hf_tetra_new_ra_01 , ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_3 },
5930 { 0, NULL, 0, NULL }
5933 static int
5934 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_) {
5935 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5936 ett_tetra_T_new_ra, T_new_ra_choice,
5937 NULL);
5939 return offset;
5943 static const value_string tetra_T_group_identity_location_accept_vals[] = {
5944 { 0, "none" },
5945 { 1, "group-identity-location-accept" },
5946 { 0, NULL }
5949 static const per_choice_t T_group_identity_location_accept_choice[] = {
5950 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
5951 { 1, &hf_tetra_group_identity_location_accept_01, ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_3 },
5952 { 0, NULL, 0, NULL }
5955 static int
5956 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_) {
5957 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5958 ett_tetra_T_group_identity_location_accept, T_group_identity_location_accept_choice,
5959 NULL);
5961 return offset;
5965 static const value_string tetra_T_group_predefined_lifetime_vals[] = {
5966 { 0, "none" },
5967 { 1, "group-predefined-lifetime" },
5968 { 0, NULL }
5971 static const per_choice_t T_group_predefined_lifetime_choice[] = {
5972 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
5973 { 1, &hf_tetra_group_predefined_lifetime_01, ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_3 },
5974 { 0, NULL, 0, NULL }
5977 static int
5978 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_) {
5979 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5980 ett_tetra_T_group_predefined_lifetime, T_group_predefined_lifetime_choice,
5981 NULL);
5983 return offset;
5987 static const value_string tetra_T_group_identity_downlink_vals[] = {
5988 { 0, "none" },
5989 { 1, "group-identity-downlink" },
5990 { 0, NULL }
5993 static const per_choice_t T_group_identity_downlink_choice[] = {
5994 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
5995 { 1, &hf_tetra_group_identity_downlink_01, ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_15 },
5996 { 0, NULL, 0, NULL }
5999 static int
6000 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_) {
6001 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6002 ett_tetra_T_group_identity_downlink, T_group_identity_downlink_choice,
6003 NULL);
6005 return offset;
6009 static const value_string tetra_T_proprietary_vals[] = {
6010 { 0, "none" },
6011 { 1, "proprietary" },
6012 { 0, NULL }
6015 static const per_choice_t T_proprietary_choice[] = {
6016 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
6017 { 1, &hf_tetra_proprietary_01, ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_7 },
6018 { 0, NULL, 0, NULL }
6021 static int
6022 dissect_tetra_T_proprietary(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6023 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6024 ett_tetra_T_proprietary, T_proprietary_choice,
6025 NULL);
6027 return offset;
6031 static const per_sequence_t T_type3_elements_sequence[] = {
6032 { &hf_tetra_type2_existance, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
6033 { &hf_tetra_type3_identifier, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_TYPE3_IDENTIFIER },
6034 { &hf_tetra_new_ra , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_new_ra },
6035 { &hf_tetra_group_identity_location_accept, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_group_identity_location_accept },
6036 { &hf_tetra_group_predefined_lifetime, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_group_predefined_lifetime },
6037 { &hf_tetra_group_identity_downlink, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_group_identity_downlink },
6038 { &hf_tetra_proprietary , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_proprietary },
6039 { NULL, 0, 0, NULL }
6042 static int
6043 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_) {
6044 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6045 ett_tetra_T_type3_elements, T_type3_elements_sequence);
6047 return offset;
6051 static const value_string tetra_T_type3_vals[] = {
6052 { 0, "no-type3" },
6053 { 1, "type3-elements" },
6054 { 0, NULL }
6057 static const per_choice_t T_type3_choice[] = {
6058 { 0, &hf_tetra_no_type3 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
6059 { 1, &hf_tetra_type3_elements, ASN1_NO_EXTENSIONS , dissect_tetra_T_type3_elements },
6060 { 0, NULL, 0, NULL }
6063 static int
6064 dissect_tetra_T_type3(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6065 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6066 ett_tetra_T_type3, T_type3_choice,
6067 NULL);
6069 return offset;
6073 static const per_sequence_t T_type2_parameters_03_sequence[] = {
6074 { &hf_tetra_ssi_02 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_ssi },
6075 { &hf_tetra_address_extension, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_address_extension },
6076 { &hf_tetra_subscriber_class_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_subscriber_class },
6077 { &hf_tetra_energy_saving_mode, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_energy_saving_mode },
6078 { &hf_tetra_scch_info , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_scch_info },
6079 { &hf_tetra_type3 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_type3 },
6080 { NULL, 0, 0, NULL }
6083 static int
6084 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_) {
6085 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6086 ett_tetra_T_type2_parameters_03, T_type2_parameters_03_sequence);
6088 return offset;
6092 static const value_string tetra_T_optional_elements_05_vals[] = {
6093 { 0, "no-type2" },
6094 { 1, "type2-parameters" },
6095 { 0, NULL }
6098 static const per_choice_t T_optional_elements_05_choice[] = {
6099 { 0, &hf_tetra_no_type2 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
6100 { 1, &hf_tetra_type2_parameters_03, ASN1_NO_EXTENSIONS , dissect_tetra_T_type2_parameters_03 },
6101 { 0, NULL, 0, NULL }
6104 static int
6105 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_) {
6106 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6107 ett_tetra_T_optional_elements_05, T_optional_elements_05_choice,
6108 NULL);
6110 return offset;
6114 static const per_sequence_t D_LOCATION_UPDATE_ACCEPT_sequence[] = {
6115 { &hf_tetra_location_update_type, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_UPDATE_TYPE },
6116 { &hf_tetra_optional_elements_05, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_05 },
6117 { NULL, 0, 0, NULL }
6120 static int
6121 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_) {
6122 #line 105 "../../asn1/tetra/tetra.cnf"
6123 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6124 ett_tetra_D_LOCATION_UPDATE_ACCEPT, D_LOCATION_UPDATE_ACCEPT_sequence);
6126 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-LOCATION-UPDATE-ACCEPT");
6129 return offset;
6133 static const per_sequence_t D_LOCATION_UPDATE_REJECT_sequence[] = {
6134 { &hf_tetra_location_update_type, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_UPDATE_TYPE },
6135 { &hf_tetra_reject_cause , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_31 },
6136 { &hf_tetra_cipher_control, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
6137 { NULL, 0, 0, NULL }
6140 static int
6141 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_) {
6142 #line 250 "../../asn1/tetra/tetra.cnf"
6143 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6144 ett_tetra_D_LOCATION_UPDATE_REJECT, D_LOCATION_UPDATE_REJECT_sequence);
6146 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-LOCATION-UPDATE-REJECT");
6149 return offset;
6153 static const per_sequence_t T_attach_sequence[] = {
6154 { &hf_tetra_lifetime , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
6155 { &hf_tetra_class_of_usage, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
6156 { NULL, 0, 0, NULL }
6159 static int
6160 dissect_tetra_T_attach(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6161 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6162 ett_tetra_T_attach, T_attach_sequence);
6164 return offset;
6168 static const value_string tetra_T_detach_downlike_vals[] = {
6169 { 0, "unknow-gssi" },
6170 { 1, "temporary-detachment1" },
6171 { 2, "temporary-detachment2" },
6172 { 3, "permanent-detachment" },
6173 { 0, NULL }
6177 static int
6178 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_) {
6179 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
6180 4, NULL, FALSE, 0, NULL);
6182 return offset;
6186 static const per_sequence_t T_detach_sequence[] = {
6187 { &hf_tetra_detach_downlike, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_detach_downlike },
6188 { NULL, 0, 0, NULL }
6191 static int
6192 dissect_tetra_T_detach(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6193 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6194 ett_tetra_T_detach, T_detach_sequence);
6196 return offset;
6200 static const value_string tetra_T_attach_detach_identifiet_vals[] = {
6201 { 0, "attach" },
6202 { 1, "detach" },
6203 { 0, NULL }
6206 static const per_choice_t T_attach_detach_identifiet_choice[] = {
6207 { 0, &hf_tetra_attach , ASN1_NO_EXTENSIONS , dissect_tetra_T_attach },
6208 { 1, &hf_tetra_detach , ASN1_NO_EXTENSIONS , dissect_tetra_T_detach },
6209 { 0, NULL, 0, NULL }
6212 static int
6213 dissect_tetra_T_attach_detach_identifiet(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6214 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6215 ett_tetra_T_attach_detach_identifiet, T_attach_detach_identifiet_choice,
6216 NULL);
6218 return offset;
6222 static const per_sequence_t T_gssi_extension_sequence[] = {
6223 { &hf_tetra_gssi_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_OCTET_STRING_SIZE_3 },
6224 { &hf_tetra_extension , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_OCTET_STRING_SIZE_3 },
6225 { NULL, 0, 0, NULL }
6228 static int
6229 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_) {
6230 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6231 ett_tetra_T_gssi_extension, T_gssi_extension_sequence);
6233 return offset;
6237 static const value_string tetra_T_address_type_vals[] = {
6238 { 0, "gssi" },
6239 { 1, "gssi-extension" },
6240 { 2, "vgssi" },
6241 { 0, NULL }
6244 static const per_choice_t T_address_type_choice[] = {
6245 { 0, &hf_tetra_gssi_01 , ASN1_NO_EXTENSIONS , dissect_tetra_OCTET_STRING_SIZE_3 },
6246 { 1, &hf_tetra_gssi_extension, ASN1_NO_EXTENSIONS , dissect_tetra_T_gssi_extension },
6247 { 2, &hf_tetra_vgssi , ASN1_NO_EXTENSIONS , dissect_tetra_OCTET_STRING_SIZE_3 },
6248 { 0, NULL, 0, NULL }
6251 static int
6252 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_) {
6253 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6254 ett_tetra_T_address_type, T_address_type_choice,
6255 NULL);
6257 return offset;
6261 static const per_sequence_t GROUP_IDENTITY_DOWNLINK_sequence[] = {
6262 { &hf_tetra_attach_detach_identifiet, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_attach_detach_identifiet },
6263 { &hf_tetra_address_type , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_address_type },
6264 { NULL, 0, 0, NULL }
6267 static int
6268 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_) {
6269 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6270 ett_tetra_GROUP_IDENTITY_DOWNLINK, GROUP_IDENTITY_DOWNLINK_sequence);
6272 return offset;
6276 static const per_sequence_t T_type3_elements_04_sequence[] = {
6277 { &hf_tetra_type3_identifier, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_TYPE3_IDENTIFIER },
6278 { &hf_tetra_length , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_2047 },
6279 { &hf_tetra_repeat_num , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_63 },
6280 { &hf_tetra_group_identity_downlink_02, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_GROUP_IDENTITY_DOWNLINK },
6281 { NULL, 0, 0, NULL }
6284 static int
6285 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_) {
6286 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6287 ett_tetra_T_type3_elements_04, T_type3_elements_04_sequence);
6289 return offset;
6293 static const value_string tetra_T_type3_04_vals[] = {
6294 { 0, "no-type3" },
6295 { 1, "type3-elements" },
6296 { 0, NULL }
6299 static const per_choice_t T_type3_04_choice[] = {
6300 { 0, &hf_tetra_no_type3 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
6301 { 1, &hf_tetra_type3_elements_04, ASN1_NO_EXTENSIONS , dissect_tetra_T_type3_elements_04 },
6302 { 0, NULL, 0, NULL }
6305 static int
6306 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_) {
6307 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6308 ett_tetra_T_type3_04, T_type3_04_choice,
6309 NULL);
6311 return offset;
6315 static const per_sequence_t T_type2_element_02_sequence[] = {
6316 { &hf_tetra_type3_04 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_type3_04 },
6317 { NULL, 0, 0, NULL }
6320 static int
6321 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_) {
6322 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6323 ett_tetra_T_type2_element_02, T_type2_element_02_sequence);
6325 return offset;
6329 static const value_string tetra_T_optional_elements_24_vals[] = {
6330 { 0, "no-type2" },
6331 { 1, "type2-element" },
6332 { 0, NULL }
6335 static const per_choice_t T_optional_elements_24_choice[] = {
6336 { 0, &hf_tetra_no_type2 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
6337 { 1, &hf_tetra_type2_element_02, ASN1_NO_EXTENSIONS , dissect_tetra_T_type2_element_02 },
6338 { 0, NULL, 0, NULL }
6341 static int
6342 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_) {
6343 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6344 ett_tetra_T_optional_elements_24, T_optional_elements_24_choice,
6345 NULL);
6347 return offset;
6351 static const per_sequence_t D_ATTACH_DETACH_GROUP_IDENTITY_sequence[] = {
6352 { &hf_tetra_group_identity_report, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
6353 { &hf_tetra_group_identity_ack_request, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
6354 { &hf_tetra_group_identity_attach_detach_mode, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
6355 { &hf_tetra_optional_elements_24, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_24 },
6356 { NULL, 0, 0, NULL }
6359 static int
6360 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_) {
6361 #line 255 "../../asn1/tetra/tetra.cnf"
6362 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6363 ett_tetra_D_ATTACH_DETACH_GROUP_IDENTITY, D_ATTACH_DETACH_GROUP_IDENTITY_sequence);
6365 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-ATTACH-DETACH-GROUP-IDENTITY");
6368 return offset;
6372 static const per_sequence_t T_type3_elements_05_sequence[] = {
6373 { &hf_tetra_type3_identifier, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_TYPE3_IDENTIFIER },
6374 { &hf_tetra_length , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_2047 },
6375 { &hf_tetra_repeat_num , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_63 },
6376 { &hf_tetra_group_identity_downlink_02, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_GROUP_IDENTITY_DOWNLINK },
6377 { NULL, 0, 0, NULL }
6380 static int
6381 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_) {
6382 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6383 ett_tetra_T_type3_elements_05, T_type3_elements_05_sequence);
6385 return offset;
6389 static const value_string tetra_T_type3_05_vals[] = {
6390 { 0, "no-type3" },
6391 { 1, "type3-elements" },
6392 { 0, NULL }
6395 static const per_choice_t T_type3_05_choice[] = {
6396 { 0, &hf_tetra_no_type3 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
6397 { 1, &hf_tetra_type3_elements_05, ASN1_NO_EXTENSIONS , dissect_tetra_T_type3_elements_05 },
6398 { 0, NULL, 0, NULL }
6401 static int
6402 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_) {
6403 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6404 ett_tetra_T_type3_05, T_type3_05_choice,
6405 NULL);
6407 return offset;
6411 static const per_sequence_t T_type2_element_03_sequence[] = {
6412 { &hf_tetra_type3_05 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_type3_05 },
6413 { NULL, 0, 0, NULL }
6416 static int
6417 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_) {
6418 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6419 ett_tetra_T_type2_element_03, T_type2_element_03_sequence);
6421 return offset;
6425 static const value_string tetra_T_optional_elements_25_vals[] = {
6426 { 0, "no-type2" },
6427 { 1, "type2-element" },
6428 { 0, NULL }
6431 static const per_choice_t T_optional_elements_25_choice[] = {
6432 { 0, &hf_tetra_no_type2 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
6433 { 1, &hf_tetra_type2_element_03, ASN1_NO_EXTENSIONS , dissect_tetra_T_type2_element_03 },
6434 { 0, NULL, 0, NULL }
6437 static int
6438 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_) {
6439 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6440 ett_tetra_T_optional_elements_25, T_optional_elements_25_choice,
6441 NULL);
6443 return offset;
6447 static const per_sequence_t D_ATTACH_DETACH_GROUP_IDENTITY_ACK_sequence[] = {
6448 { &hf_tetra_group_identity_attach_detach_accept, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
6449 { &hf_tetra_reserved_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
6450 { &hf_tetra_optional_elements_25, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_25 },
6451 { NULL, 0, 0, NULL }
6454 static int
6455 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_) {
6456 #line 260 "../../asn1/tetra/tetra.cnf"
6457 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6458 ett_tetra_D_ATTACH_DETACH_GROUP_IDENTITY_ACK, D_ATTACH_DETACH_GROUP_IDENTITY_ACK_sequence);
6460 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-ATTACH-DETACH-GROUP-IDENTITY-ACK");
6463 return offset;
6467 static const per_sequence_t D_MM_STATUS_sequence[] = {
6468 { &hf_tetra_status_downlink, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_63 },
6469 { NULL, 0, 0, NULL }
6472 static int
6473 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_) {
6474 #line 235 "../../asn1/tetra/tetra.cnf"
6475 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6476 ett_tetra_D_MM_STATUS, D_MM_STATUS_sequence);
6478 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-MM-STATUS");
6481 return offset;
6485 static const value_string tetra_D_MM_PDU_vals[] = {
6486 { 0, "d-Otar" },
6487 { 1, "d-Authentication" },
6488 { 2, "d-Authentication-Reject" },
6489 { 3, "d-Disable" },
6490 { 4, "d-Enable" },
6491 { 5, "d-Location-Update-Accept" },
6492 { 6, "d-Location-Update-Command" },
6493 { 7, "d-Location-Update-Reject" },
6494 { 8, "d-MM-reserved2" },
6495 { 9, "d-Location-Update-Proceeding" },
6496 { 10, "d-Attach-Detach-Group-Identity" },
6497 { 11, "d-Attach-Detach-Group-Identity-Ack" },
6498 { 12, "d-MM-Status" },
6499 { 13, "d-MM-reserved5" },
6500 { 14, "d-MM-reserved6" },
6501 { 15, "d-MM-Function-Not-Support" },
6502 { 0, NULL }
6505 static const per_choice_t D_MM_PDU_choice[] = {
6506 { 0, &hf_tetra_d_Otar , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
6507 { 1, &hf_tetra_d_Authentication, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
6508 { 2, &hf_tetra_d_Authentication_Reject, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
6509 { 3, &hf_tetra_d_Disable , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
6510 { 4, &hf_tetra_d_Enable , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
6511 { 5, &hf_tetra_d_Location_Update_Accept, ASN1_NO_EXTENSIONS , dissect_tetra_D_LOCATION_UPDATE_ACCEPT },
6512 { 6, &hf_tetra_d_Location_Update_Command, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
6513 { 7, &hf_tetra_d_Location_Update_Reject, ASN1_NO_EXTENSIONS , dissect_tetra_D_LOCATION_UPDATE_REJECT },
6514 { 8, &hf_tetra_d_MM_reserved2, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
6515 { 9, &hf_tetra_d_Location_Update_Proceeding, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
6516 { 10, &hf_tetra_d_Attach_Detach_Group_Identity, ASN1_NO_EXTENSIONS , dissect_tetra_D_ATTACH_DETACH_GROUP_IDENTITY },
6517 { 11, &hf_tetra_d_Attach_Detach_Group_Identity_Ack, ASN1_NO_EXTENSIONS , dissect_tetra_D_ATTACH_DETACH_GROUP_IDENTITY_ACK },
6518 { 12, &hf_tetra_d_MM_Status , ASN1_NO_EXTENSIONS , dissect_tetra_D_MM_STATUS },
6519 { 13, &hf_tetra_d_MM_reserved5, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
6520 { 14, &hf_tetra_d_MM_reserved6, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
6521 { 15, &hf_tetra_d_MM_Function_Not_Support, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
6522 { 0, NULL, 0, NULL }
6525 static int
6526 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_) {
6527 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6528 ett_tetra_D_MM_PDU, D_MM_PDU_choice,
6529 NULL);
6531 return offset;
6535 static const value_string tetra_T_simplex_duplex_selection_03_vals[] = {
6536 { 0, "simplex" },
6537 { 1, "duplex" },
6538 { 0, NULL }
6542 static int
6543 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_) {
6544 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
6545 2, NULL, FALSE, 0, NULL);
6547 return offset;
6551 static const value_string tetra_T_basic_service_infomation_vals[] = {
6552 { 0, "none" },
6553 { 1, "basic-service-infomation" },
6554 { 0, NULL }
6557 static const per_choice_t T_basic_service_infomation_choice[] = {
6558 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
6559 { 1, &hf_tetra_basic_service_infomation_01, ASN1_NO_EXTENSIONS , dissect_tetra_Basic_service_information },
6560 { 0, NULL, 0, NULL }
6563 static int
6564 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_) {
6565 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6566 ett_tetra_T_basic_service_infomation, T_basic_service_infomation_choice,
6567 NULL);
6569 return offset;
6573 static const value_string tetra_T_notification_indicator_01_vals[] = {
6574 { 0, "none" },
6575 { 1, "notification-indicator" },
6576 { 0, NULL }
6579 static const per_choice_t T_notification_indicator_01_choice[] = {
6580 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
6581 { 1, &hf_tetra_notification_indicator_01, ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_63 },
6582 { 0, NULL, 0, NULL }
6585 static int
6586 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_) {
6587 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6588 ett_tetra_T_notification_indicator_01, T_notification_indicator_01_choice,
6589 NULL);
6591 return offset;
6595 static const value_string tetra_T_prop_09_vals[] = {
6596 { 0, "none" },
6597 { 1, "prop" },
6598 { 0, NULL }
6601 static const per_choice_t T_prop_09_choice[] = {
6602 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
6603 { 1, &hf_tetra_prop_01 , ASN1_NO_EXTENSIONS , dissect_tetra_Proprietary },
6604 { 0, NULL, 0, NULL }
6607 static int
6608 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_) {
6609 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6610 ett_tetra_T_prop_09, T_prop_09_choice,
6611 NULL);
6613 return offset;
6617 static const per_sequence_t T_type2_parameters_14_sequence[] = {
6618 { &hf_tetra_basic_service_infomation, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_basic_service_infomation },
6619 { &hf_tetra_notification_indicator_02, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_notification_indicator_01 },
6620 { &hf_tetra_prop_10 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop_09 },
6621 { NULL, 0, 0, NULL }
6624 static int
6625 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_) {
6626 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6627 ett_tetra_T_type2_parameters_14, T_type2_parameters_14_sequence);
6629 return offset;
6633 static const value_string tetra_T_optional_elements_18_vals[] = {
6634 { 0, "no-type2" },
6635 { 1, "type2-parameters" },
6636 { 0, NULL }
6639 static const per_choice_t T_optional_elements_18_choice[] = {
6640 { 0, &hf_tetra_no_type2 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
6641 { 1, &hf_tetra_type2_parameters_14, ASN1_NO_EXTENSIONS , dissect_tetra_T_type2_parameters_14 },
6642 { 0, NULL, 0, NULL }
6645 static int
6646 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_) {
6647 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6648 ett_tetra_T_optional_elements_18, T_optional_elements_18_choice,
6649 NULL);
6651 return offset;
6655 static const per_sequence_t D_ALERT_sequence[] = {
6656 { &hf_tetra_call_identifier_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1023 },
6657 { &hf_tetra_call_time_out_setup_phase, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
6658 { &hf_tetra_reserved_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
6659 { &hf_tetra_simplex_duplex_selection_04, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_simplex_duplex_selection_03 },
6660 { &hf_tetra_call_queued , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
6661 { &hf_tetra_optional_elements_18, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_18 },
6662 { NULL, 0, 0, NULL }
6665 static int
6666 dissect_tetra_D_ALERT(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6667 #line 131 "../../asn1/tetra/tetra.cnf"
6668 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6669 ett_tetra_D_ALERT, D_ALERT_sequence);
6671 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-ALERT");
6674 return offset;
6678 static const value_string tetra_T_basic_service_information_02_vals[] = {
6679 { 0, "none" },
6680 { 1, "basic-service-information" },
6681 { 0, NULL }
6684 static const per_choice_t T_basic_service_information_02_choice[] = {
6685 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
6686 { 1, &hf_tetra_basic_service_information, ASN1_NO_EXTENSIONS , dissect_tetra_Basic_service_information },
6687 { 0, NULL, 0, NULL }
6690 static int
6691 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_) {
6692 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6693 ett_tetra_T_basic_service_information_02, T_basic_service_information_02_choice,
6694 NULL);
6696 return offset;
6700 static const value_string tetra_T_call_status_vals[] = {
6701 { 0, "none" },
6702 { 1, "call-status" },
6703 { 0, NULL }
6706 static const per_choice_t T_call_status_choice[] = {
6707 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
6708 { 1, &hf_tetra_call_status_01, ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_7 },
6709 { 0, NULL, 0, NULL }
6712 static int
6713 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_) {
6714 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6715 ett_tetra_T_call_status, T_call_status_choice,
6716 NULL);
6718 return offset;
6722 static const value_string tetra_T_notification_indicator_vals[] = {
6723 { 0, "none" },
6724 { 1, "notification-indicator" },
6725 { 0, NULL }
6728 static const per_choice_t T_notification_indicator_choice[] = {
6729 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
6730 { 1, &hf_tetra_notification_indicator_01, ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_63 },
6731 { 0, NULL, 0, NULL }
6734 static int
6735 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_) {
6736 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6737 ett_tetra_T_notification_indicator, T_notification_indicator_choice,
6738 NULL);
6740 return offset;
6744 static const value_string tetra_T_prop_08_vals[] = {
6745 { 0, "none" },
6746 { 1, "prop" },
6747 { 0, NULL }
6750 static const per_choice_t T_prop_08_choice[] = {
6751 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
6752 { 1, &hf_tetra_prop_01 , ASN1_NO_EXTENSIONS , dissect_tetra_Proprietary },
6753 { 0, NULL, 0, NULL }
6756 static int
6757 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_) {
6758 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6759 ett_tetra_T_prop_08, T_prop_08_choice,
6760 NULL);
6762 return offset;
6766 static const per_sequence_t T_type2_parameters_13_sequence[] = {
6767 { &hf_tetra_basic_service_information_03, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_basic_service_information_02 },
6768 { &hf_tetra_call_status , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_call_status },
6769 { &hf_tetra_notification_indicator, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_notification_indicator },
6770 { &hf_tetra_prop_09 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop_08 },
6771 { NULL, 0, 0, NULL }
6774 static int
6775 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_) {
6776 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6777 ett_tetra_T_type2_parameters_13, T_type2_parameters_13_sequence);
6779 return offset;
6783 static const value_string tetra_T_optional_elements_17_vals[] = {
6784 { 0, "no-type2" },
6785 { 1, "type2-parameters" },
6786 { 0, NULL }
6789 static const per_choice_t T_optional_elements_17_choice[] = {
6790 { 0, &hf_tetra_no_type2 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
6791 { 1, &hf_tetra_type2_parameters_13, ASN1_NO_EXTENSIONS , dissect_tetra_T_type2_parameters_13 },
6792 { 0, NULL, 0, NULL }
6795 static int
6796 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_) {
6797 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6798 ett_tetra_T_optional_elements_17, T_optional_elements_17_choice,
6799 NULL);
6801 return offset;
6805 static const per_sequence_t D_CALL_PROCEEDING_sequence[] = {
6806 { &hf_tetra_call_identifier_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1023 },
6807 { &hf_tetra_call_time_out_setup_phase, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
6808 { &hf_tetra_hook_method_selection, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
6809 { &hf_tetra_simplex_duplex_selection_03, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
6810 { &hf_tetra_optional_elements_17, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_17 },
6811 { NULL, 0, 0, NULL }
6814 static int
6815 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_) {
6816 #line 88 "../../asn1/tetra/tetra.cnf"
6817 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6818 ett_tetra_D_CALL_PROCEEDING, D_CALL_PROCEEDING_sequence);
6820 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-CALL-PROCEEDING");
6823 return offset;
6827 static const value_string tetra_T_simplex_duplex_selection_04_vals[] = {
6828 { 0, "simplex" },
6829 { 1, "duplex" },
6830 { 0, NULL }
6834 static int
6835 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_) {
6836 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
6837 2, NULL, FALSE, 0, NULL);
6839 return offset;
6843 static const value_string tetra_T_call_priority_vals[] = {
6844 { 0, "none" },
6845 { 1, "call-priority" },
6846 { 0, NULL }
6849 static const per_choice_t T_call_priority_choice[] = {
6850 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
6851 { 1, &hf_tetra_call_priority , ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_15 },
6852 { 0, NULL, 0, NULL }
6855 static int
6856 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_) {
6857 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6858 ett_tetra_T_call_priority, T_call_priority_choice,
6859 NULL);
6861 return offset;
6865 static const value_string tetra_T_basic_service_information_03_vals[] = {
6866 { 0, "none" },
6867 { 1, "basic-service-information" },
6868 { 0, NULL }
6871 static const per_choice_t T_basic_service_information_03_choice[] = {
6872 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
6873 { 1, &hf_tetra_basic_service_information, ASN1_NO_EXTENSIONS , dissect_tetra_Basic_service_information },
6874 { 0, NULL, 0, NULL }
6877 static int
6878 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_) {
6879 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6880 ett_tetra_T_basic_service_information_03, T_basic_service_information_03_choice,
6881 NULL);
6883 return offset;
6887 static const value_string tetra_T_temporary_address_vals[] = {
6888 { 0, "none" },
6889 { 1, "temporary-address" },
6890 { 0, NULL }
6893 static const per_choice_t T_temporary_address_choice[] = {
6894 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
6895 { 1, &hf_tetra_temporary_address_01, ASN1_NO_EXTENSIONS , dissect_tetra_Calling_party_address_type },
6896 { 0, NULL, 0, NULL }
6899 static int
6900 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_) {
6901 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6902 ett_tetra_T_temporary_address, T_temporary_address_choice,
6903 NULL);
6905 return offset;
6909 static const value_string tetra_T_notification_indicator_02_vals[] = {
6910 { 0, "none" },
6911 { 1, "notification-indicator" },
6912 { 0, NULL }
6915 static const per_choice_t T_notification_indicator_02_choice[] = {
6916 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
6917 { 1, &hf_tetra_notification_indicator_01, ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_63 },
6918 { 0, NULL, 0, NULL }
6921 static int
6922 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_) {
6923 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6924 ett_tetra_T_notification_indicator_02, T_notification_indicator_02_choice,
6925 NULL);
6927 return offset;
6931 static const value_string tetra_T_prop_10_vals[] = {
6932 { 0, "none" },
6933 { 1, "prop" },
6934 { 0, NULL }
6937 static const per_choice_t T_prop_10_choice[] = {
6938 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
6939 { 1, &hf_tetra_prop_01 , ASN1_NO_EXTENSIONS , dissect_tetra_Proprietary },
6940 { 0, NULL, 0, NULL }
6943 static int
6944 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_) {
6945 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6946 ett_tetra_T_prop_10, T_prop_10_choice,
6947 NULL);
6949 return offset;
6953 static const per_sequence_t T_type2_parameters_15_sequence[] = {
6954 { &hf_tetra_call_priority_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_call_priority },
6955 { &hf_tetra_basic_service_information_04, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_basic_service_information_03 },
6956 { &hf_tetra_temporary_address, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_temporary_address },
6957 { &hf_tetra_notification_indicator_03, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_notification_indicator_02 },
6958 { &hf_tetra_prop_11 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop_10 },
6959 { NULL, 0, 0, NULL }
6962 static int
6963 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_) {
6964 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6965 ett_tetra_T_type2_parameters_15, T_type2_parameters_15_sequence);
6967 return offset;
6971 static const value_string tetra_T_optional_elements_19_vals[] = {
6972 { 0, "no-type2" },
6973 { 1, "type2-parameters" },
6974 { 0, NULL }
6977 static const per_choice_t T_optional_elements_19_choice[] = {
6978 { 0, &hf_tetra_no_type2 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
6979 { 1, &hf_tetra_type2_parameters_15, ASN1_NO_EXTENSIONS , dissect_tetra_T_type2_parameters_15 },
6980 { 0, NULL, 0, NULL }
6983 static int
6984 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_) {
6985 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6986 ett_tetra_T_optional_elements_19, T_optional_elements_19_choice,
6987 NULL);
6989 return offset;
6993 static const per_sequence_t D_CONNECT_sequence[] = {
6994 { &hf_tetra_call_identifier_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1023 },
6995 { &hf_tetra_call_time_out_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_31 },
6996 { &hf_tetra_hook_method_selection, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
6997 { &hf_tetra_simplex_duplex_selection_05, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_simplex_duplex_selection_04 },
6998 { &hf_tetra_transmission_grant, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
6999 { &hf_tetra_transmission_request_permission, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
7000 { &hf_tetra_call_ownership, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
7001 { &hf_tetra_optional_elements_19, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_19 },
7002 { NULL, 0, 0, NULL }
7005 static int
7006 dissect_tetra_D_CONNECT(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7007 #line 111 "../../asn1/tetra/tetra.cnf"
7008 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7009 ett_tetra_D_CONNECT, D_CONNECT_sequence);
7011 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-CONNECT");
7014 return offset;
7018 static const value_string tetra_T_notification_indicator_03_vals[] = {
7019 { 0, "none" },
7020 { 1, "notification-indicator" },
7021 { 0, NULL }
7024 static const per_choice_t T_notification_indicator_03_choice[] = {
7025 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
7026 { 1, &hf_tetra_notification_indicator_01, ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_63 },
7027 { 0, NULL, 0, NULL }
7030 static int
7031 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_) {
7032 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7033 ett_tetra_T_notification_indicator_03, T_notification_indicator_03_choice,
7034 NULL);
7036 return offset;
7040 static const value_string tetra_T_prop_11_vals[] = {
7041 { 0, "none" },
7042 { 1, "prop" },
7043 { 0, NULL }
7046 static const per_choice_t T_prop_11_choice[] = {
7047 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
7048 { 1, &hf_tetra_prop_01 , ASN1_NO_EXTENSIONS , dissect_tetra_Proprietary },
7049 { 0, NULL, 0, NULL }
7052 static int
7053 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_) {
7054 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7055 ett_tetra_T_prop_11, T_prop_11_choice,
7056 NULL);
7058 return offset;
7062 static const per_sequence_t T_type2_parameters_16_sequence[] = {
7063 { &hf_tetra_notification_indicator_04, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_notification_indicator_03 },
7064 { &hf_tetra_prop_12 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop_11 },
7065 { NULL, 0, 0, NULL }
7068 static int
7069 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_) {
7070 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7071 ett_tetra_T_type2_parameters_16, T_type2_parameters_16_sequence);
7073 return offset;
7077 static const value_string tetra_T_optional_elements_20_vals[] = {
7078 { 0, "no-type2" },
7079 { 1, "type2-parameters" },
7080 { 0, NULL }
7083 static const per_choice_t T_optional_elements_20_choice[] = {
7084 { 0, &hf_tetra_no_type2 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
7085 { 1, &hf_tetra_type2_parameters_16, ASN1_NO_EXTENSIONS , dissect_tetra_T_type2_parameters_16 },
7086 { 0, NULL, 0, NULL }
7089 static int
7090 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_) {
7091 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7092 ett_tetra_T_optional_elements_20, T_optional_elements_20_choice,
7093 NULL);
7095 return offset;
7099 static const per_sequence_t D_CONNECT_ACK_sequence[] = {
7100 { &hf_tetra_call_identifier_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1023 },
7101 { &hf_tetra_call_time_out , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_15 },
7102 { &hf_tetra_transmission_grant, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
7103 { &hf_tetra_transmission_request_permission, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
7104 { &hf_tetra_optional_elements_20, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_20 },
7105 { NULL, 0, 0, NULL }
7108 static int
7109 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_) {
7110 #line 116 "../../asn1/tetra/tetra.cnf"
7111 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7112 ett_tetra_D_CONNECT_ACK, D_CONNECT_ACK_sequence);
7114 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-CONNECT-ACK");
7117 return offset;
7121 static const per_sequence_t D_DISCONNECT_sequence[] = {
7122 { &hf_tetra_call_identifier, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
7123 { &hf_tetra_disconnect_cause, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_31 },
7124 { NULL, 0, 0, NULL }
7127 static int
7128 dissect_tetra_D_DISCONNECT(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7129 #line 126 "../../asn1/tetra/tetra.cnf"
7130 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7131 ett_tetra_D_DISCONNECT, D_DISCONNECT_sequence);
7133 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-DISCONNECT");
7136 return offset;
7140 static const per_sequence_t D_INFO_sequence[] = {
7141 { &hf_tetra_call_identifier, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
7142 { &hf_tetra_reset_call_time_out_timer, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
7143 { &hf_tetra_poll_request , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
7144 { NULL, 0, 0, NULL }
7147 static int
7148 dissect_tetra_D_INFO(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7149 #line 121 "../../asn1/tetra/tetra.cnf"
7150 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7151 ett_tetra_D_INFO, D_INFO_sequence);
7153 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-INFO");
7156 return offset;
7160 static const value_string tetra_T_notification_indicator_04_vals[] = {
7161 { 0, "none" },
7162 { 1, "notification-indicator" },
7163 { 0, NULL }
7166 static const per_choice_t T_notification_indicator_04_choice[] = {
7167 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
7168 { 1, &hf_tetra_notification_indicator_01, ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_63 },
7169 { 0, NULL, 0, NULL }
7172 static int
7173 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_) {
7174 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7175 ett_tetra_T_notification_indicator_04, T_notification_indicator_04_choice,
7176 NULL);
7178 return offset;
7182 static const value_string tetra_T_prop_12_vals[] = {
7183 { 0, "none" },
7184 { 1, "prop" },
7185 { 0, NULL }
7188 static const per_choice_t T_prop_12_choice[] = {
7189 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
7190 { 1, &hf_tetra_prop_01 , ASN1_NO_EXTENSIONS , dissect_tetra_Proprietary },
7191 { 0, NULL, 0, NULL }
7194 static int
7195 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_) {
7196 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7197 ett_tetra_T_prop_12, T_prop_12_choice,
7198 NULL);
7200 return offset;
7204 static const per_sequence_t T_type2_parameters_17_sequence[] = {
7205 { &hf_tetra_notification_indicator_05, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_notification_indicator_04 },
7206 { &hf_tetra_prop_13 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop_12 },
7207 { NULL, 0, 0, NULL }
7210 static int
7211 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_) {
7212 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7213 ett_tetra_T_type2_parameters_17, T_type2_parameters_17_sequence);
7215 return offset;
7219 static const value_string tetra_T_optional_elements_21_vals[] = {
7220 { 0, "no-type2" },
7221 { 1, "type2-parameters" },
7222 { 0, NULL }
7225 static const per_choice_t T_optional_elements_21_choice[] = {
7226 { 0, &hf_tetra_no_type2 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
7227 { 1, &hf_tetra_type2_parameters_17, ASN1_NO_EXTENSIONS , dissect_tetra_T_type2_parameters_17 },
7228 { 0, NULL, 0, NULL }
7231 static int
7232 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_) {
7233 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7234 ett_tetra_T_optional_elements_21, T_optional_elements_21_choice,
7235 NULL);
7237 return offset;
7241 static const per_sequence_t D_RELEASE_sequence[] = {
7242 { &hf_tetra_call_identifier, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
7243 { &hf_tetra_disconnect_cause, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_31 },
7244 { &hf_tetra_optional_elements_21, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_21 },
7245 { NULL, 0, 0, NULL }
7248 static int
7249 dissect_tetra_D_RELEASE(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7250 #line 81 "../../asn1/tetra/tetra.cnf"
7251 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7252 ett_tetra_D_RELEASE, D_RELEASE_sequence);
7254 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-RELEASE");
7257 return offset;
7261 static const value_string tetra_T_simplex_duplex_selection_02_vals[] = {
7262 { 0, "simplex" },
7263 { 1, "duplex" },
7264 { 0, NULL }
7268 static int
7269 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_) {
7270 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
7271 2, NULL, FALSE, 0, NULL);
7273 return offset;
7277 static const value_string tetra_T_calling_party_address_vals[] = {
7278 { 0, "none" },
7279 { 1, "calling-party-address" },
7280 { 0, NULL }
7283 static const per_choice_t T_calling_party_address_choice[] = {
7284 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
7285 { 1, &hf_tetra_calling_party_address_01, ASN1_NO_EXTENSIONS , dissect_tetra_Calling_party_address_type },
7286 { 0, NULL, 0, NULL }
7289 static int
7290 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_) {
7291 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7292 ett_tetra_T_calling_party_address, T_calling_party_address_choice,
7293 NULL);
7295 return offset;
7299 static const value_string tetra_T_external_subscriber_number_01_vals[] = {
7300 { 0, "none" },
7301 { 1, "external-subscriber-number" },
7302 { 0, NULL }
7305 static const per_choice_t T_external_subscriber_number_01_choice[] = {
7306 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
7307 { 1, &hf_tetra_external_subscriber_number_03, ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_15 },
7308 { 0, NULL, 0, NULL }
7311 static int
7312 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_) {
7313 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7314 ett_tetra_T_external_subscriber_number_01, T_external_subscriber_number_01_choice,
7315 NULL);
7317 return offset;
7321 static const value_string tetra_T_prop_07_vals[] = {
7322 { 0, "none" },
7323 { 1, "prop" },
7324 { 0, NULL }
7327 static const per_choice_t T_prop_07_choice[] = {
7328 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
7329 { 1, &hf_tetra_prop_01 , ASN1_NO_EXTENSIONS , dissect_tetra_Proprietary },
7330 { 0, NULL, 0, NULL }
7333 static int
7334 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_) {
7335 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7336 ett_tetra_T_prop_07, T_prop_07_choice,
7337 NULL);
7339 return offset;
7343 static const per_sequence_t T_type2_parameters_12_sequence[] = {
7344 { &hf_tetra_calling_party_address, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_calling_party_address },
7345 { &hf_tetra_external_subscriber_number_02, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_external_subscriber_number_01 },
7346 { &hf_tetra_prop_08 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop_07 },
7347 { NULL, 0, 0, NULL }
7350 static int
7351 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_) {
7352 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7353 ett_tetra_T_type2_parameters_12, T_type2_parameters_12_sequence);
7355 return offset;
7359 static const value_string tetra_T_optional_elements_16_vals[] = {
7360 { 0, "no-type2" },
7361 { 1, "type2-parameters" },
7362 { 0, NULL }
7365 static const per_choice_t T_optional_elements_16_choice[] = {
7366 { 0, &hf_tetra_no_type2 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
7367 { 1, &hf_tetra_type2_parameters_12, ASN1_NO_EXTENSIONS , dissect_tetra_T_type2_parameters_12 },
7368 { 0, NULL, 0, NULL }
7371 static int
7372 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_) {
7373 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7374 ett_tetra_T_optional_elements_16, T_optional_elements_16_choice,
7375 NULL);
7377 return offset;
7381 static const per_sequence_t D_SETUP_sequence[] = {
7382 { &hf_tetra_call_identifier, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
7383 { &hf_tetra_call_time_out , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_15 },
7384 { &hf_tetra_hook_method_selection_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
7385 { &hf_tetra_simplex_duplex_selection_02, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_simplex_duplex_selection_02 },
7386 { &hf_tetra_basic_service_information, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Basic_service_information },
7387 { &hf_tetra_transmission_grant, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
7388 { &hf_tetra_transmission_request_permission, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
7389 { &hf_tetra_call_priority , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_15 },
7390 { &hf_tetra_optional_elements_16, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_16 },
7391 { NULL, 0, 0, NULL }
7394 static int
7395 dissect_tetra_D_SETUP(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7396 #line 93 "../../asn1/tetra/tetra.cnf"
7397 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7398 ett_tetra_D_SETUP, D_SETUP_sequence);
7400 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-SETUP");
7403 return offset;
7408 static int
7409 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_) {
7410 offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
7411 6, 6, FALSE, NULL);
7413 return offset;
7417 static const value_string tetra_T_calling_party_type_identifier_01_vals[] = {
7418 { 0, "none1" },
7419 { 1, "calling-party-address-SSI" },
7420 { 2, "ssi-extension" },
7421 { 3, "none2" },
7422 { 0, NULL }
7425 static const per_choice_t T_calling_party_type_identifier_01_choice[] = {
7426 { 0, &hf_tetra_none1 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
7427 { 1, &hf_tetra_calling_party_address_SSI, ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_16777215 },
7428 { 2, &hf_tetra_ssi_extension_01, ASN1_NO_EXTENSIONS , dissect_tetra_OCTET_STRING_SIZE_6 },
7429 { 3, &hf_tetra_none2 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
7430 { 0, NULL, 0, NULL }
7433 static int
7434 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_) {
7435 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7436 ett_tetra_T_calling_party_type_identifier_01, T_calling_party_type_identifier_01_choice,
7437 NULL);
7439 return offset;
7443 static const per_sequence_t D_STATUS_sequence[] = {
7444 { &hf_tetra_calling_party_type_identifier_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_calling_party_type_identifier_01 },
7445 { &hf_tetra_pre_coded_status, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_65535 },
7446 { NULL, 0, 0, NULL }
7449 static int
7450 dissect_tetra_D_STATUS(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7451 #line 142 "../../asn1/tetra/tetra.cnf"
7452 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7453 ett_tetra_D_STATUS, D_STATUS_sequence);
7455 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-STATUS");
7458 return offset;
7462 static const value_string tetra_T_notification_indicator_06_vals[] = {
7463 { 0, "none" },
7464 { 1, "notification-indicator" },
7465 { 0, NULL }
7468 static const per_choice_t T_notification_indicator_06_choice[] = {
7469 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
7470 { 1, &hf_tetra_notification_indicator_01, ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_63 },
7471 { 0, NULL, 0, NULL }
7474 static int
7475 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_) {
7476 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7477 ett_tetra_T_notification_indicator_06, T_notification_indicator_06_choice,
7478 NULL);
7480 return offset;
7484 static const value_string tetra_T_prop_14_vals[] = {
7485 { 0, "none" },
7486 { 1, "prop" },
7487 { 0, NULL }
7490 static const per_choice_t T_prop_14_choice[] = {
7491 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
7492 { 1, &hf_tetra_prop_01 , ASN1_NO_EXTENSIONS , dissect_tetra_Proprietary },
7493 { 0, NULL, 0, NULL }
7496 static int
7497 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_) {
7498 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7499 ett_tetra_T_prop_14, T_prop_14_choice,
7500 NULL);
7502 return offset;
7506 static const per_sequence_t T_type2_parameters_19_sequence[] = {
7507 { &hf_tetra_notification_indicator_07, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_notification_indicator_06 },
7508 { &hf_tetra_prop_15 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop_14 },
7509 { NULL, 0, 0, NULL }
7512 static int
7513 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_) {
7514 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7515 ett_tetra_T_type2_parameters_19, T_type2_parameters_19_sequence);
7517 return offset;
7521 static const value_string tetra_T_optional_elements_23_vals[] = {
7522 { 0, "no-type2" },
7523 { 1, "type2-parameters" },
7524 { 0, NULL }
7527 static const per_choice_t T_optional_elements_23_choice[] = {
7528 { 0, &hf_tetra_no_type2 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
7529 { 1, &hf_tetra_type2_parameters_19, ASN1_NO_EXTENSIONS , dissect_tetra_T_type2_parameters_19 },
7530 { 0, NULL, 0, NULL }
7533 static int
7534 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_) {
7535 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7536 ett_tetra_T_optional_elements_23, T_optional_elements_23_choice,
7537 NULL);
7539 return offset;
7543 static const per_sequence_t D_TX_CEASED_sequence[] = {
7544 { &hf_tetra_call_identifier_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1023 },
7545 { &hf_tetra_transmission_request_permission, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
7546 { &hf_tetra_optional_elements_23, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_23 },
7547 { NULL, 0, 0, NULL }
7550 static int
7551 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_) {
7552 #line 136 "../../asn1/tetra/tetra.cnf"
7553 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7554 ett_tetra_D_TX_CEASED, D_TX_CEASED_sequence);
7556 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-TX-CEASED");
7559 return offset;
7563 static const per_sequence_t D_TX_CONTINUE_sequence[] = {
7564 { &hf_tetra_call_identifier, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
7565 { &hf_tetra_continue , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
7566 { &hf_tetra_transmission_request_permission, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
7567 { NULL, 0, 0, NULL }
7570 static int
7571 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_) {
7572 #line 147 "../../asn1/tetra/tetra.cnf"
7573 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7574 ett_tetra_D_TX_CONTINUE, D_TX_CONTINUE_sequence);
7576 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-TX-CONTINUE");
7579 return offset;
7583 static const per_sequence_t D_TX_GRANTED_sequence[] = {
7584 { &hf_tetra_call_identifier_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1023 },
7585 { &hf_tetra_transmission_grant, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
7586 { &hf_tetra_transmission_request_permission, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
7587 { &hf_tetra_encryption_control, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
7588 { &hf_tetra_reserved_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
7589 { NULL, 0, 0, NULL }
7592 static int
7593 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_) {
7594 #line 152 "../../asn1/tetra/tetra.cnf"
7595 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7596 ett_tetra_D_TX_GRANTED, D_TX_GRANTED_sequence);
7598 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-TX-GRANTED");
7602 return offset;
7606 static const per_sequence_t D_TX_WAIT_sequence[] = {
7607 { &hf_tetra_call_identifier, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
7608 { &hf_tetra_transmission_request_permission, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
7609 { NULL, 0, 0, NULL }
7612 static int
7613 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_) {
7614 #line 158 "../../asn1/tetra/tetra.cnf"
7615 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7616 ett_tetra_D_TX_WAIT, D_TX_WAIT_sequence);
7618 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-TX-WAIT");
7619 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7620 ett_tetra_D_TX_WAIT, D_TX_WAIT_sequence);
7622 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-TX-WAIT");
7625 return offset;
7629 static const value_string tetra_T_new_call_identifier_vals[] = {
7630 { 0, "none" },
7631 { 1, "new-call-identifier" },
7632 { 0, NULL }
7635 static const per_choice_t T_new_call_identifier_choice[] = {
7636 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
7637 { 1, &hf_tetra_new_call_identifier_01, ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_1023 },
7638 { 0, NULL, 0, NULL }
7641 static int
7642 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_) {
7643 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7644 ett_tetra_T_new_call_identifier, T_new_call_identifier_choice,
7645 NULL);
7647 return offset;
7651 static const value_string tetra_T_call_time_out_vals[] = {
7652 { 0, "none" },
7653 { 1, "call-time-out" },
7654 { 0, NULL }
7657 static const per_choice_t T_call_time_out_choice[] = {
7658 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
7659 { 1, &hf_tetra_call_time_out_03, ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_7 },
7660 { 0, NULL, 0, NULL }
7663 static int
7664 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_) {
7665 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7666 ett_tetra_T_call_time_out, T_call_time_out_choice,
7667 NULL);
7669 return offset;
7673 static const value_string tetra_T_call_status_01_vals[] = {
7674 { 0, "none" },
7675 { 1, "call-status" },
7676 { 0, NULL }
7679 static const per_choice_t T_call_status_01_choice[] = {
7680 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
7681 { 1, &hf_tetra_call_status_01, ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_7 },
7682 { 0, NULL, 0, NULL }
7685 static int
7686 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_) {
7687 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7688 ett_tetra_T_call_status_01, T_call_status_01_choice,
7689 NULL);
7691 return offset;
7695 static const value_string tetra_T_simplex_duplex_selection_05_vals[] = {
7696 { 0, "simplex" },
7697 { 1, "duplex" },
7698 { 0, NULL }
7702 static int
7703 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_) {
7704 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
7705 2, NULL, FALSE, 0, NULL);
7707 return offset;
7711 static const per_sequence_t Modify_type_sequence[] = {
7712 { &hf_tetra_simplex_duplex_selection_06, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_simplex_duplex_selection_05 },
7713 { &hf_tetra_basic_service_information, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Basic_service_information },
7714 { NULL, 0, 0, NULL }
7717 static int
7718 dissect_tetra_Modify_type(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7719 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7720 ett_tetra_Modify_type, Modify_type_sequence);
7722 return offset;
7726 static const value_string tetra_T_modify_vals[] = {
7727 { 0, "none" },
7728 { 1, "modify" },
7729 { 0, NULL }
7732 static const per_choice_t T_modify_choice[] = {
7733 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
7734 { 1, &hf_tetra_modify_01 , ASN1_NO_EXTENSIONS , dissect_tetra_Modify_type },
7735 { 0, NULL, 0, NULL }
7738 static int
7739 dissect_tetra_T_modify(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7740 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7741 ett_tetra_T_modify, T_modify_choice,
7742 NULL);
7744 return offset;
7748 static const value_string tetra_T_notification_indicator_05_vals[] = {
7749 { 0, "none" },
7750 { 1, "notification-indicator" },
7751 { 0, NULL }
7754 static const per_choice_t T_notification_indicator_05_choice[] = {
7755 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
7756 { 1, &hf_tetra_notification_indicator_01, ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_63 },
7757 { 0, NULL, 0, NULL }
7760 static int
7761 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_) {
7762 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7763 ett_tetra_T_notification_indicator_05, T_notification_indicator_05_choice,
7764 NULL);
7766 return offset;
7770 static const value_string tetra_T_prop_13_vals[] = {
7771 { 0, "none" },
7772 { 1, "prop" },
7773 { 0, NULL }
7776 static const per_choice_t T_prop_13_choice[] = {
7777 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
7778 { 1, &hf_tetra_prop_01 , ASN1_NO_EXTENSIONS , dissect_tetra_Proprietary },
7779 { 0, NULL, 0, NULL }
7782 static int
7783 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_) {
7784 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7785 ett_tetra_T_prop_13, T_prop_13_choice,
7786 NULL);
7788 return offset;
7792 static const per_sequence_t T_type2_parameters_18_sequence[] = {
7793 { &hf_tetra_new_call_identifier, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_new_call_identifier },
7794 { &hf_tetra_call_time_out_02, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_call_time_out },
7795 { &hf_tetra_call_status_02, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_call_status_01 },
7796 { &hf_tetra_modify , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_modify },
7797 { &hf_tetra_notification_indicator_06, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_notification_indicator_05 },
7798 { &hf_tetra_prop_14 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop_13 },
7799 { NULL, 0, 0, NULL }
7802 static int
7803 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_) {
7804 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7805 ett_tetra_T_type2_parameters_18, T_type2_parameters_18_sequence);
7807 return offset;
7811 static const value_string tetra_T_optional_elements_22_vals[] = {
7812 { 0, "no-type2" },
7813 { 1, "type2-parameters" },
7814 { 0, NULL }
7817 static const per_choice_t T_optional_elements_22_choice[] = {
7818 { 0, &hf_tetra_no_type2 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
7819 { 1, &hf_tetra_type2_parameters_18, ASN1_NO_EXTENSIONS , dissect_tetra_T_type2_parameters_18 },
7820 { 0, NULL, 0, NULL }
7823 static int
7824 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_) {
7825 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7826 ett_tetra_T_optional_elements_22, T_optional_elements_22_choice,
7827 NULL);
7829 return offset;
7833 static const per_sequence_t D_CALL_RESTORE_sequence[] = {
7834 { &hf_tetra_call_identifier_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1023 },
7835 { &hf_tetra_transmission_grant, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
7836 { &hf_tetra_transmission_request_permission, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
7837 { &hf_tetra_reset_call_time_out, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
7838 { &hf_tetra_optional_elements_22, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_22 },
7839 { NULL, 0, 0, NULL }
7842 static int
7843 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_) {
7844 #line 163 "../../asn1/tetra/tetra.cnf"
7845 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7846 ett_tetra_D_CALL_RESTORE, D_CALL_RESTORE_sequence);
7848 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-CALL-RESTORE");
7851 return offset;
7855 static const value_string tetra_T_calling_party_type_identifier_vals[] = {
7856 { 0, "none1" },
7857 { 1, "ssi" },
7858 { 2, "ssi-extension" },
7859 { 3, "none2" },
7860 { 0, NULL }
7863 static const per_choice_t T_calling_party_type_identifier_choice[] = {
7864 { 0, &hf_tetra_none1 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
7865 { 1, &hf_tetra_ssi , ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_16777215 },
7866 { 2, &hf_tetra_ssi_extension_01, ASN1_NO_EXTENSIONS , dissect_tetra_OCTET_STRING_SIZE_6 },
7867 { 3, &hf_tetra_none2 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
7868 { 0, NULL, 0, NULL }
7871 static int
7872 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_) {
7873 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7874 ett_tetra_T_calling_party_type_identifier, T_calling_party_type_identifier_choice,
7875 NULL);
7877 return offset;
7882 static int
7883 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_) {
7884 offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
7885 8, 8, FALSE, NULL);
7887 return offset;
7891 static const value_string tetra_T_short_data_type_identifier_01_vals[] = {
7892 { 0, "data-1" },
7893 { 1, "data-2" },
7894 { 2, "data-3" },
7895 { 3, "length-indicator-data-4" },
7896 { 0, NULL }
7899 static const per_choice_t T_short_data_type_identifier_01_choice[] = {
7900 { 0, &hf_tetra_data_1 , ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_65535 },
7901 { 1, &hf_tetra_data_2 , ASN1_NO_EXTENSIONS , dissect_tetra_OCTET_STRING_SIZE_4 },
7902 { 2, &hf_tetra_data_3_01 , ASN1_NO_EXTENSIONS , dissect_tetra_OCTET_STRING_SIZE_8 },
7903 { 3, &hf_tetra_length_indicator_data_4, ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_4194304 },
7904 { 0, NULL, 0, NULL }
7907 static int
7908 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_) {
7909 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7910 ett_tetra_T_short_data_type_identifier_01, T_short_data_type_identifier_01_choice,
7911 NULL);
7913 return offset;
7917 static const per_sequence_t D_SDS_DATA_sequence[] = {
7918 { &hf_tetra_calling_party_type_identifier, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_calling_party_type_identifier },
7919 { &hf_tetra_short_data_type_identifier_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_short_data_type_identifier_01 },
7920 { NULL, 0, 0, NULL }
7923 static int
7924 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_) {
7925 #line 168 "../../asn1/tetra/tetra.cnf"
7926 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7927 ett_tetra_D_SDS_DATA, D_SDS_DATA_sequence);
7929 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-SDS-DATA");
7932 return offset;
7936 static const value_string tetra_D_CMCE_PDU_vals[] = {
7937 { 0, "d-Alert" },
7938 { 1, "d-Call-Proceeding" },
7939 { 2, "d-Connect" },
7940 { 3, "d-Connect-Ack" },
7941 { 4, "d-Disconnect" },
7942 { 5, "d-Info" },
7943 { 6, "d-Release" },
7944 { 7, "d-Setup" },
7945 { 8, "d-Status" },
7946 { 9, "d-Tx-Ceased" },
7947 { 10, "d-Tx-Continue" },
7948 { 11, "d-Tx-Granted" },
7949 { 12, "d-Tx-Wait" },
7950 { 13, "d-Tx-Interrupt" },
7951 { 14, "d-Call-Restore" },
7952 { 15, "d-SDS-Data" },
7953 { 16, "d-Facility" },
7954 { 0, NULL }
7957 static const per_choice_t D_CMCE_PDU_choice[] = {
7958 { 0, &hf_tetra_d_Alert , ASN1_NO_EXTENSIONS , dissect_tetra_D_ALERT },
7959 { 1, &hf_tetra_d_Call_Proceeding, ASN1_NO_EXTENSIONS , dissect_tetra_D_CALL_PROCEEDING },
7960 { 2, &hf_tetra_d_Connect , ASN1_NO_EXTENSIONS , dissect_tetra_D_CONNECT },
7961 { 3, &hf_tetra_d_Connect_Ack , ASN1_NO_EXTENSIONS , dissect_tetra_D_CONNECT_ACK },
7962 { 4, &hf_tetra_d_Disconnect , ASN1_NO_EXTENSIONS , dissect_tetra_D_DISCONNECT },
7963 { 5, &hf_tetra_d_Info , ASN1_NO_EXTENSIONS , dissect_tetra_D_INFO },
7964 { 6, &hf_tetra_d_Release , ASN1_NO_EXTENSIONS , dissect_tetra_D_RELEASE },
7965 { 7, &hf_tetra_d_Setup , ASN1_NO_EXTENSIONS , dissect_tetra_D_SETUP },
7966 { 8, &hf_tetra_d_Status , ASN1_NO_EXTENSIONS , dissect_tetra_D_STATUS },
7967 { 9, &hf_tetra_d_Tx_Ceased , ASN1_NO_EXTENSIONS , dissect_tetra_D_TX_CEASED },
7968 { 10, &hf_tetra_d_Tx_Continue , ASN1_NO_EXTENSIONS , dissect_tetra_D_TX_CONTINUE },
7969 { 11, &hf_tetra_d_Tx_Granted , ASN1_NO_EXTENSIONS , dissect_tetra_D_TX_GRANTED },
7970 { 12, &hf_tetra_d_Tx_Wait , ASN1_NO_EXTENSIONS , dissect_tetra_D_TX_WAIT },
7971 { 13, &hf_tetra_d_Tx_Interrupt, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
7972 { 14, &hf_tetra_d_Call_Restore, ASN1_NO_EXTENSIONS , dissect_tetra_D_CALL_RESTORE },
7973 { 15, &hf_tetra_d_SDS_Data , ASN1_NO_EXTENSIONS , dissect_tetra_D_SDS_DATA },
7974 { 16, &hf_tetra_d_Facility , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
7975 { 0, NULL, 0, NULL }
7978 static int
7979 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_) {
7980 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7981 ett_tetra_D_CMCE_PDU, D_CMCE_PDU_choice,
7982 NULL);
7984 return offset;
7988 static const value_string tetra_T_optional_elements_02_vals[] = {
7989 { 0, "no-type2" },
7990 { 1, "sdu" },
7991 { 0, NULL }
7994 static const per_choice_t T_optional_elements_02_choice[] = {
7995 { 0, &hf_tetra_no_type2 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
7996 { 1, &hf_tetra_sdu , ASN1_NO_EXTENSIONS , dissect_tetra_BIT_STRING },
7997 { 0, NULL, 0, NULL }
8000 static int
8001 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_) {
8002 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8003 ett_tetra_T_optional_elements_02, T_optional_elements_02_choice,
8004 NULL);
8006 return offset;
8010 static const per_sequence_t D_NEW_CELL_sequence[] = {
8011 { &hf_tetra_pdu_type_02 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
8012 { &hf_tetra_channel_command_valid, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
8013 { &hf_tetra_optional_elements_02, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_02 },
8014 { NULL, 0, 0, NULL }
8017 static int
8018 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_) {
8019 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8020 ett_tetra_D_NEW_CELL, D_NEW_CELL_sequence);
8022 return offset;
8026 static const value_string tetra_T_optional_elements_03_vals[] = {
8027 { 0, "no-type2" },
8028 { 1, "sdu" },
8029 { 0, NULL }
8032 static const per_choice_t T_optional_elements_03_choice[] = {
8033 { 0, &hf_tetra_no_type2 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
8034 { 1, &hf_tetra_sdu , ASN1_NO_EXTENSIONS , dissect_tetra_BIT_STRING },
8035 { 0, NULL, 0, NULL }
8038 static int
8039 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_) {
8040 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8041 ett_tetra_T_optional_elements_03, T_optional_elements_03_choice,
8042 NULL);
8044 return offset;
8048 static const per_sequence_t D_PREPARE_FAIL_sequence[] = {
8049 { &hf_tetra_pdu_type_02 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
8050 { &hf_tetra_fail_cause , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
8051 { &hf_tetra_optional_elements_03, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_03 },
8052 { NULL, 0, 0, NULL }
8055 static int
8056 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_) {
8057 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8058 ett_tetra_D_PREPARE_FAIL, D_PREPARE_FAIL_sequence);
8060 return offset;
8065 static int
8066 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_) {
8067 offset = dissect_per_integer(tvb, offset, actx, tree, hf_index, NULL);
8069 return offset;
8074 static int
8075 dissect_tetra_T_reserved(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8076 offset = dissect_per_integer(tvb, offset, actx, tree, hf_index, NULL);
8078 return offset;
8082 static const per_sequence_t TETRA_NETWORK_TIME_sequence[] = {
8083 { &hf_tetra_network_time , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_network_time },
8084 { &hf_tetra_local_time_offset_sign, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
8085 { &hf_tetra_local_time_offset, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_63 },
8086 { &hf_tetra_year , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_63 },
8087 { &hf_tetra_reserved_04 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_reserved },
8088 { NULL, 0, 0, NULL }
8091 static int
8092 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_) {
8093 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8094 ett_tetra_TETRA_NETWORK_TIME, TETRA_NETWORK_TIME_sequence);
8096 return offset;
8100 static const value_string tetra_T_tetra_network_time_vals[] = {
8101 { 0, "none" },
8102 { 1, "tetra-network-time" },
8103 { 0, NULL }
8106 static const per_choice_t T_tetra_network_time_choice[] = {
8107 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
8108 { 1, &hf_tetra_tetra_network_time_01, ASN1_NO_EXTENSIONS , dissect_tetra_TETRA_NETWORK_TIME },
8109 { 0, NULL, 0, NULL }
8112 static int
8113 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_) {
8114 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8115 ett_tetra_T_tetra_network_time, T_tetra_network_time_choice,
8116 NULL);
8118 return offset;
8122 static const value_string tetra_T_number_of_neighbour_cells_vals[] = {
8123 { 0, "none" },
8124 { 1, "number-of-neighbour-cells" },
8125 { 0, NULL }
8128 static const per_choice_t T_number_of_neighbour_cells_choice[] = {
8129 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
8130 { 1, &hf_tetra_number_of_neighbour_cells_01, ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_7 },
8131 { 0, NULL, 0, NULL }
8134 static int
8135 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_) {
8136 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8137 ett_tetra_T_number_of_neighbour_cells, T_number_of_neighbour_cells_choice,
8138 NULL);
8140 return offset;
8144 static const per_sequence_t T_type2_parameters_02_sequence[] = {
8145 { &hf_tetra_tetra_network_time, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_tetra_network_time },
8146 { &hf_tetra_number_of_neighbour_cells, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_number_of_neighbour_cells },
8147 { NULL, 0, 0, NULL }
8150 static int
8151 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_) {
8152 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8153 ett_tetra_T_type2_parameters_02, T_type2_parameters_02_sequence);
8155 return offset;
8159 static const value_string tetra_T_optional_elements_04_vals[] = {
8160 { 0, "no-type2" },
8161 { 1, "type2-parameters" },
8162 { 0, NULL }
8165 static const per_choice_t T_optional_elements_04_choice[] = {
8166 { 0, &hf_tetra_no_type2 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
8167 { 1, &hf_tetra_type2_parameters_02, ASN1_NO_EXTENSIONS , dissect_tetra_T_type2_parameters_02 },
8168 { 0, NULL, 0, NULL }
8171 static int
8172 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_) {
8173 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8174 ett_tetra_T_optional_elements_04, T_optional_elements_04_choice,
8175 NULL);
8177 return offset;
8181 static const per_sequence_t D_NWRK_BRDADCAST_sequence[] = {
8182 { &hf_tetra_pdu_type_02 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
8183 { &hf_tetra_cell_re_select_parameters, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_65535 },
8184 { &hf_tetra_cell_service_level, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
8185 { &hf_tetra_optional_elements_04, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_04 },
8186 { NULL, 0, 0, NULL }
8189 static int
8190 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_) {
8191 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8192 ett_tetra_D_NWRK_BRDADCAST, D_NWRK_BRDADCAST_sequence);
8194 return offset;
8198 static const per_sequence_t D_RESTORE_ACK_sequence[] = {
8199 { &hf_tetra_pdu_type_02 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
8200 { &hf_tetra_sdu , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_BIT_STRING },
8201 { NULL, 0, 0, NULL }
8204 static int
8205 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_) {
8206 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8207 ett_tetra_D_RESTORE_ACK, D_RESTORE_ACK_sequence);
8209 return offset;
8213 static const per_sequence_t D_RESTORE_FAIL_sequence[] = {
8214 { &hf_tetra_pdu_type_02 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
8215 { &hf_tetra_fail_cause , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
8216 { NULL, 0, 0, NULL }
8219 static int
8220 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_) {
8221 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8222 ett_tetra_D_RESTORE_FAIL, D_RESTORE_FAIL_sequence);
8224 return offset;
8228 static const value_string tetra_DMLE_PDU_vals[] = {
8229 { 0, "d-new-cell" },
8230 { 1, "d-prepare-fail" },
8231 { 2, "d-nwrk-broadcast" },
8232 { 3, "dmle-reserved1" },
8233 { 4, "d-restore-ack" },
8234 { 5, "d-restore-fail" },
8235 { 6, "dmle-reserved2" },
8236 { 7, "dmle-reserved3" },
8237 { 0, NULL }
8240 static const per_choice_t DMLE_PDU_choice[] = {
8241 { 0, &hf_tetra_d_new_cell , ASN1_NO_EXTENSIONS , dissect_tetra_D_NEW_CELL },
8242 { 1, &hf_tetra_d_prepare_fail, ASN1_NO_EXTENSIONS , dissect_tetra_D_PREPARE_FAIL },
8243 { 2, &hf_tetra_d_nwrk_broadcast, ASN1_NO_EXTENSIONS , dissect_tetra_D_NWRK_BRDADCAST },
8244 { 3, &hf_tetra_dmle_reserved1, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
8245 { 4, &hf_tetra_d_restore_ack , ASN1_NO_EXTENSIONS , dissect_tetra_D_RESTORE_ACK },
8246 { 5, &hf_tetra_d_restore_fail, ASN1_NO_EXTENSIONS , dissect_tetra_D_RESTORE_FAIL },
8247 { 6, &hf_tetra_dmle_reserved2, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
8248 { 7, &hf_tetra_dmle_reserved3, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
8249 { 0, NULL, 0, NULL }
8252 static int
8253 dissect_tetra_DMLE_PDU(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8254 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8255 ett_tetra_DMLE_PDU, DMLE_PDU_choice,
8256 NULL);
8258 return offset;
8262 static const value_string tetra_D_MLE_PDU_vals[] = {
8263 { 0, "u-mle-reserved1" },
8264 { 1, "mm" },
8265 { 2, "cmce" },
8266 { 3, "u-mle-reserved2" },
8267 { 4, "sndcp" },
8268 { 5, "mle" },
8269 { 6, "tetra-management-entity-protocol" },
8270 { 7, "u-mle-reserved3" },
8271 { 0, NULL }
8274 static const per_choice_t D_MLE_PDU_choice[] = {
8275 { 0, &hf_tetra_u_mle_reserved1, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
8276 { 1, &hf_tetra_mm_01 , ASN1_NO_EXTENSIONS , dissect_tetra_D_MM_PDU },
8277 { 2, &hf_tetra_cmce_01 , ASN1_NO_EXTENSIONS , dissect_tetra_D_CMCE_PDU },
8278 { 3, &hf_tetra_u_mle_reserved2, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
8279 { 4, &hf_tetra_sndcp , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
8280 { 5, &hf_tetra_mle_01 , ASN1_NO_EXTENSIONS , dissect_tetra_DMLE_PDU },
8281 { 6, &hf_tetra_tetra_management_entity_protocol, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
8282 { 7, &hf_tetra_u_mle_reserved3, ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
8283 { 0, NULL, 0, NULL }
8286 static int
8287 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_) {
8288 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8289 ett_tetra_D_MLE_PDU, D_MLE_PDU_choice,
8290 NULL);
8292 return offset;
8296 static const per_sequence_t D_BL_ADATA_sequence[] = {
8297 { &hf_tetra_nr , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
8298 { &hf_tetra_ns , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
8299 { &hf_tetra_tl_sdu_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_D_MLE_PDU },
8300 { NULL, 0, 0, NULL }
8303 static int
8304 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_) {
8305 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8306 ett_tetra_D_BL_ADATA, D_BL_ADATA_sequence);
8308 return offset;
8312 static const per_sequence_t D_BL_DATA_sequence[] = {
8313 { &hf_tetra_ns , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
8314 { &hf_tetra_tl_sdu_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_D_MLE_PDU },
8315 { NULL, 0, 0, NULL }
8318 static int
8319 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_) {
8320 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8321 ett_tetra_D_BL_DATA, D_BL_DATA_sequence);
8323 return offset;
8327 static const per_sequence_t D_BL_ACK_sequence[] = {
8328 { &hf_tetra_nr , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
8329 { &hf_tetra_tl_sdu_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_D_MLE_PDU },
8330 { NULL, 0, 0, NULL }
8333 static int
8334 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_) {
8335 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8336 ett_tetra_D_BL_ACK, D_BL_ACK_sequence);
8338 return offset;
8342 static const per_sequence_t D_BL_ADATA_FCS_sequence[] = {
8343 { &hf_tetra_nr , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
8344 { &hf_tetra_ns , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
8345 { &hf_tetra_tl_sdu_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_D_MLE_PDU },
8346 { &hf_tetra_fcs , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_OCTET_STRING_SIZE_4 },
8347 { NULL, 0, 0, NULL }
8350 static int
8351 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_) {
8352 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8353 ett_tetra_D_BL_ADATA_FCS, D_BL_ADATA_FCS_sequence);
8355 return offset;
8359 static const per_sequence_t D_BL_DATA_FCS_sequence[] = {
8360 { &hf_tetra_ns , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
8361 { &hf_tetra_tl_sdu_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_D_MLE_PDU },
8362 { &hf_tetra_fcs , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_OCTET_STRING_SIZE_4 },
8363 { NULL, 0, 0, NULL }
8366 static int
8367 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_) {
8368 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8369 ett_tetra_D_BL_DATA_FCS, D_BL_DATA_FCS_sequence);
8371 return offset;
8375 static const per_sequence_t D_MLE_PDU_FCS_sequence[] = {
8376 { &hf_tetra_d_mle_pdu , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_D_MLE_PDU },
8377 { &hf_tetra_fcs , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_OCTET_STRING_SIZE_4 },
8378 { NULL, 0, 0, NULL }
8381 static int
8382 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_) {
8383 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8384 ett_tetra_D_MLE_PDU_FCS, D_MLE_PDU_FCS_sequence);
8386 return offset;
8390 static const per_sequence_t D_BL_ACK_FCS_sequence[] = {
8391 { &hf_tetra_nr , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
8392 { &hf_tetra_tl_sdu_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_D_MLE_PDU },
8393 { &hf_tetra_fcs , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_OCTET_STRING_SIZE_4 },
8394 { NULL, 0, 0, NULL }
8397 static int
8398 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_) {
8399 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8400 ett_tetra_D_BL_ACK_FCS, D_BL_ACK_FCS_sequence);
8402 return offset;
8406 static const value_string tetra_D_LLC_PDU_vals[] = {
8407 { 0, "bl-adata" },
8408 { 1, "bl-data" },
8409 { 2, "bl-udata" },
8410 { 3, "bl-ack" },
8411 { 4, "bl-adata-fcs" },
8412 { 5, "bl-data-fcs" },
8413 { 6, "bl-udata-fcs" },
8414 { 7, "bl-ack-fcs" },
8415 { 8, "al-setup" },
8416 { 9, "al-data" },
8417 { 10, "al-udata" },
8418 { 11, "al-ack" },
8419 { 12, "al-reconnect" },
8420 { 13, "reserve1" },
8421 { 14, "reserve2" },
8422 { 15, "al-disc" },
8423 { 0, NULL }
8426 static const per_choice_t D_LLC_PDU_choice[] = {
8427 { 0, &hf_tetra_bl_adata_01 , ASN1_NO_EXTENSIONS , dissect_tetra_D_BL_ADATA },
8428 { 1, &hf_tetra_bl_data_01 , ASN1_NO_EXTENSIONS , dissect_tetra_D_BL_DATA },
8429 { 2, &hf_tetra_bl_udata_01 , ASN1_NO_EXTENSIONS , dissect_tetra_D_MLE_PDU },
8430 { 3, &hf_tetra_bl_ack_01 , ASN1_NO_EXTENSIONS , dissect_tetra_D_BL_ACK },
8431 { 4, &hf_tetra_bl_adata_fcs_01, ASN1_NO_EXTENSIONS , dissect_tetra_D_BL_ADATA_FCS },
8432 { 5, &hf_tetra_bl_data_fcs_01, ASN1_NO_EXTENSIONS , dissect_tetra_D_BL_DATA_FCS },
8433 { 6, &hf_tetra_bl_udata_fcs_01, ASN1_NO_EXTENSIONS , dissect_tetra_D_MLE_PDU_FCS },
8434 { 7, &hf_tetra_bl_ack_fcs_01 , ASN1_NO_EXTENSIONS , dissect_tetra_D_BL_ACK_FCS },
8435 { 8, &hf_tetra_al_setup , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
8436 { 9, &hf_tetra_al_data , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
8437 { 10, &hf_tetra_al_udata , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
8438 { 11, &hf_tetra_al_ack , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
8439 { 12, &hf_tetra_al_reconnect , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
8440 { 13, &hf_tetra_reserve1 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
8441 { 14, &hf_tetra_reserve2 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
8442 { 15, &hf_tetra_al_disc , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
8443 { 0, NULL, 0, NULL }
8446 static int
8447 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_) {
8448 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8449 ett_tetra_D_LLC_PDU, D_LLC_PDU_choice,
8450 NULL);
8452 return offset;
8456 static const per_sequence_t OTHER_DATA_sequence[] = {
8457 { &hf_tetra_power_control , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_power_control },
8458 { &hf_tetra_slot_granting_02, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_slot_granting_02 },
8459 { &hf_tetra_channel_allocation_02, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_channel_allocation_02 },
8460 { &hf_tetra_tm_sdu_09 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_D_LLC_PDU },
8461 { NULL, 0, 0, NULL }
8464 static int
8465 dissect_tetra_OTHER_DATA(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8466 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8467 ett_tetra_OTHER_DATA, OTHER_DATA_sequence);
8469 return offset;
8473 static const per_sequence_t SSI_NEED_sequence[] = {
8474 { &hf_tetra_ssi , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16777215 },
8475 { &hf_tetra_other , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_OTHER_DATA },
8476 { NULL, 0, 0, NULL }
8479 static int
8480 dissect_tetra_SSI_NEED(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8481 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8482 ett_tetra_SSI_NEED, SSI_NEED_sequence);
8484 return offset;
8488 static const per_sequence_t EVENT_NEED_sequence[] = {
8489 { &hf_tetra_eventlabel , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1023 },
8490 { &hf_tetra_other , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_OTHER_DATA },
8491 { NULL, 0, 0, NULL }
8494 static int
8495 dissect_tetra_EVENT_NEED(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8496 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8497 ett_tetra_EVENT_NEED, EVENT_NEED_sequence);
8499 return offset;
8503 static const per_sequence_t USSI_NEED_sequence[] = {
8504 { &hf_tetra_ussi , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16777215 },
8505 { &hf_tetra_other , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_OTHER_DATA },
8506 { NULL, 0, 0, NULL }
8509 static int
8510 dissect_tetra_USSI_NEED(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8511 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8512 ett_tetra_USSI_NEED, USSI_NEED_sequence);
8514 return offset;
8518 static const per_sequence_t SMI_NEED_sequence[] = {
8519 { &hf_tetra_smi , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16777215 },
8520 { &hf_tetra_other , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_OTHER_DATA },
8521 { NULL, 0, 0, NULL }
8524 static int
8525 dissect_tetra_SMI_NEED(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8526 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8527 ett_tetra_SMI_NEED, SMI_NEED_sequence);
8529 return offset;
8533 static const per_sequence_t SSI_EVENT_NEED_sequence[] = {
8534 { &hf_tetra_ssi , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16777215 },
8535 { &hf_tetra_ventlabel , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1023 },
8536 { &hf_tetra_other , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_OTHER_DATA },
8537 { NULL, 0, 0, NULL }
8540 static int
8541 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_) {
8542 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8543 ett_tetra_SSI_EVENT_NEED, SSI_EVENT_NEED_sequence);
8545 return offset;
8549 static const per_sequence_t SSI_USAGE_NEED_sequence[] = {
8550 { &hf_tetra_ssi , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16777215 },
8551 { &hf_tetra_usage_maker , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_63 },
8552 { &hf_tetra_other , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_OTHER_DATA },
8553 { NULL, 0, 0, NULL }
8556 static int
8557 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_) {
8558 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8559 ett_tetra_SSI_USAGE_NEED, SSI_USAGE_NEED_sequence);
8561 return offset;
8566 static int
8567 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_) {
8568 offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
8569 34, 34, FALSE, NULL);
8571 return offset;
8575 static const per_sequence_t SMI_EVENT_NEED_sequence[] = {
8576 { &hf_tetra_smi_eventlabel, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_BIT_STRING_SIZE_34 },
8577 { &hf_tetra_other , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_OTHER_DATA },
8578 { NULL, 0, 0, NULL }
8581 static int
8582 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_) {
8583 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8584 ett_tetra_SMI_EVENT_NEED, SMI_EVENT_NEED_sequence);
8586 return offset;
8590 static const value_string tetra_AddressMacResource_vals[] = {
8591 { 0, "null-pdu" },
8592 { 1, "ssi" },
8593 { 2, "eventLabel" },
8594 { 3, "ussi" },
8595 { 4, "smi" },
8596 { 5, "ssi-eventLabel" },
8597 { 6, "ssi-usage-maker" },
8598 { 7, "smi-eventLabel" },
8599 { 0, NULL }
8602 static const per_choice_t AddressMacResource_choice[] = {
8603 { 0, &hf_tetra_null_pdu , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
8604 { 1, &hf_tetra_ssi_01 , ASN1_NO_EXTENSIONS , dissect_tetra_SSI_NEED },
8605 { 2, &hf_tetra_eventLabel_01 , ASN1_NO_EXTENSIONS , dissect_tetra_EVENT_NEED },
8606 { 3, &hf_tetra_ussi_01 , ASN1_NO_EXTENSIONS , dissect_tetra_USSI_NEED },
8607 { 4, &hf_tetra_smi_01 , ASN1_NO_EXTENSIONS , dissect_tetra_SMI_NEED },
8608 { 5, &hf_tetra_ssi_eventLabel, ASN1_NO_EXTENSIONS , dissect_tetra_SSI_EVENT_NEED },
8609 { 6, &hf_tetra_ssi_usage_maker, ASN1_NO_EXTENSIONS , dissect_tetra_SSI_USAGE_NEED },
8610 { 7, &hf_tetra_smi_eventLabel, ASN1_NO_EXTENSIONS , dissect_tetra_SMI_EVENT_NEED },
8611 { 0, NULL, 0, NULL }
8614 static int
8615 dissect_tetra_AddressMacResource(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8616 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8617 ett_tetra_AddressMacResource, AddressMacResource_choice,
8618 NULL);
8620 return offset;
8624 static const per_sequence_t MAC_RESOURCE_sequence[] = {
8625 { &hf_tetra_pdu_type , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
8626 { &hf_tetra_fill_bit_indication, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Fill_Bit_Indication },
8627 { &hf_tetra_position_of_grant, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_Position_Of_Grant },
8628 { &hf_tetra_encryption_mode, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
8629 { &hf_tetra_access_ack , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_access_ack },
8630 { &hf_tetra_lengthIndication_03, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_LengthIndicationMacResource },
8631 { &hf_tetra_address_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_AddressMacResource },
8632 { NULL, 0, 0, NULL }
8635 static int
8636 dissect_tetra_MAC_RESOURCE(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8637 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8638 ett_tetra_MAC_RESOURCE, MAC_RESOURCE_sequence);
8640 return offset;
8645 static int
8646 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_) {
8647 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
8648 0U, 33554431U, NULL, FALSE);
8650 return offset;
8654 static const value_string tetra_T_optional_field_vals[] = {
8655 { 0, "none" },
8656 { 1, "class-bitmap" },
8657 { 2, "gssi" },
8658 { 3, "reserved" },
8659 { 0, NULL }
8662 static const per_choice_t T_optional_field_choice[] = {
8663 { 0, &hf_tetra_none , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
8664 { 1, &hf_tetra_class_bitmap , ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_65535 },
8665 { 2, &hf_tetra_gssi , ASN1_NO_EXTENSIONS , dissect_tetra_INTEGER_0_33554431 },
8666 { 3, &hf_tetra_reserved_03 , ASN1_NO_EXTENSIONS , dissect_tetra_NULL },
8667 { 0, NULL, 0, NULL }
8670 static int
8671 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_) {
8672 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8673 ett_tetra_T_optional_field, T_optional_field_choice,
8674 NULL);
8676 return offset;
8680 static const per_sequence_t MAC_ACCESS_DEFINE_sequence[] = {
8681 { &hf_tetra_pdu_type , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
8682 { &hf_tetra_broadcast_type, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
8683 { &hf_tetra_broadcast_channel, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
8684 { &hf_tetra_access_code , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
8685 { &hf_tetra_imm_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_15 },
8686 { &hf_tetra_wt_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_15 },
8687 { &hf_tetra_nu_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_15 },
8688 { &hf_tetra_frame_len_factor_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
8689 { &hf_tetra_timeslot_pointer_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_15 },
8690 { &hf_tetra_min_priority , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
8691 { &hf_tetra_optional_field, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_field },
8692 { &hf_tetra_filler_bits , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
8693 { NULL, 0, 0, NULL }
8696 static int
8697 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_) {
8698 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8699 ett_tetra_MAC_ACCESS_DEFINE, MAC_ACCESS_DEFINE_sequence);
8701 return offset;
8704 /*--- PDUs ---*/
8706 static void dissect_AACH_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
8707 asn1_ctx_t asn1_ctx;
8708 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, FALSE, pinfo);
8709 dissect_tetra_AACH(tvb, 0, &asn1_ctx, tree, hf_tetra_AACH_PDU);
8711 static void dissect_BSCH_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
8712 asn1_ctx_t asn1_ctx;
8713 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, FALSE, pinfo);
8714 dissect_tetra_BSCH(tvb, 0, &asn1_ctx, tree, hf_tetra_BSCH_PDU);
8716 static void dissect_BNCH_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
8717 asn1_ctx_t asn1_ctx;
8718 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, FALSE, pinfo);
8719 dissect_tetra_BNCH(tvb, 0, &asn1_ctx, tree, hf_tetra_BNCH_PDU);
8721 static void dissect_MAC_ACCESS_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
8722 asn1_ctx_t asn1_ctx;
8723 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, FALSE, pinfo);
8724 dissect_tetra_MAC_ACCESS(tvb, 0, &asn1_ctx, tree, hf_tetra_MAC_ACCESS_PDU);
8726 static void dissect_MAC_DATA_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
8727 asn1_ctx_t asn1_ctx;
8728 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, FALSE, pinfo);
8729 dissect_tetra_MAC_DATA(tvb, 0, &asn1_ctx, tree, hf_tetra_MAC_DATA_PDU);
8731 static void dissect_MAC_FRAG_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
8732 asn1_ctx_t asn1_ctx;
8733 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, FALSE, pinfo);
8734 dissect_tetra_MAC_FRAG(tvb, 0, &asn1_ctx, tree, hf_tetra_MAC_FRAG_PDU);
8736 static void dissect_MAC_FRAG120_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
8737 asn1_ctx_t asn1_ctx;
8738 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, FALSE, pinfo);
8739 dissect_tetra_MAC_FRAG120(tvb, 0, &asn1_ctx, tree, hf_tetra_MAC_FRAG120_PDU);
8741 static void dissect_MAC_END_UPLINK_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
8742 asn1_ctx_t asn1_ctx;
8743 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, FALSE, pinfo);
8744 dissect_tetra_MAC_END_UPLINK(tvb, 0, &asn1_ctx, tree, hf_tetra_MAC_END_UPLINK_PDU);
8746 static void dissect_MAC_END_UP114_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
8747 asn1_ctx_t asn1_ctx;
8748 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, FALSE, pinfo);
8749 dissect_tetra_MAC_END_UP114(tvb, 0, &asn1_ctx, tree, hf_tetra_MAC_END_UP114_PDU);
8751 static void dissect_MAC_END_HU_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
8752 asn1_ctx_t asn1_ctx;
8753 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, FALSE, pinfo);
8754 dissect_tetra_MAC_END_HU(tvb, 0, &asn1_ctx, tree, hf_tetra_MAC_END_HU_PDU);
8756 static void dissect_MAC_END_DOWNLINK_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
8757 asn1_ctx_t asn1_ctx;
8758 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, FALSE, pinfo);
8759 dissect_tetra_MAC_END_DOWNLINK(tvb, 0, &asn1_ctx, tree, hf_tetra_MAC_END_DOWNLINK_PDU);
8761 static void dissect_MAC_END_DOWN111_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
8762 asn1_ctx_t asn1_ctx;
8763 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, FALSE, pinfo);
8764 dissect_tetra_MAC_END_DOWN111(tvb, 0, &asn1_ctx, tree, hf_tetra_MAC_END_DOWN111_PDU);
8766 static void dissect_MAC_RESOURCE_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
8767 asn1_ctx_t asn1_ctx;
8768 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, FALSE, pinfo);
8769 dissect_tetra_MAC_RESOURCE(tvb, 0, &asn1_ctx, tree, hf_tetra_MAC_RESOURCE_PDU);
8771 static void dissect_MAC_ACCESS_DEFINE_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
8772 asn1_ctx_t asn1_ctx;
8773 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, FALSE, pinfo);
8774 dissect_tetra_MAC_ACCESS_DEFINE(tvb, 0, &asn1_ctx, tree, hf_tetra_MAC_ACCESS_DEFINE_PDU);
8778 /*--- End of included file: packet-tetra-fn.c ---*/
8779 #line 100 "../../asn1/tetra/packet-tetra-template.c"
8781 static const value_string channeltypenames[] = {
8782 { 0, "Reserved" },
8783 { 1, "AACH" },
8784 { 2, "SCH/F" },
8785 { 3, "SCH/HD" },
8786 { 4, "Unknown" },
8787 { 5, "BSCH" },
8788 { 6, "BNCH" },
8789 { 7, "TCH/F" },
8790 { 8, "TCH/H" },
8791 { 9, "TCH4.8"},
8792 { 10, "TCH7.2"},
8793 { 11, "STCH"},
8794 { 0, NULL }
8797 static const value_string recvchanneltypenames[] = {
8798 { 0, "Reserved" },
8799 { 1, "AACH" },
8800 { 2, "SCH/F" },
8801 { 3, "SCH/HD" },
8802 { 4, "Unknown" },
8803 { 5, "BSCH" },
8804 { 6, "BNCH" },
8805 { 7, "TCH/F" },
8806 { 8, "TCH/H" },
8807 { 9, "TCH4.8"},
8808 { 10, "TCH7.2"},
8809 { 11, "STCH"},
8810 { 15, "SCH/HU"},
8811 { 0, NULL }
8814 /* Get the length of received pdu */
8815 static gint get_rx_pdu_length(guint32 channel_type)
8817 gint len = 0;
8819 switch(channel_type) {
8820 case TETRA_CHAN_AACH:
8821 len = 14;
8822 break;
8823 case TETRA_CHAN_SCH_F:
8824 len = 268;
8825 break;
8826 case TETRA_CHAN_SCH_D:
8827 len = 124; ;
8828 break;
8829 case TETRA_CHAN_BSCH:
8830 len = 60;
8831 break;
8832 case TETRA_CHAN_BNCH:
8833 len = 124;
8834 break;
8835 case TETRA_CHAN_TCH_F:
8836 len = 274;
8837 break;
8838 case TETRA_CHAN_TCH_H:
8839 len = 137;
8840 break;
8841 case TETRA_CHAN_TCH_2_4:
8842 len = 144;
8843 break;
8844 case TETRA_CHAN_TCH_4_8:
8845 len = 288;
8846 break;
8847 case TETRA_CHAN_STCH:
8848 len = 124;
8849 break;
8850 case TETRA_CHAN_SCH_HU:
8851 len = 92;
8852 break;
8853 default:
8854 len = 0;
8855 break;
8858 return len;
8861 /* Get the length of transmitted pdu */
8862 static gint get_tx_pdu_length(guint32 channel_type)
8864 gint len = 0;
8866 switch(channel_type) {
8867 case TETRA_CHAN_AACH:
8868 len = 14;
8869 break;
8870 case TETRA_CHAN_SCH_F:
8871 len = 268;
8872 break;
8873 case TETRA_CHAN_SCH_D:
8874 len = 124;
8875 break;
8876 case TETRA_CHAN_BSCH:
8877 len = 60;
8878 break;
8879 case TETRA_CHAN_BNCH:
8880 len = 124;
8881 break;
8882 case TETRA_CHAN_TCH_F:
8883 len = 274;
8884 break;
8885 case TETRA_CHAN_TCH_H:
8886 len = 137;
8887 break;
8888 case TETRA_CHAN_TCH_2_4:
8889 len = 144;
8890 break;
8891 case TETRA_CHAN_TCH_4_8:
8892 len = 288;
8893 break;
8894 case TETRA_CHAN_STCH:
8895 len = 124;
8896 break;
8899 return len;
8902 void tetra_dissect_pdu(int channel_type, int dir, tvbuff_t *pdu, proto_tree *tree, packet_info *pinfo)
8904 proto_item *tetra_sub_item;
8905 proto_tree *tetra_sub_tree;
8906 guint8 p;
8908 tetra_sub_item = proto_tree_add_item(tree, hf_tetra_pdu,
8909 pdu, 0, tvb_length(pdu), ENC_NA);
8911 tetra_sub_tree = proto_item_add_subtree(tetra_sub_item, ett_tetra);
8913 switch(channel_type) {
8914 case TETRA_CHAN_AACH:
8915 dissect_AACH_PDU(pdu, pinfo, tetra_sub_tree );
8916 break;
8917 case TETRA_CHAN_SCH_F:
8918 p = tvb_get_guint8(pdu, 0);
8919 switch(p >> 6) {
8920 case 0:
8921 if (dir == TETRA_DOWNLINK)
8922 dissect_MAC_RESOURCE_PDU(pdu, pinfo, tetra_sub_tree );
8923 else
8924 dissect_MAC_DATA_PDU(pdu, pinfo, tetra_sub_tree );
8925 break;
8926 case 1: /* MAC-FRAG or MAC-END */
8927 if((p >> 5) == 3) {
8928 if (dir == TETRA_DOWNLINK)
8929 dissect_MAC_END_DOWNLINK_PDU(pdu, pinfo, tetra_sub_tree );
8930 else
8931 dissect_MAC_END_UPLINK_PDU(pdu, pinfo, tetra_sub_tree);
8933 } else
8934 dissect_MAC_FRAG_PDU(pdu, pinfo, tetra_sub_tree );
8935 break;
8936 case 2:
8937 dissect_MAC_ACCESS_DEFINE_PDU(pdu, pinfo, tetra_sub_tree );
8938 break;
8940 break;
8941 case TETRA_CHAN_SCH_D:
8942 p = tvb_get_guint8(pdu, 0);
8943 switch(p >> 6) {
8944 case 0:
8945 dissect_MAC_RESOURCE_PDU(pdu, pinfo, tetra_sub_tree );
8946 break;
8947 case 1: /* MAC-FRAG or MAC-END */
8948 if((p >> 5) == 3)
8949 dissect_MAC_END_DOWN111_PDU(pdu, pinfo, tetra_sub_tree );
8950 else
8951 dissect_MAC_FRAG120_PDU(pdu, pinfo, tetra_sub_tree );
8952 break;
8953 case 2:
8954 dissect_MAC_ACCESS_DEFINE_PDU(pdu, pinfo, tetra_sub_tree );
8955 break;
8957 break;
8958 case TETRA_CHAN_SCH_HU:
8959 p = tvb_get_guint8(pdu, 0);
8960 switch(p >> 7) {
8961 case 0: /* MAC-ACCESS */
8962 dissect_MAC_ACCESS_PDU(pdu, pinfo, tetra_sub_tree);
8963 break;
8964 case 1: /* MAC-END-HU */
8965 dissect_MAC_END_HU_PDU(pdu, pinfo, tetra_sub_tree);
8966 break;
8968 break;
8969 case TETRA_CHAN_BSCH:
8970 col_append_sep_str(pinfo->cinfo, COL_INFO, NULL, "BSCH");
8971 dissect_BSCH_PDU(pdu, pinfo, tetra_sub_tree );
8972 break;
8973 case TETRA_CHAN_BNCH:
8974 col_append_sep_str(pinfo->cinfo, COL_INFO, NULL, "BNCH");
8975 dissect_BNCH_PDU(pdu, pinfo, tetra_sub_tree );
8976 break;
8977 case TETRA_CHAN_STCH:
8978 p = tvb_get_guint8(pdu, 0);
8979 switch(p >> 6) {
8980 case 0:
8981 dissect_MAC_RESOURCE_PDU(pdu, pinfo, tetra_sub_tree );
8982 break;
8983 case 1: /* MAC-FRAG or MAC-END */
8984 if((p >> 5) == 3) {
8985 if (dir == TETRA_DOWNLINK)
8986 dissect_MAC_END_DOWN111_PDU(pdu, pinfo, tetra_sub_tree );
8987 else
8988 dissect_MAC_END_UP114_PDU(pdu, pinfo, tetra_sub_tree);
8989 } else
8990 dissect_MAC_FRAG120_PDU(pdu, pinfo, tetra_sub_tree );
8991 break;
8992 case 2:
8993 dissect_MAC_ACCESS_DEFINE_PDU(pdu, pinfo, tetra_sub_tree );
8994 break;
8996 break;
8997 case TETRA_CHAN_TCH_F:
8998 col_append_sep_str(pinfo->cinfo, COL_INFO, NULL, "Voice");
8999 break;
9003 static void dissect_tetra_UNITDATA_IND(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tetra_tree, int offset)
9005 guint32 rxreg = 0;
9006 guint32 channels = 0, i;
9007 guint32 channel_type;
9008 gint pdu_offset = 0;
9009 proto_item *tetra_sub_item;
9010 proto_tree *tetra_header_tree = NULL;
9011 tvbuff_t *payload_tvb;
9013 /* Length */
9014 rxreg = tvb_get_letohl(tvb, offset);
9015 proto_tree_add_uint(tetra_tree, hf_tetra_len0, tvb, offset, 4, rxreg);
9017 /* RvSteR */
9018 offset += 4;
9019 rxreg = tvb_get_letohl(tvb, offset);
9020 proto_tree_add_uint(tetra_tree, hf_tetra_rvstr, tvb, offset, 4, rxreg);
9022 /* Logical channels */
9023 channels = rxreg & 0x3;
9024 tetra_sub_item = proto_tree_add_uint( tetra_tree, hf_tetra_channels, tvb, offset, 4, channels );
9025 tetra_header_tree = proto_item_add_subtree(tetra_sub_item, ett_tetra);
9026 if (channels > 3) {
9027 expert_add_info(pinfo, tetra_sub_item, &ei_tetra_channels_incorrect);
9028 channels = 3;
9031 pdu_offset = offset + 4;
9032 for(i = 0; i < channels; i++) {
9033 gint hf_channel[] = {
9034 hf_tetra_rxchannel1,
9035 hf_tetra_rxchannel2,
9036 hf_tetra_rxchannel3
9038 gint byte_len, bits_len, remaining_bits;
9040 /* Channel type */
9041 channel_type = (rxreg >> ((i + 1) * 4) ) & 0xf;
9042 proto_tree_add_uint( tetra_header_tree, hf_channel[i], tvb, offset, 4, channel_type);
9044 /* CRC */
9045 proto_tree_add_boolean( tetra_header_tree, hf_tetra_crc, tvb, offset, 4, !(rxreg >> (i + 2) & 0x01));
9047 /* PDU */
9048 bits_len = get_rx_pdu_length(channel_type);
9049 byte_len = bits_len >> 3;
9050 remaining_bits = bits_len % 8;
9051 if ((remaining_bits)!=0)
9052 byte_len++;
9054 payload_tvb = tvb_new_subset(tvb, pdu_offset, byte_len, byte_len);
9055 tetra_dissect_pdu(channel_type, TETRA_UPLINK, payload_tvb, tetra_header_tree, pinfo);
9057 if ((remaining_bits)!=0)
9058 byte_len--;
9059 pdu_offset += byte_len;
9063 void dissect_tetra_UNITDATA_REQ(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tetra_tree, int offset)
9065 guint32 txreg = 0;
9066 guint32 channels = 0, i;
9067 guint32 channel_type;
9068 gint pdu_offset = 0;
9069 proto_item *tetra_sub_item = NULL;
9070 proto_tree *tetra_header_tree = NULL;
9071 tvbuff_t *payload_tvb;
9073 /* TxR */
9074 txreg = tvb_get_letohl(tvb, offset);
9075 proto_tree_add_uint(tetra_tree, hf_tetra_txreg, tvb, offset, 4, txreg);
9077 /* Logical channels */
9078 channels = (txreg & 0x3) + 1;
9079 tetra_sub_item = proto_tree_add_uint( tetra_tree, hf_tetra_channels, tvb, offset, 4, channels );
9080 tetra_header_tree = proto_item_add_subtree(tetra_sub_item, ett_tetra);
9081 txreg >>= 2;
9082 /* Skip 0000B */
9083 if(channels == 2)
9084 txreg >>= 4;
9086 if (channels > 3) {
9087 expert_add_info(pinfo, tetra_sub_item, &ei_tetra_channels_incorrect);
9088 channels = 3;
9091 pdu_offset = offset + 4;
9092 for(i = 0; i < channels; i++) {
9093 gint hf_channel[] = {hf_tetra_channel1, hf_tetra_channel2, hf_tetra_channel3};
9094 gint byte_len, bits_len, remaining_bits;
9096 channel_type = txreg & 0xf;
9097 proto_tree_add_uint( tetra_header_tree, hf_channel[i], tvb, offset, 4, channel_type);
9098 txreg >>= 4;
9099 /* PDU */
9100 bits_len = get_tx_pdu_length(channel_type);
9101 byte_len = bits_len >> 3;
9102 remaining_bits = bits_len % 8;
9103 if ((remaining_bits)!=0)
9104 byte_len++;
9106 payload_tvb = tvb_new_subset(tvb, pdu_offset, byte_len, byte_len);
9107 tetra_dissect_pdu(channel_type, TETRA_DOWNLINK, payload_tvb, tetra_header_tree, pinfo);
9108 pdu_offset += byte_len;
9112 static void
9113 dissect_tetra(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
9116 proto_item *tetra_item = NULL;
9117 proto_item *tetra_sub_item = NULL;
9118 proto_tree *tetra_tree = NULL;
9119 proto_tree *tetra_header_tree = NULL;
9120 guint16 type = 0;
9121 guint8 carriernumber = -1;
9123 col_set_str(pinfo->cinfo, COL_PROTOCOL, PROTO_TAG_tetra);
9124 /* Clear out stuff in the info column */
9125 col_clear(pinfo->cinfo,COL_INFO);
9128 * This is not a good way of dissecting packets. The tvb length should
9129 * be sanity checked so we aren't going past the actual size of the buffer.
9131 type = tvb_get_guint8(tvb, 0);
9133 if(include_carrier_number) {
9134 carriernumber = tvb_get_guint8(tvb, 1);
9138 switch(type) {
9139 case 1:
9140 if(include_carrier_number)
9141 col_add_fstr(pinfo->cinfo, COL_INFO, "Tetra-UNITDATA-REQ, Carrier: %d",
9142 carriernumber);
9143 else
9144 col_add_fstr(pinfo->cinfo, COL_INFO, "Tetra-UNITDATA-REQ");
9145 break;
9146 case 2:
9147 if(include_carrier_number)
9148 col_add_fstr(pinfo->cinfo, COL_INFO, "Tetra-UNITDATA-IND, Carrier: %d",
9149 carriernumber);
9150 else
9151 col_add_fstr(pinfo->cinfo, COL_INFO, "Tetra-UNITDATA-IND");
9152 break;
9153 case 3:
9154 if(include_carrier_number)
9155 col_add_fstr(pinfo->cinfo, COL_INFO, "MAC-Timer, Carrier: %d",
9156 carriernumber);
9157 else
9158 col_add_fstr(pinfo->cinfo, COL_INFO, "MAC-Timer");
9159 break;
9160 case 127:
9161 if(include_carrier_number)
9162 col_add_fstr(pinfo->cinfo, COL_INFO, "Tetra-UNITDATA-IND Done, Carrier: %d",
9163 carriernumber);
9164 else
9165 col_add_fstr(pinfo->cinfo, COL_INFO, "Tetra-UNITDATA-IND Done");
9166 break;
9167 case 128:
9168 if(include_carrier_number)
9169 col_add_fstr(pinfo->cinfo, COL_INFO, "Tetra-UNITDATA-REQ Done, Carrier: %d",
9170 carriernumber);
9171 else
9172 col_add_fstr(pinfo->cinfo, COL_INFO, "Tetra-UNITDATA-REQ Done");
9173 break;
9174 default:
9175 col_add_fstr(pinfo->cinfo, COL_INFO, "Unknown command: %d", type);
9176 break;
9179 if (tree) { /* we are being asked for details */
9180 guint32 offset = 0;
9181 guint32 txtimer = 0;
9182 guint32 tslot = 0;
9184 tetra_item = proto_tree_add_item(tree, proto_tetra, tvb, 0, -1, ENC_NA);
9185 tetra_tree = proto_item_add_subtree(tetra_item, ett_tetra);
9187 offset ++;
9189 /* Carrier number */
9190 if(include_carrier_number) {
9191 proto_tree_add_uint(tetra_tree, hf_tetra_carriernumber, tvb, offset, 1, carriernumber);
9192 offset ++;
9195 /* Registers */
9196 tetra_sub_item = proto_tree_add_item( tetra_tree, hf_tetra_header, tvb, offset, -1, ENC_NA );
9197 tetra_header_tree = proto_item_add_subtree(tetra_sub_item, ett_tetra);
9199 /* Timer */
9200 txtimer = tvb_get_letohl(tvb, offset);
9201 tetra_sub_item = proto_tree_add_item(tetra_header_tree, hf_tetra_timer, tvb, offset, 4, ENC_LITTLE_ENDIAN);
9202 tslot = ((txtimer & 0x7800) >> 11);
9203 if(tslot==4)
9204 tslot = 3;
9205 if(tslot==8)
9206 tslot = 4;
9207 proto_item_append_text(tetra_sub_item, " (Multiple frame: %d, Frame: %d, Slot: %d)",
9208 txtimer & 0x3F, (txtimer & 0x7c0) >> 6,
9209 tslot);
9211 offset += 4;
9213 switch(type) {
9214 case 1: /* tetra-UNITDATA-REQ */
9215 case 128: /* tetra-UNITDATA-REQ Done */
9216 dissect_tetra_UNITDATA_REQ(tvb, pinfo, tetra_header_tree, offset);
9217 break;
9218 case 2: /* tetra-UNITDATA-IND */
9219 case 127: /* tetra-UNITDATA-IND Done */
9220 dissect_tetra_UNITDATA_IND(tvb, pinfo, tetra_header_tree, offset);
9221 break;
9222 case 3: /* MAC-Timer */
9223 break;
9224 default:
9225 break;
9230 void proto_reg_handoff_tetra(void)
9232 static gboolean initialized=FALSE;
9234 if (!initialized) {
9235 data_handle = find_dissector("data");
9236 tetra_handle = create_dissector_handle(dissect_tetra, proto_tetra);
9237 dissector_add_uint("udp.port", global_tetra_port, tetra_handle);
9243 void proto_register_tetra (void)
9245 module_t *tetra_module;
9246 expert_module_t* expert_tetra;
9249 * A header field is something you can search/filter on.
9251 * We create a structure to register our fields. It consists of an
9252 * array of hf_register_info structures, each of which are of the format
9253 * {&(field id), {name, abbrev, type, display, strings, bitmask, blurb, HFILL}}.
9255 static hf_register_info hf[] = {
9256 { &hf_tetra,
9257 { "Data", "tetra.data", FT_NONE, BASE_NONE, NULL, 0x0,
9258 "tetra PDU", HFILL }},
9259 { &hf_tetra_header,
9260 { "Registers", "tetra.header", FT_NONE, BASE_NONE, NULL, 0x0,
9261 "TETRA Registers", HFILL }},
9262 { &hf_tetra_channels,
9263 { "Logical Channels", "tetra.channels", FT_UINT8, BASE_DEC, NULL, 0x0,
9264 "The amount of logical channels", HFILL }},
9265 { &hf_tetra_channel1,
9266 { "Channel 1", "tetra.txchannel1", FT_UINT8, BASE_DEC, VALS(channeltypenames), 0x0,
9267 "Logical channels type", HFILL }},
9268 { &hf_tetra_channel2,
9269 { "Channel 2", "tetra.txchannel2", FT_UINT8, BASE_DEC, VALS(channeltypenames), 0x0,
9270 "Logical channels type", HFILL }},
9271 { &hf_tetra_channel3,
9272 { "Channel 3", "tetra.txchannel3", FT_UINT8, BASE_DEC, VALS(channeltypenames), 0x0,
9273 "Logical channels type", HFILL }},
9274 { &hf_tetra_txreg,
9275 { "TxR", "tetra.txreg", FT_UINT16, BASE_HEX, NULL, 0x0,
9276 "TX Register", HFILL }},
9277 { &hf_tetra_rvstr,
9278 { "RvSteR", "tetra.rvster", FT_UINT16, BASE_HEX, NULL, 0x0,
9279 "Receive Status Register", HFILL }},
9280 { &hf_tetra_carriernumber,
9281 { "Carrier Number", "tetra.carrier", FT_UINT8, BASE_DEC, NULL, 0x0,
9282 NULL, HFILL }},
9283 { &hf_tetra_rxchannel1,
9284 { "Channel 1", "tetra.rxchannel1", FT_UINT8, BASE_DEC, VALS(recvchanneltypenames), 0x0,
9285 "Logical channels type", HFILL }},
9286 { &hf_tetra_rxchannel2,
9287 { "Channel 2", "tetra.rxchannel2", FT_UINT8, BASE_DEC, VALS(recvchanneltypenames), 0x0,
9288 "Logical channels type", HFILL }},
9289 { &hf_tetra_rxchannel3,
9290 { "Channel 3", "tetra.rxchannel3", FT_UINT8, BASE_DEC, VALS(recvchanneltypenames), 0x0,
9291 "Logical channels type", HFILL }},
9292 { &hf_tetra_timer,
9293 { "Timer", "tetra.timer", FT_UINT16, BASE_HEX, NULL, 0x0,
9294 "Timer Register", HFILL }},
9295 { &hf_tetra_crc,
9296 { "CRC", "tetra.crc", FT_BOOLEAN, BASE_NONE, NULL, 0x0,
9297 "CRC result", HFILL }},
9298 { &hf_tetra_len0,
9299 { "Length", "tetra.len0", FT_UINT16, BASE_DEC, NULL, 0x0,
9300 "Length of the PDU", HFILL }},
9301 { &hf_tetra_pdu,
9302 { "PDU", "tetra.pdu", FT_BYTES, BASE_NONE, NULL, 0x0,
9303 NULL, HFILL }} ,
9306 /*--- Included file: packet-tetra-hfarr.c ---*/
9307 #line 1 "../../asn1/tetra/packet-tetra-hfarr.c"
9308 { &hf_tetra_AACH_PDU,
9309 { "AACH", "tetra.AACH_element",
9310 FT_NONE, BASE_NONE, NULL, 0,
9311 NULL, HFILL }},
9312 { &hf_tetra_BSCH_PDU,
9313 { "BSCH", "tetra.BSCH_element",
9314 FT_NONE, BASE_NONE, NULL, 0,
9315 NULL, HFILL }},
9316 { &hf_tetra_BNCH_PDU,
9317 { "BNCH", "tetra.BNCH_element",
9318 FT_NONE, BASE_NONE, NULL, 0,
9319 NULL, HFILL }},
9320 { &hf_tetra_MAC_ACCESS_PDU,
9321 { "MAC-ACCESS", "tetra.MAC_ACCESS_element",
9322 FT_NONE, BASE_NONE, NULL, 0,
9323 NULL, HFILL }},
9324 { &hf_tetra_MAC_DATA_PDU,
9325 { "MAC-DATA", "tetra.MAC_DATA_element",
9326 FT_NONE, BASE_NONE, NULL, 0,
9327 NULL, HFILL }},
9328 { &hf_tetra_MAC_FRAG_PDU,
9329 { "MAC-FRAG", "tetra.MAC_FRAG_element",
9330 FT_NONE, BASE_NONE, NULL, 0,
9331 NULL, HFILL }},
9332 { &hf_tetra_MAC_FRAG120_PDU,
9333 { "MAC-FRAG120", "tetra.MAC_FRAG120_element",
9334 FT_NONE, BASE_NONE, NULL, 0,
9335 NULL, HFILL }},
9336 { &hf_tetra_MAC_END_UPLINK_PDU,
9337 { "MAC-END-UPLINK", "tetra.MAC_END_UPLINK_element",
9338 FT_NONE, BASE_NONE, NULL, 0,
9339 NULL, HFILL }},
9340 { &hf_tetra_MAC_END_UP114_PDU,
9341 { "MAC-END-UP114", "tetra.MAC_END_UP114_element",
9342 FT_NONE, BASE_NONE, NULL, 0,
9343 NULL, HFILL }},
9344 { &hf_tetra_MAC_END_HU_PDU,
9345 { "MAC-END-HU", "tetra.MAC_END_HU_element",
9346 FT_NONE, BASE_NONE, NULL, 0,
9347 NULL, HFILL }},
9348 { &hf_tetra_MAC_END_DOWNLINK_PDU,
9349 { "MAC-END-DOWNLINK", "tetra.MAC_END_DOWNLINK_element",
9350 FT_NONE, BASE_NONE, NULL, 0,
9351 NULL, HFILL }},
9352 { &hf_tetra_MAC_END_DOWN111_PDU,
9353 { "MAC-END-DOWN111", "tetra.MAC_END_DOWN111_element",
9354 FT_NONE, BASE_NONE, NULL, 0,
9355 NULL, HFILL }},
9356 { &hf_tetra_MAC_RESOURCE_PDU,
9357 { "MAC-RESOURCE", "tetra.MAC_RESOURCE_element",
9358 FT_NONE, BASE_NONE, NULL, 0,
9359 NULL, HFILL }},
9360 { &hf_tetra_MAC_ACCESS_DEFINE_PDU,
9361 { "MAC-ACCESS-DEFINE", "tetra.MAC_ACCESS_DEFINE_element",
9362 FT_NONE, BASE_NONE, NULL, 0,
9363 NULL, HFILL }},
9364 { &hf_tetra_function,
9365 { "function", "tetra.function",
9366 FT_UINT32, BASE_DEC, NULL, 0,
9367 "INTEGER_0_3", HFILL }},
9368 { &hf_tetra_field1,
9369 { "field1", "tetra.field1",
9370 FT_UINT32, BASE_DEC, NULL, 0,
9371 "INTEGER_0_63", HFILL }},
9372 { &hf_tetra_field2,
9373 { "field2", "tetra.field2",
9374 FT_UINT32, BASE_DEC, NULL, 0,
9375 "INTEGER_0_63", HFILL }},
9376 { &hf_tetra_system_code,
9377 { "system-code", "tetra.system_code",
9378 FT_UINT32, BASE_DEC, VALS(tetra_System_Code_vals), 0,
9379 NULL, HFILL }},
9380 { &hf_tetra_colour_code,
9381 { "colour-code", "tetra.colour_code",
9382 FT_UINT32, BASE_DEC, VALS(tetra_Colour_Code_vals), 0,
9383 NULL, HFILL }},
9384 { &hf_tetra_timeslot_number,
9385 { "timeslot-number", "tetra.timeslot_number",
9386 FT_UINT32, BASE_DEC, VALS(tetra_Timeslot_Number_vals), 0,
9387 NULL, HFILL }},
9388 { &hf_tetra_frame_number,
9389 { "frame-number", "tetra.frame_number",
9390 FT_UINT32, BASE_DEC, VALS(tetra_Frame_Number_vals), 0,
9391 NULL, HFILL }},
9392 { &hf_tetra_multiple_frame_number,
9393 { "multiple-frame-number", "tetra.multiple_frame_number",
9394 FT_UINT32, BASE_DEC, VALS(tetra_Multiple_Frame_Number_vals), 0,
9395 NULL, HFILL }},
9396 { &hf_tetra_sharing_mod,
9397 { "sharing-mod", "tetra.sharing_mod",
9398 FT_UINT32, BASE_DEC, VALS(tetra_Sharing_Mod_vals), 0,
9399 NULL, HFILL }},
9400 { &hf_tetra_ts_reserved_frames,
9401 { "ts-reserved-frames", "tetra.ts_reserved_frames",
9402 FT_UINT32, BASE_DEC, VALS(tetra_TS_Reserved_Frames_vals), 0,
9403 NULL, HFILL }},
9404 { &hf_tetra_u_plane_dtx,
9405 { "u-plane-dtx", "tetra.u_plane_dtx",
9406 FT_UINT32, BASE_DEC, VALS(tetra_U_Plane_DTX_vals), 0,
9407 NULL, HFILL }},
9408 { &hf_tetra_frame_18_extension,
9409 { "frame-18-extension", "tetra.frame_18_extension",
9410 FT_UINT32, BASE_DEC, VALS(tetra_Frame_18_Extension_vals), 0,
9411 NULL, HFILL }},
9412 { &hf_tetra_reserved,
9413 { "reserved", "tetra.reserved",
9414 FT_UINT32, BASE_DEC, VALS(tetra_Reserved_vals), 0,
9415 NULL, HFILL }},
9416 { &hf_tetra_tm_sdu,
9417 { "tm-sdu", "tetra.tm_sdu_element",
9418 FT_NONE, BASE_NONE, NULL, 0,
9419 "MLE_Sync", HFILL }},
9420 { &hf_tetra_mcc,
9421 { "mcc", "tetra.mcc",
9422 FT_UINT32, BASE_DEC, NULL, 0,
9423 "INTEGER_0_1023", HFILL }},
9424 { &hf_tetra_mnc,
9425 { "mnc", "tetra.mnc",
9426 FT_UINT32, BASE_DEC, NULL, 0,
9427 "INTEGER_0_16383", HFILL }},
9428 { &hf_tetra_neighbour_cell_broadcast,
9429 { "neighbour-cell-broadcast", "tetra.neighbour_cell_broadcast",
9430 FT_UINT32, BASE_DEC, NULL, 0,
9431 "INTEGER_0_3", HFILL }},
9432 { &hf_tetra_cell_service_level,
9433 { "cell-service-level", "tetra.cell_service_level",
9434 FT_UINT32, BASE_DEC, NULL, 0,
9435 "INTEGER_0_3", HFILL }},
9436 { &hf_tetra_late_entry_information,
9437 { "late-entry-information", "tetra.late_entry_information",
9438 FT_UINT32, BASE_DEC, NULL, 0,
9439 "INTEGER_0_1", HFILL }},
9440 { &hf_tetra_pdu_type,
9441 { "pdu-type", "tetra.pdu_type",
9442 FT_UINT32, BASE_DEC, NULL, 0,
9443 "INTEGER_0_3", HFILL }},
9444 { &hf_tetra_broadcast_type,
9445 { "broadcast-type", "tetra.broadcast_type",
9446 FT_UINT32, BASE_DEC, NULL, 0,
9447 "INTEGER_0_3", HFILL }},
9448 { &hf_tetra_main_carrier,
9449 { "main-carrier", "tetra.main_carrier",
9450 FT_UINT32, BASE_DEC, NULL, 0,
9451 "INTEGER_0_4095", HFILL }},
9452 { &hf_tetra_frequency_band,
9453 { "frequency-band", "tetra.frequency_band",
9454 FT_UINT32, BASE_DEC, NULL, 0,
9455 "INTEGER_0_15", HFILL }},
9456 { &hf_tetra_offset,
9457 { "offset", "tetra.offset",
9458 FT_UINT32, BASE_DEC, VALS(tetra_Offset_vals), 0,
9459 NULL, HFILL }},
9460 { &hf_tetra_duplex_spacing,
9461 { "duplex-spacing", "tetra.duplex_spacing",
9462 FT_UINT32, BASE_DEC, NULL, 0,
9463 "INTEGER_0_7", HFILL }},
9464 { &hf_tetra_reverse_operation,
9465 { "reverse-operation", "tetra.reverse_operation",
9466 FT_UINT32, BASE_DEC, VALS(tetra_Reverse_Operation_vals), 0,
9467 NULL, HFILL }},
9468 { &hf_tetra_sencond_ctl_carrier,
9469 { "sencond-ctl-carrier", "tetra.sencond_ctl_carrier",
9470 FT_UINT32, BASE_DEC, VALS(tetra_Sencond_Ctl_Carrier_vals), 0,
9471 NULL, HFILL }},
9472 { &hf_tetra_ms_txpwr_max_cell,
9473 { "ms-txpwr-max-cell", "tetra.ms_txpwr_max_cell",
9474 FT_UINT32, BASE_DEC, VALS(tetra_MS_TXPWR_MAX_CELL_vals), 0,
9475 NULL, HFILL }},
9476 { &hf_tetra_rxlev_access_min,
9477 { "rxlev-access-min", "tetra.rxlev_access_min",
9478 FT_UINT32, BASE_DEC, VALS(tetra_RXLEV_ACCESS_MIN_vals), 0,
9479 NULL, HFILL }},
9480 { &hf_tetra_access_parameter,
9481 { "access-parameter", "tetra.access_parameter",
9482 FT_UINT32, BASE_DEC, VALS(tetra_ACCESS_PARAMETER_vals), 0,
9483 NULL, HFILL }},
9484 { &hf_tetra_radio_downlink_timeout,
9485 { "radio-downlink-timeout", "tetra.radio_downlink_timeout",
9486 FT_UINT32, BASE_DEC, VALS(tetra_RADIO_DOWNLINK_TIMEOUT_vals), 0,
9487 NULL, HFILL }},
9488 { &hf_tetra_hyperframe_or_cck,
9489 { "hyperframe-or-cck", "tetra.hyperframe_or_cck",
9490 FT_UINT32, BASE_DEC, VALS(tetra_T_hyperframe_or_cck_vals), 0,
9491 NULL, HFILL }},
9492 { &hf_tetra_hyperframe,
9493 { "hyperframe", "tetra.hyperframe",
9494 FT_UINT32, BASE_DEC, NULL, 0,
9495 "INTEGER_0_65535", HFILL }},
9496 { &hf_tetra_cckid,
9497 { "cckid", "tetra.cckid",
9498 FT_UINT32, BASE_DEC, NULL, 0,
9499 "INTEGER_0_65535", HFILL }},
9500 { &hf_tetra_optional_params,
9501 { "optional-params", "tetra.optional_params",
9502 FT_UINT32, BASE_DEC, VALS(tetra_T_optional_params_vals), 0,
9503 NULL, HFILL }},
9504 { &hf_tetra_even_multiframe,
9505 { "even-multiframe", "tetra.even_multiframe_element",
9506 FT_NONE, BASE_NONE, NULL, 0,
9507 "TS_COMMON_FRAMES", HFILL }},
9508 { &hf_tetra_odd_multiframe,
9509 { "odd-multiframe", "tetra.odd_multiframe_element",
9510 FT_NONE, BASE_NONE, NULL, 0,
9511 "TS_COMMON_FRAMES", HFILL }},
9512 { &hf_tetra_access_a_code,
9513 { "access-a-code", "tetra.access_a_code_element",
9514 FT_NONE, BASE_NONE, NULL, 0,
9515 "Default_Code_A", HFILL }},
9516 { &hf_tetra_extend_service,
9517 { "extend-service", "tetra.extend_service_element",
9518 FT_NONE, BASE_NONE, NULL, 0,
9519 "Extended_Services_Broadcast", HFILL }},
9520 { &hf_tetra_la,
9521 { "la", "tetra.la",
9522 FT_UINT32, BASE_DEC, NULL, 0,
9523 "INTEGER_0_16383", HFILL }},
9524 { &hf_tetra_subscriber_class,
9525 { "subscriber-class", "tetra.subscriber_class",
9526 FT_BYTES, BASE_NONE, NULL, 0,
9527 NULL, HFILL }},
9528 { &hf_tetra_registriation,
9529 { "registriation", "tetra.registriation",
9530 FT_UINT32, BASE_DEC, NULL, 0,
9531 "INTEGER_0_1", HFILL }},
9532 { &hf_tetra_de_registration,
9533 { "de-registration", "tetra.de_registration",
9534 FT_UINT32, BASE_DEC, NULL, 0,
9535 "INTEGER_0_1", HFILL }},
9536 { &hf_tetra_priority_cell,
9537 { "priority-cell", "tetra.priority_cell",
9538 FT_UINT32, BASE_DEC, NULL, 0,
9539 "INTEGER_0_1", HFILL }},
9540 { &hf_tetra_minimum_mode_service,
9541 { "minimum-mode-service", "tetra.minimum_mode_service",
9542 FT_UINT32, BASE_DEC, NULL, 0,
9543 "INTEGER_0_1", HFILL }},
9544 { &hf_tetra_migration,
9545 { "migration", "tetra.migration",
9546 FT_UINT32, BASE_DEC, NULL, 0,
9547 "INTEGER_0_1", HFILL }},
9548 { &hf_tetra_system_wide_service,
9549 { "system-wide-service", "tetra.system_wide_service",
9550 FT_UINT32, BASE_DEC, NULL, 0,
9551 "INTEGER_0_1", HFILL }},
9552 { &hf_tetra_tetra_voice_service,
9553 { "tetra-voice-service", "tetra.tetra_voice_service",
9554 FT_UINT32, BASE_DEC, NULL, 0,
9555 "INTEGER_0_1", HFILL }},
9556 { &hf_tetra_circuit_mode_data_service,
9557 { "circuit-mode-data-service", "tetra.circuit_mode_data_service",
9558 FT_UINT32, BASE_DEC, NULL, 0,
9559 "INTEGER_0_1", HFILL }},
9560 { &hf_tetra_reserved_01,
9561 { "reserved", "tetra.reserved",
9562 FT_UINT32, BASE_DEC, NULL, 0,
9563 "INTEGER_0_1", HFILL }},
9564 { &hf_tetra_sndcp_service,
9565 { "sndcp-service", "tetra.sndcp_service",
9566 FT_UINT32, BASE_DEC, NULL, 0,
9567 "INTEGER_0_1", HFILL }},
9568 { &hf_tetra_air_interface_encryption,
9569 { "air-interface-encryption", "tetra.air_interface_encryption",
9570 FT_UINT32, BASE_DEC, NULL, 0,
9571 "INTEGER_0_1", HFILL }},
9572 { &hf_tetra_advanced_link_support,
9573 { "advanced-link-support", "tetra.advanced_link_support",
9574 FT_UINT32, BASE_DEC, NULL, 0,
9575 "INTEGER_0_1", HFILL }},
9576 { &hf_tetra_frame1,
9577 { "frame1", "tetra.frame1",
9578 FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
9579 "FRAME", HFILL }},
9580 { &hf_tetra_frame2,
9581 { "frame2", "tetra.frame2",
9582 FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
9583 "FRAME", HFILL }},
9584 { &hf_tetra_frame3,
9585 { "frame3", "tetra.frame3",
9586 FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
9587 "FRAME", HFILL }},
9588 { &hf_tetra_frame4,
9589 { "frame4", "tetra.frame4",
9590 FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
9591 "FRAME", HFILL }},
9592 { &hf_tetra_frame5,
9593 { "frame5", "tetra.frame5",
9594 FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
9595 "FRAME", HFILL }},
9596 { &hf_tetra_frame6,
9597 { "frame6", "tetra.frame6",
9598 FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
9599 "FRAME", HFILL }},
9600 { &hf_tetra_frame7,
9601 { "frame7", "tetra.frame7",
9602 FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
9603 "FRAME", HFILL }},
9604 { &hf_tetra_frame8,
9605 { "frame8", "tetra.frame8",
9606 FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
9607 "FRAME", HFILL }},
9608 { &hf_tetra_frame9,
9609 { "frame9", "tetra.frame9",
9610 FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
9611 "FRAME", HFILL }},
9612 { &hf_tetra_frame10,
9613 { "frame10", "tetra.frame10",
9614 FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
9615 "FRAME", HFILL }},
9616 { &hf_tetra_frame11,
9617 { "frame11", "tetra.frame11",
9618 FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
9619 "FRAME", HFILL }},
9620 { &hf_tetra_frame12,
9621 { "frame12", "tetra.frame12",
9622 FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
9623 "FRAME", HFILL }},
9624 { &hf_tetra_frame13,
9625 { "frame13", "tetra.frame13",
9626 FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
9627 "FRAME", HFILL }},
9628 { &hf_tetra_frame14,
9629 { "frame14", "tetra.frame14",
9630 FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
9631 "FRAME", HFILL }},
9632 { &hf_tetra_frame15,
9633 { "frame15", "tetra.frame15",
9634 FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
9635 "FRAME", HFILL }},
9636 { &hf_tetra_frame16,
9637 { "frame16", "tetra.frame16",
9638 FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
9639 "FRAME", HFILL }},
9640 { &hf_tetra_frame17,
9641 { "frame17", "tetra.frame17",
9642 FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
9643 "FRAME", HFILL }},
9644 { &hf_tetra_frame18,
9645 { "frame18", "tetra.frame18",
9646 FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
9647 "FRAME", HFILL }},
9648 { &hf_tetra_imm,
9649 { "imm", "tetra.imm",
9650 FT_UINT32, BASE_DEC, VALS(tetra_IMM_vals), 0,
9651 NULL, HFILL }},
9652 { &hf_tetra_wt,
9653 { "wt", "tetra.wt",
9654 FT_UINT32, BASE_DEC, VALS(tetra_WT_vals), 0,
9655 NULL, HFILL }},
9656 { &hf_tetra_nu,
9657 { "nu", "tetra.nu",
9658 FT_UINT32, BASE_DEC, VALS(tetra_NU_vals), 0,
9659 NULL, HFILL }},
9660 { &hf_tetra_frame_len_factor,
9661 { "frame-len-factor", "tetra.frame_len_factor",
9662 FT_UINT32, BASE_DEC, VALS(tetra_Frame_Len_Factor_vals), 0,
9663 NULL, HFILL }},
9664 { &hf_tetra_timeslot_pointer,
9665 { "timeslot-pointer", "tetra.timeslot_pointer",
9666 FT_UINT32, BASE_DEC, VALS(tetra_Timeslot_Pointer_vals), 0,
9667 NULL, HFILL }},
9668 { &hf_tetra_min_pdu_priority,
9669 { "min-pdu-priority", "tetra.min_pdu_priority",
9670 FT_UINT32, BASE_DEC, VALS(tetra_Min_Pdu_Priority_vals), 0,
9671 NULL, HFILL }},
9672 { &hf_tetra_security_information,
9673 { "security-information", "tetra.security_information",
9674 FT_UINT32, BASE_DEC, NULL, 0,
9675 "INTEGER_0_255", HFILL }},
9676 { &hf_tetra_sds_tl_addressing_method,
9677 { "sds-tl-addressing-method", "tetra.sds_tl_addressing_method",
9678 FT_UINT32, BASE_DEC, VALS(tetra_SDS_TL_Addressing_Method_vals), 0,
9679 NULL, HFILL }},
9680 { &hf_tetra_gck_supported,
9681 { "gck-supported", "tetra.gck_supported",
9682 FT_UINT32, BASE_DEC, NULL, 0,
9683 "INTEGER_0_1", HFILL }},
9684 { &hf_tetra_section,
9685 { "section", "tetra.section",
9686 FT_UINT32, BASE_DEC, VALS(tetra_T_section_vals), 0,
9687 NULL, HFILL }},
9688 { &hf_tetra_present_1,
9689 { "present-1", "tetra.present_1_element",
9690 FT_NONE, BASE_NONE, NULL, 0,
9691 "PRESENT1", HFILL }},
9692 { &hf_tetra_present_2,
9693 { "present-2", "tetra.present_2",
9694 FT_UINT32, BASE_DEC, NULL, 0,
9695 "INTEGER_0_127", HFILL }},
9696 { &hf_tetra_present_3,
9697 { "present-3", "tetra.present_3",
9698 FT_UINT32, BASE_DEC, NULL, 0,
9699 "INTEGER_0_127", HFILL }},
9700 { &hf_tetra_present_4,
9701 { "present-4", "tetra.present_4",
9702 FT_UINT32, BASE_DEC, NULL, 0,
9703 "INTEGER_0_127", HFILL }},
9704 { &hf_tetra_data_priority_supported,
9705 { "data-priority-supported", "tetra.data_priority_supported",
9706 FT_UINT32, BASE_DEC, VALS(tetra_Data_Priority_Supported_vals), 0,
9707 NULL, HFILL }},
9708 { &hf_tetra_reserved_02,
9709 { "reserved", "tetra.reserved",
9710 FT_UINT32, BASE_DEC, NULL, 0,
9711 "INTEGER_0_7", HFILL }},
9712 { &hf_tetra_section_2_information,
9713 { "section-2-information", "tetra.section_2_information",
9714 FT_UINT32, BASE_DEC, VALS(tetra_Section_Information_vals), 0,
9715 "Section_Information", HFILL }},
9716 { &hf_tetra_section_3_information,
9717 { "section-3-information", "tetra.section_3_information",
9718 FT_UINT32, BASE_DEC, VALS(tetra_Section_Information_vals), 0,
9719 "Section_Information", HFILL }},
9720 { &hf_tetra_section_4_information,
9721 { "section-4-information", "tetra.section_4_information",
9722 FT_UINT32, BASE_DEC, VALS(tetra_Section_Information_vals), 0,
9723 "Section_Information", HFILL }},
9724 { &hf_tetra_pdu_type_01,
9725 { "pdu-type", "tetra.pdu_type",
9726 FT_UINT32, BASE_DEC, NULL, 0,
9727 "INTEGER_0_1", HFILL }},
9728 { &hf_tetra_fill_bit_indication,
9729 { "fill-bit-indication", "tetra.fill_bit_indication",
9730 FT_UINT32, BASE_DEC, VALS(tetra_Fill_Bit_Indication_vals), 0,
9731 NULL, HFILL }},
9732 { &hf_tetra_encrypted_flag,
9733 { "encrypted-flag", "tetra.encrypted_flag",
9734 FT_UINT32, BASE_DEC, VALS(tetra_Encrypted_Flag_vals), 0,
9735 NULL, HFILL }},
9736 { &hf_tetra_address,
9737 { "address", "tetra.address",
9738 FT_UINT32, BASE_DEC, VALS(tetra_Address_vals), 0,
9739 NULL, HFILL }},
9740 { &hf_tetra_data,
9741 { "data", "tetra.data",
9742 FT_UINT32, BASE_DEC, VALS(tetra_T_data_vals), 0,
9743 NULL, HFILL }},
9744 { &hf_tetra_sdu1,
9745 { "sdu1", "tetra.sdu1",
9746 FT_UINT32, BASE_DEC, VALS(tetra_U_LLC_PDU_vals), 0,
9747 "U_LLC_PDU", HFILL }},
9748 { &hf_tetra_sdu2,
9749 { "sdu2", "tetra.sdu2_element",
9750 FT_NONE, BASE_NONE, NULL, 0,
9751 "ComplexSDU", HFILL }},
9752 { &hf_tetra_ssi,
9753 { "ssi", "tetra.ssi",
9754 FT_UINT32, BASE_DEC, NULL, 0,
9755 "INTEGER_0_16777215", HFILL }},
9756 { &hf_tetra_eventLabel,
9757 { "eventLabel", "tetra.eventLabel",
9758 FT_UINT32, BASE_DEC, NULL, 0,
9759 "INTEGER_0_1023", HFILL }},
9760 { &hf_tetra_ussi,
9761 { "ussi", "tetra.ussi",
9762 FT_UINT32, BASE_DEC, NULL, 0,
9763 "INTEGER_0_16777215", HFILL }},
9764 { &hf_tetra_smi,
9765 { "smi", "tetra.smi",
9766 FT_UINT32, BASE_DEC, NULL, 0,
9767 "INTEGER_0_16777215", HFILL }},
9768 { &hf_tetra_bl_adata,
9769 { "bl-adata", "tetra.bl_adata_element",
9770 FT_NONE, BASE_NONE, NULL, 0,
9771 "U_BL_ADATA", HFILL }},
9772 { &hf_tetra_bl_data,
9773 { "bl-data", "tetra.bl_data_element",
9774 FT_NONE, BASE_NONE, NULL, 0,
9775 "U_BL_DATA", HFILL }},
9776 { &hf_tetra_bl_udata,
9777 { "bl-udata", "tetra.bl_udata",
9778 FT_UINT32, BASE_DEC, VALS(tetra_U_MLE_PDU_vals), 0,
9779 "U_MLE_PDU", HFILL }},
9780 { &hf_tetra_bl_ack,
9781 { "bl-ack", "tetra.bl_ack_element",
9782 FT_NONE, BASE_NONE, NULL, 0,
9783 "U_BL_ACK", HFILL }},
9784 { &hf_tetra_bl_adata_fcs,
9785 { "bl-adata-fcs", "tetra.bl_adata_fcs_element",
9786 FT_NONE, BASE_NONE, NULL, 0,
9787 "U_BL_ADATA_FCS", HFILL }},
9788 { &hf_tetra_bl_data_fcs,
9789 { "bl-data-fcs", "tetra.bl_data_fcs_element",
9790 FT_NONE, BASE_NONE, NULL, 0,
9791 "U_BL_DATA_FCS", HFILL }},
9792 { &hf_tetra_bl_udata_fcs,
9793 { "bl-udata-fcs", "tetra.bl_udata_fcs_element",
9794 FT_NONE, BASE_NONE, NULL, 0,
9795 "U_MLE_PDU_FCS", HFILL }},
9796 { &hf_tetra_bl_ack_fcs,
9797 { "bl-ack-fcs", "tetra.bl_ack_fcs_element",
9798 FT_NONE, BASE_NONE, NULL, 0,
9799 "U_BL_ACK_FCS", HFILL }},
9800 { &hf_tetra_al_setup,
9801 { "al-setup", "tetra.al_setup_element",
9802 FT_NONE, BASE_NONE, NULL, 0,
9803 NULL, HFILL }},
9804 { &hf_tetra_al_data,
9805 { "al-data", "tetra.al_data_element",
9806 FT_NONE, BASE_NONE, NULL, 0,
9807 NULL, HFILL }},
9808 { &hf_tetra_al_udata,
9809 { "al-udata", "tetra.al_udata_element",
9810 FT_NONE, BASE_NONE, NULL, 0,
9811 NULL, HFILL }},
9812 { &hf_tetra_al_ack,
9813 { "al-ack", "tetra.al_ack_element",
9814 FT_NONE, BASE_NONE, NULL, 0,
9815 NULL, HFILL }},
9816 { &hf_tetra_al_reconnect,
9817 { "al-reconnect", "tetra.al_reconnect_element",
9818 FT_NONE, BASE_NONE, NULL, 0,
9819 NULL, HFILL }},
9820 { &hf_tetra_reserve1,
9821 { "reserve1", "tetra.reserve1_element",
9822 FT_NONE, BASE_NONE, NULL, 0,
9823 NULL, HFILL }},
9824 { &hf_tetra_reserve2,
9825 { "reserve2", "tetra.reserve2_element",
9826 FT_NONE, BASE_NONE, NULL, 0,
9827 NULL, HFILL }},
9828 { &hf_tetra_al_disc,
9829 { "al-disc", "tetra.al_disc_element",
9830 FT_NONE, BASE_NONE, NULL, 0,
9831 NULL, HFILL }},
9832 { &hf_tetra_nr,
9833 { "nr", "tetra.nr",
9834 FT_UINT32, BASE_DEC, NULL, 0,
9835 "INTEGER_0_1", HFILL }},
9836 { &hf_tetra_tl_sdu,
9837 { "tl-sdu", "tetra.tl_sdu",
9838 FT_UINT32, BASE_DEC, VALS(tetra_U_MLE_PDU_vals), 0,
9839 "U_MLE_PDU", HFILL }},
9840 { &hf_tetra_fcs,
9841 { "fcs", "tetra.fcs",
9842 FT_BYTES, BASE_NONE, NULL, 0,
9843 "OCTET_STRING_SIZE_4", HFILL }},
9844 { &hf_tetra_u_mle_pdu,
9845 { "u-mle-pdu", "tetra.u_mle_pdu",
9846 FT_UINT32, BASE_DEC, VALS(tetra_U_MLE_PDU_vals), 0,
9847 NULL, HFILL }},
9848 { &hf_tetra_ns,
9849 { "ns", "tetra.ns",
9850 FT_UINT32, BASE_DEC, NULL, 0,
9851 "INTEGER_0_1", HFILL }},
9852 { &hf_tetra_u_mle_reserved1,
9853 { "u-mle-reserved1", "tetra.u_mle_reserved1_element",
9854 FT_NONE, BASE_NONE, NULL, 0,
9855 NULL, HFILL }},
9856 { &hf_tetra_mm,
9857 { "mm", "tetra.mm",
9858 FT_UINT32, BASE_DEC, VALS(tetra_U_MM_PDU_vals), 0,
9859 "U_MM_PDU", HFILL }},
9860 { &hf_tetra_cmce,
9861 { "cmce", "tetra.cmce",
9862 FT_UINT32, BASE_DEC, VALS(tetra_U_CMCE_PDU_vals), 0,
9863 "U_CMCE_PDU", HFILL }},
9864 { &hf_tetra_u_mle_reserved2,
9865 { "u-mle-reserved2", "tetra.u_mle_reserved2_element",
9866 FT_NONE, BASE_NONE, NULL, 0,
9867 NULL, HFILL }},
9868 { &hf_tetra_sndcp,
9869 { "sndcp", "tetra.sndcp_element",
9870 FT_NONE, BASE_NONE, NULL, 0,
9871 NULL, HFILL }},
9872 { &hf_tetra_mle,
9873 { "mle", "tetra.mle",
9874 FT_UINT32, BASE_DEC, VALS(tetra_UMLE_PDU_vals), 0,
9875 "UMLE_PDU", HFILL }},
9876 { &hf_tetra_tetra_management_entity_protocol,
9877 { "tetra-management-entity-protocol", "tetra.tetra_management_entity_protocol_element",
9878 FT_NONE, BASE_NONE, NULL, 0,
9879 NULL, HFILL }},
9880 { &hf_tetra_u_mle_reserved3,
9881 { "u-mle-reserved3", "tetra.u_mle_reserved3_element",
9882 FT_NONE, BASE_NONE, NULL, 0,
9883 NULL, HFILL }},
9884 { &hf_tetra_lengthIndicationOrCapacityRequest,
9885 { "lengthIndicationOrCapacityRequest", "tetra.lengthIndicationOrCapacityRequest",
9886 FT_UINT32, BASE_DEC, VALS(tetra_T_lengthIndicationOrCapacityRequest_vals), 0,
9887 NULL, HFILL }},
9888 { &hf_tetra_lengthIndication,
9889 { "lengthIndication", "tetra.lengthIndication",
9890 FT_UINT32, BASE_DEC, VALS(tetra_LengthIndication_vals), 0,
9891 NULL, HFILL }},
9892 { &hf_tetra_capacityRequest,
9893 { "capacityRequest", "tetra.capacityRequest_element",
9894 FT_NONE, BASE_NONE, NULL, 0,
9895 "FRAG", HFILL }},
9896 { &hf_tetra_tm_sdu_01,
9897 { "tm-sdu", "tetra.tm_sdu",
9898 FT_UINT32, BASE_DEC, VALS(tetra_U_LLC_PDU_vals), 0,
9899 "U_LLC_PDU", HFILL }},
9900 { &hf_tetra_frag,
9901 { "frag", "tetra.frag",
9902 FT_UINT32, BASE_DEC, VALS(tetra_Frag1_vals), 0,
9903 "Frag1", HFILL }},
9904 { &hf_tetra_reservation_requirement,
9905 { "reservation-requirement", "tetra.reservation_requirement",
9906 FT_UINT32, BASE_DEC, VALS(tetra_SLOT_APPLY_vals), 0,
9907 "SLOT_APPLY", HFILL }},
9908 { &hf_tetra_lengthIndicationOrCapacityRequest_01,
9909 { "lengthIndicationOrCapacityRequest", "tetra.lengthIndicationOrCapacityRequest",
9910 FT_UINT32, BASE_DEC, VALS(tetra_T_lengthIndicationOrCapacityRequest_01_vals), 0,
9911 "T_lengthIndicationOrCapacityRequest_01", HFILL }},
9912 { &hf_tetra_lengthIndication_01,
9913 { "lengthIndication", "tetra.lengthIndication",
9914 FT_UINT32, BASE_DEC, VALS(tetra_LengthIndicationMacData_vals), 0,
9915 "LengthIndicationMacData", HFILL }},
9916 { &hf_tetra_capacityRequest_01,
9917 { "capacityRequest", "tetra.capacityRequest_element",
9918 FT_NONE, BASE_NONE, NULL, 0,
9919 "FRAG6", HFILL }},
9920 { &hf_tetra_sub_type,
9921 { "sub-type", "tetra.sub_type",
9922 FT_UINT32, BASE_DEC, NULL, 0,
9923 "INTEGER_0_1", HFILL }},
9924 { &hf_tetra_tm_sdu_02,
9925 { "tm-sdu", "tetra.tm_sdu",
9926 FT_BYTES, BASE_NONE, NULL, 0,
9927 "BIT_STRING_SIZE_264", HFILL }},
9928 { &hf_tetra_tm_sdu_03,
9929 { "tm-sdu", "tetra.tm_sdu",
9930 FT_BYTES, BASE_NONE, NULL, 0,
9931 "BIT_STRING_SIZE_120", HFILL }},
9932 { &hf_tetra_lengthInd_ReservationReq,
9933 { "lengthInd-ReservationReq", "tetra.lengthInd_ReservationReq",
9934 FT_UINT32, BASE_DEC, VALS(tetra_LengthIndOrReservationReq_vals), 0,
9935 "LengthIndOrReservationReq", HFILL }},
9936 { &hf_tetra_tm_sdu_04,
9937 { "tm-sdu", "tetra.tm_sdu",
9938 FT_BYTES, BASE_NONE, NULL, 0,
9939 "BIT_STRING_SIZE_258", HFILL }},
9940 { &hf_tetra_pdu_subtype,
9941 { "pdu-subtype", "tetra.pdu_subtype",
9942 FT_UINT32, BASE_DEC, NULL, 0,
9943 "INTEGER_0_1", HFILL }},
9944 { &hf_tetra_tm_sdu_05,
9945 { "tm-sdu", "tetra.tm_sdu",
9946 FT_BYTES, BASE_NONE, NULL, 0,
9947 "BIT_STRING_SIZE_114", HFILL }},
9948 { &hf_tetra_lengthInd_ReservationReq_01,
9949 { "lengthInd-ReservationReq", "tetra.lengthInd_ReservationReq",
9950 FT_UINT32, BASE_DEC, VALS(tetra_T_lengthInd_ReservationReq_vals), 0,
9951 NULL, HFILL }},
9952 { &hf_tetra_lengthInd,
9953 { "lengthInd", "tetra.lengthInd",
9954 FT_UINT32, BASE_DEC, VALS(tetra_LengthIndMacHu_vals), 0,
9955 "LengthIndMacHu", HFILL }},
9956 { &hf_tetra_tm_sdu_06,
9957 { "tm-sdu", "tetra.tm_sdu",
9958 FT_BYTES, BASE_NONE, NULL, 0,
9959 "BIT_STRING_SIZE_85", HFILL }},
9960 { &hf_tetra_position_of_grant,
9961 { "position-of-grant", "tetra.position_of_grant",
9962 FT_UINT32, BASE_DEC, VALS(tetra_Position_Of_Grant_vals), 0,
9963 NULL, HFILL }},
9964 { &hf_tetra_lengthIndication_02,
9965 { "lengthIndication", "tetra.lengthIndication",
9966 FT_UINT32, BASE_DEC, VALS(tetra_LengthIndicationMacEndDl_vals), 0,
9967 "LengthIndicationMacEndDl", HFILL }},
9968 { &hf_tetra_slot_granting,
9969 { "slot-granting", "tetra.slot_granting",
9970 FT_UINT32, BASE_DEC, VALS(tetra_T_slot_granting_vals), 0,
9971 "T_slot_granting", HFILL }},
9972 { &hf_tetra_none,
9973 { "none", "tetra.none_element",
9974 FT_NONE, BASE_NONE, NULL, 0,
9975 NULL, HFILL }},
9976 { &hf_tetra_slot_granting_param,
9977 { "slot-granting-param", "tetra.slot_granting_param_element",
9978 FT_NONE, BASE_NONE, NULL, 0,
9979 "SlotGranting", HFILL }},
9980 { &hf_tetra_channel_allocation,
9981 { "channel-allocation", "tetra.channel_allocation",
9982 FT_UINT32, BASE_DEC, VALS(tetra_T_channel_allocation_vals), 0,
9983 NULL, HFILL }},
9984 { &hf_tetra_channel_allocation_element,
9985 { "channel-allocation-element", "tetra.channel_allocation_element_element",
9986 FT_NONE, BASE_NONE, NULL, 0,
9987 "ChannelAllocation", HFILL }},
9988 { &hf_tetra_tm_sdu_07,
9989 { "tm-sdu", "tetra.tm_sdu",
9990 FT_BYTES, BASE_NONE, NULL, 0,
9991 "BIT_STRING_SIZE_255", HFILL }},
9992 { &hf_tetra_capacity_allocation,
9993 { "capacity-allocation", "tetra.capacity_allocation",
9994 FT_UINT32, BASE_DEC, VALS(tetra_Capacity_Allocation_vals), 0,
9995 NULL, HFILL }},
9996 { &hf_tetra_granting_delay,
9997 { "granting-delay", "tetra.granting_delay",
9998 FT_UINT32, BASE_DEC, VALS(tetra_Granting_delay_vals), 0,
9999 NULL, HFILL }},
10000 { &hf_tetra_allocation_type,
10001 { "allocation-type", "tetra.allocation_type",
10002 FT_UINT32, BASE_DEC, VALS(tetra_T_allocation_type_vals), 0,
10003 NULL, HFILL }},
10004 { &hf_tetra_timeslot_assigned,
10005 { "timeslot-assigned", "tetra.timeslot_assigned",
10006 FT_UINT32, BASE_DEC, VALS(tetra_Timeslot_Assigned_vals), 0,
10007 NULL, HFILL }},
10008 { &hf_tetra_up_down_assigned,
10009 { "up-down-assigned", "tetra.up_down_assigned",
10010 FT_UINT32, BASE_DEC, VALS(tetra_T_up_down_assigned_vals), 0,
10011 NULL, HFILL }},
10012 { &hf_tetra_clch_permission,
10013 { "clch-permission", "tetra.clch_permission",
10014 FT_UINT32, BASE_DEC, VALS(tetra_CLCH_permission_vals), 0,
10015 NULL, HFILL }},
10016 { &hf_tetra_cell_change,
10017 { "cell-change", "tetra.cell_change",
10018 FT_UINT32, BASE_DEC, VALS(tetra_Cell_change_flag_vals), 0,
10019 "Cell_change_flag", HFILL }},
10020 { &hf_tetra_carrier_number,
10021 { "carrier-number", "tetra.carrier_number",
10022 FT_UINT32, BASE_DEC, NULL, 0,
10023 "INTEGER_0_4095", HFILL }},
10024 { &hf_tetra_extend_carrier_flag,
10025 { "extend-carrier-flag", "tetra.extend_carrier_flag",
10026 FT_UINT32, BASE_DEC, VALS(tetra_T_extend_carrier_flag_vals), 0,
10027 NULL, HFILL }},
10028 { &hf_tetra_extended,
10029 { "extended", "tetra.extended_element",
10030 FT_NONE, BASE_NONE, NULL, 0,
10031 "Extended_carrier_flag", HFILL }},
10032 { &hf_tetra_monitoring_pattern,
10033 { "monitoring-pattern", "tetra.monitoring_pattern",
10034 FT_UINT32, BASE_DEC, VALS(tetra_T_monitoring_pattern_vals), 0,
10035 NULL, HFILL }},
10036 { &hf_tetra_one,
10037 { "one", "tetra.one",
10038 FT_UINT32, BASE_DEC, VALS(tetra_Monitoring_pattern_vals), 0,
10039 "Monitoring_pattern", HFILL }},
10040 { &hf_tetra_none1,
10041 { "none1", "tetra.none1_element",
10042 FT_NONE, BASE_NONE, NULL, 0,
10043 NULL, HFILL }},
10044 { &hf_tetra_none2,
10045 { "none2", "tetra.none2_element",
10046 FT_NONE, BASE_NONE, NULL, 0,
10047 NULL, HFILL }},
10048 { &hf_tetra_none3,
10049 { "none3", "tetra.none3_element",
10050 FT_NONE, BASE_NONE, NULL, 0,
10051 NULL, HFILL }},
10052 { &hf_tetra_offset_01,
10053 { "offset", "tetra.offset",
10054 FT_UINT32, BASE_DEC, NULL, 0,
10055 "INTEGER_0_3", HFILL }},
10056 { &hf_tetra_reverse_operation_01,
10057 { "reverse-operation", "tetra.reverse_operation",
10058 FT_UINT32, BASE_DEC, VALS(tetra_T_reverse_operation_vals), 0,
10059 NULL, HFILL }},
10060 { &hf_tetra_pdu_type_02,
10061 { "pdu-type", "tetra.pdu_type",
10062 FT_UINT32, BASE_DEC, NULL, 0,
10063 "INTEGER_0_7", HFILL }},
10064 { &hf_tetra_fill_bit_ind,
10065 { "fill-bit-ind", "tetra.fill_bit_ind",
10066 FT_BOOLEAN, BASE_NONE, NULL, 0,
10067 "BOOLEAN", HFILL }},
10068 { &hf_tetra_position_of_grant_01,
10069 { "position-of-grant", "tetra.position_of_grant",
10070 FT_UINT32, BASE_DEC, NULL, 0,
10071 "INTEGER_0_1", HFILL }},
10072 { &hf_tetra_slot_granting_01,
10073 { "slot-granting", "tetra.slot_granting",
10074 FT_UINT32, BASE_DEC, VALS(tetra_T_slot_granting_01_vals), 0,
10075 "T_slot_granting_01", HFILL }},
10076 { &hf_tetra_channel_allocation_01,
10077 { "channel-allocation", "tetra.channel_allocation",
10078 FT_UINT32, BASE_DEC, VALS(tetra_T_channel_allocation_01_vals), 0,
10079 "T_channel_allocation_01", HFILL }},
10080 { &hf_tetra_tm_sdu_08,
10081 { "tm-sdu", "tetra.tm_sdu",
10082 FT_BYTES, BASE_NONE, NULL, 0,
10083 "BIT_STRING_SIZE_111", HFILL }},
10084 { &hf_tetra_encryption_mode,
10085 { "encryption-mode", "tetra.encryption_mode",
10086 FT_UINT32, BASE_DEC, NULL, 0,
10087 "INTEGER_0_3", HFILL }},
10088 { &hf_tetra_access_ack,
10089 { "access-ack", "tetra.access_ack",
10090 FT_UINT32, BASE_DEC, VALS(tetra_T_access_ack_vals), 0,
10091 NULL, HFILL }},
10092 { &hf_tetra_lengthIndication_03,
10093 { "lengthIndication", "tetra.lengthIndication",
10094 FT_UINT32, BASE_DEC, VALS(tetra_LengthIndicationMacResource_vals), 0,
10095 "LengthIndicationMacResource", HFILL }},
10096 { &hf_tetra_address_01,
10097 { "address", "tetra.address",
10098 FT_UINT32, BASE_DEC, VALS(tetra_AddressMacResource_vals), 0,
10099 "AddressMacResource", HFILL }},
10100 { &hf_tetra_power_control,
10101 { "power-control", "tetra.power_control",
10102 FT_UINT32, BASE_DEC, VALS(tetra_T_power_control_vals), 0,
10103 NULL, HFILL }},
10104 { &hf_tetra_powerParameters,
10105 { "powerParameters", "tetra.powerParameters",
10106 FT_UINT32, BASE_DEC, VALS(tetra_PowerControl_vals), 0,
10107 "PowerControl", HFILL }},
10108 { &hf_tetra_slot_granting_02,
10109 { "slot-granting", "tetra.slot_granting",
10110 FT_UINT32, BASE_DEC, VALS(tetra_T_slot_granting_02_vals), 0,
10111 "T_slot_granting_02", HFILL }},
10112 { &hf_tetra_channel_allocation_02,
10113 { "channel-allocation", "tetra.channel_allocation",
10114 FT_UINT32, BASE_DEC, VALS(tetra_T_channel_allocation_02_vals), 0,
10115 "T_channel_allocation_02", HFILL }},
10116 { &hf_tetra_tm_sdu_09,
10117 { "tm-sdu", "tetra.tm_sdu",
10118 FT_UINT32, BASE_DEC, VALS(tetra_D_LLC_PDU_vals), 0,
10119 "D_LLC_PDU", HFILL }},
10120 { &hf_tetra_null_pdu,
10121 { "null-pdu", "tetra.null_pdu_element",
10122 FT_NONE, BASE_NONE, NULL, 0,
10123 NULL, HFILL }},
10124 { &hf_tetra_ssi_01,
10125 { "ssi", "tetra.ssi_element",
10126 FT_NONE, BASE_NONE, NULL, 0,
10127 "SSI_NEED", HFILL }},
10128 { &hf_tetra_eventLabel_01,
10129 { "eventLabel", "tetra.eventLabel_element",
10130 FT_NONE, BASE_NONE, NULL, 0,
10131 "EVENT_NEED", HFILL }},
10132 { &hf_tetra_ussi_01,
10133 { "ussi", "tetra.ussi_element",
10134 FT_NONE, BASE_NONE, NULL, 0,
10135 "USSI_NEED", HFILL }},
10136 { &hf_tetra_smi_01,
10137 { "smi", "tetra.smi_element",
10138 FT_NONE, BASE_NONE, NULL, 0,
10139 "SMI_NEED", HFILL }},
10140 { &hf_tetra_ssi_eventLabel,
10141 { "ssi-eventLabel", "tetra.ssi_eventLabel_element",
10142 FT_NONE, BASE_NONE, NULL, 0,
10143 "SSI_EVENT_NEED", HFILL }},
10144 { &hf_tetra_ssi_usage_maker,
10145 { "ssi-usage-maker", "tetra.ssi_usage_maker_element",
10146 FT_NONE, BASE_NONE, NULL, 0,
10147 "SSI_USAGE_NEED", HFILL }},
10148 { &hf_tetra_smi_eventLabel,
10149 { "smi-eventLabel", "tetra.smi_eventLabel_element",
10150 FT_NONE, BASE_NONE, NULL, 0,
10151 "SMI_EVENT_NEED", HFILL }},
10152 { &hf_tetra_other,
10153 { "other", "tetra.other_element",
10154 FT_NONE, BASE_NONE, NULL, 0,
10155 "OTHER_DATA", HFILL }},
10156 { &hf_tetra_eventlabel,
10157 { "eventlabel", "tetra.eventlabel",
10158 FT_UINT32, BASE_DEC, NULL, 0,
10159 "INTEGER_0_1023", HFILL }},
10160 { &hf_tetra_ventlabel,
10161 { "ventlabel", "tetra.ventlabel",
10162 FT_UINT32, BASE_DEC, NULL, 0,
10163 "INTEGER_0_1023", HFILL }},
10164 { &hf_tetra_usage_maker,
10165 { "usage-maker", "tetra.usage_maker",
10166 FT_UINT32, BASE_DEC, NULL, 0,
10167 "INTEGER_0_63", HFILL }},
10168 { &hf_tetra_smi_eventlabel,
10169 { "smi-eventlabel", "tetra.smi_eventlabel",
10170 FT_BYTES, BASE_NONE, NULL, 0,
10171 "BIT_STRING_SIZE_34", HFILL }},
10172 { &hf_tetra_broadcast_channel,
10173 { "broadcast-channel", "tetra.broadcast_channel",
10174 FT_UINT32, BASE_DEC, NULL, 0,
10175 "INTEGER_0_1", HFILL }},
10176 { &hf_tetra_access_code,
10177 { "access-code", "tetra.access_code",
10178 FT_UINT32, BASE_DEC, NULL, 0,
10179 "INTEGER_0_3", HFILL }},
10180 { &hf_tetra_imm_01,
10181 { "imm", "tetra.imm",
10182 FT_UINT32, BASE_DEC, NULL, 0,
10183 "INTEGER_0_15", HFILL }},
10184 { &hf_tetra_wt_01,
10185 { "wt", "tetra.wt",
10186 FT_UINT32, BASE_DEC, NULL, 0,
10187 "INTEGER_0_15", HFILL }},
10188 { &hf_tetra_nu_01,
10189 { "nu", "tetra.nu",
10190 FT_UINT32, BASE_DEC, NULL, 0,
10191 "INTEGER_0_15", HFILL }},
10192 { &hf_tetra_frame_len_factor_01,
10193 { "frame-len-factor", "tetra.frame_len_factor",
10194 FT_UINT32, BASE_DEC, NULL, 0,
10195 "INTEGER_0_1", HFILL }},
10196 { &hf_tetra_timeslot_pointer_01,
10197 { "timeslot-pointer", "tetra.timeslot_pointer",
10198 FT_UINT32, BASE_DEC, NULL, 0,
10199 "INTEGER_0_15", HFILL }},
10200 { &hf_tetra_min_priority,
10201 { "min-priority", "tetra.min_priority",
10202 FT_UINT32, BASE_DEC, NULL, 0,
10203 "INTEGER_0_7", HFILL }},
10204 { &hf_tetra_optional_field,
10205 { "optional-field", "tetra.optional_field",
10206 FT_UINT32, BASE_DEC, VALS(tetra_T_optional_field_vals), 0,
10207 NULL, HFILL }},
10208 { &hf_tetra_class_bitmap,
10209 { "class-bitmap", "tetra.class_bitmap",
10210 FT_UINT32, BASE_DEC, NULL, 0,
10211 "INTEGER_0_65535", HFILL }},
10212 { &hf_tetra_gssi,
10213 { "gssi", "tetra.gssi",
10214 FT_UINT32, BASE_DEC, NULL, 0,
10215 "INTEGER_0_33554431", HFILL }},
10216 { &hf_tetra_reserved_03,
10217 { "reserved", "tetra.reserved_element",
10218 FT_NONE, BASE_NONE, NULL, 0,
10219 NULL, HFILL }},
10220 { &hf_tetra_filler_bits,
10221 { "filler-bits", "tetra.filler_bits",
10222 FT_UINT32, BASE_DEC, NULL, 0,
10223 "INTEGER_0_7", HFILL }},
10224 { &hf_tetra_bl_adata_01,
10225 { "bl-adata", "tetra.bl_adata_element",
10226 FT_NONE, BASE_NONE, NULL, 0,
10227 "D_BL_ADATA", HFILL }},
10228 { &hf_tetra_bl_data_01,
10229 { "bl-data", "tetra.bl_data_element",
10230 FT_NONE, BASE_NONE, NULL, 0,
10231 "D_BL_DATA", HFILL }},
10232 { &hf_tetra_bl_udata_01,
10233 { "bl-udata", "tetra.bl_udata",
10234 FT_UINT32, BASE_DEC, VALS(tetra_D_MLE_PDU_vals), 0,
10235 "D_MLE_PDU", HFILL }},
10236 { &hf_tetra_bl_ack_01,
10237 { "bl-ack", "tetra.bl_ack_element",
10238 FT_NONE, BASE_NONE, NULL, 0,
10239 "D_BL_ACK", HFILL }},
10240 { &hf_tetra_bl_adata_fcs_01,
10241 { "bl-adata-fcs", "tetra.bl_adata_fcs_element",
10242 FT_NONE, BASE_NONE, NULL, 0,
10243 "D_BL_ADATA_FCS", HFILL }},
10244 { &hf_tetra_bl_data_fcs_01,
10245 { "bl-data-fcs", "tetra.bl_data_fcs_element",
10246 FT_NONE, BASE_NONE, NULL, 0,
10247 "D_BL_DATA_FCS", HFILL }},
10248 { &hf_tetra_bl_udata_fcs_01,
10249 { "bl-udata-fcs", "tetra.bl_udata_fcs_element",
10250 FT_NONE, BASE_NONE, NULL, 0,
10251 "D_MLE_PDU_FCS", HFILL }},
10252 { &hf_tetra_bl_ack_fcs_01,
10253 { "bl-ack-fcs", "tetra.bl_ack_fcs_element",
10254 FT_NONE, BASE_NONE, NULL, 0,
10255 "D_BL_ACK_FCS", HFILL }},
10256 { &hf_tetra_tl_sdu_01,
10257 { "tl-sdu", "tetra.tl_sdu",
10258 FT_UINT32, BASE_DEC, VALS(tetra_D_MLE_PDU_vals), 0,
10259 "D_MLE_PDU", HFILL }},
10260 { &hf_tetra_d_mle_pdu,
10261 { "d-mle-pdu", "tetra.d_mle_pdu",
10262 FT_UINT32, BASE_DEC, VALS(tetra_D_MLE_PDU_vals), 0,
10263 NULL, HFILL }},
10264 { &hf_tetra_mm_01,
10265 { "mm", "tetra.mm",
10266 FT_UINT32, BASE_DEC, VALS(tetra_D_MM_PDU_vals), 0,
10267 "D_MM_PDU", HFILL }},
10268 { &hf_tetra_cmce_01,
10269 { "cmce", "tetra.cmce",
10270 FT_UINT32, BASE_DEC, VALS(tetra_D_CMCE_PDU_vals), 0,
10271 "D_CMCE_PDU", HFILL }},
10272 { &hf_tetra_mle_01,
10273 { "mle", "tetra.mle",
10274 FT_UINT32, BASE_DEC, VALS(tetra_DMLE_PDU_vals), 0,
10275 "DMLE_PDU", HFILL }},
10276 { &hf_tetra_u_prepare,
10277 { "u-prepare", "tetra.u_prepare_element",
10278 FT_NONE, BASE_NONE, NULL, 0,
10279 NULL, HFILL }},
10280 { &hf_tetra_umle_reserved1,
10281 { "umle-reserved1", "tetra.umle_reserved1_element",
10282 FT_NONE, BASE_NONE, NULL, 0,
10283 NULL, HFILL }},
10284 { &hf_tetra_umle_reserved2,
10285 { "umle-reserved2", "tetra.umle_reserved2_element",
10286 FT_NONE, BASE_NONE, NULL, 0,
10287 NULL, HFILL }},
10288 { &hf_tetra_umle_reserved3,
10289 { "umle-reserved3", "tetra.umle_reserved3_element",
10290 FT_NONE, BASE_NONE, NULL, 0,
10291 NULL, HFILL }},
10292 { &hf_tetra_u_restore,
10293 { "u-restore", "tetra.u_restore_element",
10294 FT_NONE, BASE_NONE, NULL, 0,
10295 NULL, HFILL }},
10296 { &hf_tetra_umle_reserved4,
10297 { "umle-reserved4", "tetra.umle_reserved4_element",
10298 FT_NONE, BASE_NONE, NULL, 0,
10299 NULL, HFILL }},
10300 { &hf_tetra_umle_reserved5,
10301 { "umle-reserved5", "tetra.umle_reserved5_element",
10302 FT_NONE, BASE_NONE, NULL, 0,
10303 NULL, HFILL }},
10304 { &hf_tetra_umle_reserved6,
10305 { "umle-reserved6", "tetra.umle_reserved6_element",
10306 FT_NONE, BASE_NONE, NULL, 0,
10307 NULL, HFILL }},
10308 { &hf_tetra_d_new_cell,
10309 { "d-new-cell", "tetra.d_new_cell_element",
10310 FT_NONE, BASE_NONE, NULL, 0,
10311 NULL, HFILL }},
10312 { &hf_tetra_d_prepare_fail,
10313 { "d-prepare-fail", "tetra.d_prepare_fail_element",
10314 FT_NONE, BASE_NONE, NULL, 0,
10315 NULL, HFILL }},
10316 { &hf_tetra_d_nwrk_broadcast,
10317 { "d-nwrk-broadcast", "tetra.d_nwrk_broadcast_element",
10318 FT_NONE, BASE_NONE, NULL, 0,
10319 "D_NWRK_BRDADCAST", HFILL }},
10320 { &hf_tetra_dmle_reserved1,
10321 { "dmle-reserved1", "tetra.dmle_reserved1_element",
10322 FT_NONE, BASE_NONE, NULL, 0,
10323 NULL, HFILL }},
10324 { &hf_tetra_d_restore_ack,
10325 { "d-restore-ack", "tetra.d_restore_ack_element",
10326 FT_NONE, BASE_NONE, NULL, 0,
10327 NULL, HFILL }},
10328 { &hf_tetra_d_restore_fail,
10329 { "d-restore-fail", "tetra.d_restore_fail_element",
10330 FT_NONE, BASE_NONE, NULL, 0,
10331 NULL, HFILL }},
10332 { &hf_tetra_dmle_reserved2,
10333 { "dmle-reserved2", "tetra.dmle_reserved2_element",
10334 FT_NONE, BASE_NONE, NULL, 0,
10335 NULL, HFILL }},
10336 { &hf_tetra_dmle_reserved3,
10337 { "dmle-reserved3", "tetra.dmle_reserved3_element",
10338 FT_NONE, BASE_NONE, NULL, 0,
10339 NULL, HFILL }},
10340 { &hf_tetra_optional_elements,
10341 { "optional-elements", "tetra.optional_elements",
10342 FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_vals), 0,
10343 NULL, HFILL }},
10344 { &hf_tetra_no_type2,
10345 { "no-type2", "tetra.no_type2_element",
10346 FT_NONE, BASE_NONE, NULL, 0,
10347 NULL, HFILL }},
10348 { &hf_tetra_type2_parameters,
10349 { "type2-parameters", "tetra.type2_parameters_element",
10350 FT_NONE, BASE_NONE, NULL, 0,
10351 NULL, HFILL }},
10352 { &hf_tetra_cell_number,
10353 { "cell-number", "tetra.cell_number",
10354 FT_UINT32, BASE_DEC, VALS(tetra_T_cell_number_vals), 0,
10355 NULL, HFILL }},
10356 { &hf_tetra_cell_number_01,
10357 { "cell-number", "tetra.cell_number",
10358 FT_UINT32, BASE_DEC, NULL, 0,
10359 "INTEGER_0_65535", HFILL }},
10360 { &hf_tetra_sdu,
10361 { "sdu", "tetra.sdu",
10362 FT_BYTES, BASE_NONE, NULL, 0,
10363 "BIT_STRING", HFILL }},
10364 { &hf_tetra_optional_elements_01,
10365 { "optional-elements", "tetra.optional_elements",
10366 FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_01_vals), 0,
10367 "T_optional_elements_01", HFILL }},
10368 { &hf_tetra_type2_parameters_01,
10369 { "type2-parameters", "tetra.type2_parameters_element",
10370 FT_NONE, BASE_NONE, NULL, 0,
10371 "T_type2_parameters_01", HFILL }},
10372 { &hf_tetra_mcc_01,
10373 { "mcc", "tetra.mcc",
10374 FT_UINT32, BASE_DEC, VALS(tetra_T_mcc_vals), 0,
10375 NULL, HFILL }},
10376 { &hf_tetra_mnc_01,
10377 { "mnc", "tetra.mnc",
10378 FT_UINT32, BASE_DEC, VALS(tetra_T_mnc_vals), 0,
10379 NULL, HFILL }},
10380 { &hf_tetra_la_01,
10381 { "la", "tetra.la",
10382 FT_UINT32, BASE_DEC, VALS(tetra_T_la_vals), 0,
10383 NULL, HFILL }},
10384 { &hf_tetra_channel_command_valid,
10385 { "channel-command-valid", "tetra.channel_command_valid",
10386 FT_UINT32, BASE_DEC, NULL, 0,
10387 "INTEGER_0_3", HFILL }},
10388 { &hf_tetra_optional_elements_02,
10389 { "optional-elements", "tetra.optional_elements",
10390 FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_02_vals), 0,
10391 "T_optional_elements_02", HFILL }},
10392 { &hf_tetra_fail_cause,
10393 { "fail-cause", "tetra.fail_cause",
10394 FT_UINT32, BASE_DEC, NULL, 0,
10395 "INTEGER_0_3", HFILL }},
10396 { &hf_tetra_optional_elements_03,
10397 { "optional-elements", "tetra.optional_elements",
10398 FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_03_vals), 0,
10399 "T_optional_elements_03", HFILL }},
10400 { &hf_tetra_cell_re_select_parameters,
10401 { "cell-re-select-parameters", "tetra.cell_re_select_parameters",
10402 FT_UINT32, BASE_DEC, NULL, 0,
10403 "INTEGER_0_65535", HFILL }},
10404 { &hf_tetra_optional_elements_04,
10405 { "optional-elements", "tetra.optional_elements",
10406 FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_04_vals), 0,
10407 "T_optional_elements_04", HFILL }},
10408 { &hf_tetra_type2_parameters_02,
10409 { "type2-parameters", "tetra.type2_parameters_element",
10410 FT_NONE, BASE_NONE, NULL, 0,
10411 "T_type2_parameters_02", HFILL }},
10412 { &hf_tetra_tetra_network_time,
10413 { "tetra-network-time", "tetra.tetra_network_time",
10414 FT_UINT32, BASE_DEC, VALS(tetra_T_tetra_network_time_vals), 0,
10415 NULL, HFILL }},
10416 { &hf_tetra_tetra_network_time_01,
10417 { "tetra-network-time", "tetra.tetra_network_time_element",
10418 FT_NONE, BASE_NONE, NULL, 0,
10419 NULL, HFILL }},
10420 { &hf_tetra_number_of_neighbour_cells,
10421 { "number-of-neighbour-cells", "tetra.number_of_neighbour_cells",
10422 FT_UINT32, BASE_DEC, VALS(tetra_T_number_of_neighbour_cells_vals), 0,
10423 NULL, HFILL }},
10424 { &hf_tetra_number_of_neighbour_cells_01,
10425 { "number-of-neighbour-cells", "tetra.number_of_neighbour_cells",
10426 FT_UINT32, BASE_DEC, NULL, 0,
10427 "INTEGER_0_7", HFILL }},
10428 { &hf_tetra_network_time,
10429 { "network-time", "tetra.network_time",
10430 FT_UINT32, BASE_DEC, NULL, 0,
10431 NULL, HFILL }},
10432 { &hf_tetra_local_time_offset_sign,
10433 { "local-time-offset-sign", "tetra.local_time_offset_sign",
10434 FT_UINT32, BASE_DEC, NULL, 0,
10435 "INTEGER_0_1", HFILL }},
10436 { &hf_tetra_local_time_offset,
10437 { "local-time-offset", "tetra.local_time_offset",
10438 FT_UINT32, BASE_DEC, NULL, 0,
10439 "INTEGER_0_63", HFILL }},
10440 { &hf_tetra_year,
10441 { "year", "tetra.year",
10442 FT_UINT32, BASE_DEC, NULL, 0,
10443 "INTEGER_0_63", HFILL }},
10444 { &hf_tetra_reserved_04,
10445 { "reserved", "tetra.reserved",
10446 FT_UINT32, BASE_DEC, NULL, 0,
10447 NULL, HFILL }},
10448 { &hf_tetra_u_Authentication,
10449 { "u-Authentication", "tetra.u_Authentication_element",
10450 FT_NONE, BASE_NONE, NULL, 0,
10451 NULL, HFILL }},
10452 { &hf_tetra_u_Itsi_Detach,
10453 { "u-Itsi-Detach", "tetra.u_Itsi_Detach_element",
10454 FT_NONE, BASE_NONE, NULL, 0,
10455 NULL, HFILL }},
10456 { &hf_tetra_u_Location_Update_Demand,
10457 { "u-Location-Update-Demand", "tetra.u_Location_Update_Demand_element",
10458 FT_NONE, BASE_NONE, NULL, 0,
10459 NULL, HFILL }},
10460 { &hf_tetra_u_MM_Status,
10461 { "u-MM-Status", "tetra.u_MM_Status_element",
10462 FT_NONE, BASE_NONE, NULL, 0,
10463 NULL, HFILL }},
10464 { &hf_tetra_u_MM_reserved1,
10465 { "u-MM-reserved1", "tetra.u_MM_reserved1_element",
10466 FT_NONE, BASE_NONE, NULL, 0,
10467 NULL, HFILL }},
10468 { &hf_tetra_u_WK,
10469 { "u-WK", "tetra.u_WK_element",
10470 FT_NONE, BASE_NONE, NULL, 0,
10471 NULL, HFILL }},
10472 { &hf_tetra_u_MM_reserved3,
10473 { "u-MM-reserved3", "tetra.u_MM_reserved3_element",
10474 FT_NONE, BASE_NONE, NULL, 0,
10475 NULL, HFILL }},
10476 { &hf_tetra_u_Attach_Detach_Group_Identity,
10477 { "u-Attach-Detach-Group-Identity", "tetra.u_Attach_Detach_Group_Identity_element",
10478 FT_NONE, BASE_NONE, NULL, 0,
10479 NULL, HFILL }},
10480 { &hf_tetra_u_Attach_Detach_Group_Identity_Ack,
10481 { "u-Attach-Detach-Group-Identity-Ack", "tetra.u_Attach_Detach_Group_Identity_Ack_element",
10482 FT_NONE, BASE_NONE, NULL, 0,
10483 NULL, HFILL }},
10484 { &hf_tetra_u_TEI_Provide,
10485 { "u-TEI-Provide", "tetra.u_TEI_Provide_element",
10486 FT_NONE, BASE_NONE, NULL, 0,
10487 NULL, HFILL }},
10488 { &hf_tetra_u_MM_reserved6,
10489 { "u-MM-reserved6", "tetra.u_MM_reserved6_element",
10490 FT_NONE, BASE_NONE, NULL, 0,
10491 NULL, HFILL }},
10492 { &hf_tetra_u_Disabled_Status,
10493 { "u-Disabled-Status", "tetra.u_Disabled_Status_element",
10494 FT_NONE, BASE_NONE, NULL, 0,
10495 NULL, HFILL }},
10496 { &hf_tetra_u_MM_reserved7,
10497 { "u-MM-reserved7", "tetra.u_MM_reserved7_element",
10498 FT_NONE, BASE_NONE, NULL, 0,
10499 NULL, HFILL }},
10500 { &hf_tetra_u_MM_reserved8,
10501 { "u-MM-reserved8", "tetra.u_MM_reserved8_element",
10502 FT_NONE, BASE_NONE, NULL, 0,
10503 NULL, HFILL }},
10504 { &hf_tetra_u_MM_reserved9,
10505 { "u-MM-reserved9", "tetra.u_MM_reserved9_element",
10506 FT_NONE, BASE_NONE, NULL, 0,
10507 NULL, HFILL }},
10508 { &hf_tetra_u_MM_Function_Not_Support,
10509 { "u-MM-Function-Not-Support", "tetra.u_MM_Function_Not_Support_element",
10510 FT_NONE, BASE_NONE, NULL, 0,
10511 NULL, HFILL }},
10512 { &hf_tetra_d_Otar,
10513 { "d-Otar", "tetra.d_Otar_element",
10514 FT_NONE, BASE_NONE, NULL, 0,
10515 NULL, HFILL }},
10516 { &hf_tetra_d_Authentication,
10517 { "d-Authentication", "tetra.d_Authentication_element",
10518 FT_NONE, BASE_NONE, NULL, 0,
10519 NULL, HFILL }},
10520 { &hf_tetra_d_Authentication_Reject,
10521 { "d-Authentication-Reject", "tetra.d_Authentication_Reject_element",
10522 FT_NONE, BASE_NONE, NULL, 0,
10523 NULL, HFILL }},
10524 { &hf_tetra_d_Disable,
10525 { "d-Disable", "tetra.d_Disable_element",
10526 FT_NONE, BASE_NONE, NULL, 0,
10527 NULL, HFILL }},
10528 { &hf_tetra_d_Enable,
10529 { "d-Enable", "tetra.d_Enable_element",
10530 FT_NONE, BASE_NONE, NULL, 0,
10531 NULL, HFILL }},
10532 { &hf_tetra_d_Location_Update_Accept,
10533 { "d-Location-Update-Accept", "tetra.d_Location_Update_Accept_element",
10534 FT_NONE, BASE_NONE, NULL, 0,
10535 NULL, HFILL }},
10536 { &hf_tetra_d_Location_Update_Command,
10537 { "d-Location-Update-Command", "tetra.d_Location_Update_Command_element",
10538 FT_NONE, BASE_NONE, NULL, 0,
10539 NULL, HFILL }},
10540 { &hf_tetra_d_Location_Update_Reject,
10541 { "d-Location-Update-Reject", "tetra.d_Location_Update_Reject_element",
10542 FT_NONE, BASE_NONE, NULL, 0,
10543 NULL, HFILL }},
10544 { &hf_tetra_d_MM_reserved2,
10545 { "d-MM-reserved2", "tetra.d_MM_reserved2_element",
10546 FT_NONE, BASE_NONE, NULL, 0,
10547 NULL, HFILL }},
10548 { &hf_tetra_d_Location_Update_Proceeding,
10549 { "d-Location-Update-Proceeding", "tetra.d_Location_Update_Proceeding_element",
10550 FT_NONE, BASE_NONE, NULL, 0,
10551 NULL, HFILL }},
10552 { &hf_tetra_d_Attach_Detach_Group_Identity,
10553 { "d-Attach-Detach-Group-Identity", "tetra.d_Attach_Detach_Group_Identity_element",
10554 FT_NONE, BASE_NONE, NULL, 0,
10555 NULL, HFILL }},
10556 { &hf_tetra_d_Attach_Detach_Group_Identity_Ack,
10557 { "d-Attach-Detach-Group-Identity-Ack", "tetra.d_Attach_Detach_Group_Identity_Ack_element",
10558 FT_NONE, BASE_NONE, NULL, 0,
10559 NULL, HFILL }},
10560 { &hf_tetra_d_MM_Status,
10561 { "d-MM-Status", "tetra.d_MM_Status_element",
10562 FT_NONE, BASE_NONE, NULL, 0,
10563 NULL, HFILL }},
10564 { &hf_tetra_d_MM_reserved5,
10565 { "d-MM-reserved5", "tetra.d_MM_reserved5_element",
10566 FT_NONE, BASE_NONE, NULL, 0,
10567 NULL, HFILL }},
10568 { &hf_tetra_d_MM_reserved6,
10569 { "d-MM-reserved6", "tetra.d_MM_reserved6_element",
10570 FT_NONE, BASE_NONE, NULL, 0,
10571 NULL, HFILL }},
10572 { &hf_tetra_d_MM_Function_Not_Support,
10573 { "d-MM-Function-Not-Support", "tetra.d_MM_Function_Not_Support_element",
10574 FT_NONE, BASE_NONE, NULL, 0,
10575 NULL, HFILL }},
10576 { &hf_tetra_attach_detach_identifiet,
10577 { "attach-detach-identifiet", "tetra.attach_detach_identifiet",
10578 FT_UINT32, BASE_DEC, VALS(tetra_T_attach_detach_identifiet_vals), 0,
10579 NULL, HFILL }},
10580 { &hf_tetra_attach,
10581 { "attach", "tetra.attach_element",
10582 FT_NONE, BASE_NONE, NULL, 0,
10583 NULL, HFILL }},
10584 { &hf_tetra_lifetime,
10585 { "lifetime", "tetra.lifetime",
10586 FT_UINT32, BASE_DEC, NULL, 0,
10587 "INTEGER_0_3", HFILL }},
10588 { &hf_tetra_class_of_usage,
10589 { "class-of-usage", "tetra.class_of_usage",
10590 FT_UINT32, BASE_DEC, NULL, 0,
10591 "INTEGER_0_7", HFILL }},
10592 { &hf_tetra_detach,
10593 { "detach", "tetra.detach_element",
10594 FT_NONE, BASE_NONE, NULL, 0,
10595 NULL, HFILL }},
10596 { &hf_tetra_detach_downlike,
10597 { "detach-downlike", "tetra.detach_downlike",
10598 FT_UINT32, BASE_DEC, VALS(tetra_T_detach_downlike_vals), 0,
10599 NULL, HFILL }},
10600 { &hf_tetra_address_type,
10601 { "address-type", "tetra.address_type",
10602 FT_UINT32, BASE_DEC, VALS(tetra_T_address_type_vals), 0,
10603 NULL, HFILL }},
10604 { &hf_tetra_gssi_01,
10605 { "gssi", "tetra.gssi",
10606 FT_BYTES, BASE_NONE, NULL, 0,
10607 "OCTET_STRING_SIZE_3", HFILL }},
10608 { &hf_tetra_gssi_extension,
10609 { "gssi-extension", "tetra.gssi_extension_element",
10610 FT_NONE, BASE_NONE, NULL, 0,
10611 NULL, HFILL }},
10612 { &hf_tetra_extension,
10613 { "extension", "tetra.extension",
10614 FT_BYTES, BASE_NONE, NULL, 0,
10615 "OCTET_STRING_SIZE_3", HFILL }},
10616 { &hf_tetra_vgssi,
10617 { "vgssi", "tetra.vgssi",
10618 FT_BYTES, BASE_NONE, NULL, 0,
10619 "OCTET_STRING_SIZE_3", HFILL }},
10620 { &hf_tetra_attach_detach_identifiet_01,
10621 { "attach-detach-identifiet", "tetra.attach_detach_identifiet",
10622 FT_UINT32, BASE_DEC, VALS(tetra_T_attach_detach_identifiet_01_vals), 0,
10623 "T_attach_detach_identifiet_01", HFILL }},
10624 { &hf_tetra_attach_01,
10625 { "attach", "tetra.attach_element",
10626 FT_NONE, BASE_NONE, NULL, 0,
10627 "T_attach_01", HFILL }},
10628 { &hf_tetra_detach_01,
10629 { "detach", "tetra.detach_element",
10630 FT_NONE, BASE_NONE, NULL, 0,
10631 "T_detach_01", HFILL }},
10632 { &hf_tetra_detach_uplike,
10633 { "detach-uplike", "tetra.detach_uplike",
10634 FT_UINT32, BASE_DEC, VALS(tetra_T_detach_uplike_vals), 0,
10635 NULL, HFILL }},
10636 { &hf_tetra_address_type_01,
10637 { "address-type", "tetra.address_type",
10638 FT_UINT32, BASE_DEC, VALS(tetra_T_address_type_01_vals), 0,
10639 "T_address_type_01", HFILL }},
10640 { &hf_tetra_gssi_extension_01,
10641 { "gssi-extension", "tetra.gssi_extension_element",
10642 FT_NONE, BASE_NONE, NULL, 0,
10643 "T_gssi_extension_01", HFILL }},
10644 { &hf_tetra_location_update_type,
10645 { "location-update-type", "tetra.location_update_type",
10646 FT_UINT32, BASE_DEC, VALS(tetra_UPDATE_TYPE_vals), 0,
10647 "UPDATE_TYPE", HFILL }},
10648 { &hf_tetra_optional_elements_05,
10649 { "optional-elements", "tetra.optional_elements",
10650 FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_05_vals), 0,
10651 "T_optional_elements_05", HFILL }},
10652 { &hf_tetra_type2_parameters_03,
10653 { "type2-parameters", "tetra.type2_parameters_element",
10654 FT_NONE, BASE_NONE, NULL, 0,
10655 "T_type2_parameters_03", HFILL }},
10656 { &hf_tetra_ssi_02,
10657 { "ssi", "tetra.ssi",
10658 FT_UINT32, BASE_DEC, VALS(tetra_T_ssi_vals), 0,
10659 NULL, HFILL }},
10660 { &hf_tetra_ssi_03,
10661 { "ssi", "tetra.ssi",
10662 FT_BYTES, BASE_NONE, NULL, 0,
10663 "OCTET_STRING_SIZE_3", HFILL }},
10664 { &hf_tetra_address_extension,
10665 { "address-extension", "tetra.address_extension",
10666 FT_UINT32, BASE_DEC, VALS(tetra_T_address_extension_vals), 0,
10667 NULL, HFILL }},
10668 { &hf_tetra_address_extension_01,
10669 { "address-extension", "tetra.address_extension",
10670 FT_BYTES, BASE_NONE, NULL, 0,
10671 "OCTET_STRING_SIZE_3", HFILL }},
10672 { &hf_tetra_subscriber_class_01,
10673 { "subscriber-class", "tetra.subscriber_class",
10674 FT_UINT32, BASE_DEC, VALS(tetra_T_subscriber_class_vals), 0,
10675 NULL, HFILL }},
10676 { &hf_tetra_energy_saving_mode,
10677 { "energy-saving-mode", "tetra.energy_saving_mode",
10678 FT_UINT32, BASE_DEC, VALS(tetra_T_energy_saving_mode_vals), 0,
10679 NULL, HFILL }},
10680 { &hf_tetra_energy_saving_mode_01,
10681 { "energy-saving-mode", "tetra.energy_saving_mode",
10682 FT_UINT32, BASE_DEC, NULL, 0,
10683 "INTEGER_0_7", HFILL }},
10684 { &hf_tetra_scch_info,
10685 { "scch-info", "tetra.scch_info",
10686 FT_UINT32, BASE_DEC, VALS(tetra_T_scch_info_vals), 0,
10687 NULL, HFILL }},
10688 { &hf_tetra_scch_info_01,
10689 { "scch-info", "tetra.scch_info",
10690 FT_UINT32, BASE_DEC, NULL, 0,
10691 "INTEGER_0_16383", HFILL }},
10692 { &hf_tetra_type3,
10693 { "type3", "tetra.type3",
10694 FT_UINT32, BASE_DEC, VALS(tetra_T_type3_vals), 0,
10695 NULL, HFILL }},
10696 { &hf_tetra_no_type3,
10697 { "no-type3", "tetra.no_type3_element",
10698 FT_NONE, BASE_NONE, NULL, 0,
10699 NULL, HFILL }},
10700 { &hf_tetra_type3_elements,
10701 { "type3-elements", "tetra.type3_elements_element",
10702 FT_NONE, BASE_NONE, NULL, 0,
10703 NULL, HFILL }},
10704 { &hf_tetra_type2_existance,
10705 { "type2-existance", "tetra.type2_existance",
10706 FT_BOOLEAN, BASE_NONE, NULL, 0,
10707 "BOOLEAN", HFILL }},
10708 { &hf_tetra_type3_identifier,
10709 { "type3-identifier", "tetra.type3_identifier",
10710 FT_UINT32, BASE_DEC, VALS(tetra_TYPE3_IDENTIFIER_vals), 0,
10711 NULL, HFILL }},
10712 { &hf_tetra_new_ra,
10713 { "new-ra", "tetra.new_ra",
10714 FT_UINT32, BASE_DEC, VALS(tetra_T_new_ra_vals), 0,
10715 NULL, HFILL }},
10716 { &hf_tetra_new_ra_01,
10717 { "new-ra", "tetra.new_ra",
10718 FT_UINT32, BASE_DEC, NULL, 0,
10719 "INTEGER_0_3", HFILL }},
10720 { &hf_tetra_group_identity_location_accept,
10721 { "group-identity-location-accept", "tetra.group_identity_location_accept",
10722 FT_UINT32, BASE_DEC, VALS(tetra_T_group_identity_location_accept_vals), 0,
10723 NULL, HFILL }},
10724 { &hf_tetra_group_identity_location_accept_01,
10725 { "group-identity-location-accept", "tetra.group_identity_location_accept",
10726 FT_UINT32, BASE_DEC, NULL, 0,
10727 "INTEGER_0_3", HFILL }},
10728 { &hf_tetra_group_predefined_lifetime,
10729 { "group-predefined-lifetime", "tetra.group_predefined_lifetime",
10730 FT_UINT32, BASE_DEC, VALS(tetra_T_group_predefined_lifetime_vals), 0,
10731 NULL, HFILL }},
10732 { &hf_tetra_group_predefined_lifetime_01,
10733 { "group-predefined-lifetime", "tetra.group_predefined_lifetime",
10734 FT_UINT32, BASE_DEC, NULL, 0,
10735 "INTEGER_0_3", HFILL }},
10736 { &hf_tetra_group_identity_downlink,
10737 { "group-identity-downlink", "tetra.group_identity_downlink",
10738 FT_UINT32, BASE_DEC, VALS(tetra_T_group_identity_downlink_vals), 0,
10739 NULL, HFILL }},
10740 { &hf_tetra_group_identity_downlink_01,
10741 { "group-identity-downlink", "tetra.group_identity_downlink",
10742 FT_UINT32, BASE_DEC, NULL, 0,
10743 "INTEGER_0_15", HFILL }},
10744 { &hf_tetra_proprietary,
10745 { "proprietary", "tetra.proprietary",
10746 FT_UINT32, BASE_DEC, VALS(tetra_T_proprietary_vals), 0,
10747 NULL, HFILL }},
10748 { &hf_tetra_proprietary_01,
10749 { "proprietary", "tetra.proprietary",
10750 FT_UINT32, BASE_DEC, NULL, 0,
10751 "INTEGER_0_7", HFILL }},
10752 { &hf_tetra_reject_cause,
10753 { "reject-cause", "tetra.reject_cause",
10754 FT_UINT32, BASE_DEC, NULL, 0,
10755 "INTEGER_0_31", HFILL }},
10756 { &hf_tetra_cipher_control,
10757 { "cipher-control", "tetra.cipher_control",
10758 FT_BOOLEAN, BASE_NONE, NULL, 0,
10759 "BOOLEAN", HFILL }},
10760 { &hf_tetra_status_uplink,
10761 { "status-uplink", "tetra.status_uplink",
10762 FT_UINT32, BASE_DEC, NULL, 0,
10763 "INTEGER_0_63", HFILL }},
10764 { &hf_tetra_scanning_on_off,
10765 { "scanning-on-off", "tetra.scanning_on_off",
10766 FT_UINT32, BASE_DEC, VALS(tetra_T_scanning_on_off_vals), 0,
10767 NULL, HFILL }},
10768 { &hf_tetra_status_downlink,
10769 { "status-downlink", "tetra.status_downlink",
10770 FT_UINT32, BASE_DEC, NULL, 0,
10771 "INTEGER_0_63", HFILL }},
10772 { &hf_tetra_u_Alert,
10773 { "u-Alert", "tetra.u_Alert_element",
10774 FT_NONE, BASE_NONE, NULL, 0,
10775 NULL, HFILL }},
10776 { &hf_tetra_reserved1,
10777 { "reserved1", "tetra.reserved1_element",
10778 FT_NONE, BASE_NONE, NULL, 0,
10779 NULL, HFILL }},
10780 { &hf_tetra_u_Connect,
10781 { "u-Connect", "tetra.u_Connect_element",
10782 FT_NONE, BASE_NONE, NULL, 0,
10783 NULL, HFILL }},
10784 { &hf_tetra_reserved2,
10785 { "reserved2", "tetra.reserved2_element",
10786 FT_NONE, BASE_NONE, NULL, 0,
10787 NULL, HFILL }},
10788 { &hf_tetra_u_Disconnect,
10789 { "u-Disconnect", "tetra.u_Disconnect_element",
10790 FT_NONE, BASE_NONE, NULL, 0,
10791 NULL, HFILL }},
10792 { &hf_tetra_u_Info,
10793 { "u-Info", "tetra.u_Info_element",
10794 FT_NONE, BASE_NONE, NULL, 0,
10795 NULL, HFILL }},
10796 { &hf_tetra_u_Release,
10797 { "u-Release", "tetra.u_Release_element",
10798 FT_NONE, BASE_NONE, NULL, 0,
10799 NULL, HFILL }},
10800 { &hf_tetra_u_Setup,
10801 { "u-Setup", "tetra.u_Setup_element",
10802 FT_NONE, BASE_NONE, NULL, 0,
10803 NULL, HFILL }},
10804 { &hf_tetra_u_Status,
10805 { "u-Status", "tetra.u_Status_element",
10806 FT_NONE, BASE_NONE, NULL, 0,
10807 NULL, HFILL }},
10808 { &hf_tetra_u_Tx_Ceased,
10809 { "u-Tx-Ceased", "tetra.u_Tx_Ceased_element",
10810 FT_NONE, BASE_NONE, NULL, 0,
10811 NULL, HFILL }},
10812 { &hf_tetra_u_Tx_Demand,
10813 { "u-Tx-Demand", "tetra.u_Tx_Demand_element",
10814 FT_NONE, BASE_NONE, NULL, 0,
10815 NULL, HFILL }},
10816 { &hf_tetra_reserved3,
10817 { "reserved3", "tetra.reserved3_element",
10818 FT_NONE, BASE_NONE, NULL, 0,
10819 NULL, HFILL }},
10820 { &hf_tetra_reserved4,
10821 { "reserved4", "tetra.reserved4_element",
10822 FT_NONE, BASE_NONE, NULL, 0,
10823 NULL, HFILL }},
10824 { &hf_tetra_reserved5,
10825 { "reserved5", "tetra.reserved5_element",
10826 FT_NONE, BASE_NONE, NULL, 0,
10827 NULL, HFILL }},
10828 { &hf_tetra_u_Call_Restore,
10829 { "u-Call-Restore", "tetra.u_Call_Restore_element",
10830 FT_NONE, BASE_NONE, NULL, 0,
10831 NULL, HFILL }},
10832 { &hf_tetra_u_SDS_Data,
10833 { "u-SDS-Data", "tetra.u_SDS_Data_element",
10834 FT_NONE, BASE_NONE, NULL, 0,
10835 NULL, HFILL }},
10836 { &hf_tetra_u_Facility,
10837 { "u-Facility", "tetra.u_Facility_element",
10838 FT_NONE, BASE_NONE, NULL, 0,
10839 NULL, HFILL }},
10840 { &hf_tetra_call_identifier,
10841 { "call-identifier", "tetra.call_identifier",
10842 FT_UINT32, BASE_DEC, NULL, 0,
10843 "INTEGER_0_16383", HFILL }},
10844 { &hf_tetra_disconnect_cause,
10845 { "disconnect-cause", "tetra.disconnect_cause",
10846 FT_UINT32, BASE_DEC, NULL, 0,
10847 "INTEGER_0_31", HFILL }},
10848 { &hf_tetra_area_selection,
10849 { "area-selection", "tetra.area_selection",
10850 FT_UINT32, BASE_DEC, NULL, 0,
10851 "INTEGER_0_15", HFILL }},
10852 { &hf_tetra_called_party_type_identifier,
10853 { "called-party-type-identifier", "tetra.called_party_type_identifier",
10854 FT_UINT32, BASE_DEC, VALS(tetra_T_called_party_type_identifier_vals), 0,
10855 NULL, HFILL }},
10856 { &hf_tetra_sna,
10857 { "sna", "tetra.sna",
10858 FT_UINT32, BASE_DEC, NULL, 0,
10859 "INTEGER_0_255", HFILL }},
10860 { &hf_tetra_ssi_extension,
10861 { "ssi-extension", "tetra.ssi_extension",
10862 FT_BYTES, BASE_NONE, NULL, 0,
10863 "BIT_STRING_SIZE_48", HFILL }},
10864 { &hf_tetra_short_data_type_identifier,
10865 { "short-data-type-identifier", "tetra.short_data_type_identifier",
10866 FT_UINT32, BASE_DEC, VALS(tetra_T_short_data_type_identifier_vals), 0,
10867 "T_short_data_type_identifier", HFILL }},
10868 { &hf_tetra_data_1,
10869 { "data-1", "tetra.data_1",
10870 FT_UINT32, BASE_DEC, NULL, 0,
10871 "INTEGER_0_65535", HFILL }},
10872 { &hf_tetra_data_2,
10873 { "data-2", "tetra.data_2",
10874 FT_BYTES, BASE_NONE, NULL, 0,
10875 "OCTET_STRING_SIZE_4", HFILL }},
10876 { &hf_tetra_data_3,
10877 { "data-3", "tetra.data_3",
10878 FT_BYTES, BASE_NONE, NULL, 0,
10879 "BIT_STRING_SIZE_64", HFILL }},
10880 { &hf_tetra_length_indicator_data_4,
10881 { "length-indicator-data-4", "tetra.length_indicator_data_4",
10882 FT_UINT32, BASE_DEC, NULL, 0,
10883 "INTEGER_0_4194304", HFILL }},
10884 { &hf_tetra_called_party_type_identifier_01,
10885 { "called-party-type-identifier", "tetra.called_party_type_identifier",
10886 FT_UINT32, BASE_DEC, VALS(tetra_T_called_party_type_identifier_01_vals), 0,
10887 "T_called_party_type_identifier_01", HFILL }},
10888 { &hf_tetra_short_number_address,
10889 { "short-number-address", "tetra.short_number_address",
10890 FT_UINT32, BASE_DEC, NULL, 0,
10891 "INTEGER_0_255", HFILL }},
10892 { &hf_tetra_called_ssi_called_extension,
10893 { "called-ssi-called-extension", "tetra.called_ssi_called_extension",
10894 FT_BYTES, BASE_NONE, NULL, 0,
10895 "BIT_STRING_SIZE_48", HFILL }},
10896 { &hf_tetra_pre_coded_status,
10897 { "pre-coded-status", "tetra.pre_coded_status",
10898 FT_UINT32, BASE_DEC, NULL, 0,
10899 "INTEGER_0_65535", HFILL }},
10900 { &hf_tetra_call_id,
10901 { "call-id", "tetra.call_id",
10902 FT_UINT32, BASE_DEC, NULL, 0,
10903 "INTEGER_0_16383", HFILL }},
10904 { &hf_tetra_poll_response,
10905 { "poll-response", "tetra.poll_response",
10906 FT_UINT32, BASE_DEC, NULL, 0,
10907 "INTEGER_0_1", HFILL }},
10908 { &hf_tetra_d_Alert,
10909 { "d-Alert", "tetra.d_Alert_element",
10910 FT_NONE, BASE_NONE, NULL, 0,
10911 NULL, HFILL }},
10912 { &hf_tetra_d_Call_Proceeding,
10913 { "d-Call-Proceeding", "tetra.d_Call_Proceeding_element",
10914 FT_NONE, BASE_NONE, NULL, 0,
10915 NULL, HFILL }},
10916 { &hf_tetra_d_Connect,
10917 { "d-Connect", "tetra.d_Connect_element",
10918 FT_NONE, BASE_NONE, NULL, 0,
10919 NULL, HFILL }},
10920 { &hf_tetra_d_Connect_Ack,
10921 { "d-Connect-Ack", "tetra.d_Connect_Ack_element",
10922 FT_NONE, BASE_NONE, NULL, 0,
10923 NULL, HFILL }},
10924 { &hf_tetra_d_Disconnect,
10925 { "d-Disconnect", "tetra.d_Disconnect_element",
10926 FT_NONE, BASE_NONE, NULL, 0,
10927 NULL, HFILL }},
10928 { &hf_tetra_d_Info,
10929 { "d-Info", "tetra.d_Info_element",
10930 FT_NONE, BASE_NONE, NULL, 0,
10931 NULL, HFILL }},
10932 { &hf_tetra_d_Release,
10933 { "d-Release", "tetra.d_Release_element",
10934 FT_NONE, BASE_NONE, NULL, 0,
10935 NULL, HFILL }},
10936 { &hf_tetra_d_Setup,
10937 { "d-Setup", "tetra.d_Setup_element",
10938 FT_NONE, BASE_NONE, NULL, 0,
10939 NULL, HFILL }},
10940 { &hf_tetra_d_Status,
10941 { "d-Status", "tetra.d_Status_element",
10942 FT_NONE, BASE_NONE, NULL, 0,
10943 NULL, HFILL }},
10944 { &hf_tetra_d_Tx_Ceased,
10945 { "d-Tx-Ceased", "tetra.d_Tx_Ceased_element",
10946 FT_NONE, BASE_NONE, NULL, 0,
10947 NULL, HFILL }},
10948 { &hf_tetra_d_Tx_Continue,
10949 { "d-Tx-Continue", "tetra.d_Tx_Continue_element",
10950 FT_NONE, BASE_NONE, NULL, 0,
10951 NULL, HFILL }},
10952 { &hf_tetra_d_Tx_Granted,
10953 { "d-Tx-Granted", "tetra.d_Tx_Granted_element",
10954 FT_NONE, BASE_NONE, NULL, 0,
10955 NULL, HFILL }},
10956 { &hf_tetra_d_Tx_Wait,
10957 { "d-Tx-Wait", "tetra.d_Tx_Wait_element",
10958 FT_NONE, BASE_NONE, NULL, 0,
10959 NULL, HFILL }},
10960 { &hf_tetra_d_Tx_Interrupt,
10961 { "d-Tx-Interrupt", "tetra.d_Tx_Interrupt_element",
10962 FT_NONE, BASE_NONE, NULL, 0,
10963 NULL, HFILL }},
10964 { &hf_tetra_d_Call_Restore,
10965 { "d-Call-Restore", "tetra.d_Call_Restore_element",
10966 FT_NONE, BASE_NONE, NULL, 0,
10967 NULL, HFILL }},
10968 { &hf_tetra_d_SDS_Data,
10969 { "d-SDS-Data", "tetra.d_SDS_Data_element",
10970 FT_NONE, BASE_NONE, NULL, 0,
10971 NULL, HFILL }},
10972 { &hf_tetra_d_Facility,
10973 { "d-Facility", "tetra.d_Facility_element",
10974 FT_NONE, BASE_NONE, NULL, 0,
10975 NULL, HFILL }},
10976 { &hf_tetra_calling_party_type_identifier,
10977 { "calling-party-type-identifier", "tetra.calling_party_type_identifier",
10978 FT_UINT32, BASE_DEC, VALS(tetra_T_calling_party_type_identifier_vals), 0,
10979 NULL, HFILL }},
10980 { &hf_tetra_ssi_extension_01,
10981 { "ssi-extension", "tetra.ssi_extension",
10982 FT_BYTES, BASE_NONE, NULL, 0,
10983 "OCTET_STRING_SIZE_6", HFILL }},
10984 { &hf_tetra_short_data_type_identifier_01,
10985 { "short-data-type-identifier", "tetra.short_data_type_identifier",
10986 FT_UINT32, BASE_DEC, VALS(tetra_T_short_data_type_identifier_01_vals), 0,
10987 "T_short_data_type_identifier_01", HFILL }},
10988 { &hf_tetra_data_3_01,
10989 { "data-3", "tetra.data_3",
10990 FT_BYTES, BASE_NONE, NULL, 0,
10991 "OCTET_STRING_SIZE_8", HFILL }},
10992 { &hf_tetra_calling_party_type_identifier_01,
10993 { "calling-party-type-identifier", "tetra.calling_party_type_identifier",
10994 FT_UINT32, BASE_DEC, VALS(tetra_T_calling_party_type_identifier_01_vals), 0,
10995 "T_calling_party_type_identifier_01", HFILL }},
10996 { &hf_tetra_calling_party_address_SSI,
10997 { "calling-party-address-SSI", "tetra.calling_party_address_SSI",
10998 FT_UINT32, BASE_DEC, NULL, 0,
10999 "INTEGER_0_16777215", HFILL }},
11000 { &hf_tetra_reset_call_time_out_timer,
11001 { "reset-call-time-out-timer", "tetra.reset_call_time_out_timer",
11002 FT_UINT32, BASE_DEC, NULL, 0,
11003 "INTEGER_0_1", HFILL }},
11004 { &hf_tetra_poll_request,
11005 { "poll-request", "tetra.poll_request",
11006 FT_UINT32, BASE_DEC, NULL, 0,
11007 "INTEGER_0_1", HFILL }},
11008 { &hf_tetra_transmission_request_permission,
11009 { "transmission-request-permission", "tetra.transmission_request_permission",
11010 FT_UINT32, BASE_DEC, NULL, 0,
11011 "INTEGER_0_1", HFILL }},
11012 { &hf_tetra_continue,
11013 { "continue", "tetra.continue",
11014 FT_UINT32, BASE_DEC, NULL, 0,
11015 "INTEGER_0_1", HFILL }},
11016 { &hf_tetra_request_to_append_LA,
11017 { "request-to-append-LA", "tetra.request_to_append_LA",
11018 FT_BOOLEAN, BASE_NONE, NULL, 0,
11019 "BOOLEAN", HFILL }},
11020 { &hf_tetra_cipher_control_01,
11021 { "cipher-control", "tetra.cipher_control",
11022 FT_UINT32, BASE_DEC, VALS(tetra_T_cipher_control_vals), 0,
11023 NULL, HFILL }},
11024 { &hf_tetra_no_cipher,
11025 { "no-cipher", "tetra.no_cipher_element",
11026 FT_NONE, BASE_NONE, NULL, 0,
11027 NULL, HFILL }},
11028 { &hf_tetra_ciphering_parameters,
11029 { "ciphering-parameters", "tetra.ciphering_parameters",
11030 FT_UINT32, BASE_DEC, NULL, 0,
11031 "INTEGER_0_1023", HFILL }},
11032 { &hf_tetra_optional_elements_06,
11033 { "optional-elements", "tetra.optional_elements",
11034 FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_06_vals), 0,
11035 "T_optional_elements_06", HFILL }},
11036 { &hf_tetra_type2_parameters_04,
11037 { "type2-parameters", "tetra.type2_parameters_element",
11038 FT_NONE, BASE_NONE, NULL, 0,
11039 "T_type2_parameters_04", HFILL }},
11040 { &hf_tetra_class_of_MS,
11041 { "class-of-MS", "tetra.class_of_MS",
11042 FT_UINT32, BASE_DEC, VALS(tetra_T_class_of_MS_vals), 0,
11043 NULL, HFILL }},
11044 { &hf_tetra_class_of_MS_01,
11045 { "class-of-MS", "tetra.class_of_MS",
11046 FT_UINT32, BASE_DEC, NULL, 0,
11047 "INTEGER_0_16777215", HFILL }},
11048 { &hf_tetra_energy_saving_mode_02,
11049 { "energy-saving-mode", "tetra.energy_saving_mode",
11050 FT_UINT32, BASE_DEC, VALS(tetra_T_energy_saving_mode_01_vals), 0,
11051 "T_energy_saving_mode_01", HFILL }},
11052 { &hf_tetra_la_information,
11053 { "la-information", "tetra.la_information",
11054 FT_UINT32, BASE_DEC, VALS(tetra_T_la_information_vals), 0,
11055 NULL, HFILL }},
11056 { &hf_tetra_la_information_01,
11057 { "la-information", "tetra.la_information",
11058 FT_UINT32, BASE_DEC, NULL, 0,
11059 "INTEGER_0_16383", HFILL }},
11060 { &hf_tetra_ssi_04,
11061 { "ssi", "tetra.ssi",
11062 FT_UINT32, BASE_DEC, VALS(tetra_T_ssi_01_vals), 0,
11063 "T_ssi_01", HFILL }},
11064 { &hf_tetra_address_extension_02,
11065 { "address-extension", "tetra.address_extension",
11066 FT_UINT32, BASE_DEC, VALS(tetra_T_address_extension_01_vals), 0,
11067 "T_address_extension_01", HFILL }},
11068 { &hf_tetra_type3_01,
11069 { "type3", "tetra.type3",
11070 FT_UINT32, BASE_DEC, VALS(tetra_T_type3_01_vals), 0,
11071 "T_type3_01", HFILL }},
11072 { &hf_tetra_type3_elements_01,
11073 { "type3-elements", "tetra.type3_elements_element",
11074 FT_NONE, BASE_NONE, NULL, 0,
11075 "T_type3_elements_01", HFILL }},
11076 { &hf_tetra_group_identity_location_demand,
11077 { "group-identity-location-demand", "tetra.group_identity_location_demand",
11078 FT_UINT32, BASE_DEC, VALS(tetra_T_group_identity_location_demand_vals), 0,
11079 NULL, HFILL }},
11080 { &hf_tetra_group_identity_location_demand_01,
11081 { "group-identity-location-demand", "tetra.group_identity_location_demand",
11082 FT_UINT32, BASE_DEC, NULL, 0,
11083 "INTEGER_0_3", HFILL }},
11084 { &hf_tetra_group_report_response,
11085 { "group-report-response", "tetra.group_report_response",
11086 FT_UINT32, BASE_DEC, VALS(tetra_T_group_report_response_vals), 0,
11087 "T_group_report_response", HFILL }},
11088 { &hf_tetra_group_report_response_01,
11089 { "group-report-response", "tetra.group_report_response",
11090 FT_BOOLEAN, BASE_NONE, NULL, 0,
11091 "BOOLEAN", HFILL }},
11092 { &hf_tetra_group_identity_uplink,
11093 { "group-identity-uplink", "tetra.group_identity_uplink",
11094 FT_UINT32, BASE_DEC, VALS(tetra_T_group_identity_uplink_vals), 0,
11095 NULL, HFILL }},
11096 { &hf_tetra_group_identity_uplink_01,
11097 { "group-identity-uplink", "tetra.group_identity_uplink",
11098 FT_UINT32, BASE_DEC, NULL, 0,
11099 "INTEGER_0_15", HFILL }},
11100 { &hf_tetra_proprietary_02,
11101 { "proprietary", "tetra.proprietary",
11102 FT_UINT32, BASE_DEC, VALS(tetra_T_proprietary_01_vals), 0,
11103 "T_proprietary_01", HFILL }},
11104 { &hf_tetra_group_identity_report,
11105 { "group-identity-report", "tetra.group_identity_report",
11106 FT_BOOLEAN, BASE_NONE, NULL, 0,
11107 "BOOLEAN", HFILL }},
11108 { &hf_tetra_group_identity_attach_detach_mode,
11109 { "group-identity-attach-detach-mode", "tetra.group_identity_attach_detach_mode",
11110 FT_BOOLEAN, BASE_NONE, NULL, 0,
11111 "BOOLEAN", HFILL }},
11112 { &hf_tetra_optional_elements_07,
11113 { "optional-elements", "tetra.optional_elements",
11114 FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_07_vals), 0,
11115 "T_optional_elements_07", HFILL }},
11116 { &hf_tetra_type2_element,
11117 { "type2-element", "tetra.type2_element_element",
11118 FT_NONE, BASE_NONE, NULL, 0,
11119 NULL, HFILL }},
11120 { &hf_tetra_type3_02,
11121 { "type3", "tetra.type3",
11122 FT_UINT32, BASE_DEC, VALS(tetra_T_type3_02_vals), 0,
11123 "T_type3_02", HFILL }},
11124 { &hf_tetra_type3_elements_02,
11125 { "type3-elements", "tetra.type3_elements_element",
11126 FT_NONE, BASE_NONE, NULL, 0,
11127 "T_type3_elements_02", HFILL }},
11128 { &hf_tetra_length,
11129 { "length", "tetra.length",
11130 FT_UINT32, BASE_DEC, NULL, 0,
11131 "INTEGER_0_2047", HFILL }},
11132 { &hf_tetra_repeat_num,
11133 { "repeat-num", "tetra.repeat_num",
11134 FT_UINT32, BASE_DEC, NULL, 0,
11135 "INTEGER_0_63", HFILL }},
11136 { &hf_tetra_group_identity_uplink_02,
11137 { "group-identity-uplink", "tetra.group_identity_uplink_element",
11138 FT_NONE, BASE_NONE, NULL, 0,
11139 NULL, HFILL }},
11140 { &hf_tetra_group_identity_ack_type,
11141 { "group-identity-ack-type", "tetra.group_identity_ack_type",
11142 FT_BOOLEAN, BASE_NONE, NULL, 0,
11143 "BOOLEAN", HFILL }},
11144 { &hf_tetra_optional_elements_08,
11145 { "optional-elements", "tetra.optional_elements",
11146 FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_08_vals), 0,
11147 "T_optional_elements_08", HFILL }},
11148 { &hf_tetra_type2_element_01,
11149 { "type2-element", "tetra.type2_element_element",
11150 FT_NONE, BASE_NONE, NULL, 0,
11151 "T_type2_element_01", HFILL }},
11152 { &hf_tetra_type3_03,
11153 { "type3", "tetra.type3",
11154 FT_UINT32, BASE_DEC, VALS(tetra_T_type3_03_vals), 0,
11155 "T_type3_03", HFILL }},
11156 { &hf_tetra_type3_elements_03,
11157 { "type3-elements", "tetra.type3_elements_element",
11158 FT_NONE, BASE_NONE, NULL, 0,
11159 "T_type3_elements_03", HFILL }},
11160 { &hf_tetra_hook_method_selection,
11161 { "hook-method-selection", "tetra.hook_method_selection",
11162 FT_BOOLEAN, BASE_NONE, NULL, 0,
11163 "BOOLEAN", HFILL }},
11164 { &hf_tetra_simple_duplex_selection,
11165 { "simple-duplex-selection", "tetra.simple_duplex_selection",
11166 FT_UINT32, BASE_DEC, VALS(tetra_T_simple_duplex_selection_vals), 0,
11167 NULL, HFILL }},
11168 { &hf_tetra_basic_service_information,
11169 { "basic-service-information", "tetra.basic_service_information_element",
11170 FT_NONE, BASE_NONE, NULL, 0,
11171 NULL, HFILL }},
11172 { &hf_tetra_request_transmit_send_data,
11173 { "request-transmit-send-data", "tetra.request_transmit_send_data",
11174 FT_UINT32, BASE_DEC, NULL, 0,
11175 "INTEGER_0_1", HFILL }},
11176 { &hf_tetra_call_priority,
11177 { "call-priority", "tetra.call_priority",
11178 FT_UINT32, BASE_DEC, NULL, 0,
11179 "INTEGER_0_15", HFILL }},
11180 { &hf_tetra_clir_control,
11181 { "clir-control", "tetra.clir_control",
11182 FT_UINT32, BASE_DEC, NULL, 0,
11183 "INTEGER_0_3", HFILL }},
11184 { &hf_tetra_called_party_address,
11185 { "called-party-address", "tetra.called_party_address",
11186 FT_UINT32, BASE_DEC, VALS(tetra_Calling_party_address_type_vals), 0,
11187 "Called_party_address_type", HFILL }},
11188 { &hf_tetra_optional_elements_09,
11189 { "optional-elements", "tetra.optional_elements",
11190 FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_09_vals), 0,
11191 "T_optional_elements_09", HFILL }},
11192 { &hf_tetra_type2_parameters_05,
11193 { "type2-parameters", "tetra.type2_parameters_element",
11194 FT_NONE, BASE_NONE, NULL, 0,
11195 "T_type2_parameters_05", HFILL }},
11196 { &hf_tetra_external_subscriber_number,
11197 { "external-subscriber-number", "tetra.external_subscriber_number",
11198 FT_UINT32, BASE_DEC, VALS(tetra_T_external_subscriber_number_vals), 0,
11199 NULL, HFILL }},
11200 { &hf_tetra_external_subscriber_number_01,
11201 { "external-subscriber-number", "tetra.external_subscriber_number",
11202 FT_UINT32, BASE_DEC, NULL, 0,
11203 "INTEGER_0_31", HFILL }},
11204 { &hf_tetra_prop,
11205 { "prop", "tetra.prop",
11206 FT_UINT32, BASE_DEC, VALS(tetra_T_prop_vals), 0,
11207 NULL, HFILL }},
11208 { &hf_tetra_prop_01,
11209 { "prop", "tetra.prop_element",
11210 FT_NONE, BASE_NONE, NULL, 0,
11211 "Proprietary", HFILL }},
11212 { &hf_tetra_circuit_mode,
11213 { "circuit-mode", "tetra.circuit_mode",
11214 FT_UINT32, BASE_DEC, VALS(tetra_CIRCUIT_vals), 0,
11215 "CIRCUIT", HFILL }},
11216 { &hf_tetra_encryption,
11217 { "encryption", "tetra.encryption",
11218 FT_UINT32, BASE_DEC, NULL, 0,
11219 "INTEGER_0_1", HFILL }},
11220 { &hf_tetra_communication,
11221 { "communication", "tetra.communication",
11222 FT_UINT32, BASE_DEC, NULL, 0,
11223 "INTEGER_0_3", HFILL }},
11224 { &hf_tetra_slots_or_speech,
11225 { "slots-or-speech", "tetra.slots_or_speech",
11226 FT_UINT32, BASE_DEC, NULL, 0,
11227 "INTEGER_0_3", HFILL }},
11228 { &hf_tetra_call_identifier_01,
11229 { "call-identifier", "tetra.call_identifier",
11230 FT_UINT32, BASE_DEC, NULL, 0,
11231 "INTEGER_0_1023", HFILL }},
11232 { &hf_tetra_simplex_duplex_selection,
11233 { "simplex-duplex-selection", "tetra.simplex_duplex_selection",
11234 FT_UINT32, BASE_DEC, VALS(tetra_T_simplex_duplex_selection_vals), 0,
11235 NULL, HFILL }},
11236 { &hf_tetra_optional_elements_10,
11237 { "optional-elements", "tetra.optional_elements",
11238 FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_10_vals), 0,
11239 "T_optional_elements_10", HFILL }},
11240 { &hf_tetra_type2_parameters_06,
11241 { "type2-parameters", "tetra.type2_parameters_element",
11242 FT_NONE, BASE_NONE, NULL, 0,
11243 "T_type2_parameters_06", HFILL }},
11244 { &hf_tetra_basic_service_information_01,
11245 { "basic-service-information", "tetra.basic_service_information",
11246 FT_UINT32, BASE_DEC, VALS(tetra_T_basic_service_information_vals), 0,
11247 NULL, HFILL }},
11248 { &hf_tetra_prop_02,
11249 { "prop", "tetra.prop",
11250 FT_UINT32, BASE_DEC, VALS(tetra_T_prop_01_vals), 0,
11251 "T_prop_01", HFILL }},
11252 { &hf_tetra_simplex_duplex_selection_01,
11253 { "simplex-duplex-selection", "tetra.simplex_duplex_selection",
11254 FT_UINT32, BASE_DEC, VALS(tetra_T_simplex_duplex_selection_01_vals), 0,
11255 "T_simplex_duplex_selection_01", HFILL }},
11256 { &hf_tetra_optional_elements_11,
11257 { "optional-elements", "tetra.optional_elements",
11258 FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_11_vals), 0,
11259 "T_optional_elements_11", HFILL }},
11260 { &hf_tetra_type2_parameters_07,
11261 { "type2-parameters", "tetra.type2_parameters_element",
11262 FT_NONE, BASE_NONE, NULL, 0,
11263 "T_type2_parameters_07", HFILL }},
11264 { &hf_tetra_basic_service_information_02,
11265 { "basic-service-information", "tetra.basic_service_information",
11266 FT_UINT32, BASE_DEC, VALS(tetra_T_basic_service_information_01_vals), 0,
11267 "T_basic_service_information_01", HFILL }},
11268 { &hf_tetra_prop_03,
11269 { "prop", "tetra.prop",
11270 FT_UINT32, BASE_DEC, VALS(tetra_T_prop_02_vals), 0,
11271 "T_prop_02", HFILL }},
11272 { &hf_tetra_optional_elements_12,
11273 { "optional-elements", "tetra.optional_elements",
11274 FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_12_vals), 0,
11275 "T_optional_elements_12", HFILL }},
11276 { &hf_tetra_type2_parameters_08,
11277 { "type2-parameters", "tetra.type2_parameters_element",
11278 FT_NONE, BASE_NONE, NULL, 0,
11279 "T_type2_parameters_08", HFILL }},
11280 { &hf_tetra_prop_04,
11281 { "prop", "tetra.prop",
11282 FT_UINT32, BASE_DEC, VALS(tetra_T_prop_03_vals), 0,
11283 "T_prop_03", HFILL }},
11284 { &hf_tetra_tx_demand_priority,
11285 { "tx-demand-priority", "tetra.tx_demand_priority",
11286 FT_UINT32, BASE_DEC, NULL, 0,
11287 "INTEGER_0_3", HFILL }},
11288 { &hf_tetra_encryption_control,
11289 { "encryption-control", "tetra.encryption_control",
11290 FT_UINT32, BASE_DEC, NULL, 0,
11291 "INTEGER_0_1", HFILL }},
11292 { &hf_tetra_optional_elements_13,
11293 { "optional-elements", "tetra.optional_elements",
11294 FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_13_vals), 0,
11295 "T_optional_elements_13", HFILL }},
11296 { &hf_tetra_type2_parameters_09,
11297 { "type2-parameters", "tetra.type2_parameters_element",
11298 FT_NONE, BASE_NONE, NULL, 0,
11299 "T_type2_parameters_09", HFILL }},
11300 { &hf_tetra_prop_05,
11301 { "prop", "tetra.prop",
11302 FT_UINT32, BASE_DEC, VALS(tetra_T_prop_04_vals), 0,
11303 "T_prop_04", HFILL }},
11304 { &hf_tetra_optional_elements_14,
11305 { "optional-elements", "tetra.optional_elements",
11306 FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_14_vals), 0,
11307 "T_optional_elements_14", HFILL }},
11308 { &hf_tetra_type2_parameters_10,
11309 { "type2-parameters", "tetra.type2_parameters_element",
11310 FT_NONE, BASE_NONE, NULL, 0,
11311 "T_type2_parameters_10", HFILL }},
11312 { &hf_tetra_prop_06,
11313 { "prop", "tetra.prop",
11314 FT_UINT32, BASE_DEC, VALS(tetra_T_prop_05_vals), 0,
11315 "T_prop_05", HFILL }},
11316 { &hf_tetra_request_to_transmit_send_data,
11317 { "request-to-transmit-send-data", "tetra.request_to_transmit_send_data",
11318 FT_UINT32, BASE_DEC, NULL, 0,
11319 "INTEGER_0_1", HFILL }},
11320 { &hf_tetra_other_party_address,
11321 { "other-party-address", "tetra.other_party_address",
11322 FT_UINT32, BASE_DEC, VALS(tetra_Calling_party_address_type_vals), 0,
11323 "Other_party_address_type", HFILL }},
11324 { &hf_tetra_optional_elements_15,
11325 { "optional-elements", "tetra.optional_elements",
11326 FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_15_vals), 0,
11327 "T_optional_elements_15", HFILL }},
11328 { &hf_tetra_type2_parameters_11,
11329 { "type2-parameters", "tetra.type2_parameters_element",
11330 FT_NONE, BASE_NONE, NULL, 0,
11331 "T_type2_parameters_11", HFILL }},
11332 { &hf_tetra_prop_07,
11333 { "prop", "tetra.prop",
11334 FT_UINT32, BASE_DEC, VALS(tetra_T_prop_06_vals), 0,
11335 "T_prop_06", HFILL }},
11336 { &hf_tetra_call_time_out,
11337 { "call-time-out", "tetra.call_time_out",
11338 FT_UINT32, BASE_DEC, NULL, 0,
11339 "INTEGER_0_15", HFILL }},
11340 { &hf_tetra_hook_method_selection_01,
11341 { "hook-method-selection", "tetra.hook_method_selection",
11342 FT_UINT32, BASE_DEC, NULL, 0,
11343 "INTEGER_0_1", HFILL }},
11344 { &hf_tetra_simplex_duplex_selection_02,
11345 { "simplex-duplex-selection", "tetra.simplex_duplex_selection",
11346 FT_UINT32, BASE_DEC, VALS(tetra_T_simplex_duplex_selection_02_vals), 0,
11347 "T_simplex_duplex_selection_02", HFILL }},
11348 { &hf_tetra_transmission_grant,
11349 { "transmission-grant", "tetra.transmission_grant",
11350 FT_UINT32, BASE_DEC, NULL, 0,
11351 "INTEGER_0_3", HFILL }},
11352 { &hf_tetra_optional_elements_16,
11353 { "optional-elements", "tetra.optional_elements",
11354 FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_16_vals), 0,
11355 "T_optional_elements_16", HFILL }},
11356 { &hf_tetra_type2_parameters_12,
11357 { "type2-parameters", "tetra.type2_parameters_element",
11358 FT_NONE, BASE_NONE, NULL, 0,
11359 "T_type2_parameters_12", HFILL }},
11360 { &hf_tetra_calling_party_address,
11361 { "calling-party-address", "tetra.calling_party_address",
11362 FT_UINT32, BASE_DEC, VALS(tetra_T_calling_party_address_vals), 0,
11363 NULL, HFILL }},
11364 { &hf_tetra_calling_party_address_01,
11365 { "calling-party-address", "tetra.calling_party_address",
11366 FT_UINT32, BASE_DEC, VALS(tetra_Calling_party_address_type_vals), 0,
11367 "Calling_party_address_type", HFILL }},
11368 { &hf_tetra_external_subscriber_number_02,
11369 { "external-subscriber-number", "tetra.external_subscriber_number",
11370 FT_UINT32, BASE_DEC, VALS(tetra_T_external_subscriber_number_01_vals), 0,
11371 "T_external_subscriber_number_01", HFILL }},
11372 { &hf_tetra_external_subscriber_number_03,
11373 { "external-subscriber-number", "tetra.external_subscriber_number",
11374 FT_UINT32, BASE_DEC, NULL, 0,
11375 "INTEGER_0_15", HFILL }},
11376 { &hf_tetra_prop_08,
11377 { "prop", "tetra.prop",
11378 FT_UINT32, BASE_DEC, VALS(tetra_T_prop_07_vals), 0,
11379 "T_prop_07", HFILL }},
11380 { &hf_tetra_call_time_out_setup_phase,
11381 { "call-time-out-setup-phase", "tetra.call_time_out_setup_phase",
11382 FT_UINT32, BASE_DEC, NULL, 0,
11383 "INTEGER_0_7", HFILL }},
11384 { &hf_tetra_simplex_duplex_selection_03,
11385 { "simplex-duplex-selection", "tetra.simplex_duplex_selection",
11386 FT_UINT32, BASE_DEC, NULL, 0,
11387 "INTEGER_0_1", HFILL }},
11388 { &hf_tetra_optional_elements_17,
11389 { "optional-elements", "tetra.optional_elements",
11390 FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_17_vals), 0,
11391 "T_optional_elements_17", HFILL }},
11392 { &hf_tetra_type2_parameters_13,
11393 { "type2-parameters", "tetra.type2_parameters_element",
11394 FT_NONE, BASE_NONE, NULL, 0,
11395 "T_type2_parameters_13", HFILL }},
11396 { &hf_tetra_basic_service_information_03,
11397 { "basic-service-information", "tetra.basic_service_information",
11398 FT_UINT32, BASE_DEC, VALS(tetra_T_basic_service_information_02_vals), 0,
11399 "T_basic_service_information_02", HFILL }},
11400 { &hf_tetra_call_status,
11401 { "call-status", "tetra.call_status",
11402 FT_UINT32, BASE_DEC, VALS(tetra_T_call_status_vals), 0,
11403 NULL, HFILL }},
11404 { &hf_tetra_call_status_01,
11405 { "call-status", "tetra.call_status",
11406 FT_UINT32, BASE_DEC, NULL, 0,
11407 "INTEGER_0_7", HFILL }},
11408 { &hf_tetra_notification_indicator,
11409 { "notification-indicator", "tetra.notification_indicator",
11410 FT_UINT32, BASE_DEC, VALS(tetra_T_notification_indicator_vals), 0,
11411 NULL, HFILL }},
11412 { &hf_tetra_notification_indicator_01,
11413 { "notification-indicator", "tetra.notification_indicator",
11414 FT_UINT32, BASE_DEC, NULL, 0,
11415 "INTEGER_0_63", HFILL }},
11416 { &hf_tetra_prop_09,
11417 { "prop", "tetra.prop",
11418 FT_UINT32, BASE_DEC, VALS(tetra_T_prop_08_vals), 0,
11419 "T_prop_08", HFILL }},
11420 { &hf_tetra_simplex_duplex_selection_04,
11421 { "simplex-duplex-selection", "tetra.simplex_duplex_selection",
11422 FT_UINT32, BASE_DEC, VALS(tetra_T_simplex_duplex_selection_03_vals), 0,
11423 "T_simplex_duplex_selection_03", HFILL }},
11424 { &hf_tetra_call_queued,
11425 { "call-queued", "tetra.call_queued",
11426 FT_BOOLEAN, BASE_NONE, NULL, 0,
11427 "BOOLEAN", HFILL }},
11428 { &hf_tetra_optional_elements_18,
11429 { "optional-elements", "tetra.optional_elements",
11430 FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_18_vals), 0,
11431 "T_optional_elements_18", HFILL }},
11432 { &hf_tetra_type2_parameters_14,
11433 { "type2-parameters", "tetra.type2_parameters_element",
11434 FT_NONE, BASE_NONE, NULL, 0,
11435 "T_type2_parameters_14", HFILL }},
11436 { &hf_tetra_basic_service_infomation,
11437 { "basic-service-infomation", "tetra.basic_service_infomation",
11438 FT_UINT32, BASE_DEC, VALS(tetra_T_basic_service_infomation_vals), 0,
11439 NULL, HFILL }},
11440 { &hf_tetra_basic_service_infomation_01,
11441 { "basic-service-infomation", "tetra.basic_service_infomation_element",
11442 FT_NONE, BASE_NONE, NULL, 0,
11443 "Basic_service_information", HFILL }},
11444 { &hf_tetra_notification_indicator_02,
11445 { "notification-indicator", "tetra.notification_indicator",
11446 FT_UINT32, BASE_DEC, VALS(tetra_T_notification_indicator_01_vals), 0,
11447 "T_notification_indicator_01", HFILL }},
11448 { &hf_tetra_prop_10,
11449 { "prop", "tetra.prop",
11450 FT_UINT32, BASE_DEC, VALS(tetra_T_prop_09_vals), 0,
11451 "T_prop_09", HFILL }},
11452 { &hf_tetra_call_time_out_01,
11453 { "call-time-out", "tetra.call_time_out",
11454 FT_UINT32, BASE_DEC, NULL, 0,
11455 "INTEGER_0_31", HFILL }},
11456 { &hf_tetra_simplex_duplex_selection_05,
11457 { "simplex-duplex-selection", "tetra.simplex_duplex_selection",
11458 FT_UINT32, BASE_DEC, VALS(tetra_T_simplex_duplex_selection_04_vals), 0,
11459 "T_simplex_duplex_selection_04", HFILL }},
11460 { &hf_tetra_call_ownership,
11461 { "call-ownership", "tetra.call_ownership",
11462 FT_UINT32, BASE_DEC, NULL, 0,
11463 "INTEGER_0_1", HFILL }},
11464 { &hf_tetra_optional_elements_19,
11465 { "optional-elements", "tetra.optional_elements",
11466 FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_19_vals), 0,
11467 "T_optional_elements_19", HFILL }},
11468 { &hf_tetra_type2_parameters_15,
11469 { "type2-parameters", "tetra.type2_parameters_element",
11470 FT_NONE, BASE_NONE, NULL, 0,
11471 "T_type2_parameters_15", HFILL }},
11472 { &hf_tetra_call_priority_01,
11473 { "call-priority", "tetra.call_priority",
11474 FT_UINT32, BASE_DEC, VALS(tetra_T_call_priority_vals), 0,
11475 NULL, HFILL }},
11476 { &hf_tetra_basic_service_information_04,
11477 { "basic-service-information", "tetra.basic_service_information",
11478 FT_UINT32, BASE_DEC, VALS(tetra_T_basic_service_information_03_vals), 0,
11479 "T_basic_service_information_03", HFILL }},
11480 { &hf_tetra_temporary_address,
11481 { "temporary-address", "tetra.temporary_address",
11482 FT_UINT32, BASE_DEC, VALS(tetra_T_temporary_address_vals), 0,
11483 NULL, HFILL }},
11484 { &hf_tetra_temporary_address_01,
11485 { "temporary-address", "tetra.temporary_address",
11486 FT_UINT32, BASE_DEC, VALS(tetra_Calling_party_address_type_vals), 0,
11487 "Calling_party_address_type", HFILL }},
11488 { &hf_tetra_notification_indicator_03,
11489 { "notification-indicator", "tetra.notification_indicator",
11490 FT_UINT32, BASE_DEC, VALS(tetra_T_notification_indicator_02_vals), 0,
11491 "T_notification_indicator_02", HFILL }},
11492 { &hf_tetra_prop_11,
11493 { "prop", "tetra.prop",
11494 FT_UINT32, BASE_DEC, VALS(tetra_T_prop_10_vals), 0,
11495 "T_prop_10", HFILL }},
11496 { &hf_tetra_optional_elements_20,
11497 { "optional-elements", "tetra.optional_elements",
11498 FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_20_vals), 0,
11499 "T_optional_elements_20", HFILL }},
11500 { &hf_tetra_type2_parameters_16,
11501 { "type2-parameters", "tetra.type2_parameters_element",
11502 FT_NONE, BASE_NONE, NULL, 0,
11503 "T_type2_parameters_16", HFILL }},
11504 { &hf_tetra_notification_indicator_04,
11505 { "notification-indicator", "tetra.notification_indicator",
11506 FT_UINT32, BASE_DEC, VALS(tetra_T_notification_indicator_03_vals), 0,
11507 "T_notification_indicator_03", HFILL }},
11508 { &hf_tetra_prop_12,
11509 { "prop", "tetra.prop",
11510 FT_UINT32, BASE_DEC, VALS(tetra_T_prop_11_vals), 0,
11511 "T_prop_11", HFILL }},
11512 { &hf_tetra_optional_elements_21,
11513 { "optional-elements", "tetra.optional_elements",
11514 FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_21_vals), 0,
11515 "T_optional_elements_21", HFILL }},
11516 { &hf_tetra_type2_parameters_17,
11517 { "type2-parameters", "tetra.type2_parameters_element",
11518 FT_NONE, BASE_NONE, NULL, 0,
11519 "T_type2_parameters_17", HFILL }},
11520 { &hf_tetra_notification_indicator_05,
11521 { "notification-indicator", "tetra.notification_indicator",
11522 FT_UINT32, BASE_DEC, VALS(tetra_T_notification_indicator_04_vals), 0,
11523 "T_notification_indicator_04", HFILL }},
11524 { &hf_tetra_prop_13,
11525 { "prop", "tetra.prop",
11526 FT_UINT32, BASE_DEC, VALS(tetra_T_prop_12_vals), 0,
11527 "T_prop_12", HFILL }},
11528 { &hf_tetra_reset_call_time_out,
11529 { "reset-call-time-out", "tetra.reset_call_time_out",
11530 FT_UINT32, BASE_DEC, NULL, 0,
11531 "INTEGER_0_1", HFILL }},
11532 { &hf_tetra_optional_elements_22,
11533 { "optional-elements", "tetra.optional_elements",
11534 FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_22_vals), 0,
11535 "T_optional_elements_22", HFILL }},
11536 { &hf_tetra_type2_parameters_18,
11537 { "type2-parameters", "tetra.type2_parameters_element",
11538 FT_NONE, BASE_NONE, NULL, 0,
11539 "T_type2_parameters_18", HFILL }},
11540 { &hf_tetra_new_call_identifier,
11541 { "new-call-identifier", "tetra.new_call_identifier",
11542 FT_UINT32, BASE_DEC, VALS(tetra_T_new_call_identifier_vals), 0,
11543 NULL, HFILL }},
11544 { &hf_tetra_new_call_identifier_01,
11545 { "new-call-identifier", "tetra.new_call_identifier",
11546 FT_UINT32, BASE_DEC, NULL, 0,
11547 "INTEGER_0_1023", HFILL }},
11548 { &hf_tetra_call_time_out_02,
11549 { "call-time-out", "tetra.call_time_out",
11550 FT_UINT32, BASE_DEC, VALS(tetra_T_call_time_out_vals), 0,
11551 NULL, HFILL }},
11552 { &hf_tetra_call_time_out_03,
11553 { "call-time-out", "tetra.call_time_out",
11554 FT_UINT32, BASE_DEC, NULL, 0,
11555 "INTEGER_0_7", HFILL }},
11556 { &hf_tetra_call_status_02,
11557 { "call-status", "tetra.call_status",
11558 FT_UINT32, BASE_DEC, VALS(tetra_T_call_status_01_vals), 0,
11559 "T_call_status_01", HFILL }},
11560 { &hf_tetra_modify,
11561 { "modify", "tetra.modify",
11562 FT_UINT32, BASE_DEC, VALS(tetra_T_modify_vals), 0,
11563 NULL, HFILL }},
11564 { &hf_tetra_modify_01,
11565 { "modify", "tetra.modify_element",
11566 FT_NONE, BASE_NONE, NULL, 0,
11567 "Modify_type", HFILL }},
11568 { &hf_tetra_notification_indicator_06,
11569 { "notification-indicator", "tetra.notification_indicator",
11570 FT_UINT32, BASE_DEC, VALS(tetra_T_notification_indicator_05_vals), 0,
11571 "T_notification_indicator_05", HFILL }},
11572 { &hf_tetra_prop_14,
11573 { "prop", "tetra.prop",
11574 FT_UINT32, BASE_DEC, VALS(tetra_T_prop_13_vals), 0,
11575 "T_prop_13", HFILL }},
11576 { &hf_tetra_optional_elements_23,
11577 { "optional-elements", "tetra.optional_elements",
11578 FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_23_vals), 0,
11579 "T_optional_elements_23", HFILL }},
11580 { &hf_tetra_type2_parameters_19,
11581 { "type2-parameters", "tetra.type2_parameters_element",
11582 FT_NONE, BASE_NONE, NULL, 0,
11583 "T_type2_parameters_19", HFILL }},
11584 { &hf_tetra_notification_indicator_07,
11585 { "notification-indicator", "tetra.notification_indicator",
11586 FT_UINT32, BASE_DEC, VALS(tetra_T_notification_indicator_06_vals), 0,
11587 "T_notification_indicator_06", HFILL }},
11588 { &hf_tetra_prop_15,
11589 { "prop", "tetra.prop",
11590 FT_UINT32, BASE_DEC, VALS(tetra_T_prop_14_vals), 0,
11591 "T_prop_14", HFILL }},
11592 { &hf_tetra_group_identity_ack_request,
11593 { "group-identity-ack-request", "tetra.group_identity_ack_request",
11594 FT_BOOLEAN, BASE_NONE, NULL, 0,
11595 "BOOLEAN", HFILL }},
11596 { &hf_tetra_optional_elements_24,
11597 { "optional-elements", "tetra.optional_elements",
11598 FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_24_vals), 0,
11599 "T_optional_elements_24", HFILL }},
11600 { &hf_tetra_type2_element_02,
11601 { "type2-element", "tetra.type2_element_element",
11602 FT_NONE, BASE_NONE, NULL, 0,
11603 "T_type2_element_02", HFILL }},
11604 { &hf_tetra_type3_04,
11605 { "type3", "tetra.type3",
11606 FT_UINT32, BASE_DEC, VALS(tetra_T_type3_04_vals), 0,
11607 "T_type3_04", HFILL }},
11608 { &hf_tetra_type3_elements_04,
11609 { "type3-elements", "tetra.type3_elements_element",
11610 FT_NONE, BASE_NONE, NULL, 0,
11611 "T_type3_elements_04", HFILL }},
11612 { &hf_tetra_group_identity_downlink_02,
11613 { "group-identity-downlink", "tetra.group_identity_downlink_element",
11614 FT_NONE, BASE_NONE, NULL, 0,
11615 NULL, HFILL }},
11616 { &hf_tetra_group_identity_attach_detach_accept,
11617 { "group-identity-attach-detach-accept", "tetra.group_identity_attach_detach_accept",
11618 FT_BOOLEAN, BASE_NONE, NULL, 0,
11619 "BOOLEAN", HFILL }},
11620 { &hf_tetra_optional_elements_25,
11621 { "optional-elements", "tetra.optional_elements",
11622 FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_25_vals), 0,
11623 "T_optional_elements_25", HFILL }},
11624 { &hf_tetra_type2_element_03,
11625 { "type2-element", "tetra.type2_element_element",
11626 FT_NONE, BASE_NONE, NULL, 0,
11627 "T_type2_element_03", HFILL }},
11628 { &hf_tetra_type3_05,
11629 { "type3", "tetra.type3",
11630 FT_UINT32, BASE_DEC, VALS(tetra_T_type3_05_vals), 0,
11631 "T_type3_05", HFILL }},
11632 { &hf_tetra_type3_elements_05,
11633 { "type3-elements", "tetra.type3_elements_element",
11634 FT_NONE, BASE_NONE, NULL, 0,
11635 "T_type3_elements_05", HFILL }},
11636 { &hf_tetra_called_party_sna,
11637 { "called-party-sna", "tetra.called_party_sna",
11638 FT_UINT32, BASE_DEC, NULL, 0,
11639 "INTEGER_0_255", HFILL }},
11640 { &hf_tetra_called_party_ssi,
11641 { "called-party-ssi", "tetra.called_party_ssi",
11642 FT_UINT32, BASE_DEC, NULL, 0,
11643 "INTEGER_0_16777215", HFILL }},
11644 { &hf_tetra_called_party_ssi_extention,
11645 { "called-party-ssi-extention", "tetra.called_party_ssi_extention_element",
11646 FT_NONE, BASE_NONE, NULL, 0,
11647 NULL, HFILL }},
11648 { &hf_tetra_called_party_extention,
11649 { "called-party-extention", "tetra.called_party_extention",
11650 FT_UINT32, BASE_DEC, NULL, 0,
11651 "INTEGER_0_16777215", HFILL }},
11652 { &hf_tetra_data_01,
11653 { "data", "tetra.data",
11654 FT_UINT32, BASE_DEC, VALS(tetra_T_data_01_vals), 0,
11655 "T_data_01", HFILL }},
11656 { &hf_tetra_element1,
11657 { "element1", "tetra.element1_element",
11658 FT_NONE, BASE_NONE, NULL, 0,
11659 "Type1", HFILL }},
11660 { &hf_tetra_element,
11661 { "element", "tetra.element_element",
11662 FT_NONE, BASE_NONE, NULL, 0,
11663 "Type2", HFILL }},
11664 { &hf_tetra_proprietary_element_owner,
11665 { "proprietary-element-owner", "tetra.proprietary_element_owner",
11666 FT_UINT32, BASE_DEC, NULL, 0,
11667 NULL, HFILL }},
11668 { &hf_tetra_proprietary_element_owner_extension,
11669 { "proprietary-element-owner-extension", "tetra.proprietary_element_owner_extension",
11670 FT_BYTES, BASE_NONE, NULL, 0,
11671 "BIT_STRING", HFILL }},
11672 { &hf_tetra_simplex_duplex_selection_06,
11673 { "simplex-duplex-selection", "tetra.simplex_duplex_selection",
11674 FT_UINT32, BASE_DEC, VALS(tetra_T_simplex_duplex_selection_05_vals), 0,
11675 "T_simplex_duplex_selection_05", HFILL }},
11677 /*--- End of included file: packet-tetra-hfarr.c ---*/
11678 #line 626 "../../asn1/tetra/packet-tetra-template.c"
11681 /* List of subtrees */
11682 static gint *ett[] = {
11683 &ett_tetra,
11684 &ett_tetra_header,
11685 &ett_tetra_length,
11686 &ett_tetra_txreg,
11687 &ett_tetra_text,
11689 /*--- Included file: packet-tetra-ettarr.c ---*/
11690 #line 1 "../../asn1/tetra/packet-tetra-ettarr.c"
11691 &ett_tetra_AACH,
11692 &ett_tetra_BSCH,
11693 &ett_tetra_MLE_Sync,
11694 &ett_tetra_BNCH,
11695 &ett_tetra_T_hyperframe_or_cck,
11696 &ett_tetra_T_optional_params,
11697 &ett_tetra_TS_COMMON_FRAMES,
11698 &ett_tetra_Default_Code_A,
11699 &ett_tetra_Extended_Services_Broadcast,
11700 &ett_tetra_T_section,
11701 &ett_tetra_PRESENT1,
11702 &ett_tetra_MAC_ACCESS,
11703 &ett_tetra_T_data,
11704 &ett_tetra_Address,
11705 &ett_tetra_U_LLC_PDU,
11706 &ett_tetra_U_BL_ACK_FCS,
11707 &ett_tetra_U_MLE_PDU_FCS,
11708 &ett_tetra_U_BL_DATA_FCS,
11709 &ett_tetra_U_BL_ADATA_FCS,
11710 &ett_tetra_U_MLE_PDU,
11711 &ett_tetra_ComplexSDU,
11712 &ett_tetra_T_lengthIndicationOrCapacityRequest,
11713 &ett_tetra_FRAG,
11714 &ett_tetra_MAC_DATA,
11715 &ett_tetra_T_lengthIndicationOrCapacityRequest_01,
11716 &ett_tetra_FRAG6,
11717 &ett_tetra_MAC_FRAG,
11718 &ett_tetra_MAC_FRAG120,
11719 &ett_tetra_MAC_END_UPLINK,
11720 &ett_tetra_MAC_END_UP114,
11721 &ett_tetra_MAC_END_HU,
11722 &ett_tetra_T_lengthInd_ReservationReq,
11723 &ett_tetra_MAC_END_DOWNLINK,
11724 &ett_tetra_T_slot_granting,
11725 &ett_tetra_T_channel_allocation,
11726 &ett_tetra_SlotGranting,
11727 &ett_tetra_ChannelAllocation,
11728 &ett_tetra_T_extend_carrier_flag,
11729 &ett_tetra_T_monitoring_pattern,
11730 &ett_tetra_Extended_carrier_flag,
11731 &ett_tetra_MAC_END_DOWN111,
11732 &ett_tetra_T_slot_granting_01,
11733 &ett_tetra_T_channel_allocation_01,
11734 &ett_tetra_MAC_RESOURCE,
11735 &ett_tetra_OTHER_DATA,
11736 &ett_tetra_T_power_control,
11737 &ett_tetra_T_slot_granting_02,
11738 &ett_tetra_T_channel_allocation_02,
11739 &ett_tetra_AddressMacResource,
11740 &ett_tetra_SSI_NEED,
11741 &ett_tetra_EVENT_NEED,
11742 &ett_tetra_USSI_NEED,
11743 &ett_tetra_SMI_NEED,
11744 &ett_tetra_SSI_EVENT_NEED,
11745 &ett_tetra_SSI_USAGE_NEED,
11746 &ett_tetra_SMI_EVENT_NEED,
11747 &ett_tetra_MAC_ACCESS_DEFINE,
11748 &ett_tetra_T_optional_field,
11749 &ett_tetra_D_LLC_PDU,
11750 &ett_tetra_D_BL_ACK_FCS,
11751 &ett_tetra_D_MLE_PDU_FCS,
11752 &ett_tetra_D_BL_ADATA_FCS,
11753 &ett_tetra_D_BL_DATA_FCS,
11754 &ett_tetra_U_BL_ACK,
11755 &ett_tetra_D_BL_ACK,
11756 &ett_tetra_U_BL_DATA,
11757 &ett_tetra_D_BL_DATA,
11758 &ett_tetra_U_BL_ADATA,
11759 &ett_tetra_D_BL_ADATA,
11760 &ett_tetra_D_MLE_PDU,
11761 &ett_tetra_UMLE_PDU,
11762 &ett_tetra_DMLE_PDU,
11763 &ett_tetra_U_PREPARE,
11764 &ett_tetra_T_optional_elements,
11765 &ett_tetra_T_type2_parameters,
11766 &ett_tetra_T_cell_number,
11767 &ett_tetra_U_RESTORE,
11768 &ett_tetra_T_optional_elements_01,
11769 &ett_tetra_T_type2_parameters_01,
11770 &ett_tetra_T_mcc,
11771 &ett_tetra_T_mnc,
11772 &ett_tetra_T_la,
11773 &ett_tetra_D_NEW_CELL,
11774 &ett_tetra_T_optional_elements_02,
11775 &ett_tetra_D_PREPARE_FAIL,
11776 &ett_tetra_T_optional_elements_03,
11777 &ett_tetra_D_NWRK_BRDADCAST,
11778 &ett_tetra_T_optional_elements_04,
11779 &ett_tetra_T_type2_parameters_02,
11780 &ett_tetra_T_tetra_network_time,
11781 &ett_tetra_T_number_of_neighbour_cells,
11782 &ett_tetra_TETRA_NETWORK_TIME,
11783 &ett_tetra_D_RESTORE_ACK,
11784 &ett_tetra_D_RESTORE_FAIL,
11785 &ett_tetra_U_MM_PDU,
11786 &ett_tetra_D_MM_PDU,
11787 &ett_tetra_GROUP_IDENTITY_DOWNLINK,
11788 &ett_tetra_T_attach_detach_identifiet,
11789 &ett_tetra_T_attach,
11790 &ett_tetra_T_detach,
11791 &ett_tetra_T_address_type,
11792 &ett_tetra_T_gssi_extension,
11793 &ett_tetra_GROUP_IDENTITY_UPLINK,
11794 &ett_tetra_T_attach_detach_identifiet_01,
11795 &ett_tetra_T_attach_01,
11796 &ett_tetra_T_detach_01,
11797 &ett_tetra_T_address_type_01,
11798 &ett_tetra_T_gssi_extension_01,
11799 &ett_tetra_D_LOCATION_UPDATE_ACCEPT,
11800 &ett_tetra_T_optional_elements_05,
11801 &ett_tetra_T_type2_parameters_03,
11802 &ett_tetra_T_ssi,
11803 &ett_tetra_T_address_extension,
11804 &ett_tetra_T_subscriber_class,
11805 &ett_tetra_T_energy_saving_mode,
11806 &ett_tetra_T_scch_info,
11807 &ett_tetra_T_type3,
11808 &ett_tetra_T_type3_elements,
11809 &ett_tetra_T_new_ra,
11810 &ett_tetra_T_group_identity_location_accept,
11811 &ett_tetra_T_group_predefined_lifetime,
11812 &ett_tetra_T_group_identity_downlink,
11813 &ett_tetra_T_proprietary,
11814 &ett_tetra_D_LOCATION_UPDATE_REJECT,
11815 &ett_tetra_U_MM_STATUS,
11816 &ett_tetra_D_MM_STATUS,
11817 &ett_tetra_U_CMCE_PDU,
11818 &ett_tetra_U_RELEASE,
11819 &ett_tetra_U_SDS_DATA,
11820 &ett_tetra_T_called_party_type_identifier,
11821 &ett_tetra_T_short_data_type_identifier,
11822 &ett_tetra_U_STATUS,
11823 &ett_tetra_T_called_party_type_identifier_01,
11824 &ett_tetra_U_INFO,
11825 &ett_tetra_D_CMCE_PDU,
11826 &ett_tetra_D_SDS_DATA,
11827 &ett_tetra_T_calling_party_type_identifier,
11828 &ett_tetra_T_short_data_type_identifier_01,
11829 &ett_tetra_D_STATUS,
11830 &ett_tetra_T_calling_party_type_identifier_01,
11831 &ett_tetra_D_DISCONNECT,
11832 &ett_tetra_D_INFO,
11833 &ett_tetra_D_TX_WAIT,
11834 &ett_tetra_D_TX_CONTINUE,
11835 &ett_tetra_U_LOCATION_UPDATE_DEMAND,
11836 &ett_tetra_T_cipher_control,
11837 &ett_tetra_T_optional_elements_06,
11838 &ett_tetra_T_type2_parameters_04,
11839 &ett_tetra_T_class_of_MS,
11840 &ett_tetra_T_energy_saving_mode_01,
11841 &ett_tetra_T_la_information,
11842 &ett_tetra_T_ssi_01,
11843 &ett_tetra_T_address_extension_01,
11844 &ett_tetra_T_type3_01,
11845 &ett_tetra_T_type3_elements_01,
11846 &ett_tetra_T_group_identity_location_demand,
11847 &ett_tetra_T_group_report_response,
11848 &ett_tetra_T_group_identity_uplink,
11849 &ett_tetra_T_proprietary_01,
11850 &ett_tetra_U_ATTACH_DETACH_GROUP_IDENTITY,
11851 &ett_tetra_T_optional_elements_07,
11852 &ett_tetra_T_type2_element,
11853 &ett_tetra_T_type3_02,
11854 &ett_tetra_T_type3_elements_02,
11855 &ett_tetra_U_ATTACH_DETACH_GROUP_IDENTITY_ACK,
11856 &ett_tetra_T_optional_elements_08,
11857 &ett_tetra_T_type2_element_01,
11858 &ett_tetra_T_type3_03,
11859 &ett_tetra_T_type3_elements_03,
11860 &ett_tetra_U_SETUP,
11861 &ett_tetra_T_optional_elements_09,
11862 &ett_tetra_T_type2_parameters_05,
11863 &ett_tetra_T_external_subscriber_number,
11864 &ett_tetra_T_prop,
11865 &ett_tetra_Basic_service_information,
11866 &ett_tetra_U_ALERT,
11867 &ett_tetra_T_optional_elements_10,
11868 &ett_tetra_T_type2_parameters_06,
11869 &ett_tetra_T_basic_service_information,
11870 &ett_tetra_T_prop_01,
11871 &ett_tetra_U_CONNECT,
11872 &ett_tetra_T_optional_elements_11,
11873 &ett_tetra_T_type2_parameters_07,
11874 &ett_tetra_T_basic_service_information_01,
11875 &ett_tetra_T_prop_02,
11876 &ett_tetra_U_TX_CEASED,
11877 &ett_tetra_T_optional_elements_12,
11878 &ett_tetra_T_type2_parameters_08,
11879 &ett_tetra_T_prop_03,
11880 &ett_tetra_U_TX_DEMAND,
11881 &ett_tetra_T_optional_elements_13,
11882 &ett_tetra_T_type2_parameters_09,
11883 &ett_tetra_T_prop_04,
11884 &ett_tetra_U_DISCONNECT,
11885 &ett_tetra_T_optional_elements_14,
11886 &ett_tetra_T_type2_parameters_10,
11887 &ett_tetra_T_prop_05,
11888 &ett_tetra_U_CALL_RESTORE,
11889 &ett_tetra_T_optional_elements_15,
11890 &ett_tetra_T_type2_parameters_11,
11891 &ett_tetra_T_prop_06,
11892 &ett_tetra_D_SETUP,
11893 &ett_tetra_T_optional_elements_16,
11894 &ett_tetra_T_type2_parameters_12,
11895 &ett_tetra_T_calling_party_address,
11896 &ett_tetra_T_external_subscriber_number_01,
11897 &ett_tetra_T_prop_07,
11898 &ett_tetra_D_CALL_PROCEEDING,
11899 &ett_tetra_T_optional_elements_17,
11900 &ett_tetra_T_type2_parameters_13,
11901 &ett_tetra_T_basic_service_information_02,
11902 &ett_tetra_T_call_status,
11903 &ett_tetra_T_notification_indicator,
11904 &ett_tetra_T_prop_08,
11905 &ett_tetra_D_ALERT,
11906 &ett_tetra_T_optional_elements_18,
11907 &ett_tetra_T_type2_parameters_14,
11908 &ett_tetra_T_basic_service_infomation,
11909 &ett_tetra_T_notification_indicator_01,
11910 &ett_tetra_T_prop_09,
11911 &ett_tetra_D_CONNECT,
11912 &ett_tetra_T_optional_elements_19,
11913 &ett_tetra_T_type2_parameters_15,
11914 &ett_tetra_T_call_priority,
11915 &ett_tetra_T_basic_service_information_03,
11916 &ett_tetra_T_temporary_address,
11917 &ett_tetra_T_notification_indicator_02,
11918 &ett_tetra_T_prop_10,
11919 &ett_tetra_D_CONNECT_ACK,
11920 &ett_tetra_T_optional_elements_20,
11921 &ett_tetra_T_type2_parameters_16,
11922 &ett_tetra_T_notification_indicator_03,
11923 &ett_tetra_T_prop_11,
11924 &ett_tetra_D_RELEASE,
11925 &ett_tetra_T_optional_elements_21,
11926 &ett_tetra_T_type2_parameters_17,
11927 &ett_tetra_T_notification_indicator_04,
11928 &ett_tetra_T_prop_12,
11929 &ett_tetra_D_CALL_RESTORE,
11930 &ett_tetra_T_optional_elements_22,
11931 &ett_tetra_T_type2_parameters_18,
11932 &ett_tetra_T_new_call_identifier,
11933 &ett_tetra_T_call_time_out,
11934 &ett_tetra_T_call_status_01,
11935 &ett_tetra_T_modify,
11936 &ett_tetra_T_notification_indicator_05,
11937 &ett_tetra_T_prop_13,
11938 &ett_tetra_D_TX_CEASED,
11939 &ett_tetra_T_optional_elements_23,
11940 &ett_tetra_T_type2_parameters_19,
11941 &ett_tetra_T_notification_indicator_06,
11942 &ett_tetra_T_prop_14,
11943 &ett_tetra_D_TX_GRANTED,
11944 &ett_tetra_D_ATTACH_DETACH_GROUP_IDENTITY,
11945 &ett_tetra_T_optional_elements_24,
11946 &ett_tetra_T_type2_element_02,
11947 &ett_tetra_T_type3_04,
11948 &ett_tetra_T_type3_elements_04,
11949 &ett_tetra_D_ATTACH_DETACH_GROUP_IDENTITY_ACK,
11950 &ett_tetra_T_optional_elements_25,
11951 &ett_tetra_T_type2_element_03,
11952 &ett_tetra_T_type3_05,
11953 &ett_tetra_T_type3_elements_05,
11954 &ett_tetra_Calling_party_address_type,
11955 &ett_tetra_T_called_party_ssi_extention,
11956 &ett_tetra_Proprietary,
11957 &ett_tetra_T_data_01,
11958 &ett_tetra_Type1,
11959 &ett_tetra_Type2,
11960 &ett_tetra_Modify_type,
11962 /*--- End of included file: packet-tetra-ettarr.c ---*/
11963 #line 636 "../../asn1/tetra/packet-tetra-template.c"
11966 static ei_register_info ei[] = {
11967 { &ei_tetra_channels_incorrect, { "tetra.channels.incorrect", PI_MALFORMED, PI_WARN, "Channel count incorrect, must be <= 3", EXPFILL }},
11970 proto_tetra = proto_register_protocol("TETRA Protocol", "tetra", "tetra");
11971 proto_register_field_array (proto_tetra, hf, array_length (hf));
11972 proto_register_subtree_array (ett, array_length (ett));
11973 register_dissector("tetra", dissect_tetra, proto_tetra);
11974 expert_tetra = expert_register_protocol(proto_tetra);
11975 expert_register_field_array(expert_tetra, ei, array_length(ei));
11977 tetra_module = prefs_register_protocol(proto_tetra, NULL);
11978 prefs_register_bool_preference(tetra_module, "include_carrier_number",
11979 "The data include carrier numbers",
11980 "Whether the captured data include carrier number",
11981 &include_carrier_number);