Regenerate asn.1 dissectors.
[metze/wireshark/wip.git] / epan / dissectors / packet-tetra.c
1 /* Do not modify this file.                                                   */
2 /* It is created 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 */
5
6 /* Input file: packet-tetra-template.c */
7
8 #line 1 "../../asn1/tetra/packet-tetra-template.c"
9 /* packet-tetra.c
10  * Routines for TETRA packet dissection
11  *
12  *$Id$
13  *
14  * Copyright (c) 2007 - 2011 Professional Mobile Communication Research Group,
15  *    Beijing Institute of Technology, China
16  * Copyright (c) 2011 Holger Hans Peter Freyther
17  *
18  * Wireshark - Network traffic analyzer
19  * By Gerald Combs <gerald@wireshark.org>
20  * Copyright 1998 Gerald Combs
21  *
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.
26  *
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.
31  *
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.
35  *
36  * REF: ETSI EN 300 392-2 V3.2.1
37  */
38
39 #include "config.h"
40
41 #include <glib.h>
42 #include <epan/packet.h>
43 #include <epan/prefs.h>
44 #include <epan/oids.h>
45 #include <epan/conversation.h>
46 #include <epan/asn1.h>
47
48 #include <stdio.h>
49 #include <string.h>
50
51 #include <epan/dissectors/packet-per.h>
52 #include "packet-tetra.h"
53
54 #define PROTO_TAG_tetra "TETRA"
55
56 /* Wireshark ID of the tetra protocol */
57 static int proto_tetra = -1;
58
59 /* These are the handles of our subdissectors */
60 static dissector_handle_t data_handle = NULL;
61
62 static dissector_handle_t tetra_handle;
63 static void dissect_tetra(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
64
65 static int global_tetra_port = 7074;
66
67 /* Whether the capture data include carrier numbers */
68 static gboolean include_carrier_number = TRUE;
69
70 /* The following hf_* variables are used to hold the Wireshark IDs of
71 * our header fields; they are filled out when we call
72 * proto_register_field_array() in proto_register_tetra()
73 */
74 /** Kts attempt at defining the protocol */
75 static gint hf_tetra = -1;
76 static gint hf_tetra_header = -1;
77 static gint hf_tetra_channels = -1;
78 static gint hf_tetra_channel1 = -1;
79 static gint hf_tetra_channel2 = -1;
80 static gint hf_tetra_channel3 = -1;
81 static gint hf_tetra_txreg = -1;
82 static gint hf_tetra_timer = -1;
83 static gint hf_tetra_pdu = -1;
84 static gint hf_tetra_rvstr = -1;
85 static gint hf_tetra_carriernumber = -1;
86 static gint hf_tetra_rxchannel1 = -1;
87 static gint hf_tetra_rxchannel2 = -1;
88 static gint hf_tetra_rxchannel3 = -1;
89 static gint hf_tetra_crc = -1;
90 static gint hf_tetra_len0 = -1;
91
92
93 /*--- Included file: packet-tetra-hf.c ---*/
94 #line 1 "../../asn1/tetra/packet-tetra-hf.c"
95 static int hf_tetra_AACH_PDU = -1;                /* AACH */
96 static int hf_tetra_BSCH_PDU = -1;                /* BSCH */
97 static int hf_tetra_BNCH_PDU = -1;                /* BNCH */
98 static int hf_tetra_MAC_ACCESS_PDU = -1;          /* MAC_ACCESS */
99 static int hf_tetra_MAC_FRAG_PDU = -1;            /* MAC_FRAG */
100 static int hf_tetra_MAC_FRAG120_PDU = -1;         /* MAC_FRAG120 */
101 static int hf_tetra_MAC_END_UPLINK_PDU = -1;      /* MAC_END_UPLINK */
102 static int hf_tetra_MAC_END_UP114_PDU = -1;       /* MAC_END_UP114 */
103 static int hf_tetra_MAC_END_HU_PDU = -1;          /* MAC_END_HU */
104 static int hf_tetra_MAC_END_DOWNLINK_PDU = -1;    /* MAC_END_DOWNLINK */
105 static int hf_tetra_MAC_END_DOWN111_PDU = -1;     /* MAC_END_DOWN111 */
106 static int hf_tetra_MAC_RESOURCE_PDU = -1;        /* MAC_RESOURCE */
107 static int hf_tetra_MAC_ACCESS_DEFINE_PDU = -1;   /* MAC_ACCESS_DEFINE */
108 static int hf_tetra_function = -1;                /* INTEGER_0_3 */
109 static int hf_tetra_field1 = -1;                  /* INTEGER_0_63 */
110 static int hf_tetra_field2 = -1;                  /* INTEGER_0_63 */
111 static int hf_tetra_system_code = -1;             /* System_Code */
112 static int hf_tetra_colour_code = -1;             /* Colour_Code */
113 static int hf_tetra_timeslot_number = -1;         /* Timeslot_Number */
114 static int hf_tetra_frame_number = -1;            /* Frame_Number */
115 static int hf_tetra_multiple_frame_number = -1;   /* Multiple_Frame_Number */
116 static int hf_tetra_sharing_mod = -1;             /* Sharing_Mod */
117 static int hf_tetra_ts_reserved_frames = -1;      /* TS_Reserved_Frames */
118 static int hf_tetra_u_plane_dtx = -1;             /* U_Plane_DTX */
119 static int hf_tetra_frame_18_extension = -1;      /* Frame_18_Extension */
120 static int hf_tetra_reserved = -1;                /* Reserved */
121 static int hf_tetra_tm_sdu = -1;                  /* MLE_Sync */
122 static int hf_tetra_mcc = -1;                     /* INTEGER_0_1023 */
123 static int hf_tetra_mnc = -1;                     /* INTEGER_0_16383 */
124 static int hf_tetra_neighbour_cell_broadcast = -1;  /* INTEGER_0_3 */
125 static int hf_tetra_cell_service_level = -1;      /* INTEGER_0_3 */
126 static int hf_tetra_late_entry_information = -1;  /* INTEGER_0_1 */
127 static int hf_tetra_pdu_type = -1;                /* INTEGER_0_3 */
128 static int hf_tetra_broadcast_type = -1;          /* INTEGER_0_3 */
129 static int hf_tetra_main_carrier = -1;            /* INTEGER_0_4095 */
130 static int hf_tetra_frequency_band = -1;          /* INTEGER_0_15 */
131 static int hf_tetra_offset = -1;                  /* Offset */
132 static int hf_tetra_duplex_spacing = -1;          /* INTEGER_0_7 */
133 static int hf_tetra_reverse_operation = -1;       /* Reverse_Operation */
134 static int hf_tetra_sencond_ctl_carrier = -1;     /* Sencond_Ctl_Carrier */
135 static int hf_tetra_ms_txpwr_max_cell = -1;       /* MS_TXPWR_MAX_CELL */
136 static int hf_tetra_rxlev_access_min = -1;        /* RXLEV_ACCESS_MIN */
137 static int hf_tetra_access_parameter = -1;        /* ACCESS_PARAMETER */
138 static int hf_tetra_radio_downlink_timeout = -1;  /* RADIO_DOWNLINK_TIMEOUT */
139 static int hf_tetra_hyperframe_or_cck = -1;       /* T_hyperframe_or_cck */
140 static int hf_tetra_hyperframe = -1;              /* INTEGER_0_65535 */
141 static int hf_tetra_cckid = -1;                   /* INTEGER_0_65535 */
142 static int hf_tetra_optional_params = -1;         /* T_optional_params */
143 static int hf_tetra_even_multiframe = -1;         /* TS_COMMON_FRAMES */
144 static int hf_tetra_odd_multiframe = -1;          /* TS_COMMON_FRAMES */
145 static int hf_tetra_access_a_code = -1;           /* Default_Code_A */
146 static int hf_tetra_extend_service = -1;          /* Extended_Services_Broadcast */
147 static int hf_tetra_la = -1;                      /* INTEGER_0_16383 */
148 static int hf_tetra_subscriber_class = -1;        /* INTEGER_0_65535 */
149 static int hf_tetra_registriation = -1;           /* INTEGER_0_1 */
150 static int hf_tetra_de_registration = -1;         /* INTEGER_0_1 */
151 static int hf_tetra_priority_cell = -1;           /* INTEGER_0_1 */
152 static int hf_tetra_minimum_mode_service = -1;    /* INTEGER_0_1 */
153 static int hf_tetra_migration = -1;               /* INTEGER_0_1 */
154 static int hf_tetra_system_wide_service = -1;     /* INTEGER_0_1 */
155 static int hf_tetra_tetra_voice_service = -1;     /* INTEGER_0_1 */
156 static int hf_tetra_circuit_mode_data_service = -1;  /* INTEGER_0_1 */
157 static int hf_tetra_reserved_01 = -1;             /* INTEGER_0_1 */
158 static int hf_tetra_sndcp_service = -1;           /* INTEGER_0_1 */
159 static int hf_tetra_air_interface_encryption = -1;  /* INTEGER_0_1 */
160 static int hf_tetra_advanced_link_support = -1;   /* INTEGER_0_1 */
161 static int hf_tetra_frame1 = -1;                  /* FRAME */
162 static int hf_tetra_frame2 = -1;                  /* FRAME */
163 static int hf_tetra_frame3 = -1;                  /* FRAME */
164 static int hf_tetra_frame4 = -1;                  /* FRAME */
165 static int hf_tetra_frame5 = -1;                  /* FRAME */
166 static int hf_tetra_frame6 = -1;                  /* FRAME */
167 static int hf_tetra_frame7 = -1;                  /* FRAME */
168 static int hf_tetra_frame8 = -1;                  /* FRAME */
169 static int hf_tetra_frame9 = -1;                  /* FRAME */
170 static int hf_tetra_frame10 = -1;                 /* FRAME */
171 static int hf_tetra_frame11 = -1;                 /* FRAME */
172 static int hf_tetra_frame12 = -1;                 /* FRAME */
173 static int hf_tetra_frame13 = -1;                 /* FRAME */
174 static int hf_tetra_frame14 = -1;                 /* FRAME */
175 static int hf_tetra_frame15 = -1;                 /* FRAME */
176 static int hf_tetra_frame16 = -1;                 /* FRAME */
177 static int hf_tetra_frame17 = -1;                 /* FRAME */
178 static int hf_tetra_frame18 = -1;                 /* FRAME */
179 static int hf_tetra_imm = -1;                     /* IMM */
180 static int hf_tetra_wt = -1;                      /* WT */
181 static int hf_tetra_nu = -1;                      /* NU */
182 static int hf_tetra_frame_len_factor = -1;        /* Frame_Len_Factor */
183 static int hf_tetra_timeslot_pointer = -1;        /* Timeslot_Pointer */
184 static int hf_tetra_min_pdu_priority = -1;        /* Min_Pdu_Priority */
185 static int hf_tetra_security_information = -1;    /* INTEGER_0_255 */
186 static int hf_tetra_sds_tl_addressing_method = -1;  /* SDS_TL_Addressing_Method */
187 static int hf_tetra_gck_supported = -1;           /* INTEGER_0_1 */
188 static int hf_tetra_section = -1;                 /* T_section */
189 static int hf_tetra_present_1 = -1;               /* PRESENT1 */
190 static int hf_tetra_present_2 = -1;               /* INTEGER_0_127 */
191 static int hf_tetra_present_3 = -1;               /* INTEGER_0_127 */
192 static int hf_tetra_present_4 = -1;               /* INTEGER_0_127 */
193 static int hf_tetra_data_priority_supported = -1;  /* Data_Priority_Supported */
194 static int hf_tetra_reserved_02 = -1;             /* INTEGER_0_7 */
195 static int hf_tetra_section_2_information = -1;   /* Section_Information */
196 static int hf_tetra_section_3_information = -1;   /* Section_Information */
197 static int hf_tetra_section_4_information = -1;   /* Section_Information */
198 static int hf_tetra_pdu_type_01 = -1;             /* INTEGER_0_1 */
199 static int hf_tetra_fill_bit_indication = -1;     /* Fill_Bit_Indication */
200 static int hf_tetra_encrypted_flag = -1;          /* Encrypted_Flag */
201 static int hf_tetra_address = -1;                 /* Address */
202 static int hf_tetra_data = -1;                    /* T_data */
203 static int hf_tetra_sdu1 = -1;                    /* U_LLC_PDU */
204 static int hf_tetra_sdu2 = -1;                    /* ComplexSDU */
205 static int hf_tetra_ssi = -1;                     /* INTEGER_0_16777215 */
206 static int hf_tetra_eventLabel = -1;              /* INTEGER_0_1023 */
207 static int hf_tetra_ussi = -1;                    /* INTEGER_0_16777215 */
208 static int hf_tetra_smi = -1;                     /* INTEGER_0_16777215 */
209 static int hf_tetra_bl_adata = -1;                /* U_BL_ADATA */
210 static int hf_tetra_bl_data = -1;                 /* U_BL_DATA */
211 static int hf_tetra_bl_udata = -1;                /* U_MLE_PDU */
212 static int hf_tetra_bl_ack = -1;                  /* U_BL_ACK */
213 static int hf_tetra_bl_adata_fcs = -1;            /* U_BL_ADATA_FCS */
214 static int hf_tetra_bl_data_fcs = -1;             /* U_BL_DATA_FCS */
215 static int hf_tetra_bl_udata_fcs = -1;            /* U_MLE_PDU_FCS */
216 static int hf_tetra_bl_ack_fcs = -1;              /* U_BL_ACK_FCS */
217 static int hf_tetra_al_setup = -1;                /* NULL */
218 static int hf_tetra_al_data = -1;                 /* NULL */
219 static int hf_tetra_al_udata = -1;                /* NULL */
220 static int hf_tetra_al_ack = -1;                  /* NULL */
221 static int hf_tetra_al_reconnect = -1;            /* NULL */
222 static int hf_tetra_reserve1 = -1;                /* NULL */
223 static int hf_tetra_reserve2 = -1;                /* NULL */
224 static int hf_tetra_al_disc = -1;                 /* NULL */
225 static int hf_tetra_nr = -1;                      /* INTEGER_0_1 */
226 static int hf_tetra_tl_sdu = -1;                  /* U_MLE_PDU */
227 static int hf_tetra_fcs = -1;                     /* OCTET_STRING_SIZE_4 */
228 static int hf_tetra_u_mle_pdu = -1;               /* U_MLE_PDU */
229 static int hf_tetra_ns = -1;                      /* INTEGER_0_1 */
230 static int hf_tetra_u_mle_reserved1 = -1;         /* NULL */
231 static int hf_tetra_mm = -1;                      /* U_MM_PDU */
232 static int hf_tetra_cmce = -1;                    /* U_CMCE_PDU */
233 static int hf_tetra_u_mle_reserved2 = -1;         /* NULL */
234 static int hf_tetra_sndcp = -1;                   /* NULL */
235 static int hf_tetra_mle = -1;                     /* UMLE_PDU */
236 static int hf_tetra_tetra_management_entity_protocol = -1;  /* NULL */
237 static int hf_tetra_u_mle_reserved3 = -1;         /* NULL */
238 static int hf_tetra_lengthIndicationOrCapacityRequest = -1;  /* T_lengthIndicationOrCapacityRequest */
239 static int hf_tetra_lengthIndication = -1;        /* LengthIndication */
240 static int hf_tetra_capacityRequest = -1;         /* FRAG */
241 static int hf_tetra_tm_sdu_01 = -1;               /* U_LLC_PDU */
242 static int hf_tetra_frag = -1;                    /* Frag1 */
243 static int hf_tetra_reservation_requirement = -1;  /* SLOT_APPLY */
244 static int hf_tetra_sub_type = -1;                /* INTEGER_0_1 */
245 static int hf_tetra_tm_sdu_02 = -1;               /* BIT_STRING_SIZE_264 */
246 static int hf_tetra_tm_sdu_03 = -1;               /* BIT_STRING_SIZE_120 */
247 static int hf_tetra_lengthInd_ReservationReq = -1;  /* LengthIndOrReservationReq */
248 static int hf_tetra_tm_sdu_04 = -1;               /* BIT_STRING_SIZE_258 */
249 static int hf_tetra_pdu_subtype = -1;             /* INTEGER_0_1 */
250 static int hf_tetra_tm_sdu_05 = -1;               /* BIT_STRING_SIZE_114 */
251 static int hf_tetra_lengthInd_ReservationReq_01 = -1;  /* T_lengthInd_ReservationReq */
252 static int hf_tetra_lengthInd = -1;               /* LengthIndMacHu */
253 static int hf_tetra_tm_sdu_06 = -1;               /* BIT_STRING_SIZE_85 */
254 static int hf_tetra_position_of_grant = -1;       /* Position_Of_Grant */
255 static int hf_tetra_lengthIndication_01 = -1;     /* LengthIndicationMacEndDl */
256 static int hf_tetra_slot_granting = -1;           /* T_slot_granting */
257 static int hf_tetra_none = -1;                    /* NULL */
258 static int hf_tetra_slot_granting_param = -1;     /* SlotGranting */
259 static int hf_tetra_channel_allocation = -1;      /* T_channel_allocation */
260 static int hf_tetra_channel_allocation_element = -1;  /* ChannelAllocation */
261 static int hf_tetra_tm_sdu_07 = -1;               /* BIT_STRING_SIZE_255 */
262 static int hf_tetra_capacity_allocation = -1;     /* Capacity_Allocation */
263 static int hf_tetra_granting_delay = -1;          /* Granting_delay */
264 static int hf_tetra_allocation_type = -1;         /* T_allocation_type */
265 static int hf_tetra_timeslot_assigned = -1;       /* Timeslot_Assigned */
266 static int hf_tetra_up_down_assigned = -1;        /* T_up_down_assigned */
267 static int hf_tetra_clch_permission = -1;         /* CLCH_permission */
268 static int hf_tetra_cell_change = -1;             /* Cell_change_flag */
269 static int hf_tetra_carrier_number = -1;          /* INTEGER_0_4095 */
270 static int hf_tetra_extend_carrier_flag = -1;     /* T_extend_carrier_flag */
271 static int hf_tetra_extended = -1;                /* Extended_carrier_flag */
272 static int hf_tetra_monitoring_pattern = -1;      /* T_monitoring_pattern */
273 static int hf_tetra_one = -1;                     /* Monitoring_pattern */
274 static int hf_tetra_none1 = -1;                   /* NULL */
275 static int hf_tetra_none2 = -1;                   /* NULL */
276 static int hf_tetra_none3 = -1;                   /* NULL */
277 static int hf_tetra_offset_01 = -1;               /* INTEGER_0_3 */
278 static int hf_tetra_reverse_operation_01 = -1;    /* T_reverse_operation */
279 static int hf_tetra_pdu_type_02 = -1;             /* INTEGER_0_7 */
280 static int hf_tetra_fill_bit_ind = -1;            /* BOOLEAN */
281 static int hf_tetra_position_of_grant_01 = -1;    /* INTEGER_0_1 */
282 static int hf_tetra_slot_granting_01 = -1;        /* T_slot_granting_01 */
283 static int hf_tetra_channel_allocation_01 = -1;   /* T_channel_allocation_01 */
284 static int hf_tetra_tm_sdu_08 = -1;               /* BIT_STRING_SIZE_111 */
285 static int hf_tetra_encryption_mode = -1;         /* INTEGER_0_3 */
286 static int hf_tetra_access_ack = -1;              /* T_access_ack */
287 static int hf_tetra_lengthIndication_02 = -1;     /* LengthIndicationMacResource */
288 static int hf_tetra_address_01 = -1;              /* AddressMacResource */
289 static int hf_tetra_power_control = -1;           /* T_power_control */
290 static int hf_tetra_powerParameters = -1;         /* PowerControl */
291 static int hf_tetra_slot_granting_02 = -1;        /* T_slot_granting_02 */
292 static int hf_tetra_channel_allocation_02 = -1;   /* T_channel_allocation_02 */
293 static int hf_tetra_tm_sdu_09 = -1;               /* D_LLC_PDU */
294 static int hf_tetra_null_pdu = -1;                /* NULL */
295 static int hf_tetra_ssi_01 = -1;                  /* SSI_NEED */
296 static int hf_tetra_eventLabel_01 = -1;           /* EVENT_NEED */
297 static int hf_tetra_ussi_01 = -1;                 /* USSI_NEED */
298 static int hf_tetra_smi_01 = -1;                  /* SMI_NEED */
299 static int hf_tetra_ssi_eventLabel = -1;          /* SSI_EVENT_NEED */
300 static int hf_tetra_ssi_usage_maker = -1;         /* SSI_USAGE_NEED */
301 static int hf_tetra_smi_eventLabel = -1;          /* SMI_EVENT_NEED */
302 static int hf_tetra_other = -1;                   /* OTHER_DATA */
303 static int hf_tetra_eventlabel = -1;              /* INTEGER_0_1023 */
304 static int hf_tetra_ventlabel = -1;               /* INTEGER_0_1023 */
305 static int hf_tetra_usage_maker = -1;             /* INTEGER_0_63 */
306 static int hf_tetra_smi_eventlabel = -1;          /* BIT_STRING_SIZE_34 */
307 static int hf_tetra_broadcast_channel = -1;       /* INTEGER_0_1 */
308 static int hf_tetra_access_code = -1;             /* INTEGER_0_3 */
309 static int hf_tetra_imm_01 = -1;                  /* INTEGER_0_15 */
310 static int hf_tetra_wt_01 = -1;                   /* INTEGER_0_15 */
311 static int hf_tetra_nu_01 = -1;                   /* INTEGER_0_15 */
312 static int hf_tetra_frame_len_factor_01 = -1;     /* INTEGER_0_1 */
313 static int hf_tetra_timeslot_pointer_01 = -1;     /* INTEGER_0_15 */
314 static int hf_tetra_min_priority = -1;            /* INTEGER_0_7 */
315 static int hf_tetra_optional_field = -1;          /* T_optional_field */
316 static int hf_tetra_class_bitmap = -1;            /* INTEGER_0_65535 */
317 static int hf_tetra_gssi = -1;                    /* INTEGER_0_33554431 */
318 static int hf_tetra_reserved_03 = -1;             /* NULL */
319 static int hf_tetra_filler_bits = -1;             /* INTEGER_0_7 */
320 static int hf_tetra_bl_adata_01 = -1;             /* D_BL_ADATA */
321 static int hf_tetra_bl_data_01 = -1;              /* D_BL_DATA */
322 static int hf_tetra_bl_udata_01 = -1;             /* D_MLE_PDU */
323 static int hf_tetra_bl_ack_01 = -1;               /* D_BL_ACK */
324 static int hf_tetra_bl_adata_fcs_01 = -1;         /* D_BL_ADATA_FCS */
325 static int hf_tetra_bl_data_fcs_01 = -1;          /* D_BL_DATA_FCS */
326 static int hf_tetra_bl_udata_fcs_01 = -1;         /* D_MLE_PDU_FCS */
327 static int hf_tetra_bl_ack_fcs_01 = -1;           /* D_BL_ACK_FCS */
328 static int hf_tetra_tl_sdu_01 = -1;               /* D_MLE_PDU */
329 static int hf_tetra_d_mle_pdu = -1;               /* D_MLE_PDU */
330 static int hf_tetra_mm_01 = -1;                   /* D_MM_PDU */
331 static int hf_tetra_cmce_01 = -1;                 /* D_CMCE_PDU */
332 static int hf_tetra_mle_01 = -1;                  /* DMLE_PDU */
333 static int hf_tetra_u_prepare = -1;               /* U_PREPARE */
334 static int hf_tetra_umle_reserved1 = -1;          /* NULL */
335 static int hf_tetra_umle_reserved2 = -1;          /* NULL */
336 static int hf_tetra_umle_reserved3 = -1;          /* NULL */
337 static int hf_tetra_u_restore = -1;               /* U_RESTORE */
338 static int hf_tetra_umle_reserved4 = -1;          /* NULL */
339 static int hf_tetra_umle_reserved5 = -1;          /* NULL */
340 static int hf_tetra_umle_reserved6 = -1;          /* NULL */
341 static int hf_tetra_d_new_cell = -1;              /* D_NEW_CELL */
342 static int hf_tetra_d_prepare_fail = -1;          /* D_PREPARE_FAIL */
343 static int hf_tetra_d_nwrk_broadcast = -1;        /* D_NWRK_BRDADCAST */
344 static int hf_tetra_dmle_reserved1 = -1;          /* NULL */
345 static int hf_tetra_d_restore_ack = -1;           /* D_RESTORE_ACK */
346 static int hf_tetra_d_restore_fail = -1;          /* D_RESTORE_FAIL */
347 static int hf_tetra_dmle_reserved2 = -1;          /* NULL */
348 static int hf_tetra_dmle_reserved3 = -1;          /* NULL */
349 static int hf_tetra_optional_elements = -1;       /* T_optional_elements */
350 static int hf_tetra_no_type2 = -1;                /* NULL */
351 static int hf_tetra_type2_parameters = -1;        /* T_type2_parameters */
352 static int hf_tetra_cell_number = -1;             /* T_cell_number */
353 static int hf_tetra_cell_number_01 = -1;          /* INTEGER_0_65535 */
354 static int hf_tetra_sdu = -1;                     /* BIT_STRING */
355 static int hf_tetra_optional_elements_01 = -1;    /* T_optional_elements_01 */
356 static int hf_tetra_type2_parameters_01 = -1;     /* T_type2_parameters_01 */
357 static int hf_tetra_mcc_01 = -1;                  /* T_mcc */
358 static int hf_tetra_mnc_01 = -1;                  /* T_mnc */
359 static int hf_tetra_la_01 = -1;                   /* T_la */
360 static int hf_tetra_channel_command_valid = -1;   /* INTEGER_0_3 */
361 static int hf_tetra_optional_elements_02 = -1;    /* T_optional_elements_02 */
362 static int hf_tetra_fail_cause = -1;              /* INTEGER_0_3 */
363 static int hf_tetra_optional_elements_03 = -1;    /* T_optional_elements_03 */
364 static int hf_tetra_cell_re_select_parameters = -1;  /* INTEGER_0_65535 */
365 static int hf_tetra_optional_elements_04 = -1;    /* T_optional_elements_04 */
366 static int hf_tetra_type2_parameters_02 = -1;     /* T_type2_parameters_02 */
367 static int hf_tetra_tetra_network_time = -1;      /* T_tetra_network_time */
368 static int hf_tetra_tetra_network_time_01 = -1;   /* TETRA_NETWORK_TIME */
369 static int hf_tetra_number_of_neighbour_cells = -1;  /* T_number_of_neighbour_cells */
370 static int hf_tetra_number_of_neighbour_cells_01 = -1;  /* INTEGER_0_7 */
371 static int hf_tetra_network_time = -1;            /* T_network_time */
372 static int hf_tetra_local_time_offset_sign = -1;  /* INTEGER_0_1 */
373 static int hf_tetra_local_time_offset = -1;       /* INTEGER_0_63 */
374 static int hf_tetra_year = -1;                    /* INTEGER_0_63 */
375 static int hf_tetra_reserved_04 = -1;             /* T_reserved */
376 static int hf_tetra_u_Authentication = -1;        /* NULL */
377 static int hf_tetra_u_Itsi_Detach = -1;           /* NULL */
378 static int hf_tetra_u_Location_Update_Demand = -1;  /* U_LOCATION_UPDATE_DEMAND */
379 static int hf_tetra_u_MM_Status = -1;             /* U_MM_STATUS */
380 static int hf_tetra_u_MM_reserved1 = -1;          /* NULL */
381 static int hf_tetra_u_WK = -1;                    /* NULL */
382 static int hf_tetra_u_MM_reserved3 = -1;          /* NULL */
383 static int hf_tetra_u_Attach_Detach_Group_Identity = -1;  /* U_ATTACH_DETACH_GROUP_IDENTITY */
384 static int hf_tetra_u_Attach_Detach_Group_Identity_Ack = -1;  /* U_ATTACH_DETACH_GROUP_IDENTITY_ACK */
385 static int hf_tetra_u_TEI_Provide = -1;           /* NULL */
386 static int hf_tetra_u_MM_reserved6 = -1;          /* NULL */
387 static int hf_tetra_u_Disabled_Status = -1;       /* NULL */
388 static int hf_tetra_u_MM_reserved7 = -1;          /* NULL */
389 static int hf_tetra_u_MM_reserved8 = -1;          /* NULL */
390 static int hf_tetra_u_MM_reserved9 = -1;          /* NULL */
391 static int hf_tetra_u_MM_Function_Not_Support = -1;  /* NULL */
392 static int hf_tetra_d_Otar = -1;                  /* NULL */
393 static int hf_tetra_d_Authentication = -1;        /* NULL */
394 static int hf_tetra_d_Authentication_Reject = -1;  /* NULL */
395 static int hf_tetra_d_Disable = -1;               /* NULL */
396 static int hf_tetra_d_Enable = -1;                /* NULL */
397 static int hf_tetra_d_Location_Update_Accept = -1;  /* D_LOCATION_UPDATE_ACCEPT */
398 static int hf_tetra_d_Location_Update_Command = -1;  /* NULL */
399 static int hf_tetra_d_Location_Update_Reject = -1;  /* D_LOCATION_UPDATE_REJECT */
400 static int hf_tetra_d_MM_reserved2 = -1;          /* NULL */
401 static int hf_tetra_d_Location_Update_Proceeding = -1;  /* NULL */
402 static int hf_tetra_d_Attach_Detach_Group_Identity = -1;  /* D_ATTACH_DETACH_GROUP_IDENTITY */
403 static int hf_tetra_d_Attach_Detach_Group_Identity_Ack = -1;  /* D_ATTACH_DETACH_GROUP_IDENTITY_ACK */
404 static int hf_tetra_d_MM_Status = -1;             /* D_MM_STATUS */
405 static int hf_tetra_d_MM_reserved5 = -1;          /* NULL */
406 static int hf_tetra_d_MM_reserved6 = -1;          /* NULL */
407 static int hf_tetra_d_MM_Function_Not_Support = -1;  /* NULL */
408 static int hf_tetra_attach_detach_identifiet = -1;  /* T_attach_detach_identifiet */
409 static int hf_tetra_attach = -1;                  /* T_attach */
410 static int hf_tetra_lifetime = -1;                /* INTEGER_0_3 */
411 static int hf_tetra_class_of_usage = -1;          /* INTEGER_0_7 */
412 static int hf_tetra_detach = -1;                  /* T_detach */
413 static int hf_tetra_detach_downlike = -1;         /* T_detach_downlike */
414 static int hf_tetra_address_type = -1;            /* T_address_type */
415 static int hf_tetra_gssi_01 = -1;                 /* OCTET_STRING_SIZE_3 */
416 static int hf_tetra_gssi_extension = -1;          /* T_gssi_extension */
417 static int hf_tetra_extension = -1;               /* OCTET_STRING_SIZE_3 */
418 static int hf_tetra_vgssi = -1;                   /* OCTET_STRING_SIZE_3 */
419 static int hf_tetra_attach_detach_identifiet_01 = -1;  /* T_attach_detach_identifiet_01 */
420 static int hf_tetra_attach_01 = -1;               /* T_attach_01 */
421 static int hf_tetra_detach_01 = -1;               /* T_detach_01 */
422 static int hf_tetra_detach_uplike = -1;           /* T_detach_uplike */
423 static int hf_tetra_address_type_01 = -1;         /* T_address_type_01 */
424 static int hf_tetra_gssi_extension_01 = -1;       /* T_gssi_extension_01 */
425 static int hf_tetra_location_update_type = -1;    /* UPDATE_TYPE */
426 static int hf_tetra_optional_elements_05 = -1;    /* T_optional_elements_05 */
427 static int hf_tetra_type2_parameters_03 = -1;     /* T_type2_parameters_03 */
428 static int hf_tetra_ssi_02 = -1;                  /* T_ssi */
429 static int hf_tetra_ssi_03 = -1;                  /* OCTET_STRING_SIZE_3 */
430 static int hf_tetra_address_extension = -1;       /* T_address_extension */
431 static int hf_tetra_address_extension_01 = -1;    /* OCTET_STRING_SIZE_3 */
432 static int hf_tetra_suscriber_class = -1;         /* T_suscriber_class */
433 static int hf_tetra_suscriber_class_01 = -1;      /* INTEGER_0_32767 */
434 static int hf_tetra_energy_saving_mode = -1;      /* T_energy_saving_mode */
435 static int hf_tetra_energy_saving_mode_01 = -1;   /* INTEGER_0_7 */
436 static int hf_tetra_scch_info = -1;               /* T_scch_info */
437 static int hf_tetra_scch_info_01 = -1;            /* INTEGER_0_16383 */
438 static int hf_tetra_type3 = -1;                   /* T_type3 */
439 static int hf_tetra_no_type3 = -1;                /* NULL */
440 static int hf_tetra_type3_elements = -1;          /* T_type3_elements */
441 static int hf_tetra_type2_existance = -1;         /* BOOLEAN */
442 static int hf_tetra_type3_identifier = -1;        /* TYPE3_IDENTIFIER */
443 static int hf_tetra_new_ra = -1;                  /* T_new_ra */
444 static int hf_tetra_new_ra_01 = -1;               /* INTEGER_0_3 */
445 static int hf_tetra_group_identity_location_accept = -1;  /* T_group_identity_location_accept */
446 static int hf_tetra_group_identity_location_accept_01 = -1;  /* INTEGER_0_3 */
447 static int hf_tetra_group_predefined_lifetime = -1;  /* T_group_predefined_lifetime */
448 static int hf_tetra_group_predefined_lifetime_01 = -1;  /* INTEGER_0_3 */
449 static int hf_tetra_group_identity_downlink = -1;  /* T_group_identity_downlink */
450 static int hf_tetra_group_identity_downlink_01 = -1;  /* INTEGER_0_15 */
451 static int hf_tetra_proprietary = -1;             /* T_proprietary */
452 static int hf_tetra_proprietary_01 = -1;          /* INTEGER_0_7 */
453 static int hf_tetra_reject_cause = -1;            /* INTEGER_0_31 */
454 static int hf_tetra_cipher_control = -1;          /* BOOLEAN */
455 static int hf_tetra_status_uplink = -1;           /* INTEGER_0_63 */
456 static int hf_tetra_scanning_on_off = -1;         /* T_scanning_on_off */
457 static int hf_tetra_status_downlink = -1;         /* INTEGER_0_63 */
458 static int hf_tetra_u_Alert = -1;                 /* U_ALERT */
459 static int hf_tetra_reserved1 = -1;               /* NULL */
460 static int hf_tetra_u_Connect = -1;               /* U_CONNECT */
461 static int hf_tetra_reserved2 = -1;               /* NULL */
462 static int hf_tetra_u_Disconnect = -1;            /* U_DISCONNECT */
463 static int hf_tetra_u_Info = -1;                  /* U_INFO */
464 static int hf_tetra_u_Release = -1;               /* U_RELEASE */
465 static int hf_tetra_u_Setup = -1;                 /* U_SETUP */
466 static int hf_tetra_u_Status = -1;                /* U_STATUS */
467 static int hf_tetra_u_Tx_Ceased = -1;             /* U_TX_CEASED */
468 static int hf_tetra_u_Tx_Demand = -1;             /* U_TX_DEMAND */
469 static int hf_tetra_reserved3 = -1;               /* NULL */
470 static int hf_tetra_reserved4 = -1;               /* NULL */
471 static int hf_tetra_reserved5 = -1;               /* NULL */
472 static int hf_tetra_u_Call_Restore = -1;          /* U_CALL_RESTORE */
473 static int hf_tetra_u_SDS_Data = -1;              /* U_SDS_DATA */
474 static int hf_tetra_u_Facility = -1;              /* NULL */
475 static int hf_tetra_call_identifier = -1;         /* INTEGER_0_16383 */
476 static int hf_tetra_disconnect_cause = -1;        /* INTEGER_0_31 */
477 static int hf_tetra_area_selection = -1;          /* INTEGER_0_15 */
478 static int hf_tetra_called_party_type_identifier = -1;  /* T_called_party_type_identifier */
479 static int hf_tetra_sna = -1;                     /* INTEGER_0_255 */
480 static int hf_tetra_ssi_extension = -1;           /* BIT_STRING_SIZE_48 */
481 static int hf_tetra_short_data_type_identifier = -1;  /* T_short_data_type_identifier */
482 static int hf_tetra_data_1 = -1;                  /* INTEGER_0_65535 */
483 static int hf_tetra_data_2 = -1;                  /* OCTET_STRING_SIZE_4 */
484 static int hf_tetra_data_3 = -1;                  /* BIT_STRING_SIZE_64 */
485 static int hf_tetra_length_indicator_data_4 = -1;  /* INTEGER_0_4194304 */
486 static int hf_tetra_called_party_type_identifier_01 = -1;  /* T_called_party_type_identifier_01 */
487 static int hf_tetra_short_number_address = -1;    /* INTEGER_0_255 */
488 static int hf_tetra_called_ssi_called_extension = -1;  /* BIT_STRING_SIZE_48 */
489 static int hf_tetra_pre_coded_status = -1;        /* INTEGER_0_65535 */
490 static int hf_tetra_call_id = -1;                 /* INTEGER_0_16383 */
491 static int hf_tetra_poll_response = -1;           /* INTEGER_0_1 */
492 static int hf_tetra_d_Alert = -1;                 /* D_ALERT */
493 static int hf_tetra_d_Call_Proceeding = -1;       /* D_CALL_PROCEEDING */
494 static int hf_tetra_d_Connect = -1;               /* D_CONNECT */
495 static int hf_tetra_d_Connect_Ack = -1;           /* D_CONNECT_ACK */
496 static int hf_tetra_d_Disconnect = -1;            /* D_DISCONNECT */
497 static int hf_tetra_d_Info = -1;                  /* D_INFO */
498 static int hf_tetra_d_Release = -1;               /* D_RELEASE */
499 static int hf_tetra_d_Setup = -1;                 /* D_SETUP */
500 static int hf_tetra_d_Status = -1;                /* D_STATUS */
501 static int hf_tetra_d_Tx_Ceased = -1;             /* D_TX_CEASED */
502 static int hf_tetra_d_Tx_Continue = -1;           /* D_TX_CONTINUE */
503 static int hf_tetra_d_Tx_Granted = -1;            /* D_TX_GRANTED */
504 static int hf_tetra_d_Tx_Wait = -1;               /* D_TX_WAIT */
505 static int hf_tetra_d_Tx_Interrupt = -1;          /* NULL */
506 static int hf_tetra_d_Call_Restore = -1;          /* D_CALL_RESTORE */
507 static int hf_tetra_d_SDS_Data = -1;              /* D_SDS_DATA */
508 static int hf_tetra_d_Facility = -1;              /* NULL */
509 static int hf_tetra_calling_party_type_identifier = -1;  /* T_calling_party_type_identifier */
510 static int hf_tetra_ssi_extension_01 = -1;        /* OCTET_STRING_SIZE_6 */
511 static int hf_tetra_short_data_type_identifier_01 = -1;  /* T_short_data_type_identifier_01 */
512 static int hf_tetra_data_3_01 = -1;               /* OCTET_STRING_SIZE_8 */
513 static int hf_tetra_calling_party_type_identifier_01 = -1;  /* T_calling_party_type_identifier_01 */
514 static int hf_tetra_calling_party_address_SSI = -1;  /* INTEGER_0_16777215 */
515 static int hf_tetra_reset_call_time_out_timer = -1;  /* INTEGER_0_1 */
516 static int hf_tetra_poll_request = -1;            /* INTEGER_0_1 */
517 static int hf_tetra_transmission_request_permission = -1;  /* INTEGER_0_1 */
518 static int hf_tetra_continue = -1;                /* INTEGER_0_1 */
519 static int hf_tetra_request_to_append_LA = -1;    /* BOOLEAN */
520 static int hf_tetra_cipher_control_01 = -1;       /* T_cipher_control */
521 static int hf_tetra_no_cipher = -1;               /* NULL */
522 static int hf_tetra_ciphering_parameters = -1;    /* INTEGER_0_1023 */
523 static int hf_tetra_class_of_MS = -1;             /* OCTET_STRING_SIZE_4 */
524 static int hf_tetra_optional_elements_06 = -1;    /* T_optional_elements_06 */
525 static int hf_tetra_type2_parameters_04 = -1;     /* T_type2_parameters_04 */
526 static int hf_tetra_energy_saving_mode_02 = -1;   /* T_energy_saving_mode_01 */
527 static int hf_tetra_la_information = -1;          /* T_la_information */
528 static int hf_tetra_la_information_01 = -1;       /* INTEGER_0_16383 */
529 static int hf_tetra_ssi_04 = -1;                  /* T_ssi_01 */
530 static int hf_tetra_address_extension_02 = -1;    /* T_address_extension_01 */
531 static int hf_tetra_type3_01 = -1;                /* T_type3_01 */
532 static int hf_tetra_type3_elements_01 = -1;       /* T_type3_elements_01 */
533 static int hf_tetra_group_identity_location_demand = -1;  /* T_group_identity_location_demand */
534 static int hf_tetra_group_identity_location_demand_01 = -1;  /* INTEGER_0_3 */
535 static int hf_tetra_group_report_response = -1;   /* T_group_report_response */
536 static int hf_tetra_group_report_response_01 = -1;  /* BOOLEAN */
537 static int hf_tetra_group_identity_uplink = -1;   /* T_group_identity_uplink */
538 static int hf_tetra_group_identity_uplink_01 = -1;  /* INTEGER_0_15 */
539 static int hf_tetra_proprietary_02 = -1;          /* T_proprietary_01 */
540 static int hf_tetra_group_identity_report = -1;   /* BOOLEAN */
541 static int hf_tetra_group_identity_attach_detach_mode = -1;  /* BOOLEAN */
542 static int hf_tetra_optional_elements_07 = -1;    /* T_optional_elements_07 */
543 static int hf_tetra_type2_element = -1;           /* T_type2_element */
544 static int hf_tetra_type3_02 = -1;                /* T_type3_02 */
545 static int hf_tetra_type3_elements_02 = -1;       /* T_type3_elements_02 */
546 static int hf_tetra_length = -1;                  /* INTEGER_0_2047 */
547 static int hf_tetra_repeat_num = -1;              /* INTEGER_0_63 */
548 static int hf_tetra_group_identity_uplink_02 = -1;  /* GROUP_IDENTITY_UPLINK */
549 static int hf_tetra_group_identity_ack_type = -1;  /* BOOLEAN */
550 static int hf_tetra_optional_elements_08 = -1;    /* T_optional_elements_08 */
551 static int hf_tetra_type2_element_01 = -1;        /* T_type2_element_01 */
552 static int hf_tetra_type3_03 = -1;                /* T_type3_03 */
553 static int hf_tetra_type3_elements_03 = -1;       /* T_type3_elements_03 */
554 static int hf_tetra_hook_method_selection = -1;   /* BOOLEAN */
555 static int hf_tetra_simple_duplex_selection = -1;  /* T_simple_duplex_selection */
556 static int hf_tetra_basic_service_information = -1;  /* Basic_service_information */
557 static int hf_tetra_request_transmit_send_data = -1;  /* INTEGER_0_1 */
558 static int hf_tetra_call_priority = -1;           /* INTEGER_0_15 */
559 static int hf_tetra_clir_control = -1;            /* INTEGER_0_3 */
560 static int hf_tetra_called_party_address = -1;    /* Called_party_address_type */
561 static int hf_tetra_optional_elements_09 = -1;    /* T_optional_elements_09 */
562 static int hf_tetra_type2_parameters_05 = -1;     /* T_type2_parameters_05 */
563 static int hf_tetra_external_subscriber_number = -1;  /* T_external_subscriber_number */
564 static int hf_tetra_external_subscriber_number_01 = -1;  /* INTEGER_0_31 */
565 static int hf_tetra_prop = -1;                    /* T_prop */
566 static int hf_tetra_prop_01 = -1;                 /* Proprietary */
567 static int hf_tetra_circuit_mode = -1;            /* CIRCUIT */
568 static int hf_tetra_encryption = -1;              /* INTEGER_0_1 */
569 static int hf_tetra_communication = -1;           /* INTEGER_0_3 */
570 static int hf_tetra_slots_or_speech = -1;         /* INTEGER_0_3 */
571 static int hf_tetra_call_identifier_01 = -1;      /* INTEGER_0_1023 */
572 static int hf_tetra_simplex_duplex_selection = -1;  /* T_simplex_duplex_selection */
573 static int hf_tetra_optional_elements_10 = -1;    /* T_optional_elements_10 */
574 static int hf_tetra_type2_parameters_06 = -1;     /* T_type2_parameters_06 */
575 static int hf_tetra_basic_service_information_01 = -1;  /* T_basic_service_information */
576 static int hf_tetra_prop_02 = -1;                 /* T_prop_01 */
577 static int hf_tetra_simplex_duplex_selection_01 = -1;  /* T_simplex_duplex_selection_01 */
578 static int hf_tetra_optional_elements_11 = -1;    /* T_optional_elements_11 */
579 static int hf_tetra_type2_parameters_07 = -1;     /* T_type2_parameters_07 */
580 static int hf_tetra_basic_service_information_02 = -1;  /* T_basic_service_information_01 */
581 static int hf_tetra_prop_03 = -1;                 /* T_prop_02 */
582 static int hf_tetra_optional_elements_12 = -1;    /* T_optional_elements_12 */
583 static int hf_tetra_type2_parameters_08 = -1;     /* T_type2_parameters_08 */
584 static int hf_tetra_prop_04 = -1;                 /* T_prop_03 */
585 static int hf_tetra_tx_demand_priority = -1;      /* INTEGER_0_3 */
586 static int hf_tetra_encryption_control = -1;      /* INTEGER_0_1 */
587 static int hf_tetra_optional_elements_13 = -1;    /* T_optional_elements_13 */
588 static int hf_tetra_type2_parameters_09 = -1;     /* T_type2_parameters_09 */
589 static int hf_tetra_prop_05 = -1;                 /* T_prop_04 */
590 static int hf_tetra_optional_elements_14 = -1;    /* T_optional_elements_14 */
591 static int hf_tetra_type2_parameters_10 = -1;     /* T_type2_parameters_10 */
592 static int hf_tetra_prop_06 = -1;                 /* T_prop_05 */
593 static int hf_tetra_request_to_transmit_send_data = -1;  /* INTEGER_0_1 */
594 static int hf_tetra_other_party_address = -1;     /* Other_party_address_type */
595 static int hf_tetra_optional_elements_15 = -1;    /* T_optional_elements_15 */
596 static int hf_tetra_type2_parameters_11 = -1;     /* T_type2_parameters_11 */
597 static int hf_tetra_prop_07 = -1;                 /* T_prop_06 */
598 static int hf_tetra_call_time_out = -1;           /* INTEGER_0_15 */
599 static int hf_tetra_hook_method_selection_01 = -1;  /* INTEGER_0_1 */
600 static int hf_tetra_simplex_duplex_selection_02 = -1;  /* T_simplex_duplex_selection_02 */
601 static int hf_tetra_transmission_grant = -1;      /* INTEGER_0_3 */
602 static int hf_tetra_optional_elements_16 = -1;    /* T_optional_elements_16 */
603 static int hf_tetra_type2_parameters_12 = -1;     /* T_type2_parameters_12 */
604 static int hf_tetra_calling_party_address = -1;   /* T_calling_party_address */
605 static int hf_tetra_calling_party_address_01 = -1;  /* Calling_party_address_type */
606 static int hf_tetra_external_subscriber_number_02 = -1;  /* T_external_subscriber_number_01 */
607 static int hf_tetra_external_subscriber_number_03 = -1;  /* INTEGER_0_15 */
608 static int hf_tetra_prop_08 = -1;                 /* T_prop_07 */
609 static int hf_tetra_call_time_out_setup_phase = -1;  /* INTEGER_0_7 */
610 static int hf_tetra_simplex_duplex_selection_03 = -1;  /* INTEGER_0_1 */
611 static int hf_tetra_optional_elements_17 = -1;    /* T_optional_elements_17 */
612 static int hf_tetra_type2_parameters_13 = -1;     /* T_type2_parameters_13 */
613 static int hf_tetra_basic_service_information_03 = -1;  /* T_basic_service_information_02 */
614 static int hf_tetra_call_status = -1;             /* T_call_status */
615 static int hf_tetra_call_status_01 = -1;          /* INTEGER_0_7 */
616 static int hf_tetra_notification_indicator = -1;  /* T_notification_indicator */
617 static int hf_tetra_notification_indicator_01 = -1;  /* INTEGER_0_63 */
618 static int hf_tetra_prop_09 = -1;                 /* T_prop_08 */
619 static int hf_tetra_simplex_duplex_selection_04 = -1;  /* T_simplex_duplex_selection_03 */
620 static int hf_tetra_call_queued = -1;             /* BOOLEAN */
621 static int hf_tetra_optional_elements_18 = -1;    /* T_optional_elements_18 */
622 static int hf_tetra_type2_parameters_14 = -1;     /* T_type2_parameters_14 */
623 static int hf_tetra_basic_service_infomation = -1;  /* T_basic_service_infomation */
624 static int hf_tetra_basic_service_infomation_01 = -1;  /* Basic_service_information */
625 static int hf_tetra_notification_indicator_02 = -1;  /* T_notification_indicator_01 */
626 static int hf_tetra_prop_10 = -1;                 /* T_prop_09 */
627 static int hf_tetra_call_time_out_01 = -1;        /* INTEGER_0_31 */
628 static int hf_tetra_simplex_duplex_selection_05 = -1;  /* T_simplex_duplex_selection_04 */
629 static int hf_tetra_call_ownership = -1;          /* INTEGER_0_1 */
630 static int hf_tetra_optional_elements_19 = -1;    /* T_optional_elements_19 */
631 static int hf_tetra_type2_parameters_15 = -1;     /* T_type2_parameters_15 */
632 static int hf_tetra_call_priority_01 = -1;        /* T_call_priority */
633 static int hf_tetra_basic_service_information_04 = -1;  /* T_basic_service_information_03 */
634 static int hf_tetra_temporary_address = -1;       /* T_temporary_address */
635 static int hf_tetra_temporary_address_01 = -1;    /* Calling_party_address_type */
636 static int hf_tetra_notification_indicator_03 = -1;  /* T_notification_indicator_02 */
637 static int hf_tetra_prop_11 = -1;                 /* T_prop_10 */
638 static int hf_tetra_optional_elements_20 = -1;    /* T_optional_elements_20 */
639 static int hf_tetra_type2_parameters_16 = -1;     /* T_type2_parameters_16 */
640 static int hf_tetra_notification_indicator_04 = -1;  /* T_notification_indicator_03 */
641 static int hf_tetra_prop_12 = -1;                 /* T_prop_11 */
642 static int hf_tetra_optional_elements_21 = -1;    /* T_optional_elements_21 */
643 static int hf_tetra_type2_parameters_17 = -1;     /* T_type2_parameters_17 */
644 static int hf_tetra_notification_indicator_05 = -1;  /* T_notification_indicator_04 */
645 static int hf_tetra_prop_13 = -1;                 /* T_prop_12 */
646 static int hf_tetra_reset_call_time_out = -1;     /* INTEGER_0_1 */
647 static int hf_tetra_optional_elements_22 = -1;    /* T_optional_elements_22 */
648 static int hf_tetra_type2_parameters_18 = -1;     /* T_type2_parameters_18 */
649 static int hf_tetra_new_call_identifier = -1;     /* T_new_call_identifier */
650 static int hf_tetra_new_call_identifier_01 = -1;  /* INTEGER_0_1023 */
651 static int hf_tetra_call_time_out_02 = -1;        /* T_call_time_out */
652 static int hf_tetra_call_time_out_03 = -1;        /* INTEGER_0_7 */
653 static int hf_tetra_call_status_02 = -1;          /* T_call_status_01 */
654 static int hf_tetra_modify = -1;                  /* T_modify */
655 static int hf_tetra_modify_01 = -1;               /* Modify_type */
656 static int hf_tetra_notification_indicator_06 = -1;  /* T_notification_indicator_05 */
657 static int hf_tetra_prop_14 = -1;                 /* T_prop_13 */
658 static int hf_tetra_optional_elements_23 = -1;    /* T_optional_elements_23 */
659 static int hf_tetra_type2_parameters_19 = -1;     /* T_type2_parameters_19 */
660 static int hf_tetra_notification_indicator_07 = -1;  /* T_notification_indicator_06 */
661 static int hf_tetra_prop_15 = -1;                 /* T_prop_14 */
662 static int hf_tetra_group_identity_ack_request = -1;  /* BOOLEAN */
663 static int hf_tetra_optional_elements_24 = -1;    /* T_optional_elements_24 */
664 static int hf_tetra_type2_element_02 = -1;        /* T_type2_element_02 */
665 static int hf_tetra_type3_04 = -1;                /* T_type3_04 */
666 static int hf_tetra_type3_elements_04 = -1;       /* T_type3_elements_04 */
667 static int hf_tetra_group_identity_downlink_02 = -1;  /* GROUP_IDENTITY_DOWNLINK */
668 static int hf_tetra_group_identity_attach_detach_accept = -1;  /* BOOLEAN */
669 static int hf_tetra_optional_elements_25 = -1;    /* T_optional_elements_25 */
670 static int hf_tetra_type2_element_03 = -1;        /* T_type2_element_03 */
671 static int hf_tetra_type3_05 = -1;                /* T_type3_05 */
672 static int hf_tetra_type3_elements_05 = -1;       /* T_type3_elements_05 */
673 static int hf_tetra_called_party_sna = -1;        /* INTEGER_0_255 */
674 static int hf_tetra_called_party_ssi = -1;        /* INTEGER_0_16777215 */
675 static int hf_tetra_called_party_ssi_extention = -1;  /* T_called_party_ssi_extention */
676 static int hf_tetra_called_party_extention = -1;  /* INTEGER_0_16777215 */
677 static int hf_tetra_data_01 = -1;                 /* T_data_01 */
678 static int hf_tetra_element1 = -1;                /* Type1 */
679 static int hf_tetra_element = -1;                 /* Type2 */
680 static int hf_tetra_proprietary_element_owner = -1;  /* Proprietary_element_owner */
681 static int hf_tetra_proprietary_element_owner_extension = -1;  /* BIT_STRING */
682 static int hf_tetra_simplex_duplex_selection_06 = -1;  /* T_simplex_duplex_selection_05 */
683
684 /*--- End of included file: packet-tetra-hf.c ---*/
685 #line 85 "../../asn1/tetra/packet-tetra-template.c"
686
687 /* Initialize the subtree pointers */
688 /* These are the ids of the subtrees that we may be creating */
689 static gint ett_tetra = -1;
690 static gint ett_tetra_header = -1;
691 static gint ett_tetra_length = -1;
692 static gint ett_tetra_txreg = -1;
693 static gint ett_tetra_text = -1;
694
695
696 /*--- Included file: packet-tetra-ett.c ---*/
697 #line 1 "../../asn1/tetra/packet-tetra-ett.c"
698 static gint ett_tetra_AACH = -1;
699 static gint ett_tetra_BSCH = -1;
700 static gint ett_tetra_MLE_Sync = -1;
701 static gint ett_tetra_BNCH = -1;
702 static gint ett_tetra_T_hyperframe_or_cck = -1;
703 static gint ett_tetra_T_optional_params = -1;
704 static gint ett_tetra_TS_COMMON_FRAMES = -1;
705 static gint ett_tetra_Default_Code_A = -1;
706 static gint ett_tetra_Extended_Services_Broadcast = -1;
707 static gint ett_tetra_T_section = -1;
708 static gint ett_tetra_PRESENT1 = -1;
709 static gint ett_tetra_MAC_ACCESS = -1;
710 static gint ett_tetra_T_data = -1;
711 static gint ett_tetra_Address = -1;
712 static gint ett_tetra_U_LLC_PDU = -1;
713 static gint ett_tetra_U_BL_ACK_FCS = -1;
714 static gint ett_tetra_U_MLE_PDU_FCS = -1;
715 static gint ett_tetra_U_BL_DATA_FCS = -1;
716 static gint ett_tetra_U_BL_ADATA_FCS = -1;
717 static gint ett_tetra_U_MLE_PDU = -1;
718 static gint ett_tetra_ComplexSDU = -1;
719 static gint ett_tetra_T_lengthIndicationOrCapacityRequest = -1;
720 static gint ett_tetra_FRAG = -1;
721 static gint ett_tetra_MAC_FRAG = -1;
722 static gint ett_tetra_MAC_FRAG120 = -1;
723 static gint ett_tetra_MAC_END_UPLINK = -1;
724 static gint ett_tetra_MAC_END_UP114 = -1;
725 static gint ett_tetra_MAC_END_HU = -1;
726 static gint ett_tetra_T_lengthInd_ReservationReq = -1;
727 static gint ett_tetra_MAC_END_DOWNLINK = -1;
728 static gint ett_tetra_T_slot_granting = -1;
729 static gint ett_tetra_T_channel_allocation = -1;
730 static gint ett_tetra_SlotGranting = -1;
731 static gint ett_tetra_ChannelAllocation = -1;
732 static gint ett_tetra_T_extend_carrier_flag = -1;
733 static gint ett_tetra_T_monitoring_pattern = -1;
734 static gint ett_tetra_Extended_carrier_flag = -1;
735 static gint ett_tetra_MAC_END_DOWN111 = -1;
736 static gint ett_tetra_T_slot_granting_01 = -1;
737 static gint ett_tetra_T_channel_allocation_01 = -1;
738 static gint ett_tetra_MAC_RESOURCE = -1;
739 static gint ett_tetra_OTHER_DATA = -1;
740 static gint ett_tetra_T_power_control = -1;
741 static gint ett_tetra_T_slot_granting_02 = -1;
742 static gint ett_tetra_T_channel_allocation_02 = -1;
743 static gint ett_tetra_AddressMacResource = -1;
744 static gint ett_tetra_SSI_NEED = -1;
745 static gint ett_tetra_EVENT_NEED = -1;
746 static gint ett_tetra_USSI_NEED = -1;
747 static gint ett_tetra_SMI_NEED = -1;
748 static gint ett_tetra_SSI_EVENT_NEED = -1;
749 static gint ett_tetra_SSI_USAGE_NEED = -1;
750 static gint ett_tetra_SMI_EVENT_NEED = -1;
751 static gint ett_tetra_MAC_ACCESS_DEFINE = -1;
752 static gint ett_tetra_T_optional_field = -1;
753 static gint ett_tetra_D_LLC_PDU = -1;
754 static gint ett_tetra_D_BL_ACK_FCS = -1;
755 static gint ett_tetra_D_MLE_PDU_FCS = -1;
756 static gint ett_tetra_D_BL_ADATA_FCS = -1;
757 static gint ett_tetra_D_BL_DATA_FCS = -1;
758 static gint ett_tetra_U_BL_ACK = -1;
759 static gint ett_tetra_D_BL_ACK = -1;
760 static gint ett_tetra_U_BL_DATA = -1;
761 static gint ett_tetra_D_BL_DATA = -1;
762 static gint ett_tetra_U_BL_ADATA = -1;
763 static gint ett_tetra_D_BL_ADATA = -1;
764 static gint ett_tetra_D_MLE_PDU = -1;
765 static gint ett_tetra_UMLE_PDU = -1;
766 static gint ett_tetra_DMLE_PDU = -1;
767 static gint ett_tetra_U_PREPARE = -1;
768 static gint ett_tetra_T_optional_elements = -1;
769 static gint ett_tetra_T_type2_parameters = -1;
770 static gint ett_tetra_T_cell_number = -1;
771 static gint ett_tetra_U_RESTORE = -1;
772 static gint ett_tetra_T_optional_elements_01 = -1;
773 static gint ett_tetra_T_type2_parameters_01 = -1;
774 static gint ett_tetra_T_mcc = -1;
775 static gint ett_tetra_T_mnc = -1;
776 static gint ett_tetra_T_la = -1;
777 static gint ett_tetra_D_NEW_CELL = -1;
778 static gint ett_tetra_T_optional_elements_02 = -1;
779 static gint ett_tetra_D_PREPARE_FAIL = -1;
780 static gint ett_tetra_T_optional_elements_03 = -1;
781 static gint ett_tetra_D_NWRK_BRDADCAST = -1;
782 static gint ett_tetra_T_optional_elements_04 = -1;
783 static gint ett_tetra_T_type2_parameters_02 = -1;
784 static gint ett_tetra_T_tetra_network_time = -1;
785 static gint ett_tetra_T_number_of_neighbour_cells = -1;
786 static gint ett_tetra_TETRA_NETWORK_TIME = -1;
787 static gint ett_tetra_D_RESTORE_ACK = -1;
788 static gint ett_tetra_D_RESTORE_FAIL = -1;
789 static gint ett_tetra_U_MM_PDU = -1;
790 static gint ett_tetra_D_MM_PDU = -1;
791 static gint ett_tetra_GROUP_IDENTITY_DOWNLINK = -1;
792 static gint ett_tetra_T_attach_detach_identifiet = -1;
793 static gint ett_tetra_T_attach = -1;
794 static gint ett_tetra_T_detach = -1;
795 static gint ett_tetra_T_address_type = -1;
796 static gint ett_tetra_T_gssi_extension = -1;
797 static gint ett_tetra_GROUP_IDENTITY_UPLINK = -1;
798 static gint ett_tetra_T_attach_detach_identifiet_01 = -1;
799 static gint ett_tetra_T_attach_01 = -1;
800 static gint ett_tetra_T_detach_01 = -1;
801 static gint ett_tetra_T_address_type_01 = -1;
802 static gint ett_tetra_T_gssi_extension_01 = -1;
803 static gint ett_tetra_D_LOCATION_UPDATE_ACCEPT = -1;
804 static gint ett_tetra_T_optional_elements_05 = -1;
805 static gint ett_tetra_T_type2_parameters_03 = -1;
806 static gint ett_tetra_T_ssi = -1;
807 static gint ett_tetra_T_address_extension = -1;
808 static gint ett_tetra_T_suscriber_class = -1;
809 static gint ett_tetra_T_energy_saving_mode = -1;
810 static gint ett_tetra_T_scch_info = -1;
811 static gint ett_tetra_T_type3 = -1;
812 static gint ett_tetra_T_type3_elements = -1;
813 static gint ett_tetra_T_new_ra = -1;
814 static gint ett_tetra_T_group_identity_location_accept = -1;
815 static gint ett_tetra_T_group_predefined_lifetime = -1;
816 static gint ett_tetra_T_group_identity_downlink = -1;
817 static gint ett_tetra_T_proprietary = -1;
818 static gint ett_tetra_D_LOCATION_UPDATE_REJECT = -1;
819 static gint ett_tetra_U_MM_STATUS = -1;
820 static gint ett_tetra_D_MM_STATUS = -1;
821 static gint ett_tetra_U_CMCE_PDU = -1;
822 static gint ett_tetra_U_RELEASE = -1;
823 static gint ett_tetra_U_SDS_DATA = -1;
824 static gint ett_tetra_T_called_party_type_identifier = -1;
825 static gint ett_tetra_T_short_data_type_identifier = -1;
826 static gint ett_tetra_U_STATUS = -1;
827 static gint ett_tetra_T_called_party_type_identifier_01 = -1;
828 static gint ett_tetra_U_INFO = -1;
829 static gint ett_tetra_D_CMCE_PDU = -1;
830 static gint ett_tetra_D_SDS_DATA = -1;
831 static gint ett_tetra_T_calling_party_type_identifier = -1;
832 static gint ett_tetra_T_short_data_type_identifier_01 = -1;
833 static gint ett_tetra_D_STATUS = -1;
834 static gint ett_tetra_T_calling_party_type_identifier_01 = -1;
835 static gint ett_tetra_D_DISCONNECT = -1;
836 static gint ett_tetra_D_INFO = -1;
837 static gint ett_tetra_D_TX_WAIT = -1;
838 static gint ett_tetra_D_TX_CONTINUE = -1;
839 static gint ett_tetra_U_LOCATION_UPDATE_DEMAND = -1;
840 static gint ett_tetra_T_cipher_control = -1;
841 static gint ett_tetra_T_optional_elements_06 = -1;
842 static gint ett_tetra_T_type2_parameters_04 = -1;
843 static gint ett_tetra_T_energy_saving_mode_01 = -1;
844 static gint ett_tetra_T_la_information = -1;
845 static gint ett_tetra_T_ssi_01 = -1;
846 static gint ett_tetra_T_address_extension_01 = -1;
847 static gint ett_tetra_T_type3_01 = -1;
848 static gint ett_tetra_T_type3_elements_01 = -1;
849 static gint ett_tetra_T_group_identity_location_demand = -1;
850 static gint ett_tetra_T_group_report_response = -1;
851 static gint ett_tetra_T_group_identity_uplink = -1;
852 static gint ett_tetra_T_proprietary_01 = -1;
853 static gint ett_tetra_U_ATTACH_DETACH_GROUP_IDENTITY = -1;
854 static gint ett_tetra_T_optional_elements_07 = -1;
855 static gint ett_tetra_T_type2_element = -1;
856 static gint ett_tetra_T_type3_02 = -1;
857 static gint ett_tetra_T_type3_elements_02 = -1;
858 static gint ett_tetra_U_ATTACH_DETACH_GROUP_IDENTITY_ACK = -1;
859 static gint ett_tetra_T_optional_elements_08 = -1;
860 static gint ett_tetra_T_type2_element_01 = -1;
861 static gint ett_tetra_T_type3_03 = -1;
862 static gint ett_tetra_T_type3_elements_03 = -1;
863 static gint ett_tetra_U_SETUP = -1;
864 static gint ett_tetra_T_optional_elements_09 = -1;
865 static gint ett_tetra_T_type2_parameters_05 = -1;
866 static gint ett_tetra_T_external_subscriber_number = -1;
867 static gint ett_tetra_T_prop = -1;
868 static gint ett_tetra_Basic_service_information = -1;
869 static gint ett_tetra_U_ALERT = -1;
870 static gint ett_tetra_T_optional_elements_10 = -1;
871 static gint ett_tetra_T_type2_parameters_06 = -1;
872 static gint ett_tetra_T_basic_service_information = -1;
873 static gint ett_tetra_T_prop_01 = -1;
874 static gint ett_tetra_U_CONNECT = -1;
875 static gint ett_tetra_T_optional_elements_11 = -1;
876 static gint ett_tetra_T_type2_parameters_07 = -1;
877 static gint ett_tetra_T_basic_service_information_01 = -1;
878 static gint ett_tetra_T_prop_02 = -1;
879 static gint ett_tetra_U_TX_CEASED = -1;
880 static gint ett_tetra_T_optional_elements_12 = -1;
881 static gint ett_tetra_T_type2_parameters_08 = -1;
882 static gint ett_tetra_T_prop_03 = -1;
883 static gint ett_tetra_U_TX_DEMAND = -1;
884 static gint ett_tetra_T_optional_elements_13 = -1;
885 static gint ett_tetra_T_type2_parameters_09 = -1;
886 static gint ett_tetra_T_prop_04 = -1;
887 static gint ett_tetra_U_DISCONNECT = -1;
888 static gint ett_tetra_T_optional_elements_14 = -1;
889 static gint ett_tetra_T_type2_parameters_10 = -1;
890 static gint ett_tetra_T_prop_05 = -1;
891 static gint ett_tetra_U_CALL_RESTORE = -1;
892 static gint ett_tetra_T_optional_elements_15 = -1;
893 static gint ett_tetra_T_type2_parameters_11 = -1;
894 static gint ett_tetra_T_prop_06 = -1;
895 static gint ett_tetra_D_SETUP = -1;
896 static gint ett_tetra_T_optional_elements_16 = -1;
897 static gint ett_tetra_T_type2_parameters_12 = -1;
898 static gint ett_tetra_T_calling_party_address = -1;
899 static gint ett_tetra_T_external_subscriber_number_01 = -1;
900 static gint ett_tetra_T_prop_07 = -1;
901 static gint ett_tetra_D_CALL_PROCEEDING = -1;
902 static gint ett_tetra_T_optional_elements_17 = -1;
903 static gint ett_tetra_T_type2_parameters_13 = -1;
904 static gint ett_tetra_T_basic_service_information_02 = -1;
905 static gint ett_tetra_T_call_status = -1;
906 static gint ett_tetra_T_notification_indicator = -1;
907 static gint ett_tetra_T_prop_08 = -1;
908 static gint ett_tetra_D_ALERT = -1;
909 static gint ett_tetra_T_optional_elements_18 = -1;
910 static gint ett_tetra_T_type2_parameters_14 = -1;
911 static gint ett_tetra_T_basic_service_infomation = -1;
912 static gint ett_tetra_T_notification_indicator_01 = -1;
913 static gint ett_tetra_T_prop_09 = -1;
914 static gint ett_tetra_D_CONNECT = -1;
915 static gint ett_tetra_T_optional_elements_19 = -1;
916 static gint ett_tetra_T_type2_parameters_15 = -1;
917 static gint ett_tetra_T_call_priority = -1;
918 static gint ett_tetra_T_basic_service_information_03 = -1;
919 static gint ett_tetra_T_temporary_address = -1;
920 static gint ett_tetra_T_notification_indicator_02 = -1;
921 static gint ett_tetra_T_prop_10 = -1;
922 static gint ett_tetra_D_CONNECT_ACK = -1;
923 static gint ett_tetra_T_optional_elements_20 = -1;
924 static gint ett_tetra_T_type2_parameters_16 = -1;
925 static gint ett_tetra_T_notification_indicator_03 = -1;
926 static gint ett_tetra_T_prop_11 = -1;
927 static gint ett_tetra_D_RELEASE = -1;
928 static gint ett_tetra_T_optional_elements_21 = -1;
929 static gint ett_tetra_T_type2_parameters_17 = -1;
930 static gint ett_tetra_T_notification_indicator_04 = -1;
931 static gint ett_tetra_T_prop_12 = -1;
932 static gint ett_tetra_D_CALL_RESTORE = -1;
933 static gint ett_tetra_T_optional_elements_22 = -1;
934 static gint ett_tetra_T_type2_parameters_18 = -1;
935 static gint ett_tetra_T_new_call_identifier = -1;
936 static gint ett_tetra_T_call_time_out = -1;
937 static gint ett_tetra_T_call_status_01 = -1;
938 static gint ett_tetra_T_modify = -1;
939 static gint ett_tetra_T_notification_indicator_05 = -1;
940 static gint ett_tetra_T_prop_13 = -1;
941 static gint ett_tetra_D_TX_CEASED = -1;
942 static gint ett_tetra_T_optional_elements_23 = -1;
943 static gint ett_tetra_T_type2_parameters_19 = -1;
944 static gint ett_tetra_T_notification_indicator_06 = -1;
945 static gint ett_tetra_T_prop_14 = -1;
946 static gint ett_tetra_D_TX_GRANTED = -1;
947 static gint ett_tetra_D_ATTACH_DETACH_GROUP_IDENTITY = -1;
948 static gint ett_tetra_T_optional_elements_24 = -1;
949 static gint ett_tetra_T_type2_element_02 = -1;
950 static gint ett_tetra_T_type3_04 = -1;
951 static gint ett_tetra_T_type3_elements_04 = -1;
952 static gint ett_tetra_D_ATTACH_DETACH_GROUP_IDENTITY_ACK = -1;
953 static gint ett_tetra_T_optional_elements_25 = -1;
954 static gint ett_tetra_T_type2_element_03 = -1;
955 static gint ett_tetra_T_type3_05 = -1;
956 static gint ett_tetra_T_type3_elements_05 = -1;
957 static gint ett_tetra_Calling_party_address_type = -1;
958 static gint ett_tetra_T_called_party_ssi_extention = -1;
959 static gint ett_tetra_Proprietary = -1;
960 static gint ett_tetra_T_data_01 = -1;
961 static gint ett_tetra_Type1 = -1;
962 static gint ett_tetra_Type2 = -1;
963 static gint ett_tetra_Modify_type = -1;
964
965 /*--- End of included file: packet-tetra-ett.c ---*/
966 #line 95 "../../asn1/tetra/packet-tetra-template.c"
967
968
969 /*--- Included file: packet-tetra-fn.c ---*/
970 #line 1 "../../asn1/tetra/packet-tetra-fn.c"
971
972
973 static int
974 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_) {
975   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
976                                                             0U, 3U, NULL, FALSE);
977
978   return offset;
979 }
980
981
982
983 static int
984 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_) {
985   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
986                                                             0U, 63U, NULL, FALSE);
987
988   return offset;
989 }
990
991
992 static const per_sequence_t AACH_sequence[] = {
993   { &hf_tetra_function      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
994   { &hf_tetra_field1        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_63 },
995   { &hf_tetra_field2        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_63 },
996   { NULL, 0, 0, NULL }
997 };
998
999 static int
1000 dissect_tetra_AACH(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1001   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1002                                    ett_tetra_AACH, AACH_sequence);
1003
1004   return offset;
1005 }
1006
1007
1008 static const value_string tetra_System_Code_vals[] = {
1009   {   0, "ets-300-392-2" },
1010   {   1, "ets-300-392-2anden-300-392-7" },
1011   {   2, "en-300-392-2-v2-3-2orlateranden-300-392-7" },
1012   {   3, "v-d-reserved" },
1013   {   4, "v-d-reserved" },
1014   {   5, "v-d-reserved" },
1015   {   6, "v-d-reserved" },
1016   {   7, "v-d-reserved" },
1017   {   8, "reserved" },
1018   {   9, "reserved" },
1019   {  10, "direct-mode-operation" },
1020   {  11, "direct-mode-operation" },
1021   {  12, "direct-mode-operation" },
1022   {  13, "direct-mode-operation" },
1023   {  14, "direct-mode-operation" },
1024   {  15, "direct-mode-operation" },
1025   { 0, NULL }
1026 };
1027
1028
1029 static int
1030 dissect_tetra_System_Code(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1031   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1032                                      16, NULL, FALSE, 0, NULL);
1033
1034   return offset;
1035 }
1036
1037
1038 static const value_string tetra_Colour_Code_vals[] = {
1039   {   0, "pre-defined" },
1040   {   1, "operator-defined" },
1041   {   2, "operator-defined" },
1042   {   3, "operator-defined" },
1043   {   4, "operator-defined" },
1044   {   5, "operator-defined" },
1045   {   6, "operator-defined" },
1046   {   7, "operator-defined" },
1047   {   8, "operator-defined" },
1048   {   9, "operator-defined" },
1049   {  10, "operator-defined" },
1050   {  11, "operator-defined" },
1051   {  12, "operator-defined" },
1052   {  13, "operator-defined" },
1053   {  14, "operator-defined" },
1054   {  15, "operator-defined" },
1055   {  16, "operator-defined" },
1056   {  17, "operator-defined" },
1057   {  18, "operator-defined" },
1058   {  19, "operator-defined" },
1059   {  20, "operator-defined" },
1060   {  21, "operator-defined" },
1061   {  22, "operator-defined" },
1062   {  23, "operator-defined" },
1063   {  24, "operator-defined" },
1064   {  25, "operator-defined" },
1065   {  26, "operator-defined" },
1066   {  27, "operator-defined" },
1067   {  28, "operator-defined" },
1068   {  29, "operator-defined" },
1069   {  30, "operator-defined" },
1070   {  31, "operator-defined" },
1071   {  32, "operator-defined" },
1072   {  33, "operator-defined" },
1073   {  34, "operator-defined" },
1074   {  35, "operator-defined" },
1075   {  36, "operator-defined" },
1076   {  37, "operator-defined" },
1077   {  38, "operator-defined" },
1078   {  39, "operator-defined" },
1079   {  40, "operator-defined" },
1080   {  41, "operator-defined" },
1081   {  42, "operator-defined" },
1082   {  43, "operator-defined" },
1083   {  44, "operator-defined" },
1084   {  45, "operator-defined" },
1085   {  46, "operator-defined" },
1086   {  47, "operator-defined" },
1087   {  48, "operator-defined" },
1088   {  49, "operator-defined" },
1089   {  50, "operator-defined" },
1090   {  51, "operator-defined" },
1091   {  52, "operator-defined" },
1092   {  53, "operator-defined" },
1093   {  54, "operator-defined" },
1094   {  55, "operator-defined" },
1095   {  56, "operator-defined" },
1096   {  57, "operator-defined" },
1097   {  58, "operator-defined" },
1098   {  59, "operator-defined" },
1099   {  60, "operator-defined" },
1100   {  61, "operator-defined" },
1101   {  62, "operator-defined" },
1102   {  63, "operator-defined" },
1103   { 0, NULL }
1104 };
1105
1106
1107 static int
1108 dissect_tetra_Colour_Code(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1109   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1110                                      64, NULL, FALSE, 0, NULL);
1111
1112   return offset;
1113 }
1114
1115
1116 static const value_string tetra_Timeslot_Number_vals[] = {
1117   {   0, "timeslot-1" },
1118   {   1, "timeslot-2" },
1119   {   2, "timeslot-3" },
1120   {   3, "timeslot-4" },
1121   { 0, NULL }
1122 };
1123
1124
1125 static int
1126 dissect_tetra_Timeslot_Number(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1127   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1128                                      4, NULL, FALSE, 0, NULL);
1129
1130   return offset;
1131 }
1132
1133
1134 static const value_string tetra_Frame_Number_vals[] = {
1135   {   0, "reserved" },
1136   {   1, "frame-1" },
1137   {   2, "frame-2" },
1138   {   3, "frame-3" },
1139   {   4, "frame-4" },
1140   {   5, "frame-5" },
1141   {   6, "frame-6" },
1142   {   7, "frame-7" },
1143   {   8, "frame-8" },
1144   {   9, "frame-9" },
1145   {  10, "frame-10" },
1146   {  11, "frame-11" },
1147   {  12, "frame-12" },
1148   {  13, "frame-13" },
1149   {  14, "frame-14" },
1150   {  15, "frame-15" },
1151   {  16, "frame-16" },
1152   {  17, "frame-17" },
1153   {  18, "frame-18" },
1154   {  19, "reserved" },
1155   {  20, "reserved" },
1156   {  21, "reserved" },
1157   {  22, "reserved" },
1158   {  23, "reserved" },
1159   {  24, "reserved" },
1160   {  25, "reserved" },
1161   {  26, "reserved" },
1162   {  27, "reserved" },
1163   {  28, "reserved" },
1164   {  29, "reserved" },
1165   {  30, "reserved" },
1166   {  31, "reserved" },
1167   { 0, NULL }
1168 };
1169
1170
1171 static int
1172 dissect_tetra_Frame_Number(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1173   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1174                                      32, NULL, FALSE, 0, NULL);
1175
1176   return offset;
1177 }
1178
1179
1180 static const value_string tetra_Multiple_Frame_Number_vals[] = {
1181   {   0, "reserved" },
1182   {   1, "multiframe-1" },
1183   {   2, "multiframe-2" },
1184   {   3, "multiframe-3" },
1185   {   4, "multiframe-4" },
1186   {   5, "multiframe-5" },
1187   {   6, "multiframe-6" },
1188   {   7, "multiframe-7" },
1189   {   8, "multiframe-8" },
1190   {   9, "multiframe-9" },
1191   {  10, "multiframe-10" },
1192   {  11, "multiframe-11" },
1193   {  12, "multiframe-12" },
1194   {  13, "multiframe-13" },
1195   {  14, "multiframe-14" },
1196   {  15, "multiframe-15" },
1197   {  16, "multiframe-16" },
1198   {  17, "multiframe-17" },
1199   {  18, "multiframe-18" },
1200   {  19, "multiframe-19" },
1201   {  20, "multiframe-20" },
1202   {  21, "multiframe-21" },
1203   {  22, "multiframe-22" },
1204   {  23, "multiframe-23" },
1205   {  24, "multiframe-24" },
1206   {  25, "multiframe-25" },
1207   {  26, "multiframe-26" },
1208   {  27, "multiframe-27" },
1209   {  28, "multiframe-28" },
1210   {  29, "multiframe-29" },
1211   {  30, "multiframe-30" },
1212   {  31, "multiframe-31" },
1213   {  32, "multiframe-32" },
1214   {  33, "multiframe-33" },
1215   {  34, "multiframe-34" },
1216   {  35, "multiframe-35" },
1217   {  36, "multiframe-36" },
1218   {  37, "multiframe-37" },
1219   {  38, "multiframe-38" },
1220   {  39, "multiframe-39" },
1221   {  40, "multiframe-40" },
1222   {  41, "multiframe-41" },
1223   {  42, "multiframe-42" },
1224   {  43, "multiframe-43" },
1225   {  44, "multiframe-44" },
1226   {  45, "multiframe-45" },
1227   {  46, "multiframe-46" },
1228   {  47, "multiframe-47" },
1229   {  48, "multiframe-48" },
1230   {  49, "multiframe-49" },
1231   {  50, "multiframe-50" },
1232   {  51, "multiframe-51" },
1233   {  52, "multiframe-52" },
1234   {  53, "multiframe-53" },
1235   {  54, "multiframe-54" },
1236   {  55, "multiframe-55" },
1237   {  56, "multiframe-56" },
1238   {  57, "multiframe-57" },
1239   {  58, "multiframe-58" },
1240   {  59, "multiframe-59" },
1241   {  60, "multiframe-60" },
1242   {  61, "reserved" },
1243   {  62, "reserved" },
1244   {  63, "reserved" },
1245   { 0, NULL }
1246 };
1247
1248
1249 static int
1250 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_) {
1251   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1252                                      64, NULL, FALSE, 0, NULL);
1253
1254   return offset;
1255 }
1256
1257
1258 static const value_string tetra_Sharing_Mod_vals[] = {
1259   {   0, "continuous-transmission" },
1260   {   1, "carrier-sharing" },
1261   {   2, "mcch-sharing" },
1262   {   3, "traffic-carrier-sharing" },
1263   { 0, NULL }
1264 };
1265
1266
1267 static int
1268 dissect_tetra_Sharing_Mod(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1269   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1270                                      4, NULL, FALSE, 0, NULL);
1271
1272   return offset;
1273 }
1274
1275
1276 static const value_string tetra_TS_Reserved_Frames_vals[] = {
1277   {   0, "frame-reserved-1" },
1278   {   1, "frames-reserved-2" },
1279   {   2, "frames-reserved-3" },
1280   {   3, "frames-reserved-4" },
1281   {   4, "frames-reserved-6" },
1282   {   5, "frames-reserved-9" },
1283   {   6, "frames-reserved-12" },
1284   {   7, "frames-reserved-18" },
1285   { 0, NULL }
1286 };
1287
1288
1289 static int
1290 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_) {
1291   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1292                                      8, NULL, FALSE, 0, NULL);
1293
1294   return offset;
1295 }
1296
1297
1298 static const value_string tetra_U_Plane_DTX_vals[] = {
1299   {   0, "not-allowed" },
1300   {   1, "allowed" },
1301   { 0, NULL }
1302 };
1303
1304
1305 static int
1306 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_) {
1307   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1308                                      2, NULL, FALSE, 0, NULL);
1309
1310   return offset;
1311 }
1312
1313
1314 static const value_string tetra_Frame_18_Extension_vals[] = {
1315   {   0, "not-allowed" },
1316   {   1, "allowed" },
1317   { 0, NULL }
1318 };
1319
1320
1321 static int
1322 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_) {
1323   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1324                                      2, NULL, FALSE, 0, NULL);
1325
1326   return offset;
1327 }
1328
1329
1330 static const value_string tetra_Reserved_vals[] = {
1331   {   0, "default" },
1332   {   1, "not-used" },
1333   { 0, NULL }
1334 };
1335
1336
1337 static int
1338 dissect_tetra_Reserved(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1339   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1340                                      2, NULL, FALSE, 0, NULL);
1341
1342   return offset;
1343 }
1344
1345
1346
1347 static int
1348 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_) {
1349   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1350                                                             0U, 1023U, NULL, FALSE);
1351
1352   return offset;
1353 }
1354
1355
1356
1357 static int
1358 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_) {
1359   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1360                                                             0U, 16383U, NULL, FALSE);
1361
1362   return offset;
1363 }
1364
1365
1366
1367 static int
1368 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_) {
1369   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1370                                                             0U, 1U, NULL, FALSE);
1371
1372   return offset;
1373 }
1374
1375
1376 static const per_sequence_t MLE_Sync_sequence[] = {
1377   { &hf_tetra_mcc           , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1023 },
1378   { &hf_tetra_mnc           , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
1379   { &hf_tetra_neighbour_cell_broadcast, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
1380   { &hf_tetra_cell_service_level, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
1381   { &hf_tetra_late_entry_information, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
1382   { NULL, 0, 0, NULL }
1383 };
1384
1385 static int
1386 dissect_tetra_MLE_Sync(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1387   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1388                                    ett_tetra_MLE_Sync, MLE_Sync_sequence);
1389
1390   return offset;
1391 }
1392
1393
1394 static const per_sequence_t BSCH_sequence[] = {
1395   { &hf_tetra_system_code   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_System_Code },
1396   { &hf_tetra_colour_code   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Colour_Code },
1397   { &hf_tetra_timeslot_number, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Timeslot_Number },
1398   { &hf_tetra_frame_number  , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Frame_Number },
1399   { &hf_tetra_multiple_frame_number, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Multiple_Frame_Number },
1400   { &hf_tetra_sharing_mod   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Sharing_Mod },
1401   { &hf_tetra_ts_reserved_frames, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_TS_Reserved_Frames },
1402   { &hf_tetra_u_plane_dtx   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_U_Plane_DTX },
1403   { &hf_tetra_frame_18_extension, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Frame_18_Extension },
1404   { &hf_tetra_reserved      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Reserved },
1405   { &hf_tetra_tm_sdu        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_MLE_Sync },
1406   { NULL, 0, 0, NULL }
1407 };
1408
1409 static int
1410 dissect_tetra_BSCH(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1411   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1412                                    ett_tetra_BSCH, BSCH_sequence);
1413
1414   return offset;
1415 }
1416
1417
1418
1419 static int
1420 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_) {
1421   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1422                                                             0U, 4095U, NULL, FALSE);
1423
1424   return offset;
1425 }
1426
1427
1428
1429 static int
1430 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_) {
1431   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1432                                                             0U, 15U, NULL, FALSE);
1433
1434   return offset;
1435 }
1436
1437
1438 static const value_string tetra_Offset_vals[] = {
1439   {   0, "offset-0" },
1440   {   1, "offset-positive-6-point-25" },
1441   {   2, "offset-minus-6-point-25" },
1442   {   3, "offset-12-point-5" },
1443   { 0, NULL }
1444 };
1445
1446
1447 static int
1448 dissect_tetra_Offset(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1449   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1450                                      4, NULL, FALSE, 0, NULL);
1451
1452   return offset;
1453 }
1454
1455
1456
1457 static int
1458 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_) {
1459   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1460                                                             0U, 7U, NULL, FALSE);
1461
1462   return offset;
1463 }
1464
1465
1466 static const value_string tetra_Reverse_Operation_vals[] = {
1467   {   0, "normal" },
1468   {   1, "reverse" },
1469   { 0, NULL }
1470 };
1471
1472
1473 static int
1474 dissect_tetra_Reverse_Operation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1475   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1476                                      2, NULL, FALSE, 0, NULL);
1477
1478   return offset;
1479 }
1480
1481
1482 static const value_string tetra_Sencond_Ctl_Carrier_vals[] = {
1483   {   0, "none" },
1484   {   1, "timeslot-2" },
1485   {   2, "timeslots-2and3" },
1486   {   3, "timeslots-2and3and4" },
1487   { 0, NULL }
1488 };
1489
1490
1491 static int
1492 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_) {
1493   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1494                                      4, NULL, FALSE, 0, NULL);
1495
1496   return offset;
1497 }
1498
1499
1500 static const value_string tetra_MS_TXPWR_MAX_CELL_vals[] = {
1501   {   0, "reserved" },
1502   {   1, "dbm-15" },
1503   {   2, "dbm-20" },
1504   {   3, "dbm-25" },
1505   {   4, "dbm-30" },
1506   {   5, "dbm-35" },
1507   {   6, "dbm-40" },
1508   {   7, "dbm-45" },
1509   { 0, NULL }
1510 };
1511
1512
1513 static int
1514 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_) {
1515   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1516                                      8, NULL, FALSE, 0, NULL);
1517
1518   return offset;
1519 }
1520
1521
1522 static const value_string tetra_RXLEV_ACCESS_MIN_vals[] = {
1523   {   0, "dbm-125" },
1524   {   1, "dbm-120" },
1525   {   2, "dbm-115" },
1526   {   3, "dbm-110" },
1527   {   4, "dbm-105" },
1528   {   5, "dbm-100" },
1529   {   6, "dbm-95" },
1530   {   7, "dnm-90" },
1531   {   8, "dbm-85" },
1532   {   9, "dbm-80" },
1533   {  10, "dbm-75" },
1534   {  11, "dbm-70" },
1535   {  12, "dbm-65" },
1536   {  13, "dbm-60" },
1537   {  14, "dbm-55" },
1538   {  15, "dbm-50" },
1539   { 0, NULL }
1540 };
1541
1542
1543 static int
1544 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_) {
1545   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1546                                      16, NULL, FALSE, 0, NULL);
1547
1548   return offset;
1549 }
1550
1551
1552 static const value_string tetra_ACCESS_PARAMETER_vals[] = {
1553   {   0, "dbm-53" },
1554   {   1, "dbm-51" },
1555   {   2, "dbm-49" },
1556   {   3, "dbm-47" },
1557   {   4, "dbm-45" },
1558   {   5, "dbm-43" },
1559   {   6, "dbm-41" },
1560   {   7, "dbm-39" },
1561   {   8, "dbm-37" },
1562   {   9, "dbm-35" },
1563   {  10, "dbm-33" },
1564   {  11, "dbm-31" },
1565   {  12, "dbm-29" },
1566   {  13, "dbm-27" },
1567   {  14, "dbm-25" },
1568   {  15, "dbm-23" },
1569   { 0, NULL }
1570 };
1571
1572
1573 static int
1574 dissect_tetra_ACCESS_PARAMETER(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1575   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1576                                      16, NULL, FALSE, 0, NULL);
1577
1578   return offset;
1579 }
1580
1581
1582 static const value_string tetra_RADIO_DOWNLINK_TIMEOUT_vals[] = {
1583   {   0, "disable" },
1584   {   1, "timeslots-144" },
1585   {   2, "timeslots-288" },
1586   {   3, "timeslots-432" },
1587   {   4, "timeslots-576" },
1588   {   5, "timeslots-720" },
1589   {   6, "timeslots-864" },
1590   {   7, "timeslots-1008" },
1591   {   8, "timeslots-1152" },
1592   {   9, "timeslots-1296" },
1593   {  10, "timeslots-1440" },
1594   {  11, "timeslots-1584" },
1595   {  12, "timeslots-1728" },
1596   {  13, "timeslots-1872" },
1597   {  14, "timeslots-2016" },
1598   {  15, "timeslots-2160" },
1599   { 0, NULL }
1600 };
1601
1602
1603 static int
1604 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_) {
1605   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1606                                      16, NULL, FALSE, 0, NULL);
1607
1608   return offset;
1609 }
1610
1611
1612
1613 static int
1614 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_) {
1615   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1616                                                             0U, 65535U, NULL, FALSE);
1617
1618   return offset;
1619 }
1620
1621
1622 static const value_string tetra_T_hyperframe_or_cck_vals[] = {
1623   {   0, "hyperframe" },
1624   {   1, "cckid" },
1625   { 0, NULL }
1626 };
1627
1628 static const per_choice_t T_hyperframe_or_cck_choice[] = {
1629   {   0, &hf_tetra_hyperframe    , ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_65535 },
1630   {   1, &hf_tetra_cckid         , ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_65535 },
1631   { 0, NULL, 0, NULL }
1632 };
1633
1634 static int
1635 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_) {
1636   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
1637                                  ett_tetra_T_hyperframe_or_cck, T_hyperframe_or_cck_choice,
1638                                  NULL);
1639
1640   return offset;
1641 }
1642
1643
1644 static const value_string tetra_FRAME_vals[] = {
1645   {   0, "not-common" },
1646   {   1, "common" },
1647   { 0, NULL }
1648 };
1649
1650
1651 static int
1652 dissect_tetra_FRAME(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1653   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1654                                      2, NULL, FALSE, 0, NULL);
1655
1656   return offset;
1657 }
1658
1659
1660 static const per_sequence_t TS_COMMON_FRAMES_sequence[] = {
1661   { &hf_tetra_frame1        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1662   { &hf_tetra_frame2        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1663   { &hf_tetra_frame3        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1664   { &hf_tetra_frame4        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1665   { &hf_tetra_frame5        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1666   { &hf_tetra_frame6        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1667   { &hf_tetra_frame7        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1668   { &hf_tetra_frame8        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1669   { &hf_tetra_frame9        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1670   { &hf_tetra_frame10       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1671   { &hf_tetra_frame11       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1672   { &hf_tetra_frame12       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1673   { &hf_tetra_frame13       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1674   { &hf_tetra_frame14       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1675   { &hf_tetra_frame15       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1676   { &hf_tetra_frame16       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1677   { &hf_tetra_frame17       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1678   { &hf_tetra_frame18       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1679   { NULL, 0, 0, NULL }
1680 };
1681
1682 static int
1683 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_) {
1684   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1685                                    ett_tetra_TS_COMMON_FRAMES, TS_COMMON_FRAMES_sequence);
1686
1687   return offset;
1688 }
1689
1690
1691 static const value_string tetra_IMM_vals[] = {
1692   {   0, "always-randomize" },
1693   {   1, "randomize-after-imm-tdma" },
1694   {   2, "randomize-after-imm-tdma" },
1695   {   3, "randomize-after-imm-tdma" },
1696   {   4, "randomize-after-imm-tdma" },
1697   {   5, "randomize-after-imm-tdma" },
1698   {   6, "randomize-after-imm-tdma" },
1699   {   7, "randomize-after-imm-tdma" },
1700   {   8, "randomize-after-imm-tdma" },
1701   {   9, "randomize-after-imm-tdma" },
1702   {  10, "randomize-after-imm-tdma" },
1703   {  11, "randomize-after-imm-tdma" },
1704   {  12, "randomize-after-imm-tdma" },
1705   {  13, "randomize-after-imm-tdma" },
1706   {  14, "randomize-after-imm-tdma" },
1707   {  15, "immediate-access-allowed" },
1708   { 0, NULL }
1709 };
1710
1711
1712 static int
1713 dissect_tetra_IMM(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1714   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1715                                      16, NULL, FALSE, 0, NULL);
1716
1717   return offset;
1718 }
1719
1720
1721 static const value_string tetra_WT_vals[] = {
1722   {   0, "reserved" },
1723   {   1, "response-within-wt-downlink" },
1724   {   2, "response-within-wt-downlink" },
1725   {   3, "response-within-wt-downlink" },
1726   {   4, "response-within-wt-downlink" },
1727   {   5, "response-within-wt-downlink" },
1728   {   6, "response-within-wt-downlink" },
1729   {   7, "response-within-wt-downlink" },
1730   {   8, "response-within-wt-downlink" },
1731   {   9, "response-within-wt-downlink" },
1732   {  10, "response-within-wt-downlink" },
1733   {  11, "response-within-wt-downlink" },
1734   {  12, "response-within-wt-downlink" },
1735   {  13, "response-within-wt-downlink" },
1736   {  14, "response-within-wt-downlink" },
1737   {  15, "response-within-wt-downlink" },
1738   { 0, NULL }
1739 };
1740
1741
1742 static int
1743 dissect_tetra_WT(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1744   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1745                                      16, NULL, FALSE, 0, NULL);
1746
1747   return offset;
1748 }
1749
1750
1751 static const value_string tetra_NU_vals[] = {
1752   {   0, "no-random" },
1753   {   1, "random-1" },
1754   {   2, "random-2" },
1755   {   3, "random-3" },
1756   {   4, "random-4" },
1757   {   5, "random-5" },
1758   {   6, "random-6" },
1759   {   7, "random-7" },
1760   {   8, "random-8" },
1761   {   9, "random-9" },
1762   {  10, "random-10" },
1763   {  11, "random-11" },
1764   {  12, "random-12" },
1765   {  13, "random-13" },
1766   {  14, "random-14" },
1767   {  15, "random-15" },
1768   { 0, NULL }
1769 };
1770
1771
1772 static int
1773 dissect_tetra_NU(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1774   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1775                                      16, NULL, FALSE, 0, NULL);
1776
1777   return offset;
1778 }
1779
1780
1781 static const value_string tetra_Frame_Len_Factor_vals[] = {
1782   {   0, "multiply-1" },
1783   {   1, "multiply-4" },
1784   { 0, NULL }
1785 };
1786
1787
1788 static int
1789 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_) {
1790   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1791                                      2, NULL, FALSE, 0, NULL);
1792
1793   return offset;
1794 }
1795
1796
1797 static const value_string tetra_Timeslot_Pointer_vals[] = {
1798   {   0, "same-as-downlink" },
1799   {   1, "timeslot-4" },
1800   {   2, "timeslot-bit-map" },
1801   {   3, "timeslot-bit-map" },
1802   {   4, "timeslot-bit-map" },
1803   {   5, "timeslot-bit-map" },
1804   {   6, "timeslot-bit-map" },
1805   {   7, "timeslot-bit-map" },
1806   {   8, "timeslot-bit-map" },
1807   {   9, "timeslot-bit-map" },
1808   {  10, "timeslot-bit-map" },
1809   {  11, "timeslot-bit-map" },
1810   {  12, "timeslot-bit-map" },
1811   {  13, "timeslot-bit-map" },
1812   {  14, "timeslot-bit-map" },
1813   {  15, "all-four-timeslots" },
1814   { 0, NULL }
1815 };
1816
1817
1818 static int
1819 dissect_tetra_Timeslot_Pointer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1820   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1821                                      16, NULL, FALSE, 0, NULL);
1822
1823   return offset;
1824 }
1825
1826
1827 static const value_string tetra_Min_Pdu_Priority_vals[] = {
1828   {   0, "priority-0" },
1829   {   1, "priority-1" },
1830   {   2, "priority-2" },
1831   {   3, "priority-3" },
1832   {   4, "priority-4" },
1833   {   5, "priority-5" },
1834   {   6, "priority-6" },
1835   {   7, "priority-7" },
1836   { 0, NULL }
1837 };
1838
1839
1840 static int
1841 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_) {
1842   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1843                                      8, NULL, FALSE, 0, NULL);
1844
1845   return offset;
1846 }
1847
1848
1849 static const per_sequence_t Default_Code_A_sequence[] = {
1850   { &hf_tetra_imm           , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_IMM },
1851   { &hf_tetra_wt            , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_WT },
1852   { &hf_tetra_nu            , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_NU },
1853   { &hf_tetra_frame_len_factor, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Frame_Len_Factor },
1854   { &hf_tetra_timeslot_pointer, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Timeslot_Pointer },
1855   { &hf_tetra_min_pdu_priority, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Min_Pdu_Priority },
1856   { NULL, 0, 0, NULL }
1857 };
1858
1859 static int
1860 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_) {
1861   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1862                                    ett_tetra_Default_Code_A, Default_Code_A_sequence);
1863
1864   return offset;
1865 }
1866
1867
1868
1869 static int
1870 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_) {
1871   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1872                                                             0U, 255U, NULL, FALSE);
1873
1874   return offset;
1875 }
1876
1877
1878 static const value_string tetra_SDS_TL_Addressing_Method_vals[] = {
1879   {   0, "reserved" },
1880   {   1, "service-centre" },
1881   {   2, "never-use-service-centre" },
1882   {   3, "ms-choice-to-use-service-centre" },
1883   { 0, NULL }
1884 };
1885
1886
1887 static int
1888 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_) {
1889   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1890                                      4, NULL, FALSE, 0, NULL);
1891
1892   return offset;
1893 }
1894
1895
1896 static const value_string tetra_Data_Priority_Supported_vals[] = {
1897   {   0, "not-supported" },
1898   {   1, "supported" },
1899   { 0, NULL }
1900 };
1901
1902
1903 static int
1904 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_) {
1905   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1906                                      2, NULL, FALSE, 0, NULL);
1907
1908   return offset;
1909 }
1910
1911
1912 static const value_string tetra_Section_Information_vals[] = {
1913   {   0, "no-information" },
1914   {   1, "futher-information" },
1915   { 0, NULL }
1916 };
1917
1918
1919 static int
1920 dissect_tetra_Section_Information(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1921   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1922                                      2, NULL, FALSE, 0, NULL);
1923
1924   return offset;
1925 }
1926
1927
1928 static const per_sequence_t PRESENT1_sequence[] = {
1929   { &hf_tetra_data_priority_supported, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Data_Priority_Supported },
1930   { &hf_tetra_reserved_02   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
1931   { &hf_tetra_section_2_information, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Section_Information },
1932   { &hf_tetra_section_3_information, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Section_Information },
1933   { &hf_tetra_section_4_information, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Section_Information },
1934   { NULL, 0, 0, NULL }
1935 };
1936
1937 static int
1938 dissect_tetra_PRESENT1(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1939   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1940                                    ett_tetra_PRESENT1, PRESENT1_sequence);
1941
1942   return offset;
1943 }
1944
1945
1946
1947 static int
1948 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_) {
1949   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1950                                                             0U, 127U, NULL, FALSE);
1951
1952   return offset;
1953 }
1954
1955
1956 static const value_string tetra_T_section_vals[] = {
1957   {   0, "present-1" },
1958   {   1, "present-2" },
1959   {   2, "present-3" },
1960   {   3, "present-4" },
1961   { 0, NULL }
1962 };
1963
1964 static const per_choice_t T_section_choice[] = {
1965   {   0, &hf_tetra_present_1     , ASN1_NO_EXTENSIONS     , dissect_tetra_PRESENT1 },
1966   {   1, &hf_tetra_present_2     , ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_127 },
1967   {   2, &hf_tetra_present_3     , ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_127 },
1968   {   3, &hf_tetra_present_4     , ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_127 },
1969   { 0, NULL, 0, NULL }
1970 };
1971
1972 static int
1973 dissect_tetra_T_section(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1974   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
1975                                  ett_tetra_T_section, T_section_choice,
1976                                  NULL);
1977
1978   return offset;
1979 }
1980
1981
1982 static const per_sequence_t Extended_Services_Broadcast_sequence[] = {
1983   { &hf_tetra_security_information, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_255 },
1984   { &hf_tetra_sds_tl_addressing_method, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_SDS_TL_Addressing_Method },
1985   { &hf_tetra_gck_supported , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
1986   { &hf_tetra_section       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_section },
1987   { NULL, 0, 0, NULL }
1988 };
1989
1990 static int
1991 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_) {
1992   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1993                                    ett_tetra_Extended_Services_Broadcast, Extended_Services_Broadcast_sequence);
1994
1995   return offset;
1996 }
1997
1998
1999 static const value_string tetra_T_optional_params_vals[] = {
2000   {   0, "even-multiframe" },
2001   {   1, "odd-multiframe" },
2002   {   2, "access-a-code" },
2003   {   3, "extend-service" },
2004   { 0, NULL }
2005 };
2006
2007 static const per_choice_t T_optional_params_choice[] = {
2008   {   0, &hf_tetra_even_multiframe, ASN1_NO_EXTENSIONS     , dissect_tetra_TS_COMMON_FRAMES },
2009   {   1, &hf_tetra_odd_multiframe, ASN1_NO_EXTENSIONS     , dissect_tetra_TS_COMMON_FRAMES },
2010   {   2, &hf_tetra_access_a_code , ASN1_NO_EXTENSIONS     , dissect_tetra_Default_Code_A },
2011   {   3, &hf_tetra_extend_service, ASN1_NO_EXTENSIONS     , dissect_tetra_Extended_Services_Broadcast },
2012   { 0, NULL, 0, NULL }
2013 };
2014
2015 static int
2016 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_) {
2017   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2018                                  ett_tetra_T_optional_params, T_optional_params_choice,
2019                                  NULL);
2020
2021   return offset;
2022 }
2023
2024
2025 static const per_sequence_t BNCH_sequence[] = {
2026   { &hf_tetra_pdu_type      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
2027   { &hf_tetra_broadcast_type, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
2028   { &hf_tetra_main_carrier  , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_4095 },
2029   { &hf_tetra_frequency_band, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_15 },
2030   { &hf_tetra_offset        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Offset },
2031   { &hf_tetra_duplex_spacing, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
2032   { &hf_tetra_reverse_operation, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Reverse_Operation },
2033   { &hf_tetra_sencond_ctl_carrier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Sencond_Ctl_Carrier },
2034   { &hf_tetra_ms_txpwr_max_cell, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_MS_TXPWR_MAX_CELL },
2035   { &hf_tetra_rxlev_access_min, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_RXLEV_ACCESS_MIN },
2036   { &hf_tetra_access_parameter, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_ACCESS_PARAMETER },
2037   { &hf_tetra_radio_downlink_timeout, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_RADIO_DOWNLINK_TIMEOUT },
2038   { &hf_tetra_hyperframe_or_cck, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_hyperframe_or_cck },
2039   { &hf_tetra_optional_params, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_params },
2040   { &hf_tetra_la            , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
2041   { &hf_tetra_subscriber_class, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_65535 },
2042   { &hf_tetra_registriation , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
2043   { &hf_tetra_de_registration, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
2044   { &hf_tetra_priority_cell , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
2045   { &hf_tetra_minimum_mode_service, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
2046   { &hf_tetra_migration     , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
2047   { &hf_tetra_system_wide_service, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
2048   { &hf_tetra_tetra_voice_service, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
2049   { &hf_tetra_circuit_mode_data_service, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
2050   { &hf_tetra_reserved_01   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
2051   { &hf_tetra_sndcp_service , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
2052   { &hf_tetra_air_interface_encryption, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
2053   { &hf_tetra_advanced_link_support, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
2054   { NULL, 0, 0, NULL }
2055 };
2056
2057 static int
2058 dissect_tetra_BNCH(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2059   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2060                                    ett_tetra_BNCH, BNCH_sequence);
2061
2062   return offset;
2063 }
2064
2065
2066 static const value_string tetra_Fill_Bit_Indication_vals[] = {
2067   {   0, "no-present" },
2068   {   1, "present" },
2069   { 0, NULL }
2070 };
2071
2072
2073 static int
2074 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_) {
2075   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2076                                      2, NULL, FALSE, 0, NULL);
2077
2078   return offset;
2079 }
2080
2081
2082 static const value_string tetra_Encrypted_Flag_vals[] = {
2083   {   0, "not-encrypted" },
2084   {   1, "encrypted" },
2085   { 0, NULL }
2086 };
2087
2088
2089 static int
2090 dissect_tetra_Encrypted_Flag(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2091   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2092                                      2, NULL, FALSE, 0, NULL);
2093
2094   return offset;
2095 }
2096
2097
2098
2099 static int
2100 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_) {
2101   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
2102                                                             0U, 16777215U, NULL, FALSE);
2103
2104   return offset;
2105 }
2106
2107
2108 static const value_string tetra_Address_vals[] = {
2109   {   0, "ssi" },
2110   {   1, "eventLabel" },
2111   {   2, "ussi" },
2112   {   3, "smi" },
2113   { 0, NULL }
2114 };
2115
2116 static const per_choice_t Address_choice[] = {
2117   {   0, &hf_tetra_ssi           , ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_16777215 },
2118   {   1, &hf_tetra_eventLabel    , ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_1023 },
2119   {   2, &hf_tetra_ussi          , ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_16777215 },
2120   {   3, &hf_tetra_smi           , ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_16777215 },
2121   { 0, NULL, 0, NULL }
2122 };
2123
2124 static int
2125 dissect_tetra_Address(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2126   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2127                                  ett_tetra_Address, Address_choice,
2128                                  NULL);
2129
2130   return offset;
2131 }
2132
2133
2134
2135 static int
2136 dissect_tetra_NULL(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2137   offset = dissect_per_null(tvb, offset, actx, tree, hf_index);
2138
2139   return offset;
2140 }
2141
2142
2143 static const value_string tetra_UPDATE_TYPE_vals[] = {
2144   {   0, "roaming-location-updating" },
2145   {   1, "temporary-registration" },
2146   {   2, "periodic-location-updating" },
2147   {   3, "itsi-attach" },
2148   {   4, "call-restoration-roaming" },
2149   {   5, "migrating-or-call-restoration-migrating" },
2150   {   6, "demand-location-updating" },
2151   {   7, "disabled-MS-updating" },
2152   { 0, NULL }
2153 };
2154
2155
2156 static int
2157 dissect_tetra_UPDATE_TYPE(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2158   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2159                                      8, NULL, FALSE, 0, NULL);
2160
2161   return offset;
2162 }
2163
2164
2165
2166 static int
2167 dissect_tetra_BOOLEAN(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2168   offset = dissect_per_boolean(tvb, offset, actx, tree, hf_index, NULL);
2169
2170   return offset;
2171 }
2172
2173
2174 static const value_string tetra_T_cipher_control_vals[] = {
2175   {   0, "no-cipher" },
2176   {   1, "ciphering-parameters" },
2177   { 0, NULL }
2178 };
2179
2180 static const per_choice_t T_cipher_control_choice[] = {
2181   {   0, &hf_tetra_no_cipher     , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2182   {   1, &hf_tetra_ciphering_parameters, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_1023 },
2183   { 0, NULL, 0, NULL }
2184 };
2185
2186 static int
2187 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_) {
2188   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2189                                  ett_tetra_T_cipher_control, T_cipher_control_choice,
2190                                  NULL);
2191
2192   return offset;
2193 }
2194
2195
2196
2197 static int
2198 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_) {
2199   offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
2200                                        4, 4, FALSE, NULL);
2201
2202   return offset;
2203 }
2204
2205
2206 static const value_string tetra_T_energy_saving_mode_01_vals[] = {
2207   {   0, "none" },
2208   {   1, "energy-saving-mode" },
2209   { 0, NULL }
2210 };
2211
2212 static const per_choice_t T_energy_saving_mode_01_choice[] = {
2213   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2214   {   1, &hf_tetra_energy_saving_mode_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_7 },
2215   { 0, NULL, 0, NULL }
2216 };
2217
2218 static int
2219 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_) {
2220   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2221                                  ett_tetra_T_energy_saving_mode_01, T_energy_saving_mode_01_choice,
2222                                  NULL);
2223
2224   return offset;
2225 }
2226
2227
2228 static const value_string tetra_T_la_information_vals[] = {
2229   {   0, "none" },
2230   {   1, "la-information" },
2231   { 0, NULL }
2232 };
2233
2234 static const per_choice_t T_la_information_choice[] = {
2235   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2236   {   1, &hf_tetra_la_information_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_16383 },
2237   { 0, NULL, 0, NULL }
2238 };
2239
2240 static int
2241 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_) {
2242   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2243                                  ett_tetra_T_la_information, T_la_information_choice,
2244                                  NULL);
2245
2246   return offset;
2247 }
2248
2249
2250
2251 static int
2252 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_) {
2253   offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
2254                                        3, 3, FALSE, NULL);
2255
2256   return offset;
2257 }
2258
2259
2260 static const value_string tetra_T_ssi_01_vals[] = {
2261   {   0, "none" },
2262   {   1, "ssi" },
2263   { 0, NULL }
2264 };
2265
2266 static const per_choice_t T_ssi_01_choice[] = {
2267   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2268   {   1, &hf_tetra_ssi_03        , ASN1_NO_EXTENSIONS     , dissect_tetra_OCTET_STRING_SIZE_3 },
2269   { 0, NULL, 0, NULL }
2270 };
2271
2272 static int
2273 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_) {
2274   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2275                                  ett_tetra_T_ssi_01, T_ssi_01_choice,
2276                                  NULL);
2277
2278   return offset;
2279 }
2280
2281
2282 static const value_string tetra_T_address_extension_01_vals[] = {
2283   {   0, "none" },
2284   {   1, "address-extension" },
2285   { 0, NULL }
2286 };
2287
2288 static const per_choice_t T_address_extension_01_choice[] = {
2289   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2290   {   1, &hf_tetra_address_extension_01, ASN1_NO_EXTENSIONS     , dissect_tetra_OCTET_STRING_SIZE_3 },
2291   { 0, NULL, 0, NULL }
2292 };
2293
2294 static int
2295 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_) {
2296   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2297                                  ett_tetra_T_address_extension_01, T_address_extension_01_choice,
2298                                  NULL);
2299
2300   return offset;
2301 }
2302
2303
2304 static const value_string tetra_TYPE3_IDENTIFIER_vals[] = {
2305   {   0, "reserved" },
2306   {   1, "default-group-attachment-lifetime" },
2307   {   2, "new-registered-area" },
2308   {   3, "group-identity-location-demand" },
2309   {   4, "group-report-response" },
2310   {   5, "group-identity-location-accept" },
2311   {   6, "dm-ms-address" },
2312   {   7, "group-identity-downlink" },
2313   {   8, "group-identity-uplink" },
2314   {   9, "authentication-uplink" },
2315   {  10, "authentication-downlink" },
2316   {  11, "reserved" },
2317   {  12, "reserved1" },
2318   {  13, "reserved2" },
2319   {  14, "reserved3" },
2320   {  15, "proprietary" },
2321   { 0, NULL }
2322 };
2323
2324
2325 static int
2326 dissect_tetra_TYPE3_IDENTIFIER(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2327   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2328                                      16, NULL, FALSE, 0, NULL);
2329
2330   return offset;
2331 }
2332
2333
2334 static const value_string tetra_T_group_identity_location_demand_vals[] = {
2335   {   0, "none" },
2336   {   1, "group-identity-location-demand" },
2337   { 0, NULL }
2338 };
2339
2340 static const per_choice_t T_group_identity_location_demand_choice[] = {
2341   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2342   {   1, &hf_tetra_group_identity_location_demand_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_3 },
2343   { 0, NULL, 0, NULL }
2344 };
2345
2346 static int
2347 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_) {
2348   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2349                                  ett_tetra_T_group_identity_location_demand, T_group_identity_location_demand_choice,
2350                                  NULL);
2351
2352   return offset;
2353 }
2354
2355
2356 static const value_string tetra_T_group_report_response_vals[] = {
2357   {   0, "none" },
2358   {   1, "group-report-response" },
2359   { 0, NULL }
2360 };
2361
2362 static const per_choice_t T_group_report_response_choice[] = {
2363   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2364   {   1, &hf_tetra_group_report_response_01, ASN1_NO_EXTENSIONS     , dissect_tetra_BOOLEAN },
2365   { 0, NULL, 0, NULL }
2366 };
2367
2368 static int
2369 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_) {
2370   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2371                                  ett_tetra_T_group_report_response, T_group_report_response_choice,
2372                                  NULL);
2373
2374   return offset;
2375 }
2376
2377
2378 static const value_string tetra_T_group_identity_uplink_vals[] = {
2379   {   0, "none" },
2380   {   1, "group-identity-uplink" },
2381   { 0, NULL }
2382 };
2383
2384 static const per_choice_t T_group_identity_uplink_choice[] = {
2385   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2386   {   1, &hf_tetra_group_identity_uplink_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_15 },
2387   { 0, NULL, 0, NULL }
2388 };
2389
2390 static int
2391 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_) {
2392   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2393                                  ett_tetra_T_group_identity_uplink, T_group_identity_uplink_choice,
2394                                  NULL);
2395
2396   return offset;
2397 }
2398
2399
2400 static const value_string tetra_T_proprietary_01_vals[] = {
2401   {   0, "none" },
2402   {   1, "proprietary" },
2403   { 0, NULL }
2404 };
2405
2406 static const per_choice_t T_proprietary_01_choice[] = {
2407   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2408   {   1, &hf_tetra_proprietary_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_7 },
2409   { 0, NULL, 0, NULL }
2410 };
2411
2412 static int
2413 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_) {
2414   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2415                                  ett_tetra_T_proprietary_01, T_proprietary_01_choice,
2416                                  NULL);
2417
2418   return offset;
2419 }
2420
2421
2422 static const per_sequence_t T_type3_elements_01_sequence[] = {
2423   { &hf_tetra_type3_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_TYPE3_IDENTIFIER },
2424   { &hf_tetra_group_identity_location_demand, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_group_identity_location_demand },
2425   { &hf_tetra_group_report_response, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_group_report_response },
2426   { &hf_tetra_group_identity_uplink, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_group_identity_uplink },
2427   { &hf_tetra_proprietary_02, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_proprietary_01 },
2428   { NULL, 0, 0, NULL }
2429 };
2430
2431 static int
2432 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_) {
2433   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2434                                    ett_tetra_T_type3_elements_01, T_type3_elements_01_sequence);
2435
2436   return offset;
2437 }
2438
2439
2440 static const value_string tetra_T_type3_01_vals[] = {
2441   {   0, "no-type3" },
2442   {   1, "type3-elements" },
2443   { 0, NULL }
2444 };
2445
2446 static const per_choice_t T_type3_01_choice[] = {
2447   {   0, &hf_tetra_no_type3      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2448   {   1, &hf_tetra_type3_elements_01, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type3_elements_01 },
2449   { 0, NULL, 0, NULL }
2450 };
2451
2452 static int
2453 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_) {
2454   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2455                                  ett_tetra_T_type3_01, T_type3_01_choice,
2456                                  NULL);
2457
2458   return offset;
2459 }
2460
2461
2462 static const per_sequence_t T_type2_parameters_04_sequence[] = {
2463   { &hf_tetra_energy_saving_mode_02, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_energy_saving_mode_01 },
2464   { &hf_tetra_la_information, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_la_information },
2465   { &hf_tetra_ssi_04        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_ssi_01 },
2466   { &hf_tetra_address_extension_02, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_address_extension_01 },
2467   { &hf_tetra_type3_01      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_type3_01 },
2468   { NULL, 0, 0, NULL }
2469 };
2470
2471 static int
2472 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_) {
2473   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2474                                    ett_tetra_T_type2_parameters_04, T_type2_parameters_04_sequence);
2475
2476   return offset;
2477 }
2478
2479
2480 static const value_string tetra_T_optional_elements_06_vals[] = {
2481   {   0, "no-type2" },
2482   {   1, "type2-parameters" },
2483   { 0, NULL }
2484 };
2485
2486 static const per_choice_t T_optional_elements_06_choice[] = {
2487   {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2488   {   1, &hf_tetra_type2_parameters_04, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_parameters_04 },
2489   { 0, NULL, 0, NULL }
2490 };
2491
2492 static int
2493 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_) {
2494   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2495                                  ett_tetra_T_optional_elements_06, T_optional_elements_06_choice,
2496                                  NULL);
2497
2498   return offset;
2499 }
2500
2501
2502 static const per_sequence_t U_LOCATION_UPDATE_DEMAND_sequence[] = {
2503   { &hf_tetra_location_update_type, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_UPDATE_TYPE },
2504   { &hf_tetra_request_to_append_LA, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
2505   { &hf_tetra_cipher_control_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_cipher_control },
2506   { &hf_tetra_class_of_MS   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_OCTET_STRING_SIZE_4 },
2507   { &hf_tetra_optional_elements_06, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_06 },
2508   { NULL, 0, 0, NULL }
2509 };
2510
2511 static int
2512 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_) {
2513 #line 102 "../../asn1/tetra/tetra.cnf"
2514   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2515                                    ett_tetra_U_LOCATION_UPDATE_DEMAND, U_LOCATION_UPDATE_DEMAND_sequence);
2516
2517         col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-LOCATION-UPDATE-DEMAND");
2518
2519
2520   return offset;
2521 }
2522
2523
2524 static const value_string tetra_T_scanning_on_off_vals[] = {
2525   {   0, "on" },
2526   {   1, "off" },
2527   { 0, NULL }
2528 };
2529
2530
2531 static int
2532 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_) {
2533   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2534                                      2, NULL, FALSE, 0, NULL);
2535
2536   return offset;
2537 }
2538
2539
2540 static const per_sequence_t U_MM_STATUS_sequence[] = {
2541   { &hf_tetra_status_uplink , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_63 },
2542   { &hf_tetra_scanning_on_off, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_scanning_on_off },
2543   { NULL, 0, 0, NULL }
2544 };
2545
2546 static int
2547 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_) {
2548 #line 233 "../../asn1/tetra/tetra.cnf"
2549   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2550                                    ett_tetra_U_MM_STATUS, U_MM_STATUS_sequence);
2551
2552         col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-MM-STATUS");
2553
2554
2555   return offset;
2556 }
2557
2558
2559
2560 static int
2561 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_) {
2562   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
2563                                                             0U, 2047U, NULL, FALSE);
2564
2565   return offset;
2566 }
2567
2568
2569 static const per_sequence_t T_attach_01_sequence[] = {
2570   { &hf_tetra_class_of_usage, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
2571   { NULL, 0, 0, NULL }
2572 };
2573
2574 static int
2575 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_) {
2576   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2577                                    ett_tetra_T_attach_01, T_attach_01_sequence);
2578
2579   return offset;
2580 }
2581
2582
2583 static const value_string tetra_T_detach_uplike_vals[] = {
2584   {   0, "unknow-gssi" },
2585   {   1, "unvaild-cipher" },
2586   {   2, "user-intitial" },
2587   {   3, "reseverd" },
2588   { 0, NULL }
2589 };
2590
2591
2592 static int
2593 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_) {
2594   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2595                                      4, NULL, FALSE, 0, NULL);
2596
2597   return offset;
2598 }
2599
2600
2601 static const per_sequence_t T_detach_01_sequence[] = {
2602   { &hf_tetra_detach_uplike , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_detach_uplike },
2603   { NULL, 0, 0, NULL }
2604 };
2605
2606 static int
2607 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_) {
2608   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2609                                    ett_tetra_T_detach_01, T_detach_01_sequence);
2610
2611   return offset;
2612 }
2613
2614
2615 static const value_string tetra_T_attach_detach_identifiet_01_vals[] = {
2616   {   0, "attach" },
2617   {   1, "detach" },
2618   { 0, NULL }
2619 };
2620
2621 static const per_choice_t T_attach_detach_identifiet_01_choice[] = {
2622   {   0, &hf_tetra_attach_01     , ASN1_NO_EXTENSIONS     , dissect_tetra_T_attach_01 },
2623   {   1, &hf_tetra_detach_01     , ASN1_NO_EXTENSIONS     , dissect_tetra_T_detach_01 },
2624   { 0, NULL, 0, NULL }
2625 };
2626
2627 static int
2628 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_) {
2629   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2630                                  ett_tetra_T_attach_detach_identifiet_01, T_attach_detach_identifiet_01_choice,
2631                                  NULL);
2632
2633   return offset;
2634 }
2635
2636
2637 static const per_sequence_t T_gssi_extension_01_sequence[] = {
2638   { &hf_tetra_gssi_01       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_OCTET_STRING_SIZE_3 },
2639   { &hf_tetra_extension     , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_OCTET_STRING_SIZE_3 },
2640   { NULL, 0, 0, NULL }
2641 };
2642
2643 static int
2644 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_) {
2645   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2646                                    ett_tetra_T_gssi_extension_01, T_gssi_extension_01_sequence);
2647
2648   return offset;
2649 }
2650
2651
2652 static const value_string tetra_T_address_type_01_vals[] = {
2653   {   0, "gssi" },
2654   {   1, "gssi-extension" },
2655   {   2, "vgssi" },
2656   { 0, NULL }
2657 };
2658
2659 static const per_choice_t T_address_type_01_choice[] = {
2660   {   0, &hf_tetra_gssi_01       , ASN1_NO_EXTENSIONS     , dissect_tetra_OCTET_STRING_SIZE_3 },
2661   {   1, &hf_tetra_gssi_extension_01, ASN1_NO_EXTENSIONS     , dissect_tetra_T_gssi_extension_01 },
2662   {   2, &hf_tetra_vgssi         , ASN1_NO_EXTENSIONS     , dissect_tetra_OCTET_STRING_SIZE_3 },
2663   { 0, NULL, 0, NULL }
2664 };
2665
2666 static int
2667 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_) {
2668   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2669                                  ett_tetra_T_address_type_01, T_address_type_01_choice,
2670                                  NULL);
2671
2672   return offset;
2673 }
2674
2675
2676 static const per_sequence_t GROUP_IDENTITY_UPLINK_sequence[] = {
2677   { &hf_tetra_attach_detach_identifiet_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_attach_detach_identifiet_01 },
2678   { &hf_tetra_address_type_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_address_type_01 },
2679   { NULL, 0, 0, NULL }
2680 };
2681
2682 static int
2683 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_) {
2684   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2685                                    ett_tetra_GROUP_IDENTITY_UPLINK, GROUP_IDENTITY_UPLINK_sequence);
2686
2687   return offset;
2688 }
2689
2690
2691 static const per_sequence_t T_type3_elements_02_sequence[] = {
2692   { &hf_tetra_type3_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_TYPE3_IDENTIFIER },
2693   { &hf_tetra_length        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_2047 },
2694   { &hf_tetra_repeat_num    , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_63 },
2695   { &hf_tetra_group_identity_uplink_02, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_GROUP_IDENTITY_UPLINK },
2696   { NULL, 0, 0, NULL }
2697 };
2698
2699 static int
2700 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_) {
2701   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2702                                    ett_tetra_T_type3_elements_02, T_type3_elements_02_sequence);
2703
2704   return offset;
2705 }
2706
2707
2708 static const value_string tetra_T_type3_02_vals[] = {
2709   {   0, "no-type3" },
2710   {   1, "type3-elements" },
2711   { 0, NULL }
2712 };
2713
2714 static const per_choice_t T_type3_02_choice[] = {
2715   {   0, &hf_tetra_no_type3      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2716   {   1, &hf_tetra_type3_elements_02, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type3_elements_02 },
2717   { 0, NULL, 0, NULL }
2718 };
2719
2720 static int
2721 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_) {
2722   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2723                                  ett_tetra_T_type3_02, T_type3_02_choice,
2724                                  NULL);
2725
2726   return offset;
2727 }
2728
2729
2730 static const per_sequence_t T_type2_element_sequence[] = {
2731   { &hf_tetra_type3_02      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_type3_02 },
2732   { NULL, 0, 0, NULL }
2733 };
2734
2735 static int
2736 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_) {
2737   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2738                                    ett_tetra_T_type2_element, T_type2_element_sequence);
2739
2740   return offset;
2741 }
2742
2743
2744 static const value_string tetra_T_optional_elements_07_vals[] = {
2745   {   0, "no-type2" },
2746   {   1, "type2-element" },
2747   { 0, NULL }
2748 };
2749
2750 static const per_choice_t T_optional_elements_07_choice[] = {
2751   {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2752   {   1, &hf_tetra_type2_element , ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_element },
2753   { 0, NULL, 0, NULL }
2754 };
2755
2756 static int
2757 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_) {
2758   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2759                                  ett_tetra_T_optional_elements_07, T_optional_elements_07_choice,
2760                                  NULL);
2761
2762   return offset;
2763 }
2764
2765
2766 static const per_sequence_t U_ATTACH_DETACH_GROUP_IDENTITY_sequence[] = {
2767   { &hf_tetra_group_identity_report, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
2768   { &hf_tetra_group_identity_attach_detach_mode, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
2769   { &hf_tetra_optional_elements_07, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_07 },
2770   { NULL, 0, 0, NULL }
2771 };
2772
2773 static int
2774 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_) {
2775 #line 243 "../../asn1/tetra/tetra.cnf"
2776   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2777                                    ett_tetra_U_ATTACH_DETACH_GROUP_IDENTITY, U_ATTACH_DETACH_GROUP_IDENTITY_sequence);
2778
2779         col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-ATTACH-DETACH-GROUP-IDENTITY");
2780
2781
2782   return offset;
2783 }
2784
2785
2786 static const per_sequence_t T_type3_elements_03_sequence[] = {
2787   { &hf_tetra_type3_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_TYPE3_IDENTIFIER },
2788   { &hf_tetra_length        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_2047 },
2789   { &hf_tetra_repeat_num    , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_63 },
2790   { &hf_tetra_group_identity_uplink_02, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_GROUP_IDENTITY_UPLINK },
2791   { NULL, 0, 0, NULL }
2792 };
2793
2794 static int
2795 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_) {
2796   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2797                                    ett_tetra_T_type3_elements_03, T_type3_elements_03_sequence);
2798
2799   return offset;
2800 }
2801
2802
2803 static const value_string tetra_T_type3_03_vals[] = {
2804   {   0, "no-type3" },
2805   {   1, "type3-elements" },
2806   { 0, NULL }
2807 };
2808
2809 static const per_choice_t T_type3_03_choice[] = {
2810   {   0, &hf_tetra_no_type3      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2811   {   1, &hf_tetra_type3_elements_03, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type3_elements_03 },
2812   { 0, NULL, 0, NULL }
2813 };
2814
2815 static int
2816 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_) {
2817   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2818                                  ett_tetra_T_type3_03, T_type3_03_choice,
2819                                  NULL);
2820
2821   return offset;
2822 }
2823
2824
2825 static const per_sequence_t T_type2_element_01_sequence[] = {
2826   { &hf_tetra_type3_03      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_type3_03 },
2827   { NULL, 0, 0, NULL }
2828 };
2829
2830 static int
2831 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_) {
2832   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2833                                    ett_tetra_T_type2_element_01, T_type2_element_01_sequence);
2834
2835   return offset;
2836 }
2837
2838
2839 static const value_string tetra_T_optional_elements_08_vals[] = {
2840   {   0, "no-type2" },
2841   {   1, "type2-element" },
2842   { 0, NULL }
2843 };
2844
2845 static const per_choice_t T_optional_elements_08_choice[] = {
2846   {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2847   {   1, &hf_tetra_type2_element_01, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_element_01 },
2848   { 0, NULL, 0, NULL }
2849 };
2850
2851 static int
2852 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_) {
2853   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2854                                  ett_tetra_T_optional_elements_08, T_optional_elements_08_choice,
2855                                  NULL);
2856
2857   return offset;
2858 }
2859
2860
2861 static const per_sequence_t U_ATTACH_DETACH_GROUP_IDENTITY_ACK_sequence[] = {
2862   { &hf_tetra_group_identity_ack_type, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
2863   { &hf_tetra_group_identity_attach_detach_mode, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
2864   { &hf_tetra_optional_elements_08, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_08 },
2865   { NULL, 0, 0, NULL }
2866 };
2867
2868 static int
2869 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_) {
2870 #line 248 "../../asn1/tetra/tetra.cnf"
2871   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2872                                    ett_tetra_U_ATTACH_DETACH_GROUP_IDENTITY_ACK, U_ATTACH_DETACH_GROUP_IDENTITY_ACK_sequence);
2873
2874                 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-ATTACH-DETACH-GROUP-IDENTITY-ACK");
2875
2876
2877   return offset;
2878 }
2879
2880
2881 static const value_string tetra_U_MM_PDU_vals[] = {
2882   {   0, "u-Authentication" },
2883   {   1, "u-Itsi-Detach" },
2884   {   2, "u-Location-Update-Demand" },
2885   {   3, "u-MM-Status" },
2886   {   4, "u-MM-reserved1" },
2887   {   5, "u-WK" },
2888   {   6, "u-MM-reserved3" },
2889   {   7, "u-Attach-Detach-Group-Identity" },
2890   {   8, "u-Attach-Detach-Group-Identity-Ack" },
2891   {   9, "u-TEI-Provide" },
2892   {  10, "u-MM-reserved6" },
2893   {  11, "u-Disabled-Status" },
2894   {  12, "u-MM-reserved7" },
2895   {  13, "u-MM-reserved8" },
2896   {  14, "u-MM-reserved9" },
2897   {  15, "u-MM-Function-Not-Support" },
2898   { 0, NULL }
2899 };
2900
2901 static const per_choice_t U_MM_PDU_choice[] = {
2902   {   0, &hf_tetra_u_Authentication, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2903   {   1, &hf_tetra_u_Itsi_Detach , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2904   {   2, &hf_tetra_u_Location_Update_Demand, ASN1_NO_EXTENSIONS     , dissect_tetra_U_LOCATION_UPDATE_DEMAND },
2905   {   3, &hf_tetra_u_MM_Status   , ASN1_NO_EXTENSIONS     , dissect_tetra_U_MM_STATUS },
2906   {   4, &hf_tetra_u_MM_reserved1, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2907   {   5, &hf_tetra_u_WK          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2908   {   6, &hf_tetra_u_MM_reserved3, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2909   {   7, &hf_tetra_u_Attach_Detach_Group_Identity, ASN1_NO_EXTENSIONS     , dissect_tetra_U_ATTACH_DETACH_GROUP_IDENTITY },
2910   {   8, &hf_tetra_u_Attach_Detach_Group_Identity_Ack, ASN1_NO_EXTENSIONS     , dissect_tetra_U_ATTACH_DETACH_GROUP_IDENTITY_ACK },
2911   {   9, &hf_tetra_u_TEI_Provide , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2912   {  10, &hf_tetra_u_MM_reserved6, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2913   {  11, &hf_tetra_u_Disabled_Status, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2914   {  12, &hf_tetra_u_MM_reserved7, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2915   {  13, &hf_tetra_u_MM_reserved8, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2916   {  14, &hf_tetra_u_MM_reserved9, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2917   {  15, &hf_tetra_u_MM_Function_Not_Support, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2918   { 0, NULL, 0, NULL }
2919 };
2920
2921 static int
2922 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_) {
2923   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2924                                  ett_tetra_U_MM_PDU, U_MM_PDU_choice,
2925                                  NULL);
2926
2927   return offset;
2928 }
2929
2930
2931 static const value_string tetra_T_simplex_duplex_selection_vals[] = {
2932   {   0, "simplex" },
2933   {   1, "duplex" },
2934   { 0, NULL }
2935 };
2936
2937
2938 static int
2939 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_) {
2940   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2941                                      2, NULL, FALSE, 0, NULL);
2942
2943   return offset;
2944 }
2945
2946
2947 static const value_string tetra_CIRCUIT_vals[] = {
2948   {   0, "speech-tch-s" },
2949   {   1, "unprotected-tch-7-2" },
2950   {   2, "low-protection-tch-4-8" },
2951   {   3, "low-protection-tch-4-8" },
2952   {   4, "low-protection-tch-4-8" },
2953   {   5, "high-protection-tch-2-4" },
2954   {   6, "high-protection-tch-2-4" },
2955   {   7, "high-protection-tch-2-4" },
2956   { 0, NULL }
2957 };
2958
2959
2960 static int
2961 dissect_tetra_CIRCUIT(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2962   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2963                                      8, NULL, FALSE, 0, NULL);
2964
2965   return offset;
2966 }
2967
2968
2969 static const per_sequence_t Basic_service_information_sequence[] = {
2970   { &hf_tetra_circuit_mode  , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_CIRCUIT },
2971   { &hf_tetra_encryption    , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
2972   { &hf_tetra_communication , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
2973   { &hf_tetra_slots_or_speech, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
2974   { NULL, 0, 0, NULL }
2975 };
2976
2977 static int
2978 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_) {
2979   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2980                                    ett_tetra_Basic_service_information, Basic_service_information_sequence);
2981
2982   return offset;
2983 }
2984
2985
2986 static const value_string tetra_T_basic_service_information_vals[] = {
2987   {   0, "none" },
2988   {   1, "basic-service-information" },
2989   { 0, NULL }
2990 };
2991
2992 static const per_choice_t T_basic_service_information_choice[] = {
2993   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2994   {   1, &hf_tetra_basic_service_information, ASN1_NO_EXTENSIONS     , dissect_tetra_Basic_service_information },
2995   { 0, NULL, 0, NULL }
2996 };
2997
2998 static int
2999 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_) {
3000   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3001                                  ett_tetra_T_basic_service_information, T_basic_service_information_choice,
3002                                  NULL);
3003
3004   return offset;
3005 }
3006
3007
3008
3009 static int
3010 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_) {
3011   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
3012                                                             0U, 255U, NULL, FALSE);
3013
3014   return offset;
3015 }
3016
3017
3018
3019 static int
3020 dissect_tetra_BIT_STRING(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3021   offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
3022                                      NO_BOUND, NO_BOUND, FALSE, NULL);
3023
3024   return offset;
3025 }
3026
3027
3028 static const per_sequence_t Type1_sequence[] = {
3029   { &hf_tetra_proprietary_element_owner, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Proprietary_element_owner },
3030   { &hf_tetra_proprietary_element_owner_extension, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BIT_STRING },
3031   { NULL, 0, 0, NULL }
3032 };
3033
3034 static int
3035 dissect_tetra_Type1(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3036   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3037                                    ett_tetra_Type1, Type1_sequence);
3038
3039   return offset;
3040 }
3041
3042
3043 static const per_sequence_t Type2_sequence[] = {
3044   { &hf_tetra_proprietary_element_owner, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Proprietary_element_owner },
3045   { NULL, 0, 0, NULL }
3046 };
3047
3048 static int
3049 dissect_tetra_Type2(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3050   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3051                                    ett_tetra_Type2, Type2_sequence);
3052
3053   return offset;
3054 }
3055
3056
3057 static const value_string tetra_T_data_01_vals[] = {
3058   {   0, "element1" },
3059   {   1, "element" },
3060   { 0, NULL }
3061 };
3062
3063 static const per_choice_t T_data_01_choice[] = {
3064   {   0, &hf_tetra_element1      , ASN1_NO_EXTENSIONS     , dissect_tetra_Type1 },
3065   {   1, &hf_tetra_element       , ASN1_NO_EXTENSIONS     , dissect_tetra_Type2 },
3066   { 0, NULL, 0, NULL }
3067 };
3068
3069 static int
3070 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_) {
3071   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3072                                  ett_tetra_T_data_01, T_data_01_choice,
3073                                  NULL);
3074
3075   return offset;
3076 }
3077
3078
3079 static const per_sequence_t Proprietary_sequence[] = {
3080   { &hf_tetra_data_01       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_data_01 },
3081   { NULL, 0, 0, NULL }
3082 };
3083
3084 static int
3085 dissect_tetra_Proprietary(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3086   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3087                                    ett_tetra_Proprietary, Proprietary_sequence);
3088
3089   return offset;
3090 }
3091
3092
3093 static const value_string tetra_T_prop_01_vals[] = {
3094   {   0, "none" },
3095   {   1, "prop" },
3096   { 0, NULL }
3097 };
3098
3099 static const per_choice_t T_prop_01_choice[] = {
3100   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
3101   {   1, &hf_tetra_prop_01       , ASN1_NO_EXTENSIONS     , dissect_tetra_Proprietary },
3102   { 0, NULL, 0, NULL }
3103 };
3104
3105 static int
3106 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_) {
3107   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3108                                  ett_tetra_T_prop_01, T_prop_01_choice,
3109                                  NULL);
3110
3111   return offset;
3112 }
3113
3114
3115 static const per_sequence_t T_type2_parameters_06_sequence[] = {
3116   { &hf_tetra_basic_service_information_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_basic_service_information },
3117   { &hf_tetra_prop_02       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop_01 },
3118   { NULL, 0, 0, NULL }
3119 };
3120
3121 static int
3122 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_) {
3123   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3124                                    ett_tetra_T_type2_parameters_06, T_type2_parameters_06_sequence);
3125
3126   return offset;
3127 }
3128
3129
3130 static const value_string tetra_T_optional_elements_10_vals[] = {
3131   {   0, "no-type2" },
3132   {   1, "type2-parameters" },
3133   { 0, NULL }
3134 };
3135
3136 static const per_choice_t T_optional_elements_10_choice[] = {
3137   {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
3138   {   1, &hf_tetra_type2_parameters_06, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_parameters_06 },
3139   { 0, NULL, 0, NULL }
3140 };
3141
3142 static int
3143 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_) {
3144   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3145                                  ett_tetra_T_optional_elements_10, T_optional_elements_10_choice,
3146                                  NULL);
3147
3148   return offset;
3149 }
3150
3151
3152 static const per_sequence_t U_ALERT_sequence[] = {
3153   { &hf_tetra_call_identifier_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1023 },
3154   { &hf_tetra_reserved_01   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
3155   { &hf_tetra_simplex_duplex_selection, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_simplex_duplex_selection },
3156   { &hf_tetra_optional_elements_10, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_10 },
3157   { NULL, 0, 0, NULL }
3158 };
3159
3160 static int
3161 dissect_tetra_U_ALERT(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3162 #line 182 "../../asn1/tetra/tetra.cnf"
3163   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3164                                    ett_tetra_U_ALERT, U_ALERT_sequence);
3165
3166         col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-ALERT");
3167
3168
3169   return offset;
3170 }
3171
3172
3173 static const value_string tetra_T_simplex_duplex_selection_01_vals[] = {
3174   {   0, "simplex" },
3175   {   1, "duplex" },
3176   { 0, NULL }
3177 };
3178
3179
3180 static int
3181 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_) {
3182   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
3183                                      2, NULL, FALSE, 0, NULL);
3184
3185   return offset;
3186 }
3187
3188
3189 static const value_string tetra_T_basic_service_information_01_vals[] = {
3190   {   0, "none" },
3191   {   1, "basic-service-information" },
3192   { 0, NULL }
3193 };
3194
3195 static const per_choice_t T_basic_service_information_01_choice[] = {
3196   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
3197   {   1, &hf_tetra_basic_service_information, ASN1_NO_EXTENSIONS     , dissect_tetra_Basic_service_information },
3198   { 0, NULL, 0, NULL }
3199 };
3200
3201 static int
3202 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_) {
3203   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3204                                  ett_tetra_T_basic_service_information_01, T_basic_service_information_01_choice,
3205                                  NULL);
3206
3207   return offset;
3208 }
3209
3210
3211 static const value_string tetra_T_prop_02_vals[] = {
3212   {   0, "none" },
3213   {   1, "prop" },
3214   { 0, NULL }
3215 };
3216
3217 static const per_choice_t T_prop_02_choice[] = {
3218   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
3219   {   1, &hf_tetra_prop_01       , ASN1_NO_EXTENSIONS     , dissect_tetra_Proprietary },
3220   { 0, NULL, 0, NULL }
3221 };
3222
3223 static int
3224 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_) {
3225   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3226                                  ett_tetra_T_prop_02, T_prop_02_choice,
3227                                  NULL);
3228
3229   return offset;
3230 }
3231
3232
3233 static const per_sequence_t T_type2_parameters_07_sequence[] = {
3234   { &hf_tetra_basic_service_information_02, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_basic_service_information_01 },
3235   { &hf_tetra_prop_03       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop_02 },
3236   { NULL, 0, 0, NULL }
3237 };
3238
3239 static int
3240 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_) {
3241   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3242                                    ett_tetra_T_type2_parameters_07, T_type2_parameters_07_sequence);
3243
3244   return offset;
3245 }
3246
3247
3248 static const value_string tetra_T_optional_elements_11_vals[] = {
3249   {   0, "no-type2" },
3250   {   1, "type2-parameters" },
3251   { 0, NULL }
3252 };
3253
3254 static const per_choice_t T_optional_elements_11_choice[] = {
3255   {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
3256   {   1, &hf_tetra_type2_parameters_07, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_parameters_07 },
3257   { 0, NULL, 0, NULL }
3258 };
3259
3260 static int
3261 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_) {
3262   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3263                                  ett_tetra_T_optional_elements_11, T_optional_elements_11_choice,
3264                                  NULL);
3265
3266   return offset;
3267 }
3268
3269
3270 static const per_sequence_t U_CONNECT_sequence[] = {
3271   { &hf_tetra_call_identifier_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1023 },
3272   { &hf_tetra_hook_method_selection, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
3273   { &hf_tetra_simplex_duplex_selection_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_simplex_duplex_selection_01 },
3274   { &hf_tetra_optional_elements_11, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_11 },
3275   { NULL, 0, 0, NULL }
3276 };
3277
3278 static int
3279 dissect_tetra_U_CONNECT(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3280 #line 187 "../../asn1/tetra/tetra.cnf"
3281   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3282                                    ett_tetra_U_CONNECT, U_CONNECT_sequence);
3283
3284         col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-CONNECT");
3285
3286
3287   return offset;
3288 }
3289
3290
3291
3292 static int
3293 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_) {
3294   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
3295                                                             0U, 31U, NULL, FALSE);
3296
3297   return offset;
3298 }
3299
3300
3301 static const value_string tetra_T_prop_05_vals[] = {
3302   {   0, "none" },
3303   {   1, "prop" },
3304   { 0, NULL }
3305 };
3306
3307 static const per_choice_t T_prop_05_choice[] = {
3308   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
3309   {   1, &hf_tetra_prop_01       , ASN1_NO_EXTENSIONS     , dissect_tetra_Proprietary },
3310   { 0, NULL, 0, NULL }
3311 };
3312
3313 static int
3314 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_) {
3315   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3316                                  ett_tetra_T_prop_05, T_prop_05_choice,
3317                                  NULL);
3318
3319   return offset;
3320 }
3321
3322
3323 static const per_sequence_t T_type2_parameters_10_sequence[] = {
3324   { &hf_tetra_prop_06       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop_05 },
3325   { NULL, 0, 0, NULL }
3326 };
3327
3328 static int
3329 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_) {
3330   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3331                                    ett_tetra_T_type2_parameters_10, T_type2_parameters_10_sequence);
3332
3333   return offset;
3334 }
3335
3336
3337 static const value_string tetra_T_optional_elements_14_vals[] = {
3338   {   0, "no-type2" },
3339   {   1, "type2-parameters" },
3340   { 0, NULL }
3341 };
3342
3343 static const per_choice_t T_optional_elements_14_choice[] = {
3344   {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
3345   {   1, &hf_tetra_type2_parameters_10, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_parameters_10 },
3346   { 0, NULL, 0, NULL }
3347 };
3348
3349 static int
3350 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_) {
3351   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3352                                  ett_tetra_T_optional_elements_14, T_optional_elements_14_choice,
3353                                  NULL);
3354
3355   return offset;
3356 }
3357
3358
3359 static const per_sequence_t U_DISCONNECT_sequence[] = {
3360   { &hf_tetra_call_identifier_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1023 },
3361   { &hf_tetra_disconnect_cause, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_31 },
3362   { &hf_tetra_optional_elements_14, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_14 },
3363   { NULL, 0, 0, NULL }
3364 };
3365
3366 static int
3367 dissect_tetra_U_DISCONNECT(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3368 #line 192 "../../asn1/tetra/tetra.cnf"
3369   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3370                                    ett_tetra_U_DISCONNECT, U_DISCONNECT_sequence);
3371
3372         col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-DISCONNECT");
3373
3374
3375   return offset;
3376 }
3377
3378
3379 static const per_sequence_t U_INFO_sequence[] = {
3380   { &hf_tetra_call_id       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
3381   { &hf_tetra_poll_response , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
3382   { NULL, 0, 0, NULL }
3383 };
3384
3385 static int
3386 dissect_tetra_U_INFO(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3387   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3388                                    ett_tetra_U_INFO, U_INFO_sequence);
3389
3390   return offset;
3391 }
3392
3393
3394 static const per_sequence_t U_RELEASE_sequence[] = {
3395   { &hf_tetra_call_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
3396   { &hf_tetra_disconnect_cause, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_31 },
3397   { NULL, 0, 0, NULL }
3398 };
3399
3400 static int
3401 dissect_tetra_U_RELEASE(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3402 #line 79 "../../asn1/tetra/tetra.cnf"
3403   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3404                                    ett_tetra_U_RELEASE, U_RELEASE_sequence);
3405
3406         col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-RELEASE");
3407   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3408                                    ett_tetra_U_RELEASE, U_RELEASE_sequence);
3409
3410         col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-RELEASE");
3411
3412
3413   return offset;
3414 }
3415
3416
3417 static const value_string tetra_T_simple_duplex_selection_vals[] = {
3418   {   0, "simplex" },
3419   {   1, "duplex" },
3420   { 0, NULL }
3421 };
3422
3423
3424 static int
3425 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_) {
3426   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
3427                                      2, NULL, FALSE, 0, NULL);
3428
3429   return offset;
3430 }
3431
3432
3433 static const per_sequence_t T_called_party_ssi_extention_sequence[] = {
3434   { &hf_tetra_called_party_ssi, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16777215 },
3435   { &hf_tetra_called_party_extention, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16777215 },
3436   { NULL, 0, 0, NULL }
3437 };
3438
3439 static int
3440 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_) {
3441   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3442                                    ett_tetra_T_called_party_ssi_extention, T_called_party_ssi_extention_sequence);
3443
3444   return offset;
3445 }
3446
3447
3448 static const value_string tetra_Calling_party_address_type_vals[] = {
3449   {   0, "called-party-sna" },
3450   {   1, "called-party-ssi" },
3451   {   2, "called-party-ssi-extention" },
3452   { 0, NULL }
3453 };
3454
3455 static const per_choice_t Calling_party_address_type_choice[] = {
3456   {   0, &hf_tetra_called_party_sna, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_255 },
3457   {   1, &hf_tetra_called_party_ssi, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_16777215 },
3458   {   2, &hf_tetra_called_party_ssi_extention, ASN1_NO_EXTENSIONS     , dissect_tetra_T_called_party_ssi_extention },
3459   { 0, NULL, 0, NULL }
3460 };
3461
3462 static int
3463 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_) {
3464   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3465                                  ett_tetra_Calling_party_address_type, Calling_party_address_type_choice,
3466                                  NULL);
3467
3468   return offset;
3469 }
3470
3471
3472
3473 static int
3474 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_) {
3475   offset = dissect_tetra_Calling_party_address_type(tvb, offset, actx, tree, hf_index);
3476
3477   return offset;
3478 }
3479
3480
3481 static const value_string tetra_T_external_subscriber_number_vals[] = {
3482   {   0, "none" },
3483   {   1, "external-subscriber-number" },
3484   { 0, NULL }
3485 };
3486
3487 static const per_choice_t T_external_subscriber_number_choice[] = {
3488   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
3489   {   1, &hf_tetra_external_subscriber_number_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_31 },
3490   { 0, NULL, 0, NULL }
3491 };
3492
3493 static int
3494 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_) {
3495   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3496                                  ett_tetra_T_external_subscriber_number, T_external_subscriber_number_choice,
3497                                  NULL);
3498
3499   return offset;
3500 }
3501
3502
3503 static const value_string tetra_T_prop_vals[] = {
3504   {   0, "none" },
3505   {   1, "prop" },
3506   { 0, NULL }
3507 };
3508
3509 static const per_choice_t T_prop_choice[] = {
3510   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
3511   {   1, &hf_tetra_prop_01       , ASN1_NO_EXTENSIONS     , dissect_tetra_Proprietary },
3512   { 0, NULL, 0, NULL }
3513 };
3514
3515 static int
3516 dissect_tetra_T_prop(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3517   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3518                                  ett_tetra_T_prop, T_prop_choice,
3519                                  NULL);
3520
3521   return offset;
3522 }
3523
3524
3525 static const per_sequence_t T_type2_parameters_05_sequence[] = {
3526   { &hf_tetra_external_subscriber_number, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_external_subscriber_number },
3527   { &hf_tetra_prop          , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop },
3528   { NULL, 0, 0, NULL }
3529 };
3530
3531 static int
3532 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_) {
3533   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3534                                    ett_tetra_T_type2_parameters_05, T_type2_parameters_05_sequence);
3535
3536   return offset;
3537 }
3538
3539
3540 static const value_string tetra_T_optional_elements_09_vals[] = {
3541   {   0, "no-type2" },
3542   {   1, "type2-parameters" },
3543   { 0, NULL }
3544 };
3545
3546 static const per_choice_t T_optional_elements_09_choice[] = {
3547   {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
3548   {   1, &hf_tetra_type2_parameters_05, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_parameters_05 },
3549   { 0, NULL, 0, NULL }
3550 };
3551
3552 static int
3553 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_) {
3554   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3555                                  ett_tetra_T_optional_elements_09, T_optional_elements_09_choice,
3556                                  NULL);
3557
3558   return offset;
3559 }
3560
3561
3562 static const per_sequence_t U_SETUP_sequence[] = {
3563   { &hf_tetra_area_selection, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_15 },
3564   { &hf_tetra_hook_method_selection, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
3565   { &hf_tetra_simple_duplex_selection, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_simple_duplex_selection },
3566   { &hf_tetra_basic_service_information, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Basic_service_information },
3567   { &hf_tetra_request_transmit_send_data, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
3568   { &hf_tetra_call_priority , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_15 },
3569   { &hf_tetra_clir_control  , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
3570   { &hf_tetra_called_party_address, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Called_party_address_type },
3571   { &hf_tetra_optional_elements_09, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_09 },
3572   { NULL, 0, 0, NULL }
3573 };
3574
3575 static int
3576 dissect_tetra_U_SETUP(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3577 #line 202 "../../asn1/tetra/tetra.cnf"
3578   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3579                                    ett_tetra_U_SETUP, U_SETUP_sequence);
3580
3581         col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-SETUP");
3582
3583
3584   return offset;
3585 }
3586
3587
3588
3589 static int
3590 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_) {
3591   offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
3592                                      48, 48, FALSE, NULL);
3593
3594   return offset;
3595 }
3596
3597
3598 static const value_string tetra_T_called_party_type_identifier_01_vals[] = {
3599   {   0, "short-number-address" },
3600   {   1, "ssi" },
3601   {   2, "called-ssi-called-extension" },
3602   {   3, "none" },
3603   { 0, NULL }
3604 };
3605
3606 static const per_choice_t T_called_party_type_identifier_01_choice[] = {
3607   {   0, &hf_tetra_short_number_address, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_255 },
3608   {   1, &hf_tetra_ssi           , ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_16777215 },
3609   {   2, &hf_tetra_called_ssi_called_extension, ASN1_NO_EXTENSIONS     , dissect_tetra_BIT_STRING_SIZE_48 },
3610   {   3, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
3611   { 0, NULL, 0, NULL }
3612 };
3613
3614 static int
3615 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_) {
3616   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3617                                  ett_tetra_T_called_party_type_identifier_01, T_called_party_type_identifier_01_choice,
3618                                  NULL);
3619
3620   return offset;
3621 }
3622
3623
3624 static const per_sequence_t U_STATUS_sequence[] = {
3625   { &hf_tetra_area_selection, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_15 },
3626   { &hf_tetra_called_party_type_identifier_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_called_party_type_identifier_01 },
3627   { &hf_tetra_pre_coded_status, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_65535 },
3628   { NULL, 0, 0, NULL }
3629 };
3630
3631 static int
3632 dissect_tetra_U_STATUS(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3633 #line 207 "../../asn1/tetra/tetra.cnf"
3634   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3635                                    ett_tetra_U_STATUS, U_STATUS_sequence);
3636
3637         col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-STATUS");
3638
3639
3640   return offset;
3641 }
3642
3643
3644 static const value_string tetra_T_prop_03_vals[] = {
3645   {   0, "none" },
3646   {   1, "prop" },
3647   { 0, NULL }
3648 };
3649
3650 static const per_choice_t T_prop_03_choice[] = {
3651   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
3652   {   1, &hf_tetra_prop_01       , ASN1_NO_EXTENSIONS     , dissect_tetra_Proprietary },
3653   { 0, NULL, 0, NULL }
3654 };
3655
3656 static int
3657 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_) {
3658   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3659                                  ett_tetra_T_prop_03, T_prop_03_choice,
3660                                  NULL);
3661
3662   return offset;
3663 }
3664
3665
3666 static const per_sequence_t T_type2_parameters_08_sequence[] = {
3667   { &hf_tetra_prop_04       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop_03 },
3668   { NULL, 0, 0, NULL }
3669 };
3670
3671 static int
3672 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_) {
3673   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3674                                    ett_tetra_T_type2_parameters_08, T_type2_parameters_08_sequence);
3675
3676   return offset;
3677 }
3678
3679
3680 static const value_string tetra_T_optional_elements_12_vals[] = {
3681   {   0, "no-type2" },
3682   {   1, "type2-parameters" },
3683   { 0, NULL }
3684 };
3685
3686 static const per_choice_t T_optional_elements_12_choice[] = {
3687   {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
3688   {   1, &hf_tetra_type2_parameters_08, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_parameters_08 },
3689   { 0, NULL, 0, NULL }
3690 };
3691
3692 static int
3693 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_) {
3694   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3695                                  ett_tetra_T_optional_elements_12, T_optional_elements_12_choice,
3696                                  NULL);
3697
3698   return offset;
3699 }
3700
3701
3702 static const per_sequence_t U_TX_CEASED_sequence[] = {
3703   { &hf_tetra_call_identifier_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1023 },
3704   { &hf_tetra_optional_elements_12, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_12 },
3705   { NULL, 0, 0, NULL }
3706 };
3707
3708 static int
3709 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_) {
3710 #line 227 "../../asn1/tetra/tetra.cnf"
3711   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3712                                    ett_tetra_U_TX_CEASED, U_TX_CEASED_sequence);
3713
3714         col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-TX-CEASED");
3715
3716
3717   return offset;
3718 }
3719
3720
3721 static const value_string tetra_T_prop_04_vals[] = {
3722   {   0, "none" },
3723   {   1, "prop" },
3724   { 0, NULL }
3725 };
3726
3727 static const per_choice_t T_prop_04_choice[] = {
3728   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
3729   {   1, &hf_tetra_prop_01       , ASN1_NO_EXTENSIONS     , dissect_tetra_Proprietary },
3730   { 0, NULL, 0, NULL }
3731 };
3732
3733 static int
3734 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_) {
3735   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3736                                  ett_tetra_T_prop_04, T_prop_04_choice,
3737                                  NULL);
3738
3739   return offset;
3740 }
3741
3742
3743 static const per_sequence_t T_type2_parameters_09_sequence[] = {
3744   { &hf_tetra_prop_05       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop_04 },
3745   { NULL, 0, 0, NULL }
3746 };
3747
3748 static int
3749 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_) {
3750   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3751                                    ett_tetra_T_type2_parameters_09, T_type2_parameters_09_sequence);
3752
3753   return offset;
3754 }
3755
3756
3757 static const value_string tetra_T_optional_elements_13_vals[] = {
3758   {   0, "no-type2" },
3759   {   1, "type2-parameters" },
3760   { 0, NULL }
3761 };
3762
3763 static const per_choice_t T_optional_elements_13_choice[] = {
3764   {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
3765   {   1, &hf_tetra_type2_parameters_09, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_parameters_09 },
3766   { 0, NULL, 0, NULL }
3767 };
3768
3769 static int
3770 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_) {
3771   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3772                                  ett_tetra_T_optional_elements_13, T_optional_elements_13_choice,
3773                                  NULL);
3774
3775   return offset;
3776 }
3777
3778
3779 static const per_sequence_t U_TX_DEMAND_sequence[] = {
3780   { &hf_tetra_call_identifier_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1023 },
3781   { &hf_tetra_tx_demand_priority, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
3782   { &hf_tetra_encryption_control, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
3783   { &hf_tetra_reserved_01   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
3784   { &hf_tetra_optional_elements_13, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_13 },
3785   { NULL, 0, 0, NULL }
3786 };
3787
3788 static int
3789 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_) {
3790 #line 222 "../../asn1/tetra/tetra.cnf"
3791   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3792                                    ett_tetra_U_TX_DEMAND, U_TX_DEMAND_sequence);
3793
3794         col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-TX-DEMAND");
3795
3796
3797   return offset;
3798 }
3799
3800
3801
3802 static int
3803 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_) {
3804   offset = dissect_tetra_Calling_party_address_type(tvb, offset, actx, tree, hf_index);
3805
3806   return offset;
3807 }
3808
3809
3810 static const value_string tetra_T_prop_06_vals[] = {
3811   {   0, "none" },
3812   {   1, "prop" },
3813   { 0, NULL }
3814 };
3815
3816 static const per_choice_t T_prop_06_choice[] = {
3817   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
3818   {   1, &hf_tetra_prop_01       , ASN1_NO_EXTENSIONS     , dissect_tetra_Proprietary },
3819   { 0, NULL, 0, NULL }
3820 };
3821
3822 static int
3823 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_) {
3824   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3825                                  ett_tetra_T_prop_06, T_prop_06_choice,
3826                                  NULL);
3827
3828   return offset;
3829 }
3830
3831
3832 static const per_sequence_t T_type2_parameters_11_sequence[] = {
3833   { &hf_tetra_prop_07       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop_06 },
3834   { NULL, 0, 0, NULL }
3835 };
3836
3837 static int
3838 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_) {
3839   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3840                                    ett_tetra_T_type2_parameters_11, T_type2_parameters_11_sequence);
3841
3842   return offset;
3843 }
3844
3845
3846 static const value_string tetra_T_optional_elements_15_vals[] = {
3847   {   0, "no-type2" },
3848   {   1, "type2-parameters" },
3849   { 0, NULL }
3850 };
3851
3852 static const per_choice_t T_optional_elements_15_choice[] = {
3853   {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
3854   {   1, &hf_tetra_type2_parameters_11, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_parameters_11 },
3855   { 0, NULL, 0, NULL }
3856 };
3857
3858 static int
3859 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_) {
3860   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3861                                  ett_tetra_T_optional_elements_15, T_optional_elements_15_choice,
3862                                  NULL);
3863
3864   return offset;
3865 }
3866
3867
3868 static const per_sequence_t U_CALL_RESTORE_sequence[] = {
3869   { &hf_tetra_call_identifier_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1023 },
3870   { &hf_tetra_request_to_transmit_send_data, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
3871   { &hf_tetra_other_party_address, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Other_party_address_type },
3872   { &hf_tetra_basic_service_information, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Basic_service_information },
3873   { &hf_tetra_optional_elements_15, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_15 },
3874   { NULL, 0, 0, NULL }
3875 };
3876
3877 static int
3878 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_) {
3879 #line 217 "../../asn1/tetra/tetra.cnf"
3880   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3881                                    ett_tetra_U_CALL_RESTORE, U_CALL_RESTORE_sequence);
3882
3883         col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-CALL-RESTORE");
3884
3885
3886   return offset;
3887 }
3888
3889
3890 static const value_string tetra_T_called_party_type_identifier_vals[] = {
3891   {   0, "sna" },
3892   {   1, "ssi" },
3893   {   2, "ssi-extension" },
3894   {   3, "none" },
3895   { 0, NULL }
3896 };
3897
3898 static const per_choice_t T_called_party_type_identifier_choice[] = {
3899   {   0, &hf_tetra_sna           , ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_255 },
3900   {   1, &hf_tetra_ssi           , ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_16777215 },
3901   {   2, &hf_tetra_ssi_extension , ASN1_NO_EXTENSIONS     , dissect_tetra_BIT_STRING_SIZE_48 },
3902   {   3, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
3903   { 0, NULL, 0, NULL }
3904 };
3905
3906 static int
3907 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_) {
3908   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3909                                  ett_tetra_T_called_party_type_identifier, T_called_party_type_identifier_choice,
3910                                  NULL);
3911
3912   return offset;
3913 }
3914
3915
3916
3917 static int
3918 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_) {
3919   offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
3920                                      64, 64, FALSE, NULL);
3921
3922   return offset;
3923 }
3924
3925
3926
3927 static int
3928 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_) {
3929   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
3930                                                             0U, 4194304U, NULL, FALSE);
3931
3932   return offset;
3933 }
3934
3935
3936 static const value_string tetra_T_short_data_type_identifier_vals[] = {
3937   {   0, "data-1" },
3938   {   1, "data-2" },
3939   {   2, "data-3" },
3940   {   3, "length-indicator-data-4" },
3941   { 0, NULL }
3942 };
3943
3944 static const per_choice_t T_short_data_type_identifier_choice[] = {
3945   {   0, &hf_tetra_data_1        , ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_65535 },
3946   {   1, &hf_tetra_data_2        , ASN1_NO_EXTENSIONS     , dissect_tetra_OCTET_STRING_SIZE_4 },
3947   {   2, &hf_tetra_data_3        , ASN1_NO_EXTENSIONS     , dissect_tetra_BIT_STRING_SIZE_64 },
3948   {   3, &hf_tetra_length_indicator_data_4, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_4194304 },
3949   { 0, NULL, 0, NULL }
3950 };
3951
3952 static int
3953 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_) {
3954   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3955                                  ett_tetra_T_short_data_type_identifier, T_short_data_type_identifier_choice,
3956                                  NULL);
3957
3958   return offset;
3959 }
3960
3961
3962 static const per_sequence_t U_SDS_DATA_sequence[] = {
3963   { &hf_tetra_area_selection, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_15 },
3964   { &hf_tetra_called_party_type_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_called_party_type_identifier },
3965   { &hf_tetra_short_data_type_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_short_data_type_identifier },
3966   { NULL, 0, 0, NULL }
3967 };
3968
3969 static int
3970 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_) {
3971 #line 212 "../../asn1/tetra/tetra.cnf"
3972   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3973                                    ett_tetra_U_SDS_DATA, U_SDS_DATA_sequence);
3974
3975         col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-SDS-DATA");
3976
3977
3978   return offset;
3979 }
3980
3981
3982 static const value_string tetra_U_CMCE_PDU_vals[] = {
3983   {   0, "u-Alert" },
3984   {   1, "reserved1" },
3985   {   2, "u-Connect" },
3986   {   3, "reserved2" },
3987   {   4, "u-Disconnect" },
3988   {   5, "u-Info" },
3989   {   6, "u-Release" },
3990   {   7, "u-Setup" },
3991   {   8, "u-Status" },
3992   {   9, "u-Tx-Ceased" },
3993   {  10, "u-Tx-Demand" },
3994   {  11, "reserved3" },
3995   {  12, "reserved4" },
3996   {  13, "reserved5" },
3997   {  14, "u-Call-Restore" },
3998   {  15, "u-SDS-Data" },
3999   {  16, "u-Facility" },
4000   { 0, NULL }
4001 };
4002
4003 static const per_choice_t U_CMCE_PDU_choice[] = {
4004   {   0, &hf_tetra_u_Alert       , ASN1_NO_EXTENSIONS     , dissect_tetra_U_ALERT },
4005   {   1, &hf_tetra_reserved1     , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4006   {   2, &hf_tetra_u_Connect     , ASN1_NO_EXTENSIONS     , dissect_tetra_U_CONNECT },
4007   {   3, &hf_tetra_reserved2     , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4008   {   4, &hf_tetra_u_Disconnect  , ASN1_NO_EXTENSIONS     , dissect_tetra_U_DISCONNECT },
4009   {   5, &hf_tetra_u_Info        , ASN1_NO_EXTENSIONS     , dissect_tetra_U_INFO },
4010   {   6, &hf_tetra_u_Release     , ASN1_NO_EXTENSIONS     , dissect_tetra_U_RELEASE },
4011   {   7, &hf_tetra_u_Setup       , ASN1_NO_EXTENSIONS     , dissect_tetra_U_SETUP },
4012   {   8, &hf_tetra_u_Status      , ASN1_NO_EXTENSIONS     , dissect_tetra_U_STATUS },
4013   {   9, &hf_tetra_u_Tx_Ceased   , ASN1_NO_EXTENSIONS     , dissect_tetra_U_TX_CEASED },
4014   {  10, &hf_tetra_u_Tx_Demand   , ASN1_NO_EXTENSIONS     , dissect_tetra_U_TX_DEMAND },
4015   {  11, &hf_tetra_reserved3     , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4016   {  12, &hf_tetra_reserved4     , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4017   {  13, &hf_tetra_reserved5     , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4018   {  14, &hf_tetra_u_Call_Restore, ASN1_NO_EXTENSIONS     , dissect_tetra_U_CALL_RESTORE },
4019   {  15, &hf_tetra_u_SDS_Data    , ASN1_NO_EXTENSIONS     , dissect_tetra_U_SDS_DATA },
4020   {  16, &hf_tetra_u_Facility    , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4021   { 0, NULL, 0, NULL }
4022 };
4023
4024 static int
4025 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_) {
4026   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
4027                                  ett_tetra_U_CMCE_PDU, U_CMCE_PDU_choice,
4028                                  NULL);
4029
4030   return offset;
4031 }
4032
4033
4034 static const value_string tetra_T_cell_number_vals[] = {
4035   {   0, "none" },
4036   {   1, "cell-number" },
4037   { 0, NULL }
4038 };
4039
4040 static const per_choice_t T_cell_number_choice[] = {
4041   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4042   {   1, &hf_tetra_cell_number_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_65535 },
4043   { 0, NULL, 0, NULL }
4044 };
4045
4046 static int
4047 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_) {
4048   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
4049                                  ett_tetra_T_cell_number, T_cell_number_choice,
4050                                  NULL);
4051
4052   return offset;
4053 }
4054
4055
4056 static const per_sequence_t T_type2_parameters_sequence[] = {
4057   { &hf_tetra_cell_number   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_cell_number },
4058   { &hf_tetra_sdu           , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BIT_STRING },
4059   { NULL, 0, 0, NULL }
4060 };
4061
4062 static int
4063 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_) {
4064   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4065                                    ett_tetra_T_type2_parameters, T_type2_parameters_sequence);
4066
4067   return offset;
4068 }
4069
4070
4071 static const value_string tetra_T_optional_elements_vals[] = {
4072   {   0, "no-type2" },
4073   {   1, "type2-parameters" },
4074   { 0, NULL }
4075 };
4076
4077 static const per_choice_t T_optional_elements_choice[] = {
4078   {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4079   {   1, &hf_tetra_type2_parameters, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_parameters },
4080   { 0, NULL, 0, NULL }
4081 };
4082
4083 static int
4084 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_) {
4085   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
4086                                  ett_tetra_T_optional_elements, T_optional_elements_choice,
4087                                  NULL);
4088
4089   return offset;
4090 }
4091
4092
4093 static const per_sequence_t U_PREPARE_sequence[] = {
4094   { &hf_tetra_pdu_type_02   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
4095   { &hf_tetra_optional_elements, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements },
4096   { NULL, 0, 0, NULL }
4097 };
4098
4099 static int
4100 dissect_tetra_U_PREPARE(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4101   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4102                                    ett_tetra_U_PREPARE, U_PREPARE_sequence);
4103
4104   return offset;
4105 }
4106
4107
4108 static const value_string tetra_T_mcc_vals[] = {
4109   {   0, "none" },
4110   {   1, "mcc" },
4111   { 0, NULL }
4112 };
4113
4114 static const per_choice_t T_mcc_choice[] = {
4115   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4116   {   1, &hf_tetra_mcc           , ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_1023 },
4117   { 0, NULL, 0, NULL }
4118 };
4119
4120 static int
4121 dissect_tetra_T_mcc(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4122   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
4123                                  ett_tetra_T_mcc, T_mcc_choice,
4124                                  NULL);
4125
4126   return offset;
4127 }
4128
4129
4130 static const value_string tetra_T_mnc_vals[] = {
4131   {   0, "none" },
4132   {   1, "mnc" },
4133   { 0, NULL }
4134 };
4135
4136 static const per_choice_t T_mnc_choice[] = {
4137   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4138   {   1, &hf_tetra_mnc           , ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_16383 },
4139   { 0, NULL, 0, NULL }
4140 };
4141
4142 static int
4143 dissect_tetra_T_mnc(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4144   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
4145                                  ett_tetra_T_mnc, T_mnc_choice,
4146                                  NULL);
4147
4148   return offset;
4149 }
4150
4151
4152 static const value_string tetra_T_la_vals[] = {
4153   {   0, "none" },
4154   {   1, "la" },
4155   { 0, NULL }
4156 };
4157
4158 static const per_choice_t T_la_choice[] = {
4159   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4160   {   1, &hf_tetra_la            , ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_16383 },
4161   { 0, NULL, 0, NULL }
4162 };
4163
4164 static int
4165 dissect_tetra_T_la(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4166   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
4167                                  ett_tetra_T_la, T_la_choice,
4168                                  NULL);
4169
4170   return offset;
4171 }
4172
4173
4174 static const per_sequence_t T_type2_parameters_01_sequence[] = {
4175   { &hf_tetra_mcc_01        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_mcc },
4176   { &hf_tetra_mnc_01        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_mnc },
4177   { &hf_tetra_la_01         , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_la },
4178   { &hf_tetra_sdu           , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BIT_STRING },
4179   { NULL, 0, 0, NULL }
4180 };
4181
4182 static int
4183 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_) {
4184   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4185                                    ett_tetra_T_type2_parameters_01, T_type2_parameters_01_sequence);
4186
4187   return offset;
4188 }
4189
4190
4191 static const value_string tetra_T_optional_elements_01_vals[] = {
4192   {   0, "no-type2" },
4193   {   1, "type2-parameters" },
4194   { 0, NULL }
4195 };
4196
4197 static const per_choice_t T_optional_elements_01_choice[] = {
4198   {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4199   {   1, &hf_tetra_type2_parameters_01, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_parameters_01 },
4200   { 0, NULL, 0, NULL }
4201 };
4202
4203 static int
4204 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_) {
4205   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
4206                                  ett_tetra_T_optional_elements_01, T_optional_elements_01_choice,
4207                                  NULL);
4208
4209   return offset;
4210 }
4211
4212
4213 static const per_sequence_t U_RESTORE_sequence[] = {
4214   { &hf_tetra_pdu_type_02   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
4215   { &hf_tetra_optional_elements_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_01 },
4216   { NULL, 0, 0, NULL }
4217 };
4218
4219 static int
4220 dissect_tetra_U_RESTORE(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4221   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4222                                    ett_tetra_U_RESTORE, U_RESTORE_sequence);
4223
4224   return offset;
4225 }
4226
4227
4228 static const value_string tetra_UMLE_PDU_vals[] = {
4229   {   0, "u-prepare" },
4230   {   1, "umle-reserved1" },
4231   {   2, "umle-reserved2" },
4232   {   3, "umle-reserved3" },
4233   {   4, "u-restore" },
4234   {   5, "umle-reserved4" },
4235   {   6, "umle-reserved5" },
4236   {   7, "umle-reserved6" },
4237   { 0, NULL }
4238 };
4239
4240 static const per_choice_t UMLE_PDU_choice[] = {
4241   {   0, &hf_tetra_u_prepare     , ASN1_NO_EXTENSIONS     , dissect_tetra_U_PREPARE },
4242   {   1, &hf_tetra_umle_reserved1, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4243   {   2, &hf_tetra_umle_reserved2, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4244   {   3, &hf_tetra_umle_reserved3, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4245   {   4, &hf_tetra_u_restore     , ASN1_NO_EXTENSIONS     , dissect_tetra_U_RESTORE },
4246   {   5, &hf_tetra_umle_reserved4, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4247   {   6, &hf_tetra_umle_reserved5, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4248   {   7, &hf_tetra_umle_reserved6, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4249   { 0, NULL, 0, NULL }
4250 };
4251
4252 static int
4253 dissect_tetra_UMLE_PDU(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4254   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
4255                                  ett_tetra_UMLE_PDU, UMLE_PDU_choice,
4256                                  NULL);
4257
4258   return offset;
4259 }
4260
4261
4262 static const value_string tetra_U_MLE_PDU_vals[] = {
4263   {   0, "u-mle-reserved1" },
4264   {   1, "mm" },
4265   {   2, "cmce" },
4266   {   3, "u-mle-reserved2" },
4267   {   4, "sndcp" },
4268   {   5, "mle" },
4269   {   6, "tetra-management-entity-protocol" },
4270   {   7, "u-mle-reserved3" },
4271   { 0, NULL }
4272 };
4273
4274 static const per_choice_t U_MLE_PDU_choice[] = {
4275   {   0, &hf_tetra_u_mle_reserved1, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4276   {   1, &hf_tetra_mm            , ASN1_NO_EXTENSIONS     , dissect_tetra_U_MM_PDU },
4277   {   2, &hf_tetra_cmce          , ASN1_NO_EXTENSIONS     , dissect_tetra_U_CMCE_PDU },
4278   {   3, &hf_tetra_u_mle_reserved2, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4279   {   4, &hf_tetra_sndcp         , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4280   {   5, &hf_tetra_mle           , ASN1_NO_EXTENSIONS     , dissect_tetra_UMLE_PDU },
4281   {   6, &hf_tetra_tetra_management_entity_protocol, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4282   {   7, &hf_tetra_u_mle_reserved3, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4283   { 0, NULL, 0, NULL }
4284 };
4285
4286 static int
4287 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_) {
4288   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
4289                                  ett_tetra_U_MLE_PDU, U_MLE_PDU_choice,
4290                                  NULL);
4291
4292   return offset;
4293 }
4294
4295
4296 static const per_sequence_t U_BL_ADATA_sequence[] = {
4297   { &hf_tetra_nr            , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4298   { &hf_tetra_ns            , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4299   { &hf_tetra_tl_sdu        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_U_MLE_PDU },
4300   { NULL, 0, 0, NULL }
4301 };
4302
4303 static int
4304 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_) {
4305   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4306                                    ett_tetra_U_BL_ADATA, U_BL_ADATA_sequence);
4307
4308   return offset;
4309 }
4310
4311
4312 static const per_sequence_t U_BL_DATA_sequence[] = {
4313   { &hf_tetra_ns            , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4314   { &hf_tetra_tl_sdu        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_U_MLE_PDU },
4315   { NULL, 0, 0, NULL }
4316 };
4317
4318 static int
4319 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_) {
4320   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4321                                    ett_tetra_U_BL_DATA, U_BL_DATA_sequence);
4322
4323   return offset;
4324 }
4325
4326
4327 static const per_sequence_t U_BL_ACK_sequence[] = {
4328   { &hf_tetra_nr            , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4329   { &hf_tetra_tl_sdu        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_U_MLE_PDU },
4330   { NULL, 0, 0, NULL }
4331 };
4332
4333 static int
4334 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_) {
4335   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4336                                    ett_tetra_U_BL_ACK, U_BL_ACK_sequence);
4337
4338   return offset;
4339 }
4340
4341
4342 static const per_sequence_t U_BL_ADATA_FCS_sequence[] = {
4343   { &hf_tetra_nr            , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4344   { &hf_tetra_ns            , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4345   { &hf_tetra_tl_sdu        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_U_MLE_PDU },
4346   { &hf_tetra_fcs           , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_OCTET_STRING_SIZE_4 },
4347   { NULL, 0, 0, NULL }
4348 };
4349
4350 static int
4351 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_) {
4352   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4353                                    ett_tetra_U_BL_ADATA_FCS, U_BL_ADATA_FCS_sequence);
4354
4355   return offset;
4356 }
4357
4358
4359 static const per_sequence_t U_BL_DATA_FCS_sequence[] = {
4360   { &hf_tetra_ns            , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4361   { &hf_tetra_tl_sdu        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_U_MLE_PDU },
4362   { &hf_tetra_fcs           , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_OCTET_STRING_SIZE_4 },
4363   { NULL, 0, 0, NULL }
4364 };
4365
4366 static int
4367 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_) {
4368   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4369                                    ett_tetra_U_BL_DATA_FCS, U_BL_DATA_FCS_sequence);
4370
4371   return offset;
4372 }
4373
4374
4375 static const per_sequence_t U_MLE_PDU_FCS_sequence[] = {
4376   { &hf_tetra_u_mle_pdu     , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_U_MLE_PDU },
4377   { &hf_tetra_fcs           , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_OCTET_STRING_SIZE_4 },
4378   { NULL, 0, 0, NULL }
4379 };
4380
4381 static int
4382 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_) {
4383   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4384                                    ett_tetra_U_MLE_PDU_FCS, U_MLE_PDU_FCS_sequence);
4385
4386   return offset;
4387 }
4388
4389
4390 static const per_sequence_t U_BL_ACK_FCS_sequence[] = {
4391   { &hf_tetra_nr            , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4392   { &hf_tetra_tl_sdu        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_U_MLE_PDU },
4393   { &hf_tetra_fcs           , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_OCTET_STRING_SIZE_4 },
4394   { NULL, 0, 0, NULL }
4395 };
4396
4397 static int
4398 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_) {
4399   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4400                                    ett_tetra_U_BL_ACK_FCS, U_BL_ACK_FCS_sequence);
4401
4402   return offset;
4403 }
4404
4405
4406 static const value_string tetra_U_LLC_PDU_vals[] = {
4407   {   0, "bl-adata" },
4408   {   1, "bl-data" },
4409   {   2, "bl-udata" },
4410   {   3, "bl-ack" },
4411   {   4, "bl-adata-fcs" },
4412   {   5, "bl-data-fcs" },
4413   {   6, "bl-udata-fcs" },
4414   {   7, "bl-ack-fcs" },
4415   {   8, "al-setup" },
4416   {   9, "al-data" },
4417   {  10, "al-udata" },
4418   {  11, "al-ack" },
4419   {  12, "al-reconnect" },
4420   {  13, "reserve1" },
4421   {  14, "reserve2" },
4422   {  15, "al-disc" },
4423   { 0, NULL }
4424 };
4425
4426 static const per_choice_t U_LLC_PDU_choice[] = {
4427   {   0, &hf_tetra_bl_adata      , ASN1_NO_EXTENSIONS     , dissect_tetra_U_BL_ADATA },
4428   {   1, &hf_tetra_bl_data       , ASN1_NO_EXTENSIONS     , dissect_tetra_U_BL_DATA },
4429   {   2, &hf_tetra_bl_udata      , ASN1_NO_EXTENSIONS     , dissect_tetra_U_MLE_PDU },
4430   {   3, &hf_tetra_bl_ack        , ASN1_NO_EXTENSIONS     , dissect_tetra_U_BL_ACK },
4431   {   4, &hf_tetra_bl_adata_fcs  , ASN1_NO_EXTENSIONS     , dissect_tetra_U_BL_ADATA_FCS },
4432   {   5, &hf_tetra_bl_data_fcs   , ASN1_NO_EXTENSIONS     , dissect_tetra_U_BL_DATA_FCS },
4433   {   6, &hf_tetra_bl_udata_fcs  , ASN1_NO_EXTENSIONS     , dissect_tetra_U_MLE_PDU_FCS },
4434   {   7, &hf_tetra_bl_ack_fcs    , ASN1_NO_EXTENSIONS     , dissect_tetra_U_BL_ACK_FCS },
4435   {   8, &hf_tetra_al_setup      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4436   {   9, &hf_tetra_al_data       , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4437   {  10, &hf_tetra_al_udata      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4438   {  11, &hf_tetra_al_ack        , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4439   {  12, &hf_tetra_al_reconnect  , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4440   {  13, &hf_tetra_reserve1      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4441   {  14, &hf_tetra_reserve2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4442   {  15, &hf_tetra_al_disc       , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4443   { 0, NULL, 0, NULL }
4444 };
4445
4446 static int
4447 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_) {
4448   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
4449                                  ett_tetra_U_LLC_PDU, U_LLC_PDU_choice,
4450                                  NULL);
4451
4452   return offset;
4453 }
4454
4455
4456 static const value_string tetra_LengthIndication_vals[] = {
4457   {   0, "null" },
4458   {   1, "reserved-1" },
4459   {   2, "reserved-2" },
4460   {   3, "bits-24" },
4461   {   4, "bits-32" },
4462   {   5, "bits-40" },
4463   {   6, "bits-48" },
4464   {   7, "bits-56" },
4465   {   8, "bits-64" },
4466   {   9, "bits-72" },
4467   {  10, "bits-80" },
4468   {  11, "bits-88" },
4469   {  12, "bits-96" },
4470   {  13, "reserved-13" },
4471   {  14, "reserved-14" },
4472   {  15, "reserved-15" },
4473   {  16, "reserved-16" },
4474   {  17, "reserved-17" },
4475   {  18, "reserved-18" },
4476   {  19, "reserved-19" },
4477   {  20, "reserved-20" },
4478   {  21, "reserved-21" },
4479   {  22, "reserved-22" },
4480   {  23, "reserved-23" },
4481   {  24, "reserved-24" },
4482   {  25, "reserved-25" },
4483   {  26, "reserved-26" },
4484   {  27, "reserved-27" },
4485   {  28, "reserved-28" },
4486   {  29, "reserved-29" },
4487   {  30, "reserved-30" },
4488   {  31, "reserved-31" },
4489   { 0, NULL }
4490 };
4491
4492
4493 static int
4494 dissect_tetra_LengthIndication(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4495   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
4496                                      32, NULL, FALSE, 0, NULL);
4497
4498   return offset;
4499 }
4500
4501
4502 static const value_string tetra_Frag1_vals[] = {
4503   {   0, "not-fragmented" },
4504   {   1, "start-of-fragmentation" },
4505   { 0, NULL }
4506 };
4507
4508
4509 static int
4510 dissect_tetra_Frag1(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4511   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
4512                                      2, NULL, FALSE, 0, NULL);
4513
4514   return offset;
4515 }
4516
4517
4518 static const value_string tetra_SLOT_APPLY_vals[] = {
4519   {   0, "subslot" },
4520   {   1, "slot-1" },
4521   {   2, "slot-2" },
4522   {   3, "slot-3" },
4523   {   4, "slot-4" },
4524   {   5, "slot-5" },
4525   {   6, "slot-6" },
4526   {   7, "slot-8" },
4527   {   8, "slot-10" },
4528   {   9, "slot-13" },
4529   {  10, "slot-17" },
4530   {  11, "slot-24" },
4531   {  12, "slot-34" },
4532   {  13, "slot-51" },
4533   {  14, "slot-68" },
4534   {  15, "more-than-68" },
4535   { 0, NULL }
4536 };
4537
4538
4539 static int
4540 dissect_tetra_SLOT_APPLY(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4541   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
4542                                      16, NULL, FALSE, 0, NULL);
4543
4544   return offset;
4545 }
4546
4547
4548 static const per_sequence_t FRAG_sequence[] = {
4549   { &hf_tetra_frag          , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Frag1 },
4550   { &hf_tetra_reservation_requirement, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_SLOT_APPLY },
4551   { NULL, 0, 0, NULL }
4552 };
4553
4554 static int
4555 dissect_tetra_FRAG(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4556   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4557                                    ett_tetra_FRAG, FRAG_sequence);
4558
4559   return offset;
4560 }
4561
4562
4563 static const value_string tetra_T_lengthIndicationOrCapacityRequest_vals[] = {
4564   {   0, "lengthIndication" },
4565   {   1, "capacityRequest" },
4566   { 0, NULL }
4567 };
4568
4569 static const per_choice_t T_lengthIndicationOrCapacityRequest_choice[] = {
4570   {   0, &hf_tetra_lengthIndication, ASN1_NO_EXTENSIONS     , dissect_tetra_LengthIndication },
4571   {   1, &hf_tetra_capacityRequest, ASN1_NO_EXTENSIONS     , dissect_tetra_FRAG },
4572   { 0, NULL, 0, NULL }
4573 };
4574
4575 static int
4576 dissect_tetra_T_lengthIndicationOrCapacityRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4577   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
4578                                  ett_tetra_T_lengthIndicationOrCapacityRequest, T_lengthIndicationOrCapacityRequest_choice,
4579                                  NULL);
4580
4581   return offset;
4582 }
4583
4584
4585 static const per_sequence_t ComplexSDU_sequence[] = {
4586   { &hf_tetra_lengthIndicationOrCapacityRequest, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_lengthIndicationOrCapacityRequest },
4587   { &hf_tetra_tm_sdu_01     , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_U_LLC_PDU },
4588   { NULL, 0, 0, NULL }
4589 };
4590
4591 static int
4592 dissect_tetra_ComplexSDU(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4593   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4594                                    ett_tetra_ComplexSDU, ComplexSDU_sequence);
4595
4596   return offset;
4597 }
4598
4599
4600 static const value_string tetra_T_data_vals[] = {
4601   {   0, "sdu1" },
4602   {   1, "sdu2" },
4603   { 0, NULL }
4604 };
4605
4606 static const per_choice_t T_data_choice[] = {
4607   {   0, &hf_tetra_sdu1          , ASN1_NO_EXTENSIONS     , dissect_tetra_U_LLC_PDU },
4608   {   1, &hf_tetra_sdu2          , ASN1_NO_EXTENSIONS     , dissect_tetra_ComplexSDU },
4609   { 0, NULL, 0, NULL }
4610 };
4611
4612 static int
4613 dissect_tetra_T_data(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4614   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
4615                                  ett_tetra_T_data, T_data_choice,
4616                                  NULL);
4617
4618   return offset;
4619 }
4620
4621
4622 static const per_sequence_t MAC_ACCESS_sequence[] = {
4623   { &hf_tetra_pdu_type_01   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4624   { &hf_tetra_fill_bit_indication, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Fill_Bit_Indication },
4625   { &hf_tetra_encrypted_flag, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Encrypted_Flag },
4626   { &hf_tetra_address       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Address },
4627   { &hf_tetra_data          , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_data },
4628   { NULL, 0, 0, NULL }
4629 };
4630
4631 static int
4632 dissect_tetra_MAC_ACCESS(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4633   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4634                                    ett_tetra_MAC_ACCESS, MAC_ACCESS_sequence);
4635
4636   return offset;
4637 }
4638
4639
4640
4641 static int
4642 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_) {
4643   offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
4644                                      264, 264, FALSE, NULL);
4645
4646   return offset;
4647 }
4648
4649
4650 static const per_sequence_t MAC_FRAG_sequence[] = {
4651   { &hf_tetra_pdu_type      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
4652   { &hf_tetra_sub_type      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4653   { &hf_tetra_fill_bit_indication, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Fill_Bit_Indication },
4654   { &hf_tetra_tm_sdu_02     , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BIT_STRING_SIZE_264 },
4655   { NULL, 0, 0, NULL }
4656 };
4657
4658 static int
4659 dissect_tetra_MAC_FRAG(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4660   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4661                                    ett_tetra_MAC_FRAG, MAC_FRAG_sequence);
4662
4663   return offset;
4664 }
4665
4666
4667
4668 static int
4669 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_) {
4670   offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
4671                                      120, 120, FALSE, NULL);
4672
4673   return offset;
4674 }
4675
4676
4677 static const per_sequence_t MAC_FRAG120_sequence[] = {
4678   { &hf_tetra_pdu_type      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
4679   { &hf_tetra_sub_type      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4680   { &hf_tetra_fill_bit_indication, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Fill_Bit_Indication },
4681   { &hf_tetra_tm_sdu_03     , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BIT_STRING_SIZE_120 },
4682   { NULL, 0, 0, NULL }
4683 };
4684
4685 static int
4686 dissect_tetra_MAC_FRAG120(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4687   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4688                                    ett_tetra_MAC_FRAG120, MAC_FRAG120_sequence);
4689
4690   return offset;
4691 }
4692
4693
4694 static const value_string tetra_LengthIndOrReservationReq_vals[] = {
4695   {   0, "reserved-0" },
4696   {   1, "reserved-1" },
4697   {   2, "bits-16" },
4698   {   3, "bits-24" },
4699   {   4, "bits-32" },
4700   {   5, "bits-40" },
4701   {   6, "bits-48" },
4702   {   7, "bits-56" },
4703   {   8, "bits-64" },
4704   {   9, "bits-72" },
4705   {  10, "bits-80" },
4706   {  11, "bits-88" },
4707   {  12, "bits-96" },
4708   {  13, "bits-104" },
4709   {  14, "bits-112" },
4710   {  15, "bits-120" },
4711   {  16, "bits-128" },
4712   {  17, "bits-136" },
4713   {  18, "bits-144" },
4714   {  19, "bits-152" },
4715   {  20, "bits-160" },
4716   {  21, "bits-168" },
4717   {  22, "bits-176" },
4718   {  23, "bits-184" },
4719   {  24, "bits-192" },
4720   {  25, "bits-200" },
4721   {  26, "bits-208" },
4722   {  27, "bits-216" },
4723   {  28, "bits-224" },
4724   {  29, "bits-232" },
4725   {  30, "bits-240" },
4726   {  31, "bits-248" },
4727   {  32, "bits-256" },
4728   {  33, "bits-264" },
4729   {  34, "bits-272" },
4730   {  35, "reserved-35" },
4731   {  36, "reserved-36" },
4732   {  37, "reserved-37" },
4733   {  38, "reserved-38" },
4734   {  39, "reserved-39" },
4735   {  40, "reserved-40" },
4736   {  41, "reserved-41" },
4737   {  42, "reserved-42" },
4738   {  43, "reserved-43" },
4739   {  44, "reserved-44" },
4740   {  45, "reserved-45" },
4741   {  46, "reserved-46" },
4742   {  47, "reserved-47" },
4743   {  48, "subslot" },
4744   {  49, "slot-1" },
4745   {  50, "slot-2" },
4746   {  51, "slot-3" },
4747   {  52, "slot-4" },
4748   {  53, "slot-5" },
4749   {  54, "slot-6" },
4750   {  55, "slot-8" },
4751   {  56, "slot-10" },
4752   {  57, "slot-13" },
4753   {  58, "slot-17" },
4754   {  59, "slot-24" },
4755   {  60, "slot-34" },
4756   {  61, "slot-51" },
4757   {  62, "slot-68" },
4758   {  63, "more-than-68" },
4759   { 0, NULL }
4760 };
4761
4762
4763 static int
4764 dissect_tetra_LengthIndOrReservationReq(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4765   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
4766                                      64, NULL, FALSE, 0, NULL);
4767
4768   return offset;
4769 }
4770
4771
4772
4773 static int
4774 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_) {
4775   offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
4776                                      258, 258, FALSE, NULL);
4777
4778   return offset;
4779 }
4780
4781
4782 static const per_sequence_t MAC_END_UPLINK_sequence[] = {
4783   { &hf_tetra_pdu_type      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
4784   { &hf_tetra_sub_type      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4785   { &hf_tetra_fill_bit_indication, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Fill_Bit_Indication },
4786   { &hf_tetra_lengthInd_ReservationReq, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_LengthIndOrReservationReq },
4787   { &hf_tetra_tm_sdu_04     , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BIT_STRING_SIZE_258 },
4788   { NULL, 0, 0, NULL }
4789 };
4790
4791 static int
4792 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_) {
4793   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4794                                    ett_tetra_MAC_END_UPLINK, MAC_END_UPLINK_sequence);
4795
4796   return offset;
4797 }
4798
4799
4800
4801 static int
4802 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_) {
4803   offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
4804                                      114, 114, FALSE, NULL);
4805
4806   return offset;
4807 }
4808
4809
4810 static const per_sequence_t MAC_END_UP114_sequence[] = {
4811   { &hf_tetra_pdu_type      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
4812   { &hf_tetra_pdu_subtype   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4813   { &hf_tetra_fill_bit_indication, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Fill_Bit_Indication },
4814   { &hf_tetra_lengthInd_ReservationReq, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_LengthIndOrReservationReq },
4815   { &hf_tetra_tm_sdu_05     , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BIT_STRING_SIZE_114 },
4816   { NULL, 0, 0, NULL }
4817 };
4818
4819 static int
4820 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_) {
4821   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4822                                    ett_tetra_MAC_END_UP114, MAC_END_UP114_sequence);
4823
4824   return offset;
4825 }
4826
4827
4828 static const value_string tetra_LengthIndMacHu_vals[] = {
4829   {   0, "reserved-0" },
4830   {   1, "bits-8" },
4831   {   2, "bits-16" },
4832   {   3, "bits-24" },
4833   {   4, "bits-32" },
4834   {   5, "bits-40" },
4835   {   6, "bits-48" },
4836   {   7, "bits-56" },
4837   {   8, "bits-64" },
4838   {   9, "bits-72" },
4839   {  10, "bits-80" },
4840   {  11, "bits-88" },
4841   {  12, "bits-96" },
4842   {  13, "reserved-13" },
4843   {  14, "reserved-14" },
4844   {  15, "reserved-15" },
4845   { 0, NULL }
4846 };
4847
4848
4849 static int
4850 dissect_tetra_LengthIndMacHu(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4851   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
4852                                      16, NULL, FALSE, 0, NULL);
4853
4854   return offset;
4855 }
4856
4857
4858 static const value_string tetra_T_lengthInd_ReservationReq_vals[] = {
4859   {   0, "lengthInd" },
4860   {   1, "reservation-requirement" },
4861   { 0, NULL }
4862 };
4863
4864 static const per_choice_t T_lengthInd_ReservationReq_choice[] = {
4865   {   0, &hf_tetra_lengthInd     , ASN1_NO_EXTENSIONS     , dissect_tetra_LengthIndMacHu },
4866   {   1, &hf_tetra_reservation_requirement, ASN1_NO_EXTENSIONS     , dissect_tetra_SLOT_APPLY },
4867   { 0, NULL, 0, NULL }
4868 };
4869
4870 static int
4871 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_) {
4872   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
4873                                  ett_tetra_T_lengthInd_ReservationReq, T_lengthInd_ReservationReq_choice,
4874                                  NULL);
4875
4876   return offset;
4877 }
4878
4879
4880
4881 static int
4882 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_) {
4883   offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
4884                                      85, 85, FALSE, NULL);
4885
4886   return offset;
4887 }
4888
4889
4890 static const per_sequence_t MAC_END_HU_sequence[] = {
4891   { &hf_tetra_pdu_type_01   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4892   { &hf_tetra_fill_bit_indication, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Fill_Bit_Indication },
4893   { &hf_tetra_lengthInd_ReservationReq_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_lengthInd_ReservationReq },
4894   { &hf_tetra_tm_sdu_06     , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BIT_STRING_SIZE_85 },
4895   { NULL, 0, 0, NULL }
4896 };
4897
4898 static int
4899 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_) {
4900   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4901                                    ett_tetra_MAC_END_HU, MAC_END_HU_sequence);
4902
4903   return offset;
4904 }
4905
4906
4907 static const value_string tetra_Position_Of_Grant_vals[] = {
4908   {   0, "on-current" },
4909   {   1, "on-allocated" },
4910   { 0, NULL }
4911 };
4912
4913
4914 static int
4915 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_) {
4916   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
4917                                      2, NULL, FALSE, 0, NULL);
4918
4919   return offset;
4920 }
4921
4922
4923 static const value_string tetra_LengthIndicationMacEndDl_vals[] = {
4924   {   0, "reserved-0" },
4925   {   1, "reserved-1" },
4926   {   2, "bits-16" },
4927   {   3, "bits-24" },
4928   {   4, "bits-32" },
4929   {   5, "bits-40" },
4930   {   6, "bits-48" },
4931   {   7, "bits-56" },
4932   {   8, "bits-64" },
4933   {   9, "bits-72" },
4934   {  10, "bits-80" },
4935   {  11, "bits-88" },
4936   {  12, "bits-96" },
4937   {  13, "bits-104" },
4938   {  14, "bits-112" },
4939   {  15, "bits-120" },
4940   {  16, "bits-128" },
4941   {  17, "bits-136" },
4942   {  18, "bits-144" },
4943   {  19, "bits-152" },
4944   {  20, "bits-160" },
4945   {  21, "bits-168" },
4946   {  22, "bits-176" },
4947   {  23, "bits-184" },
4948   {  24, "bits-192" },
4949   {  25, "bits-200" },
4950   {  26, "bits-208" },
4951   {  27, "bits-216" },
4952   {  28, "bits-224" },
4953   {  29, "bits-232" },
4954   {  30, "bits-240" },
4955   {  31, "bits-248" },
4956   {  32, "bits-256" },
4957   {  33, "bits-264" },
4958   {  34, "bits-272" },
4959   {  35, "reserved-35" },
4960   {  36, "reserved-36" },
4961   {  37, "reserved-37" },
4962   {  38, "reserved-38" },
4963   {  39, "reserved-39" },
4964   {  40, "reserved-40" },
4965   {  41, "reserved-41" },
4966   {  42, "reserved-42" },
4967   {  43, "reserved-43" },
4968   {  44, "reserved-44" },
4969   {  45, "reserved-45" },
4970   {  46, "reserved-46" },
4971   {  47, "reserved-47" },
4972   {  48, "reserved-48" },
4973   {  49, "reserved-49" },
4974   {  50, "reserved-50" },
4975   {  51, "reserved-51" },
4976   {  52, "reserved-52" },
4977   {  53, "reserved-53" },
4978   {  54, "reserved-54" },
4979   {  55, "reserved-55" },
4980   {  56, "reserved-56" },
4981   {  57, "reserved-57" },
4982   {  58, "reserved-58" },
4983   {  59, "reserved-59" },
4984   {  60, "reserved-60" },
4985   {  61, "reserved-61" },
4986   {  62, "reserved-62" },
4987   {  63, "reserved-63" },
4988   { 0, NULL }
4989 };
4990
4991
4992 static int
4993 dissect_tetra_LengthIndicationMacEndDl(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4994   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
4995                                      64, NULL, FALSE, 0, NULL);
4996
4997   return offset;
4998 }
4999
5000
5001 static const value_string tetra_Capacity_Allocation_vals[] = {
5002   {   0, "first-subslot" },
5003   {   1, "slot-allocated-1" },
5004   {   2, "slot-allocated-2" },
5005   {   3, "slot-allocated-3" },
5006   {   4, "slot-allocated-4" },
5007   {   5, "slot-allocated-5" },
5008   {   6, "slot-allocated-6" },
5009   {   7, "slot-allocated-8" },
5010   {   8, "slot-allocated-10" },
5011   {   9, "slot-allocated-13" },
5012   {  10, "slot-allocated-17" },
5013   {  11, "slot-allocated-24" },
5014   {  12, "slot-allocated-34" },
5015   {  13, "lot-allocated-51" },
5016   {  14, "slot-allocated-68" },
5017   {  15, "second-subslot" },
5018   { 0, NULL }
5019 };
5020
5021
5022 static int
5023 dissect_tetra_Capacity_Allocation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5024   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5025                                      16, NULL, FALSE, 0, NULL);
5026
5027   return offset;
5028 }
5029
5030
5031 static const value_string tetra_Granting_delay_vals[] = {
5032   {   0, "capacity-allocation-at-next-opportunity" },
5033   {   1, "number-of-opportunities-delay" },
5034   {   2, "number-of-opportunities-delay" },
5035   {   3, "number-of-opportunities-delay" },
5036   {   4, "number-of-opportunities-delay" },
5037   {   5, "number-of-opportunities-delay" },
5038   {   6, "number-of-opportunities-delay" },
5039   {   7, "number-of-opportunities-delay" },
5040   {   8, "number-of-opportunities-delay" },
5041   {   9, "number-of-opportunities-delay" },
5042   {  10, "number-of-opportunities-delay" },
5043   {  11, "number-of-opportunities-delay" },
5044   {  12, "number-of-opportunities-delay" },
5045   {  13, "number-of-opportunities-delay" },
5046   {  14, "allocation-starts-at-frame-18" },
5047   {  15, "wait" },
5048   { 0, NULL }
5049 };
5050
5051
5052 static int
5053 dissect_tetra_Granting_delay(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5054   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5055                                      16, NULL, FALSE, 0, NULL);
5056
5057   return offset;
5058 }
5059
5060
5061 static const per_sequence_t SlotGranting_sequence[] = {
5062   { &hf_tetra_capacity_allocation, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Capacity_Allocation },
5063   { &hf_tetra_granting_delay, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Granting_delay },
5064   { NULL, 0, 0, NULL }
5065 };
5066
5067 static int
5068 dissect_tetra_SlotGranting(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5069   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
5070                                    ett_tetra_SlotGranting, SlotGranting_sequence);
5071
5072   return offset;
5073 }
5074
5075
5076 static const value_string tetra_T_slot_granting_vals[] = {
5077   {   0, "none" },
5078   {   1, "slot-granting-param" },
5079   { 0, NULL }
5080 };
5081
5082 static const per_choice_t T_slot_granting_choice[] = {
5083   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
5084   {   1, &hf_tetra_slot_granting_param, ASN1_NO_EXTENSIONS     , dissect_tetra_SlotGranting },
5085   { 0, NULL, 0, NULL }
5086 };
5087
5088 static int
5089 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_) {
5090   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5091                                  ett_tetra_T_slot_granting, T_slot_granting_choice,
5092                                  NULL);
5093
5094   return offset;
5095 }
5096
5097
5098 static const value_string tetra_T_allocation_type_vals[] = {
5099   {   0, "replace" },
5100   {   1, "add" },
5101   {   2, "quit" },
5102   {   3, "reserved" },
5103   { 0, NULL }
5104 };
5105
5106
5107 static int
5108 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_) {
5109   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5110                                      4, NULL, FALSE, 0, NULL);
5111
5112   return offset;
5113 }
5114
5115
5116 static const value_string tetra_Timeslot_Assigned_vals[] = {
5117   {   0, "go-to-control-channel" },
5118   {   1, "timeslot-4" },
5119   {   2, "timeslot-bit-map" },
5120   {   3, "timeslot-bit-map" },
5121   {   4, "timeslot-bit-map" },
5122   {   5, "timeslot-bit-map" },
5123   {   6, "timeslot-bit-map" },
5124   {   7, "timeslot-bit-map" },
5125   {   8, "timeslot-bit-map" },
5126   {   9, "timeslot-bit-map" },
5127   {  10, "timeslot-bit-map" },
5128   {  11, "timeslot-bit-map" },
5129   {  12, "timeslot-bit-map" },
5130   {  13, "timeslot-bit-map" },
5131   {  14, "timeslot-bit-map" },
5132   {  15, "all-four-timeslots" },
5133   { 0, NULL }
5134 };
5135
5136
5137 static int
5138 dissect_tetra_Timeslot_Assigned(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5139   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5140                                      16, NULL, FALSE, 0, NULL);
5141
5142   return offset;
5143 }
5144
5145
5146 static const value_string tetra_T_up_down_assigned_vals[] = {
5147   {   0, "reserve" },
5148   {   1, "downlink-only" },
5149   {   2, "uplink-only" },
5150   {   3, "uplink-downlink" },
5151   { 0, NULL }
5152 };
5153
5154
5155 static int
5156 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_) {
5157   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5158                                      4, NULL, FALSE, 0, NULL);
5159
5160   return offset;
5161 }
5162
5163
5164 static const value_string tetra_CLCH_permission_vals[] = {
5165   {   0, "no-permission" },
5166   {   1, "permission" },
5167   { 0, NULL }
5168 };
5169
5170
5171 static int
5172 dissect_tetra_CLCH_permission(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5173   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5174                                      2, NULL, FALSE, 0, NULL);
5175
5176   return offset;
5177 }
5178
5179
5180 static const value_string tetra_Cell_change_flag_vals[] = {
5181   {   0, "no-change" },
5182   {   1, "change" },
5183   { 0, NULL }
5184 };
5185
5186
5187 static int
5188 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_) {
5189   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5190                                      2, NULL, FALSE, 0, NULL);
5191
5192   return offset;
5193 }
5194
5195
5196 static const value_string tetra_T_reverse_operation_vals[] = {
5197   {   0, "normal" },
5198   {   1, "reverse" },
5199   { 0, NULL }
5200 };
5201
5202
5203 static int
5204 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_) {
5205   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5206                                      2, NULL, FALSE, 0, NULL);
5207
5208   return offset;
5209 }
5210
5211
5212 static const per_sequence_t Extended_carrier_flag_sequence[] = {
5213   { &hf_tetra_frequency_band, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_15 },
5214   { &hf_tetra_offset_01     , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
5215   { &hf_tetra_duplex_spacing, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
5216   { &hf_tetra_reverse_operation_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_reverse_operation },
5217   { NULL, 0, 0, NULL }
5218 };
5219
5220 static int
5221 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_) {
5222   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
5223                                    ett_tetra_Extended_carrier_flag, Extended_carrier_flag_sequence);
5224
5225   return offset;
5226 }
5227
5228
5229 static const value_string tetra_T_extend_carrier_flag_vals[] = {
5230   {   0, "none" },
5231   {   1, "extended" },
5232   { 0, NULL }
5233 };
5234
5235 static const per_choice_t T_extend_carrier_flag_choice[] = {
5236   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
5237   {   1, &hf_tetra_extended      , ASN1_NO_EXTENSIONS     , dissect_tetra_Extended_carrier_flag },
5238   { 0, NULL, 0, NULL }
5239 };
5240
5241 static int
5242 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_) {
5243   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5244                                  ett_tetra_T_extend_carrier_flag, T_extend_carrier_flag_choice,
5245                                  NULL);
5246
5247   return offset;
5248 }
5249
5250
5251 static const value_string tetra_Monitoring_pattern_vals[] = {
5252   {   0, "no" },
5253   {   1, "one" },
5254   {   2, "two" },
5255   {   3, "three" },
5256   { 0, NULL }
5257 };
5258
5259
5260 static int
5261 dissect_tetra_Monitoring_pattern(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5262   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5263                                      4, NULL, FALSE, 0, NULL);
5264
5265   return offset;
5266 }
5267
5268
5269 static const value_string tetra_T_monitoring_pattern_vals[] = {
5270   {   0, "one" },
5271   {   1, "none1" },
5272   {   2, "none2" },
5273   {   3, "none3" },
5274   { 0, NULL }
5275 };
5276
5277 static const per_choice_t T_monitoring_pattern_choice[] = {
5278   {   0, &hf_tetra_one           , ASN1_NO_EXTENSIONS     , dissect_tetra_Monitoring_pattern },
5279   {   1, &hf_tetra_none1         , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
5280   {   2, &hf_tetra_none2         , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
5281   {   3, &hf_tetra_none3         , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
5282   { 0, NULL, 0, NULL }
5283 };
5284
5285 static int
5286 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_) {
5287   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5288                                  ett_tetra_T_monitoring_pattern, T_monitoring_pattern_choice,
5289                                  NULL);
5290
5291   return offset;
5292 }
5293
5294
5295 static const per_sequence_t ChannelAllocation_sequence[] = {
5296   { &hf_tetra_allocation_type, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_allocation_type },
5297   { &hf_tetra_timeslot_assigned, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Timeslot_Assigned },
5298   { &hf_tetra_up_down_assigned, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_up_down_assigned },
5299   { &hf_tetra_clch_permission, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_CLCH_permission },
5300   { &hf_tetra_cell_change   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Cell_change_flag },
5301   { &hf_tetra_carrier_number, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_4095 },
5302   { &hf_tetra_extend_carrier_flag, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_extend_carrier_flag },
5303   { &hf_tetra_monitoring_pattern, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_monitoring_pattern },
5304   { NULL, 0, 0, NULL }
5305 };
5306
5307 static int
5308 dissect_tetra_ChannelAllocation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5309   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
5310                                    ett_tetra_ChannelAllocation, ChannelAllocation_sequence);
5311
5312   return offset;
5313 }
5314
5315
5316 static const value_string tetra_T_channel_allocation_vals[] = {
5317   {   0, "none" },
5318   {   1, "channel-allocation-element" },
5319   { 0, NULL }
5320 };
5321
5322 static const per_choice_t T_channel_allocation_choice[] = {
5323   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
5324   {   1, &hf_tetra_channel_allocation_element, ASN1_NO_EXTENSIONS     , dissect_tetra_ChannelAllocation },
5325   { 0, NULL, 0, NULL }
5326 };
5327
5328 static int
5329 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_) {
5330   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5331                                  ett_tetra_T_channel_allocation, T_channel_allocation_choice,
5332                                  NULL);
5333
5334   return offset;
5335 }
5336
5337
5338
5339 static int
5340 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_) {
5341   offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
5342                                      255, 255, FALSE, NULL);
5343
5344   return offset;
5345 }
5346
5347
5348 static const per_sequence_t MAC_END_DOWNLINK_sequence[] = {
5349   { &hf_tetra_pdu_type      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
5350   { &hf_tetra_sub_type      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
5351   { &hf_tetra_fill_bit_indication, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Fill_Bit_Indication },
5352   { &hf_tetra_position_of_grant, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Position_Of_Grant },
5353   { &hf_tetra_lengthIndication_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_LengthIndicationMacEndDl },
5354   { &hf_tetra_slot_granting , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_slot_granting },
5355   { &hf_tetra_channel_allocation, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_channel_allocation },
5356   { &hf_tetra_tm_sdu_07     , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BIT_STRING_SIZE_255 },
5357   { NULL, 0, 0, NULL }
5358 };
5359
5360 static int
5361 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_) {
5362   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
5363                                    ett_tetra_MAC_END_DOWNLINK, MAC_END_DOWNLINK_sequence);
5364
5365   return offset;
5366 }
5367
5368
5369 static const value_string tetra_T_slot_granting_01_vals[] = {
5370   {   0, "none" },
5371   {   1, "slot-granting-param" },
5372   { 0, NULL }
5373 };
5374
5375 static const per_choice_t T_slot_granting_01_choice[] = {
5376   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
5377   {   1, &hf_tetra_slot_granting_param, ASN1_NO_EXTENSIONS     , dissect_tetra_SlotGranting },
5378   { 0, NULL, 0, NULL }
5379 };
5380
5381 static int
5382 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_) {
5383   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5384                                  ett_tetra_T_slot_granting_01, T_slot_granting_01_choice,
5385                                  NULL);
5386
5387   return offset;
5388 }
5389
5390
5391 static const value_string tetra_T_channel_allocation_01_vals[] = {
5392   {   0, "none" },
5393   {   1, "channel-allocation-element" },
5394   { 0, NULL }
5395 };
5396
5397 static const per_choice_t T_channel_allocation_01_choice[] = {
5398   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
5399   {   1, &hf_tetra_channel_allocation_element, ASN1_NO_EXTENSIONS     , dissect_tetra_ChannelAllocation },
5400   { 0, NULL, 0, NULL }
5401 };
5402
5403 static int
5404 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_) {
5405   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5406                                  ett_tetra_T_channel_allocation_01, T_channel_allocation_01_choice,
5407                                  NULL);
5408
5409   return offset;
5410 }
5411
5412
5413
5414 static int
5415 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_) {
5416   offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
5417                                      111, 111, FALSE, NULL);
5418
5419   return offset;
5420 }
5421
5422
5423 static const per_sequence_t MAC_END_DOWN111_sequence[] = {
5424   { &hf_tetra_pdu_type_02   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
5425   { &hf_tetra_fill_bit_ind  , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
5426   { &hf_tetra_position_of_grant_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
5427   { &hf_tetra_lengthIndication_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_LengthIndicationMacEndDl },
5428   { &hf_tetra_slot_granting_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_slot_granting_01 },
5429   { &hf_tetra_channel_allocation_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_channel_allocation_01 },
5430   { &hf_tetra_tm_sdu_08     , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BIT_STRING_SIZE_111 },
5431   { NULL, 0, 0, NULL }
5432 };
5433
5434 static int
5435 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_) {
5436   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
5437                                    ett_tetra_MAC_END_DOWN111, MAC_END_DOWN111_sequence);
5438
5439   return offset;
5440 }
5441
5442
5443 static const value_string tetra_T_access_ack_vals[] = {
5444   {   0, "undefined" },
5445   {   1, "random-access-acknowledged" },
5446   { 0, NULL }
5447 };
5448
5449
5450 static int
5451 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_) {
5452   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5453                                      2, NULL, FALSE, 0, NULL);
5454
5455   return offset;
5456 }
5457
5458
5459 static const value_string tetra_LengthIndicationMacResource_vals[] = {
5460   {   0, "reserved-0" },
5461   {   1, "reserved-1" },
5462   {   2, "null-pdu" },
5463   {   3, "reserved" },
5464   {   4, "bits-32" },
5465   {   5, "bits-40" },
5466   {   6, "bits-48" },
5467   {   7, "bits-56" },
5468   {   8, "bits-64" },
5469   {   9, "bits-72" },
5470   {  10, "bits-80" },
5471   {  11, "bits-88" },
5472   {  12, "bits-96" },
5473   {  13, "bits-104" },
5474   {  14, "bits-112" },
5475   {  15, "bits-120" },
5476   {  16, "bits-128" },
5477   {  17, "bits-136" },
5478   {  18, "bits-144" },
5479   {  19, "bits-152" },
5480   {  20, "bits-160" },
5481   {  21, "bits-168" },
5482   {  22, "bits-176" },
5483   {  23, "bits-184" },
5484   {  24, "bits-192" },
5485   {  25, "bits-200" },
5486   {  26, "bits-208" },
5487   {  27, "bits-216" },
5488   {  28, "bits-224" },
5489   {  29, "bits-232" },
5490   {  30, "bits-240" },
5491   {  31, "bits-248" },
5492   {  32, "bits-256" },
5493   {  33, "bits-264" },
5494   {  34, "bits-272" },
5495   {  35, "reserved-35" },
5496   {  36, "reserved-36" },
5497   {  37, "reserved-37" },
5498   {  38, "reserved-38" },
5499   {  39, "reserved-39" },
5500   {  40, "reserved-40" },
5501   {  41, "reserved-41" },
5502   {  42, "reserved-42" },
5503   {  43, "reserved-43" },
5504   {  44, "reserved-44" },
5505   {  45, "reserved-45" },
5506   {  46, "reserved-46" },
5507   {  47, "reserved-47" },
5508   {  48, "reserved-48" },
5509   {  49, "reserved-49" },
5510   {  50, "reserved-50" },
5511   {  51, "reserved-51" },
5512   {  52, "reserved-52" },
5513   {  53, "reserved-53" },
5514   {  54, "reserved-54" },
5515   {  55, "reserved-55" },
5516   {  56, "reserved-56" },
5517   {  57, "reserved-57" },
5518   {  58, "reserved-58" },
5519   {  59, "reserved-59" },
5520   {  60, "reserved-60" },
5521   {  61, "reserved-61" },
5522   {  62, "second-halfslot-stolen" },
5523   {  63, "start-frag" },
5524   { 0, NULL }
5525 };
5526
5527
5528 static int
5529 dissect_tetra_LengthIndicationMacResource(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5530   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5531                                      64, NULL, FALSE, 0, NULL);
5532
5533   return offset;
5534 }
5535
5536
5537 static const value_string tetra_PowerControl_vals[] = {
5538   {   0, "no-change" },
5539   {   1, "increase-1" },
5540   {   2, "increase-2" },
5541   {   3, "increase-3" },
5542   {   4, "increase-4" },
5543   {   5, "increase-5" },
5544   {   6, "increase-6" },
5545   {   7, "maximum-xceeded" },
5546   {   8, "revert-open-loop-control" },
5547   {   9, "decrease-1" },
5548   {  10, "decrease-2" },
5549   {  11, "decrease-3" },
5550   {  12, "decrease-4" },
5551   {  13, "decrease-5" },
5552   {  14, "decrease-6" },
5553   {  15, "radio-uplink-failure" },
5554   { 0, NULL }
5555 };
5556
5557
5558 static int
5559 dissect_tetra_PowerControl(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5560   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5561                                      16, NULL, FALSE, 0, NULL);
5562
5563   return offset;
5564 }
5565
5566
5567 static const value_string tetra_T_power_control_vals[] = {
5568   {   0, "none" },
5569   {   1, "powerParameters" },
5570   { 0, NULL }
5571 };
5572
5573 static const per_choice_t T_power_control_choice[] = {
5574   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
5575   {   1, &hf_tetra_powerParameters, ASN1_NO_EXTENSIONS     , dissect_tetra_PowerControl },
5576   { 0, NULL, 0, NULL }
5577 };
5578
5579 static int
5580 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_) {
5581   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5582                                  ett_tetra_T_power_control, T_power_control_choice,
5583                                  NULL);
5584
5585   return offset;
5586 }
5587
5588
5589 static const value_string tetra_T_slot_granting_02_vals[] = {
5590   {   0, "none" },
5591   {   1, "slot-granting-param" },
5592   { 0, NULL }
5593 };
5594
5595 static const per_choice_t T_slot_granting_02_choice[] = {
5596   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
5597   {   1, &hf_tetra_slot_granting_param, ASN1_NO_EXTENSIONS     , dissect_tetra_SlotGranting },
5598   { 0, NULL, 0, NULL }
5599 };
5600
5601 static int
5602 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_) {
5603   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5604                                  ett_tetra_T_slot_granting_02, T_slot_granting_02_choice,
5605                                  NULL);
5606
5607   return offset;
5608 }
5609
5610
5611 static const value_string tetra_T_channel_allocation_02_vals[] = {
5612   {   0, "none" },
5613   {   1, "channel-allocation-element" },
5614   { 0, NULL }
5615 };
5616
5617 static const per_choice_t T_channel_allocation_02_choice[] = {
5618   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
5619   {   1, &hf_tetra_channel_allocation_element, ASN1_NO_EXTENSIONS     , dissect_tetra_ChannelAllocation },
5620   { 0, NULL, 0, NULL }
5621 };
5622
5623 static int
5624 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_) {
5625   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5626                                  ett_tetra_T_channel_allocation_02, T_channel_allocation_02_choice,
5627                                  NULL);
5628
5629   return offset;
5630 }
5631
5632
5633 static const value_string tetra_T_ssi_vals[] = {
5634   {   0, "none" },
5635   {   1, "ssi" },
5636   { 0, NULL }
5637 };
5638
5639 static const per_choice_t T_ssi_choice[] = {
5640   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
5641   {   1, &hf_tetra_ssi_03        , ASN1_NO_EXTENSIONS     , dissect_tetra_OCTET_STRING_SIZE_3 },
5642   { 0, NULL, 0, NULL }
5643 };
5644
5645 static int
5646 dissect_tetra_T_ssi(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5647   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5648                                  ett_tetra_T_ssi, T_ssi_choice,
5649                                  NULL);
5650
5651   return offset;
5652 }
5653
5654
5655 static const value_string tetra_T_address_extension_vals[] = {
5656   {   0, "none" },
5657   {   1, "address-extension" },
5658   { 0, NULL }
5659 };
5660
5661 static const per_choice_t T_address_extension_choice[] = {
5662   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
5663   {   1, &hf_tetra_address_extension_01, ASN1_NO_EXTENSIONS     , dissect_tetra_OCTET_STRING_SIZE_3 },
5664   { 0, NULL, 0, NULL }
5665 };
5666
5667 static int
5668 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_) {
5669   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5670                                  ett_tetra_T_address_extension, T_address_extension_choice,
5671                                  NULL);
5672
5673   return offset;
5674 }
5675
5676
5677
5678 static int
5679 dissect_tetra_INTEGER_0_32767(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5680   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
5681                                                             0U, 32767U, NULL, FALSE);
5682
5683   return offset;
5684 }
5685
5686
5687 static const value_string tetra_T_suscriber_class_vals[] = {
5688   {   0, "none" },
5689   {   1, "suscriber-class" },
5690   { 0, NULL }
5691 };
5692
5693 static const per_choice_t T_suscriber_class_choice[] = {
5694   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
5695   {   1, &hf_tetra_suscriber_class_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_32767 },
5696   { 0, NULL, 0, NULL }
5697 };
5698
5699 static int
5700 dissect_tetra_T_suscriber_class(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5701   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5702                                  ett_tetra_T_suscriber_class, T_suscriber_class_choice,
5703                                  NULL);
5704
5705   return offset;
5706 }
5707
5708
5709 static const value_string tetra_T_energy_saving_mode_vals[] = {
5710   {   0, "none" },
5711   {   1, "energy-saving-mode" },
5712   { 0, NULL }
5713 };
5714
5715 static const per_choice_t T_energy_saving_mode_choice[] = {
5716   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
5717   {   1, &hf_tetra_energy_saving_mode_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_7 },
5718   { 0, NULL, 0, NULL }
5719 };
5720
5721 static int
5722 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_) {
5723   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5724                                  ett_tetra_T_energy_saving_mode, T_energy_saving_mode_choice,
5725                                  NULL);
5726
5727   return offset;
5728 }
5729
5730
5731 static const value_string tetra_T_scch_info_vals[] = {
5732   {   0, "none" },
5733   {   1, "scch-info" },
5734   { 0, NULL }
5735 };
5736
5737 static const per_choice_t T_scch_info_choice[] = {
5738   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
5739   {   1, &hf_tetra_scch_info_01  , ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_16383 },
5740   { 0, NULL, 0, NULL }
5741 };
5742
5743 static int
5744 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_) {
5745   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5746                                  ett_tetra_T_scch_info, T_scch_info_choice,
5747                                  NULL);
5748
5749   return offset;
5750 }
5751
5752
5753 static const value_string tetra_T_new_ra_vals[] = {
5754   {   0, "none" },
5755   {   1, "new-ra" },
5756   { 0, NULL }
5757 };
5758
5759 static const per_choice_t T_new_ra_choice[] = {
5760   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
5761   {   1, &hf_tetra_new_ra_01     , ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_3 },
5762   { 0, NULL, 0, NULL }
5763 };
5764
5765 static int
5766 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_) {
5767   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5768                                  ett_tetra_T_new_ra, T_new_ra_choice,
5769                                  NULL);
5770
5771   return offset;
5772 }
5773
5774
5775 static const value_string tetra_T_group_identity_location_accept_vals[] = {
5776   {   0, "none" },
5777   {   1, "group-identity-location-accept" },
5778   { 0, NULL }
5779 };
5780
5781 static const per_choice_t T_group_identity_location_accept_choice[] = {
5782   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
5783   {   1, &hf_tetra_group_identity_location_accept_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_3 },
5784   { 0, NULL, 0, NULL }
5785 };
5786
5787 static int
5788 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_) {
5789   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5790                                  ett_tetra_T_group_identity_location_accept, T_group_identity_location_accept_choice,
5791                                  NULL);
5792
5793   return offset;
5794 }
5795
5796
5797 static const value_string tetra_T_group_predefined_lifetime_vals[] = {
5798   {   0, "none" },
5799   {   1, "group-predefined-lifetime" },
5800   { 0, NULL }
5801 };
5802
5803 static const per_choice_t T_group_predefined_lifetime_choice[] = {
5804   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
5805   {   1, &hf_tetra_group_predefined_lifetime_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_3 },
5806   { 0, NULL, 0, NULL }
5807 };
5808
5809 static int
5810 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_) {
5811   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5812                                  ett_tetra_T_group_predefined_lifetime, T_group_predefined_lifetime_choice,
5813                                  NULL);
5814
5815   return offset;
5816 }
5817
5818
5819 static const value_string tetra_T_group_identity_downlink_vals[] = {
5820   {   0, "none" },
5821   {   1, "group-identity-downlink" },
5822   { 0, NULL }
5823 };
5824
5825 static const per_choice_t T_group_identity_downlink_choice[] = {
5826   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
5827   {   1, &hf_tetra_group_identity_downlink_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_15 },
5828   { 0, NULL, 0, NULL }
5829 };
5830
5831 static int
5832 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_) {
5833   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5834                                  ett_tetra_T_group_identity_downlink, T_group_identity_downlink_choice,
5835                                  NULL);
5836
5837   return offset;
5838 }
5839
5840
5841 static const value_string tetra_T_proprietary_vals[] = {
5842   {   0, "none" },
5843   {   1, "proprietary" },
5844   { 0, NULL }
5845 };
5846
5847 static const per_choice_t T_proprietary_choice[] = {
5848   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
5849   {   1, &hf_tetra_proprietary_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_7 },
5850   { 0, NULL, 0, NULL }
5851 };
5852
5853 static int
5854 dissect_tetra_T_proprietary(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5855   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5856                                  ett_tetra_T_proprietary, T_proprietary_choice,
5857                                  NULL);
5858
5859   return offset;
5860 }
5861
5862
5863 static const per_sequence_t T_type3_elements_sequence[] = {
5864   { &hf_tetra_type2_existance, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
5865   { &hf_tetra_type3_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_TYPE3_IDENTIFIER },
5866   { &hf_tetra_new_ra        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_new_ra },
5867   { &hf_tetra_group_identity_location_accept, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_group_identity_location_accept },
5868   { &hf_tetra_group_predefined_lifetime, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_group_predefined_lifetime },
5869   { &hf_tetra_group_identity_downlink, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_group_identity_downlink },
5870   { &hf_tetra_proprietary   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_proprietary },
5871   { NULL, 0, 0, NULL }
5872 };
5873
5874 static int
5875 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_) {
5876   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
5877                                    ett_tetra_T_type3_elements, T_type3_elements_sequence);
5878
5879   return offset;
5880 }
5881
5882
5883 static const value_string tetra_T_type3_vals[] = {
5884   {   0, "no-type3" },
5885   {   1, "type3-elements" },
5886   { 0, NULL }
5887 };
5888
5889 static const per_choice_t T_type3_choice[] = {
5890   {   0, &hf_tetra_no_type3      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
5891   {   1, &hf_tetra_type3_elements, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type3_elements },
5892   { 0, NULL, 0, NULL }
5893 };
5894
5895 static int
5896 dissect_tetra_T_type3(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5897   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5898                                  ett_tetra_T_type3, T_type3_choice,
5899                                  NULL);
5900
5901   return offset;
5902 }
5903
5904
5905 static const per_sequence_t T_type2_parameters_03_sequence[] = {
5906   { &hf_tetra_ssi_02        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_ssi },
5907   { &hf_tetra_address_extension, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_address_extension },
5908   { &hf_tetra_suscriber_class, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_suscriber_class },
5909   { &hf_tetra_energy_saving_mode, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_energy_saving_mode },
5910   { &hf_tetra_scch_info     , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_scch_info },
5911   { &hf_tetra_type3         , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_type3 },
5912   { NULL, 0, 0, NULL }
5913 };
5914
5915 static int
5916 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_) {
5917   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
5918                                    ett_tetra_T_type2_parameters_03, T_type2_parameters_03_sequence);
5919
5920   return offset;
5921 }
5922
5923
5924 static const value_string tetra_T_optional_elements_05_vals[] = {
5925   {   0, "no-type2" },
5926   {   1, "type2-parameters" },
5927   { 0, NULL }
5928 };
5929
5930 static const per_choice_t T_optional_elements_05_choice[] = {
5931   {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
5932   {   1, &hf_tetra_type2_parameters_03, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_parameters_03 },
5933   { 0, NULL, 0, NULL }
5934 };
5935
5936 static int
5937 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_) {
5938   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5939                                  ett_tetra_T_optional_elements_05, T_optional_elements_05_choice,
5940                                  NULL);
5941
5942   return offset;
5943 }
5944
5945
5946 static const per_sequence_t D_LOCATION_UPDATE_ACCEPT_sequence[] = {
5947   { &hf_tetra_location_update_type, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_UPDATE_TYPE },
5948   { &hf_tetra_optional_elements_05, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_05 },
5949   { NULL, 0, 0, NULL }
5950 };
5951
5952 static int
5953 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_) {
5954 #line 108 "../../asn1/tetra/tetra.cnf"
5955   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
5956                                    ett_tetra_D_LOCATION_UPDATE_ACCEPT, D_LOCATION_UPDATE_ACCEPT_sequence);
5957
5958         col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-LOCATION-UPDATE-ACCEPT");
5959
5960
5961   return offset;
5962 }
5963
5964
5965 static const per_sequence_t D_LOCATION_UPDATE_REJECT_sequence[] = {
5966   { &hf_tetra_location_update_type, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_UPDATE_TYPE },
5967   { &hf_tetra_reject_cause  , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_31 },
5968   { &hf_tetra_cipher_control, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
5969   { NULL, 0, 0, NULL }
5970 };
5971
5972 static int
5973 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_) {
5974 #line 253 "../../asn1/tetra/tetra.cnf"
5975   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
5976                                    ett_tetra_D_LOCATION_UPDATE_REJECT, D_LOCATION_UPDATE_REJECT_sequence);
5977
5978                 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-LOCATION-UPDATE-REJECT");
5979
5980
5981   return offset;
5982 }
5983
5984
5985 static const per_sequence_t T_attach_sequence[] = {
5986   { &hf_tetra_lifetime      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
5987   { &hf_tetra_class_of_usage, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
5988   { NULL, 0, 0, NULL }
5989 };
5990
5991 static int
5992 dissect_tetra_T_attach(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5993   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
5994                                    ett_tetra_T_attach, T_attach_sequence);
5995
5996   return offset;
5997 }
5998
5999
6000 static const value_string tetra_T_detach_downlike_vals[] = {
6001   {   0, "unknow-gssi" },
6002   {   1, "temporary-detachment1" },
6003   {   2, "temporary-detachment2" },
6004   {   3, "permanent-detachment" },
6005   { 0, NULL }
6006 };
6007
6008
6009 static int
6010 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_) {
6011   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
6012                                      4, NULL, FALSE, 0, NULL);
6013
6014   return offset;
6015 }
6016
6017
6018 static const per_sequence_t T_detach_sequence[] = {
6019   { &hf_tetra_detach_downlike, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_detach_downlike },
6020   { NULL, 0, 0, NULL }
6021 };
6022
6023 static int
6024 dissect_tetra_T_detach(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6025   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6026                                    ett_tetra_T_detach, T_detach_sequence);
6027
6028   return offset;
6029 }
6030
6031
6032 static const value_string tetra_T_attach_detach_identifiet_vals[] = {
6033   {   0, "attach" },
6034   {   1, "detach" },
6035   { 0, NULL }
6036 };
6037
6038 static const per_choice_t T_attach_detach_identifiet_choice[] = {
6039   {   0, &hf_tetra_attach        , ASN1_NO_EXTENSIONS     , dissect_tetra_T_attach },
6040   {   1, &hf_tetra_detach        , ASN1_NO_EXTENSIONS     , dissect_tetra_T_detach },
6041   { 0, NULL, 0, NULL }
6042 };
6043
6044 static int
6045 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_) {
6046   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6047                                  ett_tetra_T_attach_detach_identifiet, T_attach_detach_identifiet_choice,
6048                                  NULL);
6049
6050   return offset;
6051 }
6052
6053
6054 static const per_sequence_t T_gssi_extension_sequence[] = {
6055   { &hf_tetra_gssi_01       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_OCTET_STRING_SIZE_3 },
6056   { &hf_tetra_extension     , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_OCTET_STRING_SIZE_3 },
6057   { NULL, 0, 0, NULL }
6058 };
6059
6060 static int
6061 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_) {
6062   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6063                                    ett_tetra_T_gssi_extension, T_gssi_extension_sequence);
6064
6065   return offset;
6066 }
6067
6068
6069 static const value_string tetra_T_address_type_vals[] = {
6070   {   0, "gssi" },
6071   {   1, "gssi-extension" },
6072   {   2, "vgssi" },
6073   { 0, NULL }
6074 };
6075
6076 static const per_choice_t T_address_type_choice[] = {
6077   {   0, &hf_tetra_gssi_01       , ASN1_NO_EXTENSIONS     , dissect_tetra_OCTET_STRING_SIZE_3 },
6078   {   1, &hf_tetra_gssi_extension, ASN1_NO_EXTENSIONS     , dissect_tetra_T_gssi_extension },
6079   {   2, &hf_tetra_vgssi         , ASN1_NO_EXTENSIONS     , dissect_tetra_OCTET_STRING_SIZE_3 },
6080   { 0, NULL, 0, NULL }
6081 };
6082
6083 static int
6084 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_) {
6085   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6086                                  ett_tetra_T_address_type, T_address_type_choice,
6087                                  NULL);
6088
6089   return offset;
6090 }
6091
6092
6093 static const per_sequence_t GROUP_IDENTITY_DOWNLINK_sequence[] = {
6094   { &hf_tetra_attach_detach_identifiet, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_attach_detach_identifiet },
6095   { &hf_tetra_address_type  , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_address_type },
6096   { NULL, 0, 0, NULL }
6097 };
6098
6099 static int
6100 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_) {
6101   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6102                                    ett_tetra_GROUP_IDENTITY_DOWNLINK, GROUP_IDENTITY_DOWNLINK_sequence);
6103
6104   return offset;
6105 }
6106
6107
6108 static const per_sequence_t T_type3_elements_04_sequence[] = {
6109   { &hf_tetra_type3_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_TYPE3_IDENTIFIER },
6110   { &hf_tetra_length        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_2047 },
6111   { &hf_tetra_repeat_num    , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_63 },
6112   { &hf_tetra_group_identity_downlink_02, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_GROUP_IDENTITY_DOWNLINK },
6113   { NULL, 0, 0, NULL }
6114 };
6115
6116 static int
6117 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_) {
6118   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6119                                    ett_tetra_T_type3_elements_04, T_type3_elements_04_sequence);
6120
6121   return offset;
6122 }
6123
6124
6125 static const value_string tetra_T_type3_04_vals[] = {
6126   {   0, "no-type3" },
6127   {   1, "type3-elements" },
6128   { 0, NULL }
6129 };
6130
6131 static const per_choice_t T_type3_04_choice[] = {
6132   {   0, &hf_tetra_no_type3      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6133   {   1, &hf_tetra_type3_elements_04, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type3_elements_04 },
6134   { 0, NULL, 0, NULL }
6135 };
6136
6137 static int
6138 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_) {
6139   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6140                                  ett_tetra_T_type3_04, T_type3_04_choice,
6141                                  NULL);
6142
6143   return offset;
6144 }
6145
6146
6147 static const per_sequence_t T_type2_element_02_sequence[] = {
6148   { &hf_tetra_type3_04      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_type3_04 },
6149   { NULL, 0, 0, NULL }
6150 };
6151
6152 static int
6153 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_) {
6154   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6155                                    ett_tetra_T_type2_element_02, T_type2_element_02_sequence);
6156
6157   return offset;
6158 }
6159
6160
6161 static const value_string tetra_T_optional_elements_24_vals[] = {
6162   {   0, "no-type2" },
6163   {   1, "type2-element" },
6164   { 0, NULL }
6165 };
6166
6167 static const per_choice_t T_optional_elements_24_choice[] = {
6168   {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6169   {   1, &hf_tetra_type2_element_02, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_element_02 },
6170   { 0, NULL, 0, NULL }
6171 };
6172
6173 static int
6174 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_) {
6175   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6176                                  ett_tetra_T_optional_elements_24, T_optional_elements_24_choice,
6177                                  NULL);
6178
6179   return offset;
6180 }
6181
6182
6183 static const per_sequence_t D_ATTACH_DETACH_GROUP_IDENTITY_sequence[] = {
6184   { &hf_tetra_group_identity_report, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
6185   { &hf_tetra_group_identity_ack_request, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
6186   { &hf_tetra_group_identity_attach_detach_mode, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
6187   { &hf_tetra_optional_elements_24, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_24 },
6188   { NULL, 0, 0, NULL }
6189 };
6190
6191 static int
6192 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_) {
6193 #line 258 "../../asn1/tetra/tetra.cnf"
6194   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6195                                    ett_tetra_D_ATTACH_DETACH_GROUP_IDENTITY, D_ATTACH_DETACH_GROUP_IDENTITY_sequence);
6196
6197         col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-ATTACH-DETACH-GROUP-IDENTITY");
6198
6199
6200   return offset;
6201 }
6202
6203
6204 static const per_sequence_t T_type3_elements_05_sequence[] = {
6205   { &hf_tetra_type3_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_TYPE3_IDENTIFIER },
6206   { &hf_tetra_length        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_2047 },
6207   { &hf_tetra_repeat_num    , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_63 },
6208   { &hf_tetra_group_identity_downlink_02, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_GROUP_IDENTITY_DOWNLINK },
6209   { NULL, 0, 0, NULL }
6210 };
6211
6212 static int
6213 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_) {
6214   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6215                                    ett_tetra_T_type3_elements_05, T_type3_elements_05_sequence);
6216
6217   return offset;
6218 }
6219
6220
6221 static const value_string tetra_T_type3_05_vals[] = {
6222   {   0, "no-type3" },
6223   {   1, "type3-elements" },
6224   { 0, NULL }
6225 };
6226
6227 static const per_choice_t T_type3_05_choice[] = {
6228   {   0, &hf_tetra_no_type3      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6229   {   1, &hf_tetra_type3_elements_05, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type3_elements_05 },
6230   { 0, NULL, 0, NULL }
6231 };
6232
6233 static int
6234 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_) {
6235   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6236                                  ett_tetra_T_type3_05, T_type3_05_choice,
6237                                  NULL);
6238
6239   return offset;
6240 }
6241
6242
6243 static const per_sequence_t T_type2_element_03_sequence[] = {
6244   { &hf_tetra_type3_05      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_type3_05 },
6245   { NULL, 0, 0, NULL }
6246 };
6247
6248 static int
6249 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_) {
6250   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6251                                    ett_tetra_T_type2_element_03, T_type2_element_03_sequence);
6252
6253   return offset;
6254 }
6255
6256
6257 static const value_string tetra_T_optional_elements_25_vals[] = {
6258   {   0, "no-type2" },
6259   {   1, "type2-element" },
6260   { 0, NULL }
6261 };
6262
6263 static const per_choice_t T_optional_elements_25_choice[] = {
6264   {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6265   {   1, &hf_tetra_type2_element_03, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_element_03 },
6266   { 0, NULL, 0, NULL }
6267 };
6268
6269 static int
6270 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_) {
6271   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6272                                  ett_tetra_T_optional_elements_25, T_optional_elements_25_choice,
6273                                  NULL);
6274
6275   return offset;
6276 }
6277
6278
6279 static const per_sequence_t D_ATTACH_DETACH_GROUP_IDENTITY_ACK_sequence[] = {
6280   { &hf_tetra_group_identity_attach_detach_accept, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
6281   { &hf_tetra_reserved_01   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
6282   { &hf_tetra_optional_elements_25, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_25 },
6283   { NULL, 0, 0, NULL }
6284 };
6285
6286 static int
6287 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_) {
6288 #line 263 "../../asn1/tetra/tetra.cnf"
6289   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6290                                    ett_tetra_D_ATTACH_DETACH_GROUP_IDENTITY_ACK, D_ATTACH_DETACH_GROUP_IDENTITY_ACK_sequence);
6291
6292         col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-ATTACH-DETACH-GROUP-IDENTITY-ACK");
6293
6294
6295   return offset;
6296 }
6297
6298
6299 static const per_sequence_t D_MM_STATUS_sequence[] = {
6300   { &hf_tetra_status_downlink, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_63 },
6301   { NULL, 0, 0, NULL }
6302 };
6303
6304 static int
6305 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_) {
6306 #line 238 "../../asn1/tetra/tetra.cnf"
6307   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6308                                    ett_tetra_D_MM_STATUS, D_MM_STATUS_sequence);
6309
6310         col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-MM-STATUS");
6311
6312
6313   return offset;
6314 }
6315
6316
6317 static const value_string tetra_D_MM_PDU_vals[] = {
6318   {   0, "d-Otar" },
6319   {   1, "d-Authentication" },
6320   {   2, "d-Authentication-Reject" },
6321   {   3, "d-Disable" },
6322   {   4, "d-Enable" },
6323   {   5, "d-Location-Update-Accept" },
6324   {   6, "d-Location-Update-Command" },
6325   {   7, "d-Location-Update-Reject" },
6326   {   8, "d-MM-reserved2" },
6327   {   9, "d-Location-Update-Proceeding" },
6328   {  10, "d-Attach-Detach-Group-Identity" },
6329   {  11, "d-Attach-Detach-Group-Identity-Ack" },
6330   {  12, "d-MM-Status" },
6331   {  13, "d-MM-reserved5" },
6332   {  14, "d-MM-reserved6" },
6333   {  15, "d-MM-Function-Not-Support" },
6334   { 0, NULL }
6335 };
6336
6337 static const per_choice_t D_MM_PDU_choice[] = {
6338   {   0, &hf_tetra_d_Otar        , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6339   {   1, &hf_tetra_d_Authentication, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6340   {   2, &hf_tetra_d_Authentication_Reject, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6341   {   3, &hf_tetra_d_Disable     , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6342   {   4, &hf_tetra_d_Enable      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6343   {   5, &hf_tetra_d_Location_Update_Accept, ASN1_NO_EXTENSIONS     , dissect_tetra_D_LOCATION_UPDATE_ACCEPT },
6344   {   6, &hf_tetra_d_Location_Update_Command, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6345   {   7, &hf_tetra_d_Location_Update_Reject, ASN1_NO_EXTENSIONS     , dissect_tetra_D_LOCATION_UPDATE_REJECT },
6346   {   8, &hf_tetra_d_MM_reserved2, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6347   {   9, &hf_tetra_d_Location_Update_Proceeding, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6348   {  10, &hf_tetra_d_Attach_Detach_Group_Identity, ASN1_NO_EXTENSIONS     , dissect_tetra_D_ATTACH_DETACH_GROUP_IDENTITY },
6349   {  11, &hf_tetra_d_Attach_Detach_Group_Identity_Ack, ASN1_NO_EXTENSIONS     , dissect_tetra_D_ATTACH_DETACH_GROUP_IDENTITY_ACK },
6350   {  12, &hf_tetra_d_MM_Status   , ASN1_NO_EXTENSIONS     , dissect_tetra_D_MM_STATUS },
6351   {  13, &hf_tetra_d_MM_reserved5, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6352   {  14, &hf_tetra_d_MM_reserved6, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6353   {  15, &hf_tetra_d_MM_Function_Not_Support, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6354   { 0, NULL, 0, NULL }
6355 };
6356
6357 static int
6358 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_) {
6359   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6360                                  ett_tetra_D_MM_PDU, D_MM_PDU_choice,
6361                                  NULL);
6362
6363   return offset;
6364 }
6365
6366
6367 static const value_string tetra_T_simplex_duplex_selection_03_vals[] = {
6368   {   0, "simplex" },
6369   {   1, "duplex" },
6370   { 0, NULL }
6371 };
6372
6373
6374 static int
6375 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_) {
6376   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
6377                                      2, NULL, FALSE, 0, NULL);
6378
6379   return offset;
6380 }
6381
6382
6383 static const value_string tetra_T_basic_service_infomation_vals[] = {
6384   {   0, "none" },
6385   {   1, "basic-service-infomation" },
6386   { 0, NULL }
6387 };
6388
6389 static const per_choice_t T_basic_service_infomation_choice[] = {
6390   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6391   {   1, &hf_tetra_basic_service_infomation_01, ASN1_NO_EXTENSIONS     , dissect_tetra_Basic_service_information },
6392   { 0, NULL, 0, NULL }
6393 };
6394
6395 static int
6396 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_) {
6397   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6398                                  ett_tetra_T_basic_service_infomation, T_basic_service_infomation_choice,
6399                                  NULL);
6400
6401   return offset;
6402 }
6403
6404
6405 static const value_string tetra_T_notification_indicator_01_vals[] = {
6406   {   0, "none" },
6407   {   1, "notification-indicator" },
6408   { 0, NULL }
6409 };
6410
6411 static const per_choice_t T_notification_indicator_01_choice[] = {
6412   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6413   {   1, &hf_tetra_notification_indicator_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_63 },
6414   { 0, NULL, 0, NULL }
6415 };
6416
6417 static int
6418 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_) {
6419   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6420                                  ett_tetra_T_notification_indicator_01, T_notification_indicator_01_choice,
6421                                  NULL);
6422
6423   return offset;
6424 }
6425
6426
6427 static const value_string tetra_T_prop_09_vals[] = {
6428   {   0, "none" },
6429   {   1, "prop" },
6430   { 0, NULL }
6431 };
6432
6433 static const per_choice_t T_prop_09_choice[] = {
6434   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6435   {   1, &hf_tetra_prop_01       , ASN1_NO_EXTENSIONS     , dissect_tetra_Proprietary },
6436   { 0, NULL, 0, NULL }
6437 };
6438
6439 static int
6440 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_) {
6441   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6442                                  ett_tetra_T_prop_09, T_prop_09_choice,
6443                                  NULL);
6444
6445   return offset;
6446 }
6447
6448
6449 static const per_sequence_t T_type2_parameters_14_sequence[] = {
6450   { &hf_tetra_basic_service_infomation, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_basic_service_infomation },
6451   { &hf_tetra_notification_indicator_02, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_notification_indicator_01 },
6452   { &hf_tetra_prop_10       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop_09 },
6453   { NULL, 0, 0, NULL }
6454 };
6455
6456 static int
6457 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_) {
6458   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6459                                    ett_tetra_T_type2_parameters_14, T_type2_parameters_14_sequence);
6460
6461   return offset;
6462 }
6463
6464
6465 static const value_string tetra_T_optional_elements_18_vals[] = {
6466   {   0, "no-type2" },
6467   {   1, "type2-parameters" },
6468   { 0, NULL }
6469 };
6470
6471 static const per_choice_t T_optional_elements_18_choice[] = {
6472   {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6473   {   1, &hf_tetra_type2_parameters_14, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_parameters_14 },
6474   { 0, NULL, 0, NULL }
6475 };
6476
6477 static int
6478 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_) {
6479   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6480                                  ett_tetra_T_optional_elements_18, T_optional_elements_18_choice,
6481                                  NULL);
6482
6483   return offset;
6484 }
6485
6486
6487 static const per_sequence_t D_ALERT_sequence[] = {
6488   { &hf_tetra_call_identifier_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1023 },
6489   { &hf_tetra_call_time_out_setup_phase, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
6490   { &hf_tetra_reserved_01   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
6491   { &hf_tetra_simplex_duplex_selection_04, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_simplex_duplex_selection_03 },
6492   { &hf_tetra_call_queued   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
6493   { &hf_tetra_optional_elements_18, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_18 },
6494   { NULL, 0, 0, NULL }
6495 };
6496
6497 static int
6498 dissect_tetra_D_ALERT(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6499 #line 134 "../../asn1/tetra/tetra.cnf"
6500   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6501                                    ett_tetra_D_ALERT, D_ALERT_sequence);
6502
6503         col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-ALERT");
6504
6505
6506   return offset;
6507 }
6508
6509
6510 static const value_string tetra_T_basic_service_information_02_vals[] = {
6511   {   0, "none" },
6512   {   1, "basic-service-information" },
6513   { 0, NULL }
6514 };
6515
6516 static const per_choice_t T_basic_service_information_02_choice[] = {
6517   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6518   {   1, &hf_tetra_basic_service_information, ASN1_NO_EXTENSIONS     , dissect_tetra_Basic_service_information },
6519   { 0, NULL, 0, NULL }
6520 };
6521
6522 static int
6523 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_) {
6524   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6525                                  ett_tetra_T_basic_service_information_02, T_basic_service_information_02_choice,
6526                                  NULL);
6527
6528   return offset;
6529 }
6530
6531
6532 static const value_string tetra_T_call_status_vals[] = {
6533   {   0, "none" },
6534   {   1, "call-status" },
6535   { 0, NULL }
6536 };
6537
6538 static const per_choice_t T_call_status_choice[] = {
6539   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6540   {   1, &hf_tetra_call_status_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_7 },
6541   { 0, NULL, 0, NULL }
6542 };
6543
6544 static int
6545 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_) {
6546   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6547                                  ett_tetra_T_call_status, T_call_status_choice,
6548                                  NULL);
6549
6550   return offset;
6551 }
6552
6553
6554 static const value_string tetra_T_notification_indicator_vals[] = {
6555   {   0, "none" },
6556   {   1, "notification-indicator" },
6557   { 0, NULL }
6558 };
6559
6560 static const per_choice_t T_notification_indicator_choice[] = {
6561   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6562   {   1, &hf_tetra_notification_indicator_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_63 },
6563   { 0, NULL, 0, NULL }
6564 };
6565
6566 static int
6567 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_) {
6568   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6569                                  ett_tetra_T_notification_indicator, T_notification_indicator_choice,
6570                                  NULL);
6571
6572   return offset;
6573 }
6574
6575
6576 static const value_string tetra_T_prop_08_vals[] = {
6577   {   0, "none" },
6578   {   1, "prop" },
6579   { 0, NULL }
6580 };
6581
6582 static const per_choice_t T_prop_08_choice[] = {
6583   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6584   {   1, &hf_tetra_prop_01       , ASN1_NO_EXTENSIONS     , dissect_tetra_Proprietary },
6585   { 0, NULL, 0, NULL }
6586 };
6587
6588 static int
6589 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_) {
6590   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6591                                  ett_tetra_T_prop_08, T_prop_08_choice,
6592                                  NULL);
6593
6594   return offset;
6595 }
6596
6597
6598 static const per_sequence_t T_type2_parameters_13_sequence[] = {
6599   { &hf_tetra_basic_service_information_03, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_basic_service_information_02 },
6600   { &hf_tetra_call_status   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_call_status },
6601   { &hf_tetra_notification_indicator, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_notification_indicator },
6602   { &hf_tetra_prop_09       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop_08 },
6603   { NULL, 0, 0, NULL }
6604 };
6605
6606 static int
6607 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_) {
6608   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6609                                    ett_tetra_T_type2_parameters_13, T_type2_parameters_13_sequence);
6610
6611   return offset;
6612 }
6613
6614
6615 static const value_string tetra_T_optional_elements_17_vals[] = {
6616   {   0, "no-type2" },
6617   {   1, "type2-parameters" },
6618   { 0, NULL }
6619 };
6620
6621 static const per_choice_t T_optional_elements_17_choice[] = {
6622   {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6623   {   1, &hf_tetra_type2_parameters_13, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_parameters_13 },
6624   { 0, NULL, 0, NULL }
6625 };
6626
6627 static int
6628 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_) {
6629   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6630                                  ett_tetra_T_optional_elements_17, T_optional_elements_17_choice,
6631                                  NULL);
6632
6633   return offset;
6634 }
6635
6636
6637 static const per_sequence_t D_CALL_PROCEEDING_sequence[] = {
6638   { &hf_tetra_call_identifier_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1023 },
6639   { &hf_tetra_call_time_out_setup_phase, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
6640   { &hf_tetra_hook_method_selection, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
6641   { &hf_tetra_simplex_duplex_selection_03, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
6642   { &hf_tetra_optional_elements_17, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_17 },
6643   { NULL, 0, 0, NULL }
6644 };
6645
6646 static int
6647 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_) {
6648 #line 91 "../../asn1/tetra/tetra.cnf"
6649   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6650                                    ett_tetra_D_CALL_PROCEEDING, D_CALL_PROCEEDING_sequence);
6651
6652         col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-CALL-PROCEEDING");
6653
6654
6655   return offset;
6656 }
6657
6658
6659 static const value_string tetra_T_simplex_duplex_selection_04_vals[] = {
6660   {   0, "simplex" },
6661   {   1, "duplex" },
6662   { 0, NULL }
6663 };
6664
6665
6666 static int
6667 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_) {
6668   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
6669                                      2, NULL, FALSE, 0, NULL);
6670
6671   return offset;
6672 }
6673
6674
6675 static const value_string tetra_T_call_priority_vals[] = {
6676   {   0, "none" },
6677   {   1, "call-priority" },
6678   { 0, NULL }
6679 };
6680
6681 static const per_choice_t T_call_priority_choice[] = {
6682   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6683   {   1, &hf_tetra_call_priority , ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_15 },
6684   { 0, NULL, 0, NULL }
6685 };
6686
6687 static int
6688 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_) {
6689   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6690                                  ett_tetra_T_call_priority, T_call_priority_choice,
6691                                  NULL);
6692
6693   return offset;
6694 }
6695
6696
6697 static const value_string tetra_T_basic_service_information_03_vals[] = {
6698   {   0, "none" },
6699   {   1, "basic-service-information" },
6700   { 0, NULL }
6701 };
6702
6703 static const per_choice_t T_basic_service_information_03_choice[] = {
6704   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6705   {   1, &hf_tetra_basic_service_information, ASN1_NO_EXTENSIONS     , dissect_tetra_Basic_service_information },
6706   { 0, NULL, 0, NULL }
6707 };
6708
6709 static int
6710 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_) {
6711   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6712                                  ett_tetra_T_basic_service_information_03, T_basic_service_information_03_choice,
6713                                  NULL);
6714
6715   return offset;
6716 }
6717
6718
6719 static const value_string tetra_T_temporary_address_vals[] = {
6720   {   0, "none" },
6721   {   1, "temporary-address" },
6722   { 0, NULL }
6723 };
6724
6725 static const per_choice_t T_temporary_address_choice[] = {
6726   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6727   {   1, &hf_tetra_temporary_address_01, ASN1_NO_EXTENSIONS     , dissect_tetra_Calling_party_address_type },
6728   { 0, NULL, 0, NULL }
6729 };
6730
6731 static int
6732 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_) {
6733   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6734                                  ett_tetra_T_temporary_address, T_temporary_address_choice,
6735                                  NULL);
6736
6737   return offset;
6738 }
6739
6740
6741 static const value_string tetra_T_notification_indicator_02_vals[] = {
6742   {   0, "none" },
6743   {   1, "notification-indicator" },
6744   { 0, NULL }
6745 };
6746
6747 static const per_choice_t T_notification_indicator_02_choice[] = {
6748   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6749   {   1, &hf_tetra_notification_indicator_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_63 },
6750   { 0, NULL, 0, NULL }
6751 };
6752
6753 static int
6754 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_) {
6755   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6756                                  ett_tetra_T_notification_indicator_02, T_notification_indicator_02_choice,
6757                                  NULL);
6758
6759   return offset;
6760 }
6761
6762
6763 static const value_string tetra_T_prop_10_vals[] = {
6764   {   0, "none" },
6765   {   1, "prop" },
6766   { 0, NULL }
6767 };
6768
6769 static const per_choice_t T_prop_10_choice[] = {
6770   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6771   {   1, &hf_tetra_prop_01       , ASN1_NO_EXTENSIONS     , dissect_tetra_Proprietary },
6772   { 0, NULL, 0, NULL }
6773 };
6774
6775 static int
6776 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_) {
6777   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6778                                  ett_tetra_T_prop_10, T_prop_10_choice,
6779                                  NULL);
6780
6781   return offset;
6782 }
6783
6784
6785 static const per_sequence_t T_type2_parameters_15_sequence[] = {
6786   { &hf_tetra_call_priority_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_call_priority },
6787   { &hf_tetra_basic_service_information_04, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_basic_service_information_03 },
6788   { &hf_tetra_temporary_address, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_temporary_address },
6789   { &hf_tetra_notification_indicator_03, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_notification_indicator_02 },
6790   { &hf_tetra_prop_11       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop_10 },
6791   { NULL, 0, 0, NULL }
6792 };
6793
6794 static int
6795 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_) {
6796   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6797                                    ett_tetra_T_type2_parameters_15, T_type2_parameters_15_sequence);
6798
6799   return offset;
6800 }
6801
6802
6803 static const value_string tetra_T_optional_elements_19_vals[] = {
6804   {   0, "no-type2" },
6805   {   1, "type2-parameters" },
6806   { 0, NULL }
6807 };
6808
6809 static const per_choice_t T_optional_elements_19_choice[] = {
6810   {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6811   {   1, &hf_tetra_type2_parameters_15, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_parameters_15 },
6812   { 0, NULL, 0, NULL }
6813 };
6814
6815 static int
6816 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_) {
6817   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6818                                  ett_tetra_T_optional_elements_19, T_optional_elements_19_choice,
6819                                  NULL);
6820
6821   return offset;
6822 }
6823
6824
6825 static const per_sequence_t D_CONNECT_sequence[] = {
6826   { &hf_tetra_call_identifier_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1023 },
6827   { &hf_tetra_call_time_out_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_31 },
6828   { &hf_tetra_hook_method_selection, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
6829   { &hf_tetra_simplex_duplex_selection_05, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_simplex_duplex_selection_04 },
6830   { &hf_tetra_transmission_grant, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
6831   { &hf_tetra_transmission_request_permission, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
6832   { &hf_tetra_call_ownership, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
6833   { &hf_tetra_optional_elements_19, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_19 },
6834   { NULL, 0, 0, NULL }
6835 };
6836
6837 static int
6838 dissect_tetra_D_CONNECT(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6839 #line 114 "../../asn1/tetra/tetra.cnf"
6840   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6841                                    ett_tetra_D_CONNECT, D_CONNECT_sequence);
6842
6843         col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-CONNECT");
6844
6845
6846   return offset;
6847 }
6848
6849
6850 static const value_string tetra_T_notification_indicator_03_vals[] = {
6851   {   0, "none" },
6852   {   1, "notification-indicator" },
6853   { 0, NULL }
6854 };
6855
6856 static const per_choice_t T_notification_indicator_03_choice[] = {
6857   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6858   {   1, &hf_tetra_notification_indicator_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_63 },
6859   { 0, NULL, 0, NULL }
6860 };
6861
6862 static int
6863 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_) {
6864   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6865                                  ett_tetra_T_notification_indicator_03, T_notification_indicator_03_choice,
6866                                  NULL);
6867
6868   return offset;
6869 }
6870
6871
6872 static const value_string tetra_T_prop_11_vals[] = {
6873   {   0, "none" },
6874   {   1, "prop" },
6875   { 0, NULL }
6876 };
6877
6878 static const per_choice_t T_prop_11_choice[] = {
6879   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6880   {   1, &hf_tetra_prop_01       , ASN1_NO_EXTENSIONS     , dissect_tetra_Proprietary },
6881   { 0, NULL, 0, NULL }
6882 };
6883
6884 static int
6885 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_) {
6886   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6887                                  ett_tetra_T_prop_11, T_prop_11_choice,
6888                                  NULL);
6889
6890   return offset;
6891 }
6892
6893
6894 static const per_sequence_t T_type2_parameters_16_sequence[] = {
6895   { &hf_tetra_notification_indicator_04, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_notification_indicator_03 },
6896   { &hf_tetra_prop_12       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop_11 },
6897   { NULL, 0, 0, NULL }
6898 };
6899
6900 static int
6901 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_) {
6902   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6903                                    ett_tetra_T_type2_parameters_16, T_type2_parameters_16_sequence);
6904
6905   return offset;
6906 }
6907
6908
6909 static const value_string tetra_T_optional_elements_20_vals[] = {
6910   {   0, "no-type2" },
6911   {   1, "type2-parameters" },
6912   { 0, NULL }
6913 };
6914
6915 static const per_choice_t T_optional_elements_20_choice[] = {
6916   {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6917   {   1, &hf_tetra_type2_parameters_16, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_parameters_16 },
6918   { 0, NULL, 0, NULL }
6919 };
6920
6921 static int
6922 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_) {
6923   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6924                                  ett_tetra_T_optional_elements_20, T_optional_elements_20_choice,
6925                                  NULL);
6926
6927   return offset;
6928 }
6929
6930
6931 static const per_sequence_t D_CONNECT_ACK_sequence[] = {
6932   { &hf_tetra_call_identifier_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1023 },
6933   { &hf_tetra_call_time_out , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_15 },
6934   { &hf_tetra_transmission_grant, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
6935   { &hf_tetra_transmission_request_permission, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
6936   { &hf_tetra_optional_elements_20, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_20 },
6937   { NULL, 0, 0, NULL }
6938 };
6939
6940 static int
6941 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_) {
6942 #line 119 "../../asn1/tetra/tetra.cnf"
6943   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6944                                    ett_tetra_D_CONNECT_ACK, D_CONNECT_ACK_sequence);
6945
6946         col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-CONNECT-ACK");
6947
6948
6949   return offset;
6950 }
6951
6952
6953 static const per_sequence_t D_DISCONNECT_sequence[] = {
6954   { &hf_tetra_call_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
6955   { &hf_tetra_disconnect_cause, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_31 },
6956   { NULL, 0, 0, NULL }
6957 };
6958
6959 static int
6960 dissect_tetra_D_DISCONNECT(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6961 #line 129 "../../asn1/tetra/tetra.cnf"
6962   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6963                                    ett_tetra_D_DISCONNECT, D_DISCONNECT_sequence);
6964
6965         col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-DISCONNECT");
6966
6967
6968   return offset;
6969 }
6970
6971
6972 static const per_sequence_t D_INFO_sequence[] = {
6973   { &hf_tetra_call_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
6974   { &hf_tetra_reset_call_time_out_timer, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
6975   { &hf_tetra_poll_request  , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
6976   { NULL, 0, 0, NULL }
6977 };
6978
6979 static int
6980 dissect_tetra_D_INFO(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6981 #line 124 "../../asn1/tetra/tetra.cnf"
6982   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6983                                    ett_tetra_D_INFO, D_INFO_sequence);
6984
6985         col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-INFO");
6986
6987
6988   return offset;
6989 }
6990
6991
6992 static const value_string tetra_T_notification_indicator_04_vals[] = {
6993   {   0, "none" },
6994   {   1, "notification-indicator" },
6995   { 0, NULL }
6996 };
6997
6998 static const per_choice_t T_notification_indicator_04_choice[] = {
6999   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7000   {   1, &hf_tetra_notification_indicator_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_63 },
7001   { 0, NULL, 0, NULL }
7002 };
7003
7004 static int
7005 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_) {
7006   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7007                                  ett_tetra_T_notification_indicator_04, T_notification_indicator_04_choice,
7008                                  NULL);
7009
7010   return offset;
7011 }
7012
7013
7014 static const value_string tetra_T_prop_12_vals[] = {
7015   {   0, "none" },
7016   {   1, "prop" },
7017   { 0, NULL }
7018 };
7019
7020 static const per_choice_t T_prop_12_choice[] = {
7021   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7022   {   1, &hf_tetra_prop_01       , ASN1_NO_EXTENSIONS     , dissect_tetra_Proprietary },
7023   { 0, NULL, 0, NULL }
7024 };
7025
7026 static int
7027 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_) {
7028   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7029                                  ett_tetra_T_prop_12, T_prop_12_choice,
7030                                  NULL);
7031
7032   return offset;
7033 }
7034
7035
7036 static const per_sequence_t T_type2_parameters_17_sequence[] = {
7037   { &hf_tetra_notification_indicator_05, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_notification_indicator_04 },
7038   { &hf_tetra_prop_13       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop_12 },
7039   { NULL, 0, 0, NULL }
7040 };
7041
7042 static int
7043 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_) {
7044   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7045                                    ett_tetra_T_type2_parameters_17, T_type2_parameters_17_sequence);
7046
7047   return offset;
7048 }
7049
7050
7051 static const value_string tetra_T_optional_elements_21_vals[] = {
7052   {   0, "no-type2" },
7053   {   1, "type2-parameters" },
7054   { 0, NULL }
7055 };
7056
7057 static const per_choice_t T_optional_elements_21_choice[] = {
7058   {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7059   {   1, &hf_tetra_type2_parameters_17, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_parameters_17 },
7060   { 0, NULL, 0, NULL }
7061 };
7062
7063 static int
7064 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_) {
7065   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7066                                  ett_tetra_T_optional_elements_21, T_optional_elements_21_choice,
7067                                  NULL);
7068
7069   return offset;
7070 }
7071
7072
7073 static const per_sequence_t D_RELEASE_sequence[] = {
7074   { &hf_tetra_call_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
7075   { &hf_tetra_disconnect_cause, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_31 },
7076   { &hf_tetra_optional_elements_21, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_21 },
7077   { NULL, 0, 0, NULL }
7078 };
7079
7080 static int
7081 dissect_tetra_D_RELEASE(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7082 #line 84 "../../asn1/tetra/tetra.cnf"
7083   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7084                                    ett_tetra_D_RELEASE, D_RELEASE_sequence);
7085
7086         col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-RELEASE");
7087
7088
7089   return offset;
7090 }
7091
7092
7093 static const value_string tetra_T_simplex_duplex_selection_02_vals[] = {
7094   {   0, "simplex" },
7095   {   1, "duplex" },
7096   { 0, NULL }
7097 };
7098
7099
7100 static int
7101 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_) {
7102   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
7103                                      2, NULL, FALSE, 0, NULL);
7104
7105   return offset;
7106 }
7107
7108
7109 static const value_string tetra_T_calling_party_address_vals[] = {
7110   {   0, "none" },
7111   {   1, "calling-party-address" },
7112   { 0, NULL }
7113 };
7114
7115 static const per_choice_t T_calling_party_address_choice[] = {
7116   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7117   {   1, &hf_tetra_calling_party_address_01, ASN1_NO_EXTENSIONS     , dissect_tetra_Calling_party_address_type },
7118   { 0, NULL, 0, NULL }
7119 };
7120
7121 static int
7122 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_) {
7123   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7124                                  ett_tetra_T_calling_party_address, T_calling_party_address_choice,
7125                                  NULL);
7126
7127   return offset;
7128 }
7129
7130
7131 static const value_string tetra_T_external_subscriber_number_01_vals[] = {
7132   {   0, "none" },
7133   {   1, "external-subscriber-number" },
7134   { 0, NULL }
7135 };
7136
7137 static const per_choice_t T_external_subscriber_number_01_choice[] = {
7138   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7139   {   1, &hf_tetra_external_subscriber_number_03, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_15 },
7140   { 0, NULL, 0, NULL }
7141 };
7142
7143 static int
7144 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_) {
7145   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7146                                  ett_tetra_T_external_subscriber_number_01, T_external_subscriber_number_01_choice,
7147                                  NULL);
7148
7149   return offset;
7150 }
7151
7152
7153 static const value_string tetra_T_prop_07_vals[] = {
7154   {   0, "none" },
7155   {   1, "prop" },
7156   { 0, NULL }
7157 };
7158
7159 static const per_choice_t T_prop_07_choice[] = {
7160   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7161   {   1, &hf_tetra_prop_01       , ASN1_NO_EXTENSIONS     , dissect_tetra_Proprietary },
7162   { 0, NULL, 0, NULL }
7163 };
7164
7165 static int
7166 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_) {
7167   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7168                                  ett_tetra_T_prop_07, T_prop_07_choice,
7169                                  NULL);
7170
7171   return offset;
7172 }
7173
7174
7175 static const per_sequence_t T_type2_parameters_12_sequence[] = {
7176   { &hf_tetra_calling_party_address, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_calling_party_address },
7177   { &hf_tetra_external_subscriber_number_02, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_external_subscriber_number_01 },
7178   { &hf_tetra_prop_08       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop_07 },
7179   { NULL, 0, 0, NULL }
7180 };
7181
7182 static int
7183 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_) {
7184   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7185                                    ett_tetra_T_type2_parameters_12, T_type2_parameters_12_sequence);
7186
7187   return offset;
7188 }
7189
7190
7191 static const value_string tetra_T_optional_elements_16_vals[] = {
7192   {   0, "no-type2" },
7193   {   1, "type2-parameters" },
7194   { 0, NULL }
7195 };
7196
7197 static const per_choice_t T_optional_elements_16_choice[] = {
7198   {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7199   {   1, &hf_tetra_type2_parameters_12, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_parameters_12 },
7200   { 0, NULL, 0, NULL }
7201 };
7202
7203 static int
7204 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_) {
7205   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7206                                  ett_tetra_T_optional_elements_16, T_optional_elements_16_choice,
7207                                  NULL);
7208
7209   return offset;
7210 }
7211
7212
7213 static const per_sequence_t D_SETUP_sequence[] = {
7214   { &hf_tetra_call_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
7215   { &hf_tetra_call_time_out , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_15 },
7216   { &hf_tetra_hook_method_selection_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
7217   { &hf_tetra_simplex_duplex_selection_02, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_simplex_duplex_selection_02 },
7218   { &hf_tetra_basic_service_information, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Basic_service_information },
7219   { &hf_tetra_transmission_grant, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
7220   { &hf_tetra_transmission_request_permission, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
7221   { &hf_tetra_call_priority , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_15 },
7222   { &hf_tetra_optional_elements_16, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_16 },
7223   { NULL, 0, 0, NULL }
7224 };
7225
7226 static int
7227 dissect_tetra_D_SETUP(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7228 #line 96 "../../asn1/tetra/tetra.cnf"
7229   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7230                                    ett_tetra_D_SETUP, D_SETUP_sequence);
7231
7232         col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-SETUP");
7233
7234
7235   return offset;
7236 }
7237
7238
7239
7240 static int
7241 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_) {
7242   offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
7243                                        6, 6, FALSE, NULL);
7244
7245   return offset;
7246 }
7247
7248
7249 static const value_string tetra_T_calling_party_type_identifier_01_vals[] = {
7250   {   0, "none1" },
7251   {   1, "calling-party-address-SSI" },
7252   {   2, "ssi-extension" },
7253   {   3, "none2" },
7254   { 0, NULL }
7255 };
7256
7257 static const per_choice_t T_calling_party_type_identifier_01_choice[] = {
7258   {   0, &hf_tetra_none1         , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7259   {   1, &hf_tetra_calling_party_address_SSI, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_16777215 },
7260   {   2, &hf_tetra_ssi_extension_01, ASN1_NO_EXTENSIONS     , dissect_tetra_OCTET_STRING_SIZE_6 },
7261   {   3, &hf_tetra_none2         , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7262   { 0, NULL, 0, NULL }
7263 };
7264
7265 static int
7266 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_) {
7267   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7268                                  ett_tetra_T_calling_party_type_identifier_01, T_calling_party_type_identifier_01_choice,
7269                                  NULL);
7270
7271   return offset;
7272 }
7273
7274
7275 static const per_sequence_t D_STATUS_sequence[] = {
7276   { &hf_tetra_calling_party_type_identifier_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_calling_party_type_identifier_01 },
7277   { &hf_tetra_pre_coded_status, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_65535 },
7278   { NULL, 0, 0, NULL }
7279 };
7280
7281 static int
7282 dissect_tetra_D_STATUS(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7283 #line 145 "../../asn1/tetra/tetra.cnf"
7284   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7285                                    ett_tetra_D_STATUS, D_STATUS_sequence);
7286
7287         col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-STATUS");
7288
7289
7290   return offset;
7291 }
7292
7293
7294 static const value_string tetra_T_notification_indicator_06_vals[] = {
7295   {   0, "none" },
7296   {   1, "notification-indicator" },
7297   { 0, NULL }
7298 };
7299
7300 static const per_choice_t T_notification_indicator_06_choice[] = {
7301   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7302   {   1, &hf_tetra_notification_indicator_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_63 },
7303   { 0, NULL, 0, NULL }
7304 };
7305
7306 static int
7307 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_) {
7308   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7309                                  ett_tetra_T_notification_indicator_06, T_notification_indicator_06_choice,
7310                                  NULL);
7311
7312   return offset;
7313 }
7314
7315
7316 static const value_string tetra_T_prop_14_vals[] = {
7317   {   0, "none" },
7318   {   1, "prop" },
7319   { 0, NULL }
7320 };
7321
7322 static const per_choice_t T_prop_14_choice[] = {
7323   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7324   {   1, &hf_tetra_prop_01       , ASN1_NO_EXTENSIONS     , dissect_tetra_Proprietary },
7325   { 0, NULL, 0, NULL }
7326 };
7327
7328 static int
7329 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_) {
7330   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7331                                  ett_tetra_T_prop_14, T_prop_14_choice,
7332                                  NULL);
7333
7334   return offset;
7335 }
7336
7337
7338 static const per_sequence_t T_type2_parameters_19_sequence[] = {
7339   { &hf_tetra_notification_indicator_07, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_notification_indicator_06 },
7340   { &hf_tetra_prop_15       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop_14 },
7341   { NULL, 0, 0, NULL }
7342 };
7343
7344 static int
7345 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_) {
7346   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7347                                    ett_tetra_T_type2_parameters_19, T_type2_parameters_19_sequence);
7348
7349   return offset;
7350 }
7351
7352
7353 static const value_string tetra_T_optional_elements_23_vals[] = {
7354   {   0, "no-type2" },
7355   {   1, "type2-parameters" },
7356   { 0, NULL }
7357 };
7358
7359 static const per_choice_t T_optional_elements_23_choice[] = {
7360   {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7361   {   1, &hf_tetra_type2_parameters_19, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_parameters_19 },
7362   { 0, NULL, 0, NULL }
7363 };
7364
7365 static int
7366 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_) {
7367   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7368                                  ett_tetra_T_optional_elements_23, T_optional_elements_23_choice,
7369                                  NULL);
7370
7371   return offset;
7372 }
7373
7374
7375 static const per_sequence_t D_TX_CEASED_sequence[] = {
7376   { &hf_tetra_call_identifier_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1023 },
7377   { &hf_tetra_transmission_request_permission, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
7378   { &hf_tetra_optional_elements_23, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_23 },
7379   { NULL, 0, 0, NULL }
7380 };
7381
7382 static int
7383 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_) {
7384 #line 139 "../../asn1/tetra/tetra.cnf"
7385   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7386                                    ett_tetra_D_TX_CEASED, D_TX_CEASED_sequence);
7387
7388         col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-TX-CEASED");
7389
7390
7391   return offset;
7392 }
7393
7394
7395 static const per_sequence_t D_TX_CONTINUE_sequence[] = {
7396   { &hf_tetra_call_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
7397   { &hf_tetra_continue      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
7398   { &hf_tetra_transmission_request_permission, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
7399   { NULL, 0, 0, NULL }
7400 };
7401
7402 static int
7403 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_) {
7404 #line 150 "../../asn1/tetra/tetra.cnf"
7405   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7406                                    ett_tetra_D_TX_CONTINUE, D_TX_CONTINUE_sequence);
7407
7408         col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-TX-CONTINUE");
7409
7410
7411   return offset;
7412 }
7413
7414
7415 static const per_sequence_t D_TX_GRANTED_sequence[] = {
7416   { &hf_tetra_call_identifier_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1023 },
7417   { &hf_tetra_transmission_grant, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
7418   { &hf_tetra_transmission_request_permission, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
7419   { &hf_tetra_encryption_control, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
7420   { &hf_tetra_reserved_01   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
7421   { NULL, 0, 0, NULL }
7422 };
7423
7424 static int
7425 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_) {
7426 #line 155 "../../asn1/tetra/tetra.cnf"
7427   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7428                                    ett_tetra_D_TX_GRANTED, D_TX_GRANTED_sequence);
7429
7430         col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-TX-GRANTED");
7431
7432
7433
7434   return offset;
7435 }
7436
7437
7438 static const per_sequence_t D_TX_WAIT_sequence[] = {
7439   { &hf_tetra_call_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
7440   { &hf_tetra_transmission_request_permission, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
7441   { NULL, 0, 0, NULL }
7442 };
7443
7444 static int
7445 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_) {
7446 #line 161 "../../asn1/tetra/tetra.cnf"
7447   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7448                                    ett_tetra_D_TX_WAIT, D_TX_WAIT_sequence);
7449
7450         col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-TX-WAIT");
7451   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7452                                    ett_tetra_D_TX_WAIT, D_TX_WAIT_sequence);
7453
7454         col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-TX-WAIT");
7455
7456
7457   return offset;
7458 }
7459
7460
7461 static const value_string tetra_T_new_call_identifier_vals[] = {
7462   {   0, "none" },
7463   {   1, "new-call-identifier" },
7464   { 0, NULL }
7465 };
7466
7467 static const per_choice_t T_new_call_identifier_choice[] = {
7468   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7469   {   1, &hf_tetra_new_call_identifier_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_1023 },
7470   { 0, NULL, 0, NULL }
7471 };
7472
7473 static int
7474 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_) {
7475   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7476                                  ett_tetra_T_new_call_identifier, T_new_call_identifier_choice,
7477                                  NULL);
7478
7479   return offset;
7480 }
7481
7482
7483 static const value_string tetra_T_call_time_out_vals[] = {
7484   {   0, "none" },
7485   {   1, "call-time-out" },
7486   { 0, NULL }
7487 };
7488
7489 static const per_choice_t T_call_time_out_choice[] = {
7490   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7491   {   1, &hf_tetra_call_time_out_03, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_7 },
7492   { 0, NULL, 0, NULL }
7493 };
7494
7495 static int
7496 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_) {
7497   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7498                                  ett_tetra_T_call_time_out, T_call_time_out_choice,
7499                                  NULL);
7500
7501   return offset;
7502 }
7503
7504
7505 static const value_string tetra_T_call_status_01_vals[] = {
7506   {   0, "none" },
7507   {   1, "call-status" },
7508   { 0, NULL }
7509 };
7510
7511 static const per_choice_t T_call_status_01_choice[] = {
7512   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7513   {   1, &hf_tetra_call_status_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_7 },
7514   { 0, NULL, 0, NULL }
7515 };
7516
7517 static int
7518 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_) {
7519   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7520                                  ett_tetra_T_call_status_01, T_call_status_01_choice,
7521                                  NULL);
7522
7523   return offset;
7524 }
7525
7526
7527 static const value_string tetra_T_simplex_duplex_selection_05_vals[] = {
7528   {   0, "simplex" },
7529   {   1, "duplex" },
7530   { 0, NULL }
7531 };
7532
7533
7534 static int
7535 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_) {
7536   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
7537                                      2, NULL, FALSE, 0, NULL);
7538
7539   return offset;
7540 }
7541
7542
7543 static const per_sequence_t Modify_type_sequence[] = {
7544   { &hf_tetra_simplex_duplex_selection_06, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_simplex_duplex_selection_05 },
7545   { &hf_tetra_basic_service_information, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Basic_service_information },
7546   { NULL, 0, 0, NULL }
7547 };
7548
7549 static int
7550 dissect_tetra_Modify_type(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7551   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7552                                    ett_tetra_Modify_type, Modify_type_sequence);
7553
7554   return offset;
7555 }
7556
7557
7558 static const value_string tetra_T_modify_vals[] = {
7559   {   0, "none" },
7560   {   1, "modify" },
7561   { 0, NULL }
7562 };
7563
7564 static const per_choice_t T_modify_choice[] = {
7565   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7566   {   1, &hf_tetra_modify_01     , ASN1_NO_EXTENSIONS     , dissect_tetra_Modify_type },
7567   { 0, NULL, 0, NULL }
7568 };
7569
7570 static int
7571 dissect_tetra_T_modify(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7572   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7573                                  ett_tetra_T_modify, T_modify_choice,
7574                                  NULL);
7575
7576   return offset;
7577 }
7578
7579
7580 static const value_string tetra_T_notification_indicator_05_vals[] = {
7581   {   0, "none" },
7582   {   1, "notification-indicator" },
7583   { 0, NULL }
7584 };
7585
7586 static const per_choice_t T_notification_indicator_05_choice[] = {
7587   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7588   {   1, &hf_tetra_notification_indicator_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_63 },
7589   { 0, NULL, 0, NULL }
7590 };
7591
7592 static int
7593 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_) {
7594   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7595                                  ett_tetra_T_notification_indicator_05, T_notification_indicator_05_choice,
7596                                  NULL);
7597
7598   return offset;
7599 }
7600
7601
7602 static const value_string tetra_T_prop_13_vals[] = {
7603   {   0, "none" },
7604   {   1, "prop" },
7605   { 0, NULL }
7606 };
7607
7608 static const per_choice_t T_prop_13_choice[] = {
7609   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7610   {   1, &hf_tetra_prop_01       , ASN1_NO_EXTENSIONS     , dissect_tetra_Proprietary },
7611   { 0, NULL, 0, NULL }
7612 };
7613
7614 static int
7615 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_) {
7616   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7617                                  ett_tetra_T_prop_13, T_prop_13_choice,
7618                                  NULL);
7619
7620   return offset;
7621 }
7622
7623
7624 static const per_sequence_t T_type2_parameters_18_sequence[] = {
7625   { &hf_tetra_new_call_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_new_call_identifier },
7626   { &hf_tetra_call_time_out_02, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_call_time_out },
7627   { &hf_tetra_call_status_02, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_call_status_01 },
7628   { &hf_tetra_modify        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_modify },
7629   { &hf_tetra_notification_indicator_06, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_notification_indicator_05 },
7630   { &hf_tetra_prop_14       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop_13 },
7631   { NULL, 0, 0, NULL }
7632 };
7633
7634 static int
7635 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_) {
7636   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7637                                    ett_tetra_T_type2_parameters_18, T_type2_parameters_18_sequence);
7638
7639   return offset;
7640 }
7641
7642
7643 static const value_string tetra_T_optional_elements_22_vals[] = {
7644   {   0, "no-type2" },
7645   {   1, "type2-parameters" },
7646   { 0, NULL }
7647 };
7648
7649 static const per_choice_t T_optional_elements_22_choice[] = {
7650   {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7651   {   1, &hf_tetra_type2_parameters_18, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_parameters_18 },
7652   { 0, NULL, 0, NULL }
7653 };
7654
7655 static int
7656 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_) {
7657   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7658                                  ett_tetra_T_optional_elements_22, T_optional_elements_22_choice,
7659                                  NULL);
7660
7661   return offset;
7662 }
7663
7664
7665 static const per_sequence_t D_CALL_RESTORE_sequence[] = {
7666   { &hf_tetra_call_identifier_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1023 },
7667   { &hf_tetra_transmission_grant, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
7668   { &hf_tetra_transmission_request_permission, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
7669   { &hf_tetra_reset_call_time_out, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
7670   { &hf_tetra_optional_elements_22, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_22 },
7671   { NULL, 0, 0, NULL }
7672 };
7673
7674 static int
7675 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_) {
7676 #line 166 "../../asn1/tetra/tetra.cnf"
7677   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7678                                    ett_tetra_D_CALL_RESTORE, D_CALL_RESTORE_sequence);
7679
7680         col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-CALL-RESTORE");
7681
7682
7683   return offset;
7684 }
7685
7686
7687 static const value_string tetra_T_calling_party_type_identifier_vals[] = {
7688   {   0, "none1" },
7689   {   1, "ssi" },
7690   {   2, "ssi-extension" },
7691   {   3, "none2" },
7692   { 0, NULL }
7693 };
7694
7695 static const per_choice_t T_calling_party_type_identifier_choice[] = {
7696   {   0, &hf_tetra_none1         , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7697   {   1, &hf_tetra_ssi           , ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_16777215 },
7698   {   2, &hf_tetra_ssi_extension_01, ASN1_NO_EXTENSIONS     , dissect_tetra_OCTET_STRING_SIZE_6 },
7699   {   3, &hf_tetra_none2         , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7700   { 0, NULL, 0, NULL }
7701 };
7702
7703 static int
7704 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_) {
7705   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7706                                  ett_tetra_T_calling_party_type_identifier, T_calling_party_type_identifier_choice,
7707                                  NULL);
7708
7709   return offset;
7710 }
7711
7712
7713
7714 static int
7715 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_) {
7716   offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
7717                                        8, 8, FALSE, NULL);
7718
7719   return offset;
7720 }
7721
7722
7723 static const value_string tetra_T_short_data_type_identifier_01_vals[] = {
7724   {   0, "data-1" },
7725   {   1, "data-2" },
7726   {   2, "data-3" },
7727   {   3, "length-indicator-data-4" },
7728   { 0, NULL }
7729 };
7730
7731 static const per_choice_t T_short_data_type_identifier_01_choice[] = {
7732   {   0, &hf_tetra_data_1        , ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_65535 },
7733   {   1, &hf_tetra_data_2        , ASN1_NO_EXTENSIONS     , dissect_tetra_OCTET_STRING_SIZE_4 },
7734   {   2, &hf_tetra_data_3_01     , ASN1_NO_EXTENSIONS     , dissect_tetra_OCTET_STRING_SIZE_8 },
7735   {   3, &hf_tetra_length_indicator_data_4, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_4194304 },
7736   { 0, NULL, 0, NULL }
7737 };
7738
7739 static int
7740 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_) {
7741   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7742                                  ett_tetra_T_short_data_type_identifier_01, T_short_data_type_identifier_01_choice,
7743                                  NULL);
7744
7745   return offset;
7746 }
7747
7748
7749 static const per_sequence_t D_SDS_DATA_sequence[] = {
7750   { &hf_tetra_calling_party_type_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_calling_party_type_identifier },
7751   { &hf_tetra_short_data_type_identifier_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_short_data_type_identifier_01 },
7752   { NULL, 0, 0, NULL }
7753 };
7754
7755 static int
7756 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_) {
7757 #line 171 "../../asn1/tetra/tetra.cnf"
7758   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7759                                    ett_tetra_D_SDS_DATA, D_SDS_DATA_sequence);
7760
7761         col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-SDS-DATA");
7762
7763
7764   return offset;
7765 }
7766
7767
7768 static const value_string tetra_D_CMCE_PDU_vals[] = {
7769   {   0, "d-Alert" },
7770   {   1, "d-Call-Proceeding" },
7771   {   2, "d-Connect" },
7772   {   3, "d-Connect-Ack" },
7773   {   4, "d-Disconnect" },
7774   {   5, "d-Info" },
7775   {   6, "d-Release" },
7776   {   7, "d-Setup" },
7777   {   8, "d-Status" },
7778   {   9, "d-Tx-Ceased" },
7779   {  10, "d-Tx-Continue" },
7780   {  11, "d-Tx-Granted" },
7781   {  12, "d-Tx-Wait" },
7782   {  13, "d-Tx-Interrupt" },
7783   {  14, "d-Call-Restore" },
7784   {  15, "d-SDS-Data" },
7785   {  16, "d-Facility" },
7786   { 0, NULL }
7787 };
7788
7789 static const per_choice_t D_CMCE_PDU_choice[] = {
7790   {   0, &hf_tetra_d_Alert       , ASN1_NO_EXTENSIONS     , dissect_tetra_D_ALERT },
7791   {   1, &hf_tetra_d_Call_Proceeding, ASN1_NO_EXTENSIONS     , dissect_tetra_D_CALL_PROCEEDING },
7792   {   2, &hf_tetra_d_Connect     , ASN1_NO_EXTENSIONS     , dissect_tetra_D_CONNECT },
7793   {   3, &hf_tetra_d_Connect_Ack , ASN1_NO_EXTENSIONS     , dissect_tetra_D_CONNECT_ACK },
7794   {   4, &hf_tetra_d_Disconnect  , ASN1_NO_EXTENSIONS     , dissect_tetra_D_DISCONNECT },
7795   {   5, &hf_tetra_d_Info        , ASN1_NO_EXTENSIONS     , dissect_tetra_D_INFO },
7796   {   6, &hf_tetra_d_Release     , ASN1_NO_EXTENSIONS     , dissect_tetra_D_RELEASE },
7797   {   7, &hf_tetra_d_Setup       , ASN1_NO_EXTENSIONS     , dissect_tetra_D_SETUP },
7798   {   8, &hf_tetra_d_Status      , ASN1_NO_EXTENSIONS     , dissect_tetra_D_STATUS },
7799   {   9, &hf_tetra_d_Tx_Ceased   , ASN1_NO_EXTENSIONS     , dissect_tetra_D_TX_CEASED },
7800   {  10, &hf_tetra_d_Tx_Continue , ASN1_NO_EXTENSIONS     , dissect_tetra_D_TX_CONTINUE },
7801   {  11, &hf_tetra_d_Tx_Granted  , ASN1_NO_EXTENSIONS     , dissect_tetra_D_TX_GRANTED },
7802   {  12, &hf_tetra_d_Tx_Wait     , ASN1_NO_EXTENSIONS     , dissect_tetra_D_TX_WAIT },
7803   {  13, &hf_tetra_d_Tx_Interrupt, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7804   {  14, &hf_tetra_d_Call_Restore, ASN1_NO_EXTENSIONS     , dissect_tetra_D_CALL_RESTORE },
7805   {  15, &hf_tetra_d_SDS_Data    , ASN1_NO_EXTENSIONS     , dissect_tetra_D_SDS_DATA },
7806   {  16, &hf_tetra_d_Facility    , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7807   { 0, NULL, 0, NULL }
7808 };
7809
7810 static int
7811 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_) {
7812   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7813                                  ett_tetra_D_CMCE_PDU, D_CMCE_PDU_choice,
7814                                  NULL);
7815
7816   return offset;
7817 }
7818
7819
7820 static const value_string tetra_T_optional_elements_02_vals[] = {
7821   {   0, "no-type2" },
7822   {   1, "sdu" },
7823   { 0, NULL }
7824 };
7825
7826 static const per_choice_t T_optional_elements_02_choice[] = {
7827   {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7828   {   1, &hf_tetra_sdu           , ASN1_NO_EXTENSIONS     , dissect_tetra_BIT_STRING },
7829   { 0, NULL, 0, NULL }
7830 };
7831
7832 static int
7833 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_) {
7834   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7835                                  ett_tetra_T_optional_elements_02, T_optional_elements_02_choice,
7836                                  NULL);
7837
7838   return offset;
7839 }
7840
7841
7842 static const per_sequence_t D_NEW_CELL_sequence[] = {
7843   { &hf_tetra_pdu_type_02   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
7844   { &hf_tetra_channel_command_valid, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
7845   { &hf_tetra_optional_elements_02, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_02 },
7846   { NULL, 0, 0, NULL }
7847 };
7848
7849 static int
7850 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_) {
7851   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7852                                    ett_tetra_D_NEW_CELL, D_NEW_CELL_sequence);
7853
7854   return offset;
7855 }
7856
7857
7858 static const value_string tetra_T_optional_elements_03_vals[] = {
7859   {   0, "no-type2" },
7860   {   1, "sdu" },
7861   { 0, NULL }
7862 };
7863
7864 static const per_choice_t T_optional_elements_03_choice[] = {
7865   {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7866   {   1, &hf_tetra_sdu           , ASN1_NO_EXTENSIONS     , dissect_tetra_BIT_STRING },
7867   { 0, NULL, 0, NULL }
7868 };
7869
7870 static int
7871 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_) {
7872   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7873                                  ett_tetra_T_optional_elements_03, T_optional_elements_03_choice,
7874                                  NULL);
7875
7876   return offset;
7877 }
7878
7879
7880 static const per_sequence_t D_PREPARE_FAIL_sequence[] = {
7881   { &hf_tetra_pdu_type_02   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
7882   { &hf_tetra_fail_cause    , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
7883   { &hf_tetra_optional_elements_03, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_03 },
7884   { NULL, 0, 0, NULL }
7885 };
7886
7887 static int
7888 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_) {
7889   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7890                                    ett_tetra_D_PREPARE_FAIL, D_PREPARE_FAIL_sequence);
7891
7892   return offset;
7893 }
7894
7895
7896
7897 static int
7898 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_) {
7899   offset = dissect_per_integer(tvb, offset, actx, tree, hf_index, NULL);
7900
7901   return offset;
7902 }
7903
7904
7905
7906 static int
7907 dissect_tetra_T_reserved(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7908   offset = dissect_per_integer(tvb, offset, actx, tree, hf_index, NULL);
7909
7910   return offset;
7911 }
7912
7913
7914 static const per_sequence_t TETRA_NETWORK_TIME_sequence[] = {
7915   { &hf_tetra_network_time  , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_network_time },
7916   { &hf_tetra_local_time_offset_sign, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
7917   { &hf_tetra_local_time_offset, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_63 },
7918   { &hf_tetra_year          , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_63 },
7919   { &hf_tetra_reserved_04   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_reserved },
7920   { NULL, 0, 0, NULL }
7921 };
7922
7923 static int
7924 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_) {
7925   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7926                                    ett_tetra_TETRA_NETWORK_TIME, TETRA_NETWORK_TIME_sequence);
7927
7928   return offset;
7929 }
7930
7931
7932 static const value_string tetra_T_tetra_network_time_vals[] = {
7933   {   0, "none" },
7934   {   1, "tetra-network-time" },
7935   { 0, NULL }
7936 };
7937
7938 static const per_choice_t T_tetra_network_time_choice[] = {
7939   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7940   {   1, &hf_tetra_tetra_network_time_01, ASN1_NO_EXTENSIONS     , dissect_tetra_TETRA_NETWORK_TIME },
7941   { 0, NULL, 0, NULL }
7942 };
7943
7944 static int
7945 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_) {
7946   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7947                                  ett_tetra_T_tetra_network_time, T_tetra_network_time_choice,
7948                                  NULL);
7949
7950   return offset;
7951 }
7952
7953
7954 static const value_string tetra_T_number_of_neighbour_cells_vals[] = {
7955   {   0, "none" },
7956   {   1, "number-of-neighbour-cells" },
7957   { 0, NULL }
7958 };
7959
7960 static const per_choice_t T_number_of_neighbour_cells_choice[] = {
7961   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7962   {   1, &hf_tetra_number_of_neighbour_cells_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_7 },
7963   { 0, NULL, 0, NULL }
7964 };
7965
7966 static int
7967 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_) {
7968   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7969                                  ett_tetra_T_number_of_neighbour_cells, T_number_of_neighbour_cells_choice,
7970                                  NULL);
7971
7972   return offset;
7973 }
7974
7975
7976 static const per_sequence_t T_type2_parameters_02_sequence[] = {
7977   { &hf_tetra_tetra_network_time, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_tetra_network_time },
7978   { &hf_tetra_number_of_neighbour_cells, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_number_of_neighbour_cells },
7979   { NULL, 0, 0, NULL }
7980 };
7981
7982 static int
7983 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_) {
7984   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7985                                    ett_tetra_T_type2_parameters_02, T_type2_parameters_02_sequence);
7986
7987   return offset;
7988 }
7989
7990
7991 static const value_string tetra_T_optional_elements_04_vals[] = {
7992   {   0, "no-type2" },
7993   {   1, "type2-parameters" },
7994   { 0, NULL }
7995 };
7996
7997 static const per_choice_t T_optional_elements_04_choice[] = {
7998   {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7999   {   1, &hf_tetra_type2_parameters_02, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_parameters_02 },
8000   { 0, NULL, 0, NULL }
8001 };
8002
8003 static int
8004 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_) {
8005   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8006                                  ett_tetra_T_optional_elements_04, T_optional_elements_04_choice,
8007                                  NULL);
8008
8009   return offset;
8010 }
8011
8012
8013 static const per_sequence_t D_NWRK_BRDADCAST_sequence[] = {
8014   { &hf_tetra_pdu_type_02   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
8015   { &hf_tetra_cell_re_select_parameters, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_65535 },
8016   { &hf_tetra_cell_service_level, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
8017   { &hf_tetra_optional_elements_04, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_04 },
8018   { NULL, 0, 0, NULL }
8019 };
8020
8021 static int
8022 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_) {
8023   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8024                                    ett_tetra_D_NWRK_BRDADCAST, D_NWRK_BRDADCAST_sequence);
8025
8026   return offset;
8027 }
8028
8029
8030 static const per_sequence_t D_RESTORE_ACK_sequence[] = {
8031   { &hf_tetra_pdu_type_02   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
8032   { &hf_tetra_sdu           , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BIT_STRING },
8033   { NULL, 0, 0, NULL }
8034 };
8035
8036 static int
8037 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_) {
8038   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8039                                    ett_tetra_D_RESTORE_ACK, D_RESTORE_ACK_sequence);
8040
8041   return offset;
8042 }
8043
8044
8045 static const per_sequence_t D_RESTORE_FAIL_sequence[] = {
8046   { &hf_tetra_pdu_type_02   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
8047   { &hf_tetra_fail_cause    , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
8048   { NULL, 0, 0, NULL }
8049 };
8050
8051 static int
8052 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_) {
8053   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8054                                    ett_tetra_D_RESTORE_FAIL, D_RESTORE_FAIL_sequence);
8055
8056   return offset;
8057 }
8058
8059
8060 static const value_string tetra_DMLE_PDU_vals[] = {
8061   {   0, "d-new-cell" },
8062   {   1, "d-prepare-fail" },
8063   {   2, "d-nwrk-broadcast" },
8064   {   3, "dmle-reserved1" },
8065   {   4, "d-restore-ack" },
8066   {   5, "d-restore-fail" },
8067   {   6, "dmle-reserved2" },
8068   {   7, "dmle-reserved3" },
8069   { 0, NULL }
8070 };
8071
8072 static const per_choice_t DMLE_PDU_choice[] = {
8073   {   0, &hf_tetra_d_new_cell    , ASN1_NO_EXTENSIONS     , dissect_tetra_D_NEW_CELL },
8074   {   1, &hf_tetra_d_prepare_fail, ASN1_NO_EXTENSIONS     , dissect_tetra_D_PREPARE_FAIL },
8075   {   2, &hf_tetra_d_nwrk_broadcast, ASN1_NO_EXTENSIONS     , dissect_tetra_D_NWRK_BRDADCAST },
8076   {   3, &hf_tetra_dmle_reserved1, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8077   {   4, &hf_tetra_d_restore_ack , ASN1_NO_EXTENSIONS     , dissect_tetra_D_RESTORE_ACK },
8078   {   5, &hf_tetra_d_restore_fail, ASN1_NO_EXTENSIONS     , dissect_tetra_D_RESTORE_FAIL },
8079   {   6, &hf_tetra_dmle_reserved2, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8080   {   7, &hf_tetra_dmle_reserved3, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8081   { 0, NULL, 0, NULL }
8082 };
8083
8084 static int
8085 dissect_tetra_DMLE_PDU(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8086   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8087                                  ett_tetra_DMLE_PDU, DMLE_PDU_choice,
8088                                  NULL);
8089
8090   return offset;
8091 }
8092
8093
8094 static const value_string tetra_D_MLE_PDU_vals[] = {
8095   {   0, "u-mle-reserved1" },
8096   {   1, "mm" },
8097   {   2, "cmce" },
8098   {   3, "u-mle-reserved2" },
8099   {   4, "sndcp" },
8100   {   5, "mle" },
8101   {   6, "tetra-management-entity-protocol" },
8102   {   7, "u-mle-reserved3" },
8103   { 0, NULL }
8104 };
8105
8106 static const per_choice_t D_MLE_PDU_choice[] = {
8107   {   0, &hf_tetra_u_mle_reserved1, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8108   {   1, &hf_tetra_mm_01         , ASN1_NO_EXTENSIONS     , dissect_tetra_D_MM_PDU },
8109   {   2, &hf_tetra_cmce_01       , ASN1_NO_EXTENSIONS     , dissect_tetra_D_CMCE_PDU },
8110   {   3, &hf_tetra_u_mle_reserved2, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8111   {   4, &hf_tetra_sndcp         , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8112   {   5, &hf_tetra_mle_01        , ASN1_NO_EXTENSIONS     , dissect_tetra_DMLE_PDU },
8113   {   6, &hf_tetra_tetra_management_entity_protocol, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8114   {   7, &hf_tetra_u_mle_reserved3, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8115   { 0, NULL, 0, NULL }
8116 };
8117
8118 static int
8119 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_) {
8120   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8121                                  ett_tetra_D_MLE_PDU, D_MLE_PDU_choice,
8122                                  NULL);
8123
8124   return offset;
8125 }
8126
8127
8128 static const per_sequence_t D_BL_ADATA_sequence[] = {
8129   { &hf_tetra_nr            , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
8130   { &hf_tetra_ns            , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
8131   { &hf_tetra_tl_sdu_01     , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_D_MLE_PDU },
8132   { NULL, 0, 0, NULL }
8133 };
8134
8135 static int
8136 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_) {
8137   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8138                                    ett_tetra_D_BL_ADATA, D_BL_ADATA_sequence);
8139
8140   return offset;
8141 }
8142
8143
8144 static const per_sequence_t D_BL_DATA_sequence[] = {
8145   { &hf_tetra_ns            , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
8146   { &hf_tetra_tl_sdu_01     , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_D_MLE_PDU },
8147   { NULL, 0, 0, NULL }
8148 };
8149
8150 static int
8151 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_) {
8152   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8153                                    ett_tetra_D_BL_DATA, D_BL_DATA_sequence);
8154
8155   return offset;
8156 }
8157
8158
8159 static const per_sequence_t D_BL_ACK_sequence[] = {
8160   { &hf_tetra_nr            , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
8161   { &hf_tetra_tl_sdu_01     , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_D_MLE_PDU },
8162   { NULL, 0, 0, NULL }
8163 };
8164
8165 static int
8166 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_) {
8167   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8168                                    ett_tetra_D_BL_ACK, D_BL_ACK_sequence);
8169
8170   return offset;
8171 }
8172
8173
8174 static const per_sequence_t D_BL_ADATA_FCS_sequence[] = {
8175   { &hf_tetra_nr            , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
8176   { &hf_tetra_ns            , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
8177   { &hf_tetra_tl_sdu_01     , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_D_MLE_PDU },
8178   { &hf_tetra_fcs           , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_OCTET_STRING_SIZE_4 },
8179   { NULL, 0, 0, NULL }
8180 };
8181
8182 static int
8183 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_) {
8184   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8185                                    ett_tetra_D_BL_ADATA_FCS, D_BL_ADATA_FCS_sequence);
8186
8187   return offset;
8188 }
8189
8190
8191 static const per_sequence_t D_BL_DATA_FCS_sequence[] = {
8192   { &hf_tetra_ns            , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
8193   { &hf_tetra_tl_sdu_01     , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_D_MLE_PDU },
8194   { &hf_tetra_fcs           , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_OCTET_STRING_SIZE_4 },
8195   { NULL, 0, 0, NULL }
8196 };
8197
8198 static int
8199 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_) {
8200   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8201                                    ett_tetra_D_BL_DATA_FCS, D_BL_DATA_FCS_sequence);
8202
8203   return offset;
8204 }
8205
8206
8207 static const per_sequence_t D_MLE_PDU_FCS_sequence[] = {
8208   { &hf_tetra_d_mle_pdu     , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_D_MLE_PDU },
8209   { &hf_tetra_fcs           , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_OCTET_STRING_SIZE_4 },
8210   { NULL, 0, 0, NULL }
8211 };
8212
8213 static int
8214 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_) {
8215   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8216                                    ett_tetra_D_MLE_PDU_FCS, D_MLE_PDU_FCS_sequence);
8217
8218   return offset;
8219 }
8220
8221
8222 static const per_sequence_t D_BL_ACK_FCS_sequence[] = {
8223   { &hf_tetra_nr            , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
8224   { &hf_tetra_tl_sdu_01     , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_D_MLE_PDU },
8225   { &hf_tetra_fcs           , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_OCTET_STRING_SIZE_4 },
8226   { NULL, 0, 0, NULL }
8227 };
8228
8229 static int
8230 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_) {
8231   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8232                                    ett_tetra_D_BL_ACK_FCS, D_BL_ACK_FCS_sequence);
8233
8234   return offset;
8235 }
8236
8237
8238 static const value_string tetra_D_LLC_PDU_vals[] = {
8239   {   0, "bl-adata" },
8240   {   1, "bl-data" },
8241   {   2, "bl-udata" },
8242   {   3, "bl-ack" },
8243   {   4, "bl-adata-fcs" },
8244   {   5, "bl-data-fcs" },
8245   {   6, "bl-udata-fcs" },
8246   {   7, "bl-ack-fcs" },
8247   {   8, "al-setup" },
8248   {   9, "al-data" },
8249   {  10, "al-udata" },
8250   {  11, "al-ack" },
8251   {  12, "al-reconnect" },
8252   {  13, "reserve1" },
8253   {  14, "reserve2" },
8254   {  15, "al-disc" },
8255   { 0, NULL }
8256 };
8257
8258 static const per_choice_t D_LLC_PDU_choice[] = {
8259   {   0, &hf_tetra_bl_adata_01   , ASN1_NO_EXTENSIONS     , dissect_tetra_D_BL_ADATA },
8260   {   1, &hf_tetra_bl_data_01    , ASN1_NO_EXTENSIONS     , dissect_tetra_D_BL_DATA },
8261   {   2, &hf_tetra_bl_udata_01   , ASN1_NO_EXTENSIONS     , dissect_tetra_D_MLE_PDU },
8262   {   3, &hf_tetra_bl_ack_01     , ASN1_NO_EXTENSIONS     , dissect_tetra_D_BL_ACK },
8263   {   4, &hf_tetra_bl_adata_fcs_01, ASN1_NO_EXTENSIONS     , dissect_tetra_D_BL_ADATA_FCS },
8264   {   5, &hf_tetra_bl_data_fcs_01, ASN1_NO_EXTENSIONS     , dissect_tetra_D_BL_DATA_FCS },
8265   {   6, &hf_tetra_bl_udata_fcs_01, ASN1_NO_EXTENSIONS     , dissect_tetra_D_MLE_PDU_FCS },
8266   {   7, &hf_tetra_bl_ack_fcs_01 , ASN1_NO_EXTENSIONS     , dissect_tetra_D_BL_ACK_FCS },
8267   {   8, &hf_tetra_al_setup      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8268   {   9, &hf_tetra_al_data       , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8269   {  10, &hf_tetra_al_udata      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8270   {  11, &hf_tetra_al_ack        , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8271   {  12, &hf_tetra_al_reconnect  , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8272   {  13, &hf_tetra_reserve1      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8273   {  14, &hf_tetra_reserve2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8274   {  15, &hf_tetra_al_disc       , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8275   { 0, NULL, 0, NULL }
8276 };
8277
8278 static int
8279 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_) {
8280   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8281                                  ett_tetra_D_LLC_PDU, D_LLC_PDU_choice,
8282                                  NULL);
8283
8284   return offset;
8285 }
8286
8287
8288 static const per_sequence_t OTHER_DATA_sequence[] = {
8289   { &hf_tetra_power_control , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_power_control },
8290   { &hf_tetra_slot_granting_02, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_slot_granting_02 },
8291   { &hf_tetra_channel_allocation_02, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_channel_allocation_02 },
8292   { &hf_tetra_tm_sdu_09     , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_D_LLC_PDU },
8293   { NULL, 0, 0, NULL }
8294 };
8295
8296 static int
8297 dissect_tetra_OTHER_DATA(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8298   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8299                                    ett_tetra_OTHER_DATA, OTHER_DATA_sequence);
8300
8301   return offset;
8302 }
8303
8304
8305 static const per_sequence_t SSI_NEED_sequence[] = {
8306   { &hf_tetra_ssi           , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16777215 },
8307   { &hf_tetra_other         , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_OTHER_DATA },
8308   { NULL, 0, 0, NULL }
8309 };
8310
8311 static int
8312 dissect_tetra_SSI_NEED(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8313   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8314                                    ett_tetra_SSI_NEED, SSI_NEED_sequence);
8315
8316   return offset;
8317 }
8318
8319
8320 static const per_sequence_t EVENT_NEED_sequence[] = {
8321   { &hf_tetra_eventlabel    , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1023 },
8322   { &hf_tetra_other         , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_OTHER_DATA },
8323   { NULL, 0, 0, NULL }
8324 };
8325
8326 static int
8327 dissect_tetra_EVENT_NEED(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8328   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8329                                    ett_tetra_EVENT_NEED, EVENT_NEED_sequence);
8330
8331   return offset;
8332 }
8333
8334
8335 static const per_sequence_t USSI_NEED_sequence[] = {
8336   { &hf_tetra_ussi          , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16777215 },
8337   { &hf_tetra_other         , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_OTHER_DATA },
8338   { NULL, 0, 0, NULL }
8339 };
8340
8341 static int
8342 dissect_tetra_USSI_NEED(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8343   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8344                                    ett_tetra_USSI_NEED, USSI_NEED_sequence);
8345
8346   return offset;
8347 }
8348
8349
8350 static const per_sequence_t SMI_NEED_sequence[] = {
8351   { &hf_tetra_smi           , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16777215 },
8352   { &hf_tetra_other         , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_OTHER_DATA },
8353   { NULL, 0, 0, NULL }
8354 };
8355
8356 static int
8357 dissect_tetra_SMI_NEED(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8358   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8359                                    ett_tetra_SMI_NEED, SMI_NEED_sequence);
8360
8361   return offset;
8362 }
8363
8364
8365 static const per_sequence_t SSI_EVENT_NEED_sequence[] = {
8366   { &hf_tetra_ssi           , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16777215 },
8367   { &hf_tetra_ventlabel     , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1023 },
8368   { &hf_tetra_other         , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_OTHER_DATA },
8369   { NULL, 0, 0, NULL }
8370 };
8371
8372 static int
8373 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_) {
8374   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8375                                    ett_tetra_SSI_EVENT_NEED, SSI_EVENT_NEED_sequence);
8376
8377   return offset;
8378 }
8379
8380
8381 static const per_sequence_t SSI_USAGE_NEED_sequence[] = {
8382   { &hf_tetra_ssi           , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16777215 },
8383   { &hf_tetra_usage_maker   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_63 },
8384   { &hf_tetra_other         , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_OTHER_DATA },
8385   { NULL, 0, 0, NULL }
8386 };
8387
8388 static int
8389 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_) {
8390   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8391                                    ett_tetra_SSI_USAGE_NEED, SSI_USAGE_NEED_sequence);
8392
8393   return offset;
8394 }
8395
8396
8397
8398 static int
8399 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_) {
8400   offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
8401                                      34, 34, FALSE, NULL);
8402
8403   return offset;
8404 }
8405
8406
8407 static const per_sequence_t SMI_EVENT_NEED_sequence[] = {
8408   { &hf_tetra_smi_eventlabel, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BIT_STRING_SIZE_34 },
8409   { &hf_tetra_other         , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_OTHER_DATA },
8410   { NULL, 0, 0, NULL }
8411 };
8412
8413 static int
8414 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_) {
8415   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8416                                    ett_tetra_SMI_EVENT_NEED, SMI_EVENT_NEED_sequence);
8417
8418   return offset;
8419 }
8420
8421
8422 static const value_string tetra_AddressMacResource_vals[] = {
8423   {   0, "null-pdu" },
8424   {   1, "ssi" },
8425   {   2, "eventLabel" },
8426   {   3, "ussi" },
8427   {   4, "smi" },
8428   {   5, "ssi-eventLabel" },
8429   {   6, "ssi-usage-maker" },
8430   {   7, "smi-eventLabel" },
8431   { 0, NULL }
8432 };
8433
8434 static const per_choice_t AddressMacResource_choice[] = {
8435   {   0, &hf_tetra_null_pdu      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8436   {   1, &hf_tetra_ssi_01        , ASN1_NO_EXTENSIONS     , dissect_tetra_SSI_NEED },
8437   {   2, &hf_tetra_eventLabel_01 , ASN1_NO_EXTENSIONS     , dissect_tetra_EVENT_NEED },
8438   {   3, &hf_tetra_ussi_01       , ASN1_NO_EXTENSIONS     , dissect_tetra_USSI_NEED },
8439   {   4, &hf_tetra_smi_01        , ASN1_NO_EXTENSIONS     , dissect_tetra_SMI_NEED },
8440   {   5, &hf_tetra_ssi_eventLabel, ASN1_NO_EXTENSIONS     , dissect_tetra_SSI_EVENT_NEED },
8441   {   6, &hf_tetra_ssi_usage_maker, ASN1_NO_EXTENSIONS     , dissect_tetra_SSI_USAGE_NEED },
8442   {   7, &hf_tetra_smi_eventLabel, ASN1_NO_EXTENSIONS     , dissect_tetra_SMI_EVENT_NEED },
8443   { 0, NULL, 0, NULL }
8444 };
8445
8446 static int
8447 dissect_tetra_AddressMacResource(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_AddressMacResource, AddressMacResource_choice,
8450                                  NULL);
8451
8452   return offset;
8453 }
8454
8455
8456 static const per_sequence_t MAC_RESOURCE_sequence[] = {
8457   { &hf_tetra_pdu_type      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
8458   { &hf_tetra_fill_bit_indication, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Fill_Bit_Indication },
8459   { &hf_tetra_position_of_grant, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Position_Of_Grant },
8460   { &hf_tetra_encryption_mode, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
8461   { &hf_tetra_access_ack    , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_access_ack },
8462   { &hf_tetra_lengthIndication_02, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_LengthIndicationMacResource },
8463   { &hf_tetra_address_01    , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_AddressMacResource },
8464   { NULL, 0, 0, NULL }
8465 };
8466
8467 static int
8468 dissect_tetra_MAC_RESOURCE(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8469   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8470                                    ett_tetra_MAC_RESOURCE, MAC_RESOURCE_sequence);
8471
8472   return offset;
8473 }
8474
8475
8476
8477 static int
8478 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_) {
8479   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
8480                                                             0U, 33554431U, NULL, FALSE);
8481
8482   return offset;
8483 }
8484
8485
8486 static const value_string tetra_T_optional_field_vals[] = {
8487   {   0, "none" },
8488   {   1, "class-bitmap" },
8489   {   2, "gssi" },
8490   {   3, "reserved" },
8491   { 0, NULL }
8492 };
8493
8494 static const per_choice_t T_optional_field_choice[] = {
8495   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8496   {   1, &hf_tetra_class_bitmap  , ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_65535 },
8497   {   2, &hf_tetra_gssi          , ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_33554431 },
8498   {   3, &hf_tetra_reserved_03   , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8499   { 0, NULL, 0, NULL }
8500 };
8501
8502 static int
8503 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_) {
8504   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8505                                  ett_tetra_T_optional_field, T_optional_field_choice,
8506                                  NULL);
8507
8508   return offset;
8509 }
8510
8511
8512 static const per_sequence_t MAC_ACCESS_DEFINE_sequence[] = {
8513   { &hf_tetra_pdu_type      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
8514   { &hf_tetra_broadcast_type, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
8515   { &hf_tetra_broadcast_channel, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
8516   { &hf_tetra_access_code   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
8517   { &hf_tetra_imm_01        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_15 },
8518   { &hf_tetra_wt_01         , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_15 },
8519   { &hf_tetra_nu_01         , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_15 },
8520   { &hf_tetra_frame_len_factor_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
8521   { &hf_tetra_timeslot_pointer_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_15 },
8522   { &hf_tetra_min_priority  , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
8523   { &hf_tetra_optional_field, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_field },
8524   { &hf_tetra_filler_bits   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
8525   { NULL, 0, 0, NULL }
8526 };
8527
8528 static int
8529 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_) {
8530   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8531                                    ett_tetra_MAC_ACCESS_DEFINE, MAC_ACCESS_DEFINE_sequence);
8532
8533   return offset;
8534 }
8535
8536 /*--- PDUs ---*/
8537
8538 static void dissect_AACH_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
8539   asn1_ctx_t asn1_ctx;
8540   asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, FALSE, pinfo);
8541   dissect_tetra_AACH(tvb, 0, &asn1_ctx, tree, hf_tetra_AACH_PDU);
8542 }
8543 static void dissect_BSCH_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
8544   asn1_ctx_t asn1_ctx;
8545   asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, FALSE, pinfo);
8546   dissect_tetra_BSCH(tvb, 0, &asn1_ctx, tree, hf_tetra_BSCH_PDU);
8547 }
8548 static void dissect_BNCH_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
8549   asn1_ctx_t asn1_ctx;
8550   asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, FALSE, pinfo);
8551   dissect_tetra_BNCH(tvb, 0, &asn1_ctx, tree, hf_tetra_BNCH_PDU);
8552 }
8553 static void dissect_MAC_ACCESS_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
8554   asn1_ctx_t asn1_ctx;
8555   asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, FALSE, pinfo);
8556   dissect_tetra_MAC_ACCESS(tvb, 0, &asn1_ctx, tree, hf_tetra_MAC_ACCESS_PDU);
8557 }
8558 static void dissect_MAC_FRAG_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
8559   asn1_ctx_t asn1_ctx;
8560   asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, FALSE, pinfo);
8561   dissect_tetra_MAC_FRAG(tvb, 0, &asn1_ctx, tree, hf_tetra_MAC_FRAG_PDU);
8562 }
8563 static void dissect_MAC_FRAG120_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
8564   asn1_ctx_t asn1_ctx;
8565   asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, FALSE, pinfo);
8566   dissect_tetra_MAC_FRAG120(tvb, 0, &asn1_ctx, tree, hf_tetra_MAC_FRAG120_PDU);
8567 }
8568 static void dissect_MAC_END_UPLINK_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
8569   asn1_ctx_t asn1_ctx;
8570   asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, FALSE, pinfo);
8571   dissect_tetra_MAC_END_UPLINK(tvb, 0, &asn1_ctx, tree, hf_tetra_MAC_END_UPLINK_PDU);
8572 }
8573 static void dissect_MAC_END_UP114_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
8574   asn1_ctx_t asn1_ctx;
8575   asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, FALSE, pinfo);
8576   dissect_tetra_MAC_END_UP114(tvb, 0, &asn1_ctx, tree, hf_tetra_MAC_END_UP114_PDU);
8577 }
8578 static void dissect_MAC_END_HU_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
8579   asn1_ctx_t asn1_ctx;
8580   asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, FALSE, pinfo);
8581   dissect_tetra_MAC_END_HU(tvb, 0, &asn1_ctx, tree, hf_tetra_MAC_END_HU_PDU);
8582 }
8583 static void dissect_MAC_END_DOWNLINK_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
8584   asn1_ctx_t asn1_ctx;
8585   asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, FALSE, pinfo);
8586   dissect_tetra_MAC_END_DOWNLINK(tvb, 0, &asn1_ctx, tree, hf_tetra_MAC_END_DOWNLINK_PDU);
8587 }
8588 static void dissect_MAC_END_DOWN111_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
8589   asn1_ctx_t asn1_ctx;
8590   asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, FALSE, pinfo);
8591   dissect_tetra_MAC_END_DOWN111(tvb, 0, &asn1_ctx, tree, hf_tetra_MAC_END_DOWN111_PDU);
8592 }
8593 static void dissect_MAC_RESOURCE_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
8594   asn1_ctx_t asn1_ctx;
8595   asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, FALSE, pinfo);
8596   dissect_tetra_MAC_RESOURCE(tvb, 0, &asn1_ctx, tree, hf_tetra_MAC_RESOURCE_PDU);
8597 }
8598 static void dissect_MAC_ACCESS_DEFINE_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
8599   asn1_ctx_t asn1_ctx;
8600   asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, FALSE, pinfo);
8601   dissect_tetra_MAC_ACCESS_DEFINE(tvb, 0, &asn1_ctx, tree, hf_tetra_MAC_ACCESS_DEFINE_PDU);
8602 }
8603
8604
8605 /*--- End of included file: packet-tetra-fn.c ---*/
8606 #line 97 "../../asn1/tetra/packet-tetra-template.c"
8607
8608 static const value_string channeltypenames[] = {
8609         { 0, "Reserved" },
8610         { 1, "AACH" },
8611         { 2, "SCH/F" },
8612         { 3, "SCH/HD" },
8613         { 4, "Unknown" },
8614         { 5, "BSCH" },
8615         { 6, "BNCH" },
8616         { 7, "TCH/F" },
8617         { 8, "TCH/H" },
8618         { 9, "TCH4.8"},
8619         { 10, "TCH7.2"},
8620         { 11, "STCH"},
8621         { 0, NULL }
8622 };
8623
8624 static const value_string recvchanneltypenames[] = {
8625         { 0, "Reserved" },
8626         { 1, "AACH" },
8627         { 2, "SCH/F" },
8628         { 3, "SCH/HD" },
8629         { 4, "Unknown" },
8630         { 5, "BSCH" },
8631         { 6, "BNCH" },
8632         { 7, "TCH/F" },
8633         { 8, "TCH/H" },
8634         { 9, "TCH4.8"},
8635         { 10, "TCH7.2"},
8636         { 11, "STCH"},
8637         { 15, "SCH/HU"},
8638         { 0, NULL }
8639 };
8640
8641 /* Get the length of received pdu */
8642 static gint get_rx_pdu_length(guint32 channel_type)
8643 {
8644         gint len = 0;
8645
8646         switch(channel_type) {
8647         case TETRA_CHAN_AACH:
8648                 len = 14;
8649                 break;
8650         case TETRA_CHAN_SCH_F:
8651                 len = 268;
8652                 break;
8653         case TETRA_CHAN_SCH_D:
8654                 len = 124; ;
8655                 break;
8656         case TETRA_CHAN_BSCH:
8657                 len = 60;
8658                 break;
8659         case TETRA_CHAN_BNCH:
8660                 len = 124;
8661                 break;
8662         case TETRA_CHAN_TCH_F:
8663                 len = 274;
8664                 break;
8665         case TETRA_CHAN_TCH_H:
8666                 len = 137;
8667                 break;
8668         case TETRA_CHAN_TCH_2_4:
8669                 len = 144;
8670                 break;
8671         case TETRA_CHAN_TCH_4_8:
8672                 len = 288;
8673                 break;
8674         case TETRA_CHAN_STCH:
8675                 len = 124;
8676                 break;
8677         case TETRA_CHAN_SCH_HU:
8678                 len = 92;
8679                 break;
8680         default:
8681                 len = 0;
8682                 break;
8683         }
8684
8685         return len;
8686 }
8687
8688 /* Get the length of transmitted pdu */
8689 static gint get_tx_pdu_length(guint32 channel_type)
8690 {
8691         gint len = 0;
8692
8693         switch(channel_type) {
8694         case TETRA_CHAN_AACH:
8695                 len = 14;
8696                 break;
8697         case TETRA_CHAN_SCH_F:
8698                 len = 268;
8699                 break;
8700         case TETRA_CHAN_SCH_D:
8701                 len = 124;
8702                 break;
8703         case TETRA_CHAN_BSCH:
8704                 len = 60;
8705                 break;
8706         case TETRA_CHAN_BNCH:
8707                 len = 124;
8708                 break;
8709         case TETRA_CHAN_TCH_F:
8710                 len = 274;
8711                 break;
8712         case TETRA_CHAN_TCH_H:
8713                 len = 137;
8714                 break;
8715         case TETRA_CHAN_TCH_2_4:
8716                 len = 144;
8717                 break;
8718         case TETRA_CHAN_TCH_4_8:
8719                 len = 288;
8720                 break;
8721         case TETRA_CHAN_STCH:
8722                 len = 124;
8723                 break;
8724         }
8725
8726         return len;
8727 }
8728
8729 void tetra_dissect_pdu(int channel_type, int dir, tvbuff_t *pdu, proto_tree *tree, packet_info *pinfo)
8730 {
8731         proto_item *tetra_sub_item;
8732         proto_tree *tetra_sub_tree;
8733         guint8 p;
8734
8735         tetra_sub_item = proto_tree_add_item(tree, hf_tetra_pdu,
8736                                              pdu, 0, tvb_length(pdu), ENC_NA);
8737
8738         tetra_sub_tree = proto_item_add_subtree(tetra_sub_item, ett_tetra);
8739
8740         switch(channel_type) {
8741         case TETRA_CHAN_AACH:
8742                 dissect_AACH_PDU(pdu, pinfo, tetra_sub_tree );
8743                 break;
8744         case TETRA_CHAN_SCH_F:
8745                 p = tvb_get_guint8(pdu, 0);
8746                 switch(p >> 6) {
8747                 case 0:
8748                         dissect_MAC_RESOURCE_PDU(pdu, pinfo, tetra_sub_tree );
8749                         break;
8750                 case 1: /* MAC-FRAG or MAC-END */
8751                         if((p >> 5) == 3) {
8752                                 if (dir == TETRA_DOWNLINK)
8753                                         dissect_MAC_END_DOWNLINK_PDU(pdu, pinfo, tetra_sub_tree );
8754                                 else
8755                                         dissect_MAC_END_UPLINK_PDU(pdu, pinfo, tetra_sub_tree);
8756
8757                         } else
8758                                 dissect_MAC_FRAG_PDU(pdu, pinfo, tetra_sub_tree );
8759                         break;
8760                 case 2:
8761                         dissect_MAC_ACCESS_DEFINE_PDU(pdu, pinfo, tetra_sub_tree );
8762                         break;
8763                 }
8764                 break;
8765         case TETRA_CHAN_SCH_D:
8766                 p = tvb_get_guint8(pdu, 0);
8767                 switch(p >> 6) {
8768                 case 0:
8769                         dissect_MAC_RESOURCE_PDU(pdu, pinfo, tetra_sub_tree );
8770                         break;
8771                 case 1: /* MAC-FRAG or MAC-END */
8772                         if((p >> 5) == 3)
8773                                 dissect_MAC_END_DOWN111_PDU(pdu, pinfo, tetra_sub_tree );
8774                         else
8775                                 dissect_MAC_FRAG120_PDU(pdu, pinfo, tetra_sub_tree );
8776                 break;
8777                 case 2:
8778                         dissect_MAC_ACCESS_DEFINE_PDU(pdu, pinfo, tetra_sub_tree );
8779                         break;
8780                 }
8781                 break;
8782         case TETRA_CHAN_SCH_HU:
8783                 p = tvb_get_guint8(pdu, 0);
8784                 switch(p >> 7) {
8785                 case 0: /* MAC-ACCESS */
8786                         dissect_MAC_ACCESS_PDU(pdu, pinfo, tetra_sub_tree);
8787                         break;
8788                 case 1: /* MAC-END-HU */
8789                         dissect_MAC_END_HU_PDU(pdu, pinfo, tetra_sub_tree);
8790                         break;
8791                 }
8792                 break;
8793         case TETRA_CHAN_BSCH:
8794                 dissect_BSCH_PDU(pdu, pinfo, tetra_sub_tree );
8795                 break;
8796         case TETRA_CHAN_BNCH:
8797                 dissect_BNCH_PDU(pdu, pinfo, tetra_sub_tree );
8798                 break;
8799         case TETRA_CHAN_STCH:
8800                 p = tvb_get_guint8(pdu, 0);
8801                 switch(p >> 6) {
8802                 case 0:
8803                         dissect_MAC_RESOURCE_PDU(pdu, pinfo, tetra_sub_tree );
8804                         break;
8805                 case 1: /* MAC-FRAG or MAC-END */
8806                         if((p >> 5) == 3) {
8807                                 if (dir == TETRA_DOWNLINK)
8808                                         dissect_MAC_END_DOWN111_PDU(pdu, pinfo, tetra_sub_tree );
8809                                 else
8810                                         dissect_MAC_END_UP114_PDU(pdu, pinfo, tetra_sub_tree);
8811                         } else
8812                                 dissect_MAC_FRAG120_PDU(pdu, pinfo, tetra_sub_tree );
8813                         break;
8814                 case 2:
8815                         dissect_MAC_ACCESS_DEFINE_PDU(pdu, pinfo, tetra_sub_tree );
8816                         break;
8817                 }
8818                 break;
8819         }
8820 }
8821
8822 static void dissect_tetra_UNITDATA_IND(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tetra_tree, int offset)
8823 {
8824         guint32 rxreg = 0;
8825         guint32 channels = 0, i;
8826         guint32 channel_type;
8827         gint pdu_offset = 0;
8828         proto_item *tetra_sub_item;
8829         proto_tree *tetra_header_tree = NULL;
8830         tvbuff_t *payload_tvb;
8831
8832         /* Length */
8833         rxreg = tvb_get_letohl(tvb, offset);
8834         proto_tree_add_uint(tetra_tree, hf_tetra_len0, tvb, offset, 4, rxreg);
8835
8836         /* RvSteR */
8837         offset += 4;
8838         rxreg = tvb_get_letohl(tvb, offset);
8839         proto_tree_add_uint(tetra_tree, hf_tetra_rvstr, tvb, offset, 4, rxreg);
8840
8841         /* Logical channels */
8842         channels = rxreg & 0x3;
8843         tetra_sub_item = proto_tree_add_uint( tetra_tree, hf_tetra_channels, tvb, offset, 4, channels );
8844         tetra_header_tree = proto_item_add_subtree(tetra_sub_item, ett_tetra);
8845
8846         pdu_offset = offset + 4;
8847         for(i = 0; i < channels; i++) {
8848                 gint hf_channel[] = {
8849                     hf_tetra_rxchannel1,
8850                     hf_tetra_rxchannel2,
8851                     hf_tetra_rxchannel3
8852                 };
8853                 gint byte_len, bits_len, remaining_bits;
8854
8855                 /* Channel type */
8856                 channel_type = (rxreg >> ((i + 1) * 4) ) & 0xf;
8857                 proto_tree_add_uint( tetra_header_tree, hf_channel[i], tvb, offset, 4, channel_type);
8858
8859                 /* CRC */
8860                 proto_tree_add_boolean( tetra_header_tree, hf_tetra_crc, tvb, offset, 4, !(rxreg >> (i + 2) & 0x01));
8861
8862                 /* PDU */
8863                 bits_len = get_rx_pdu_length(channel_type);
8864                 byte_len = bits_len >> 3;
8865                 remaining_bits = bits_len % 8;
8866                 if ((remaining_bits)!=0)
8867                         byte_len++;
8868
8869                 payload_tvb = tvb_new_subset(tvb, pdu_offset, byte_len, byte_len);
8870                 tetra_dissect_pdu(channel_type, TETRA_UPLINK, payload_tvb, tetra_header_tree, pinfo);
8871
8872                 if ((remaining_bits)!=0)
8873                         byte_len--;
8874                 pdu_offset += byte_len;
8875         }
8876 }
8877
8878 void dissect_tetra_UNITDATA_REQ(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tetra_tree, int offset)
8879 {
8880         guint32 txreg = 0;
8881         guint32 channels = 0, i;
8882         guint32 channel_type;
8883         gint pdu_offset = 0;
8884         proto_item *tetra_sub_item = NULL;
8885         proto_tree *tetra_header_tree = NULL;
8886         tvbuff_t *payload_tvb;
8887
8888         /* TxR */
8889         txreg = tvb_get_letohl(tvb, offset);
8890         proto_tree_add_uint(tetra_tree, hf_tetra_txreg, tvb, offset, 4, txreg);
8891
8892         /* Logical channels */
8893         channels = (txreg & 0x3) + 1;
8894         tetra_sub_item = proto_tree_add_uint( tetra_tree, hf_tetra_channels, tvb, offset, 4, channels );
8895         tetra_header_tree = proto_item_add_subtree(tetra_sub_item, ett_tetra);
8896         txreg >>= 2;
8897         /* Skip 0000B */
8898         if(channels == 2)
8899                 txreg >>= 4;
8900
8901         pdu_offset = offset + 4;
8902         for(i = 0; i < channels; i++) {
8903                 gint hf_channel[] = {hf_tetra_channel1, hf_tetra_channel2, hf_tetra_channel3};
8904                 gint byte_len, bits_len, remaining_bits;
8905
8906                 channel_type = txreg & 0xf;
8907                 proto_tree_add_uint( tetra_header_tree, hf_channel[i], tvb, offset, 4, channel_type);
8908                 txreg >>= 4;
8909                 /* PDU */
8910                 bits_len = get_tx_pdu_length(channel_type);
8911                 byte_len = bits_len >> 3;
8912                 remaining_bits = bits_len % 8;
8913                 if ((remaining_bits)!=0)
8914                                 byte_len++;
8915
8916                 payload_tvb = tvb_new_subset(tvb, pdu_offset, byte_len, byte_len);
8917                 tetra_dissect_pdu(channel_type, TETRA_DOWNLINK, payload_tvb, tetra_header_tree, pinfo);
8918                 pdu_offset += byte_len;
8919         }
8920 }
8921
8922 static void
8923 dissect_tetra(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
8924 {
8925
8926         proto_item *tetra_item = NULL;
8927         proto_item *tetra_sub_item = NULL;
8928         proto_tree *tetra_tree = NULL;
8929         proto_tree *tetra_header_tree = NULL;
8930         guint16 type = 0;
8931         guint16 carriernumber = -1;
8932
8933         col_set_str(pinfo->cinfo, COL_PROTOCOL, PROTO_TAG_tetra);
8934         /* Clear out stuff in the info column */
8935         col_clear(pinfo->cinfo,COL_INFO);
8936
8937         /*
8938          * This is not a good way of dissecting packets.  The tvb length should
8939          * be sanity checked so we aren't going past the actual size of the buffer.
8940          */
8941         type = tvb_get_guint8(tvb, 0);
8942
8943         if(include_carrier_number) {
8944                 carriernumber = tvb_get_guint8(tvb, 1);
8945                 carriernumber |= 0xff00;
8946         }
8947
8948
8949         switch(type) {
8950         case 1:
8951                 if(include_carrier_number)
8952                         col_add_fstr(pinfo->cinfo, COL_INFO, "%d > %d tetra-UNITDATA-REQ, Carrier: %d",
8953                                         pinfo->srcport, pinfo->destport, carriernumber);
8954                 else
8955                         col_add_fstr(pinfo->cinfo, COL_INFO, "%d > %d tetra-UNITDATA-REQ",
8956                                         pinfo->srcport, pinfo->destport);
8957                 break;
8958         case 2:
8959                 if(include_carrier_number)
8960                         col_add_fstr(pinfo->cinfo, COL_INFO, "%d > %d tetra-UNITDATA-IND, Carrier: %d",
8961                                         pinfo->srcport, pinfo->destport, carriernumber);
8962                 else
8963                         col_add_fstr(pinfo->cinfo, COL_INFO, "%d > %d tetra-UNITDATA-IND",
8964                                         pinfo->srcport, pinfo->destport);
8965                 break;
8966         case 3:
8967                 if(include_carrier_number)
8968                         col_add_fstr(pinfo->cinfo, COL_INFO, "%d > %d MAC-Timer, Carrier: %d",
8969                                         pinfo->srcport, pinfo->destport, carriernumber);
8970                 else
8971                         col_add_fstr(pinfo->cinfo, COL_INFO, "%d > %d MAC-Timer",
8972                                         pinfo->srcport, pinfo->destport);
8973                 break;
8974         case 127:
8975                 if(include_carrier_number)
8976                         col_add_fstr(pinfo->cinfo, COL_INFO, "%d > %d tetra-UNITDATA-IND Done, Carrier: %d",
8977                                         pinfo->srcport, pinfo->destport, carriernumber);
8978                 else
8979                         col_add_fstr(pinfo->cinfo, COL_INFO, "%d > %d tetra-UNITDATA-IND Done",
8980                                         pinfo->srcport, pinfo->destport);
8981                 break;
8982         case 128:
8983                 if(include_carrier_number)
8984                         col_add_fstr(pinfo->cinfo, COL_INFO, "%d > %d tetra-UNITDATA-REQ Done, Carrier: %d",
8985                                         pinfo->srcport, pinfo->destport, carriernumber);
8986           else
8987                         col_add_fstr(pinfo->cinfo, COL_INFO, "%d > %d tetra-UNITDATA-REQ Done",
8988                                         pinfo->srcport, pinfo->destport);
8989                 break;
8990         default:
8991                 col_add_fstr(pinfo->cinfo, COL_INFO, "%d > %d Unknown command: %d",
8992                                 pinfo->srcport, pinfo->destport, type);
8993                 break;
8994         }
8995
8996         if (tree) { /* we are being asked for details */
8997                 guint32 offset = 0;
8998                 guint32 txtimer = 0;
8999                 guint32 tslot = 0;
9000
9001                 tetra_item = proto_tree_add_item(tree, proto_tetra, tvb, 0, -1, ENC_NA);
9002                 tetra_tree = proto_item_add_subtree(tetra_item, ett_tetra);
9003
9004                 offset ++;
9005
9006                 /* Carrier number */
9007                 if(include_carrier_number) {
9008                         proto_tree_add_uint(tetra_tree, hf_tetra_carriernumber, tvb, offset, 1, carriernumber);
9009                         offset ++;
9010                 }
9011
9012                 /* Registers */
9013                 tetra_sub_item = proto_tree_add_item( tetra_tree, hf_tetra_header, tvb, offset, -1, ENC_NA );
9014                 tetra_header_tree = proto_item_add_subtree(tetra_sub_item, ett_tetra);
9015
9016                 /* Timer */
9017                 txtimer = tvb_get_letohl(tvb, offset);
9018                 tetra_sub_item = proto_tree_add_item(tetra_header_tree, hf_tetra_timer, tvb, offset, 4, ENC_LITTLE_ENDIAN);
9019                 tslot = ((txtimer & 0x7800) >> 11);
9020                 if(tslot==4)
9021                         tslot = 3;
9022                 if(tslot==8)
9023                         tslot = 4;
9024                 proto_item_append_text(tetra_sub_item, " (Multiple frame: %d, Frame: %d, Slot: %d)",
9025                                                                                                         txtimer & 0x3F, (txtimer & 0x7c0) >> 6,
9026                                                                                                         tslot);
9027
9028                 offset += 4;
9029
9030                 switch(type) {
9031                 case 1: /* tetra-UNITDATA-REQ */
9032                 case 128: /* tetra-UNITDATA-REQ Done */
9033                         dissect_tetra_UNITDATA_REQ(tvb, pinfo, tetra_header_tree, offset);
9034                         break;
9035                 case 2: /* tetra-UNITDATA-IND */
9036                 case 127: /* tetra-UNITDATA-IND Done */
9037                         dissect_tetra_UNITDATA_IND(tvb, pinfo, tetra_header_tree, offset);
9038                         break;
9039                 case 3: /* MAC-Timer */
9040                         break;
9041                 default:
9042                         break;
9043                 }
9044         }
9045 }
9046
9047 void proto_reg_handoff_tetra(void)
9048 {
9049         static gboolean initialized=FALSE;
9050
9051         if (!initialized) {
9052                 data_handle = find_dissector("data");
9053                 tetra_handle = create_dissector_handle(dissect_tetra, proto_tetra);
9054                 dissector_add_uint("udp.port", global_tetra_port, tetra_handle);
9055         }
9056
9057 }
9058
9059
9060 void proto_register_tetra (void)
9061 {
9062         module_t *per_module;
9063
9064         /*
9065          * A header field is something you can search/filter on.
9066          *
9067          * We create a structure to register our fields. It consists of an
9068          * array of hf_register_info structures, each of which are of the format
9069          * {&(field id), {name, abbrev, type, display, strings, bitmask, blurb, HFILL}}.
9070          */
9071         static hf_register_info hf[] = {
9072                 { &hf_tetra,
9073                 { "Data", "tetra.data", FT_NONE, BASE_NONE, NULL, 0x0,
9074                 "tetra PDU", HFILL }},
9075                 { &hf_tetra_header,
9076                 { "Registers", "tetra.header", FT_NONE, BASE_NONE, NULL, 0x0,
9077                  "TETRA Registers", HFILL }},
9078                 { &hf_tetra_channels,
9079                 { "Logical Channels", "tetra.channels", FT_UINT8, BASE_DEC, NULL, 0x0,
9080                 "The amount of logical channels", HFILL }},
9081                 { &hf_tetra_channel1,
9082                 { "Channel 1", "tetra.txchannel1", FT_UINT8, BASE_DEC, VALS(channeltypenames), 0x0,
9083                 "Logical channels type", HFILL }},
9084                 { &hf_tetra_channel2,
9085                 { "Channel 2", "tetra.txchannel2", FT_UINT8, BASE_DEC, VALS(channeltypenames), 0x0,
9086                 "Logical channels type", HFILL }},
9087                 { &hf_tetra_channel3,
9088                 { "Channel 3", "tetra.txchannel3", FT_UINT8, BASE_DEC, VALS(channeltypenames), 0x0,
9089                 "Logical channels type", HFILL }},
9090                 { &hf_tetra_txreg,
9091                 { "TxR", "tetra.txreg", FT_UINT16, BASE_HEX, NULL, 0x0,
9092                  "TX Register", HFILL }},
9093                 { &hf_tetra_rvstr,
9094                 { "RvSteR", "tetra.rvster", FT_UINT16, BASE_HEX, NULL, 0x0,
9095                  "Receive Status Register", HFILL }},
9096                 { &hf_tetra_carriernumber,
9097                 { "Carrier Number", "tetra.carrier", FT_UINT16, BASE_HEX, NULL, 0x0,
9098                  NULL, HFILL }},
9099                 { &hf_tetra_rxchannel1,
9100                 { "Channel 1", "tetra.rxchannel1", FT_UINT8, BASE_DEC, VALS(recvchanneltypenames), 0x0,
9101                 "Logical channels type", HFILL }},
9102                 { &hf_tetra_rxchannel2,
9103                 { "Channel 2", "tetra.rxchannel2", FT_UINT8, BASE_DEC, VALS(recvchanneltypenames), 0x0,
9104                 "Logical channels type", HFILL }},
9105                 { &hf_tetra_rxchannel3,
9106                 { "Channel 3", "tetra.rxchannel3", FT_UINT8, BASE_DEC, VALS(recvchanneltypenames), 0x0,
9107                 "Logical channels type", HFILL }},
9108                 { &hf_tetra_timer,
9109                 { "Timer", "tetra.timer", FT_UINT16, BASE_HEX, NULL, 0x0,
9110                  "Timer Register", HFILL }},
9111                 { &hf_tetra_crc,
9112                 { "CRC", "tetra.crc", FT_BOOLEAN, BASE_NONE, NULL, 0x0,
9113                  "CRC result", HFILL }},
9114                 { &hf_tetra_len0,
9115                 { "Length", "tetra.len0", FT_UINT16, BASE_DEC, NULL, 0x0,
9116                  "Length of the PDU", HFILL }},
9117                 { &hf_tetra_pdu,
9118                 { "PDU", "tetra.pdu", FT_BYTES, BASE_NONE, NULL, 0x0,
9119                  NULL, HFILL }} ,
9120
9121
9122 /*--- Included file: packet-tetra-hfarr.c ---*/
9123 #line 1 "../../asn1/tetra/packet-tetra-hfarr.c"
9124     { &hf_tetra_AACH_PDU,
9125       { "AACH", "tetra.AACH",
9126         FT_NONE, BASE_NONE, NULL, 0,
9127         NULL, HFILL }},
9128     { &hf_tetra_BSCH_PDU,
9129       { "BSCH", "tetra.BSCH",
9130         FT_NONE, BASE_NONE, NULL, 0,
9131         NULL, HFILL }},
9132     { &hf_tetra_BNCH_PDU,
9133       { "BNCH", "tetra.BNCH",
9134         FT_NONE, BASE_NONE, NULL, 0,
9135         NULL, HFILL }},
9136     { &hf_tetra_MAC_ACCESS_PDU,
9137       { "MAC-ACCESS", "tetra.MAC_ACCESS",
9138         FT_NONE, BASE_NONE, NULL, 0,
9139         NULL, HFILL }},
9140     { &hf_tetra_MAC_FRAG_PDU,
9141       { "MAC-FRAG", "tetra.MAC_FRAG",
9142         FT_NONE, BASE_NONE, NULL, 0,
9143         NULL, HFILL }},
9144     { &hf_tetra_MAC_FRAG120_PDU,
9145       { "MAC-FRAG120", "tetra.MAC_FRAG120",
9146         FT_NONE, BASE_NONE, NULL, 0,
9147         NULL, HFILL }},
9148     { &hf_tetra_MAC_END_UPLINK_PDU,
9149       { "MAC-END-UPLINK", "tetra.MAC_END_UPLINK",
9150         FT_NONE, BASE_NONE, NULL, 0,
9151         NULL, HFILL }},
9152     { &hf_tetra_MAC_END_UP114_PDU,
9153       { "MAC-END-UP114", "tetra.MAC_END_UP114",
9154         FT_NONE, BASE_NONE, NULL, 0,
9155         NULL, HFILL }},
9156     { &hf_tetra_MAC_END_HU_PDU,
9157       { "MAC-END-HU", "tetra.MAC_END_HU",
9158         FT_NONE, BASE_NONE, NULL, 0,
9159         NULL, HFILL }},
9160     { &hf_tetra_MAC_END_DOWNLINK_PDU,
9161       { "MAC-END-DOWNLINK", "tetra.MAC_END_DOWNLINK",
9162         FT_NONE, BASE_NONE, NULL, 0,
9163         NULL, HFILL }},
9164     { &hf_tetra_MAC_END_DOWN111_PDU,
9165       { "MAC-END-DOWN111", "tetra.MAC_END_DOWN111",
9166         FT_NONE, BASE_NONE, NULL, 0,
9167         NULL, HFILL }},
9168     { &hf_tetra_MAC_RESOURCE_PDU,
9169       { "MAC-RESOURCE", "tetra.MAC_RESOURCE",
9170         FT_NONE, BASE_NONE, NULL, 0,
9171         NULL, HFILL }},
9172     { &hf_tetra_MAC_ACCESS_DEFINE_PDU,
9173       { "MAC-ACCESS-DEFINE", "tetra.MAC_ACCESS_DEFINE",
9174         FT_NONE, BASE_NONE, NULL, 0,
9175         NULL, HFILL }},
9176     { &hf_tetra_function,
9177       { "function", "tetra.function",
9178         FT_UINT32, BASE_DEC, NULL, 0,
9179         "INTEGER_0_3", HFILL }},
9180     { &hf_tetra_field1,
9181       { "field1", "tetra.field1",
9182         FT_UINT32, BASE_DEC, NULL, 0,
9183         "INTEGER_0_63", HFILL }},
9184     { &hf_tetra_field2,
9185       { "field2", "tetra.field2",
9186         FT_UINT32, BASE_DEC, NULL, 0,
9187         "INTEGER_0_63", HFILL }},
9188     { &hf_tetra_system_code,
9189       { "system-code", "tetra.system_code",
9190         FT_UINT32, BASE_DEC, VALS(tetra_System_Code_vals), 0,
9191         NULL, HFILL }},
9192     { &hf_tetra_colour_code,
9193       { "colour-code", "tetra.colour_code",
9194         FT_UINT32, BASE_DEC, VALS(tetra_Colour_Code_vals), 0,
9195         NULL, HFILL }},
9196     { &hf_tetra_timeslot_number,
9197       { "timeslot-number", "tetra.timeslot_number",
9198         FT_UINT32, BASE_DEC, VALS(tetra_Timeslot_Number_vals), 0,
9199         NULL, HFILL }},
9200     { &hf_tetra_frame_number,
9201       { "frame-number", "tetra.frame_number",
9202         FT_UINT32, BASE_DEC, VALS(tetra_Frame_Number_vals), 0,
9203         NULL, HFILL }},
9204     { &hf_tetra_multiple_frame_number,
9205       { "multiple-frame-number", "tetra.multiple_frame_number",
9206         FT_UINT32, BASE_DEC, VALS(tetra_Multiple_Frame_Number_vals), 0,
9207         NULL, HFILL }},
9208     { &hf_tetra_sharing_mod,
9209       { "sharing-mod", "tetra.sharing_mod",
9210         FT_UINT32, BASE_DEC, VALS(tetra_Sharing_Mod_vals), 0,
9211         NULL, HFILL }},
9212     { &hf_tetra_ts_reserved_frames,
9213       { "ts-reserved-frames", "tetra.ts_reserved_frames",
9214         FT_UINT32, BASE_DEC, VALS(tetra_TS_Reserved_Frames_vals), 0,
9215         NULL, HFILL }},
9216     { &hf_tetra_u_plane_dtx,
9217       { "u-plane-dtx", "tetra.u_plane_dtx",
9218         FT_UINT32, BASE_DEC, VALS(tetra_U_Plane_DTX_vals), 0,
9219         NULL, HFILL }},
9220     { &hf_tetra_frame_18_extension,
9221       { "frame-18-extension", "tetra.frame_18_extension",
9222         FT_UINT32, BASE_DEC, VALS(tetra_Frame_18_Extension_vals), 0,
9223         NULL, HFILL }},
9224     { &hf_tetra_reserved,
9225       { "reserved", "tetra.reserved",
9226         FT_UINT32, BASE_DEC, VALS(tetra_Reserved_vals), 0,
9227         NULL, HFILL }},
9228     { &hf_tetra_tm_sdu,
9229       { "tm-sdu", "tetra.tm_sdu",
9230         FT_NONE, BASE_NONE, NULL, 0,
9231         "MLE_Sync", HFILL }},
9232     { &hf_tetra_mcc,
9233       { "mcc", "tetra.mcc",
9234         FT_UINT32, BASE_DEC, NULL, 0,
9235         "INTEGER_0_1023", HFILL }},
9236     { &hf_tetra_mnc,
9237       { "mnc", "tetra.mnc",
9238         FT_UINT32, BASE_DEC, NULL, 0,
9239         "INTEGER_0_16383", HFILL }},
9240     { &hf_tetra_neighbour_cell_broadcast,
9241       { "neighbour-cell-broadcast", "tetra.neighbour_cell_broadcast",
9242         FT_UINT32, BASE_DEC, NULL, 0,
9243         "INTEGER_0_3", HFILL }},
9244     { &hf_tetra_cell_service_level,
9245       { "cell-service-level", "tetra.cell_service_level",
9246         FT_UINT32, BASE_DEC, NULL, 0,
9247         "INTEGER_0_3", HFILL }},
9248     { &hf_tetra_late_entry_information,
9249       { "late-entry-information", "tetra.late_entry_information",
9250         FT_UINT32, BASE_DEC, NULL, 0,
9251         "INTEGER_0_1", HFILL }},
9252     { &hf_tetra_pdu_type,
9253       { "pdu-type", "tetra.pdu_type",
9254         FT_UINT32, BASE_DEC, NULL, 0,
9255         "INTEGER_0_3", HFILL }},
9256     { &hf_tetra_broadcast_type,
9257       { "broadcast-type", "tetra.broadcast_type",
9258         FT_UINT32, BASE_DEC, NULL, 0,
9259         "INTEGER_0_3", HFILL }},
9260     { &hf_tetra_main_carrier,
9261       { "main-carrier", "tetra.main_carrier",
9262         FT_UINT32, BASE_DEC, NULL, 0,
9263         "INTEGER_0_4095", HFILL }},
9264     { &hf_tetra_frequency_band,
9265       { "frequency-band", "tetra.frequency_band",
9266         FT_UINT32, BASE_DEC, NULL, 0,
9267         "INTEGER_0_15", HFILL }},
9268     { &hf_tetra_offset,
9269       { "offset", "tetra.offset",
9270         FT_UINT32, BASE_DEC, VALS(tetra_Offset_vals), 0,
9271         NULL, HFILL }},
9272     { &hf_tetra_duplex_spacing,
9273       { "duplex-spacing", "tetra.duplex_spacing",
9274         FT_UINT32, BASE_DEC, NULL, 0,
9275         "INTEGER_0_7", HFILL }},
9276     { &hf_tetra_reverse_operation,
9277       { "reverse-operation", "tetra.reverse_operation",
9278         FT_UINT32, BASE_DEC, VALS(tetra_Reverse_Operation_vals), 0,
9279         NULL, HFILL }},
9280     { &hf_tetra_sencond_ctl_carrier,
9281       { "sencond-ctl-carrier", "tetra.sencond_ctl_carrier",
9282         FT_UINT32, BASE_DEC, VALS(tetra_Sencond_Ctl_Carrier_vals), 0,
9283         NULL, HFILL }},
9284     { &hf_tetra_ms_txpwr_max_cell,
9285       { "ms-txpwr-max-cell", "tetra.ms_txpwr_max_cell",
9286         FT_UINT32, BASE_DEC, VALS(tetra_MS_TXPWR_MAX_CELL_vals), 0,
9287         NULL, HFILL }},
9288     { &hf_tetra_rxlev_access_min,
9289       { "rxlev-access-min", "tetra.rxlev_access_min",
9290         FT_UINT32, BASE_DEC, VALS(tetra_RXLEV_ACCESS_MIN_vals), 0,
9291         NULL, HFILL }},
9292     { &hf_tetra_access_parameter,
9293       { "access-parameter", "tetra.access_parameter",
9294         FT_UINT32, BASE_DEC, VALS(tetra_ACCESS_PARAMETER_vals), 0,
9295         NULL, HFILL }},
9296     { &hf_tetra_radio_downlink_timeout,
9297       { "radio-downlink-timeout", "tetra.radio_downlink_timeout",
9298         FT_UINT32, BASE_DEC, VALS(tetra_RADIO_DOWNLINK_TIMEOUT_vals), 0,
9299         NULL, HFILL }},
9300     { &hf_tetra_hyperframe_or_cck,
9301       { "hyperframe-or-cck", "tetra.hyperframe_or_cck",
9302         FT_UINT32, BASE_DEC, VALS(tetra_T_hyperframe_or_cck_vals), 0,
9303         NULL, HFILL }},
9304     { &hf_tetra_hyperframe,
9305       { "hyperframe", "tetra.hyperframe",
9306         FT_UINT32, BASE_DEC, NULL, 0,
9307         "INTEGER_0_65535", HFILL }},
9308     { &hf_tetra_cckid,
9309       { "cckid", "tetra.cckid",
9310         FT_UINT32, BASE_DEC, NULL, 0,
9311         "INTEGER_0_65535", HFILL }},
9312     { &hf_tetra_optional_params,
9313       { "optional-params", "tetra.optional_params",
9314         FT_UINT32, BASE_DEC, VALS(tetra_T_optional_params_vals), 0,
9315         NULL, HFILL }},
9316     { &hf_tetra_even_multiframe,
9317       { "even-multiframe", "tetra.even_multiframe",
9318         FT_NONE, BASE_NONE, NULL, 0,
9319         "TS_COMMON_FRAMES", HFILL }},
9320     { &hf_tetra_odd_multiframe,
9321       { "odd-multiframe", "tetra.odd_multiframe",
9322         FT_NONE, BASE_NONE, NULL, 0,
9323         "TS_COMMON_FRAMES", HFILL }},
9324     { &hf_tetra_access_a_code,
9325       { "access-a-code", "tetra.access_a_code",
9326         FT_NONE, BASE_NONE, NULL, 0,
9327         "Default_Code_A", HFILL }},
9328     { &hf_tetra_extend_service,
9329       { "extend-service", "tetra.extend_service",
9330         FT_NONE, BASE_NONE, NULL, 0,
9331         "Extended_Services_Broadcast", HFILL }},
9332     { &hf_tetra_la,
9333       { "la", "tetra.la",
9334         FT_UINT32, BASE_DEC, NULL, 0,
9335         "INTEGER_0_16383", HFILL }},
9336     { &hf_tetra_subscriber_class,
9337       { "subscriber-class", "tetra.subscriber_class",
9338         FT_UINT32, BASE_DEC, NULL, 0,
9339         "INTEGER_0_65535", HFILL }},
9340     { &hf_tetra_registriation,
9341       { "registriation", "tetra.registriation",
9342         FT_UINT32, BASE_DEC, NULL, 0,
9343         "INTEGER_0_1", HFILL }},
9344     { &hf_tetra_de_registration,
9345       { "de-registration", "tetra.de_registration",
9346         FT_UINT32, BASE_DEC, NULL, 0,
9347         "INTEGER_0_1", HFILL }},
9348     { &hf_tetra_priority_cell,
9349       { "priority-cell", "tetra.priority_cell",
9350         FT_UINT32, BASE_DEC, NULL, 0,
9351         "INTEGER_0_1", HFILL }},
9352     { &hf_tetra_minimum_mode_service,
9353       { "minimum-mode-service", "tetra.minimum_mode_service",
9354         FT_UINT32, BASE_DEC, NULL, 0,
9355         "INTEGER_0_1", HFILL }},
9356     { &hf_tetra_migration,
9357       { "migration", "tetra.migration",
9358         FT_UINT32, BASE_DEC, NULL, 0,
9359         "INTEGER_0_1", HFILL }},
9360     { &hf_tetra_system_wide_service,
9361       { "system-wide-service", "tetra.system_wide_service",
9362         FT_UINT32, BASE_DEC, NULL, 0,
9363         "INTEGER_0_1", HFILL }},
9364     { &hf_tetra_tetra_voice_service,
9365       { "tetra-voice-service", "tetra.tetra_voice_service",
9366         FT_UINT32, BASE_DEC, NULL, 0,
9367         "INTEGER_0_1", HFILL }},
9368     { &hf_tetra_circuit_mode_data_service,
9369       { "circuit-mode-data-service", "tetra.circuit_mode_data_service",
9370         FT_UINT32, BASE_DEC, NULL, 0,
9371         "INTEGER_0_1", HFILL }},
9372     { &hf_tetra_reserved_01,
9373       { "reserved", "tetra.reserved",
9374         FT_UINT32, BASE_DEC, NULL, 0,
9375         "INTEGER_0_1", HFILL }},
9376     { &hf_tetra_sndcp_service,
9377       { "sndcp-service", "tetra.sndcp_service",
9378         FT_UINT32, BASE_DEC, NULL, 0,
9379         "INTEGER_0_1", HFILL }},
9380     { &hf_tetra_air_interface_encryption,
9381       { "air-interface-encryption", "tetra.air_interface_encryption",
9382         FT_UINT32, BASE_DEC, NULL, 0,
9383         "INTEGER_0_1", HFILL }},
9384     { &hf_tetra_advanced_link_support,
9385       { "advanced-link-support", "tetra.advanced_link_support",
9386         FT_UINT32, BASE_DEC, NULL, 0,
9387         "INTEGER_0_1", HFILL }},
9388     { &hf_tetra_frame1,
9389       { "frame1", "tetra.frame1",
9390         FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
9391         "FRAME", HFILL }},
9392     { &hf_tetra_frame2,
9393       { "frame2", "tetra.frame2",
9394         FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
9395         "FRAME", HFILL }},
9396     { &hf_tetra_frame3,
9397       { "frame3", "tetra.frame3",
9398         FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
9399         "FRAME", HFILL }},
9400     { &hf_tetra_frame4,
9401       { "frame4", "tetra.frame4",
9402         FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
9403         "FRAME", HFILL }},
9404     { &hf_tetra_frame5,
9405       { "frame5", "tetra.frame5",
9406         FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
9407         "FRAME", HFILL }},
9408     { &hf_tetra_frame6,
9409       { "frame6", "tetra.frame6",
9410         FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
9411         "FRAME", HFILL }},
9412     { &hf_tetra_frame7,
9413       { "frame7", "tetra.frame7",
9414         FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
9415         "FRAME", HFILL }},
9416     { &hf_tetra_frame8,
9417       { "frame8", "tetra.frame8",
9418         FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
9419         "FRAME", HFILL }},
9420     { &hf_tetra_frame9,
9421       { "frame9", "tetra.frame9",
9422         FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
9423         "FRAME", HFILL }},
9424     { &hf_tetra_frame10,
9425       { "frame10", "tetra.frame10",
9426         FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
9427         "FRAME", HFILL }},
9428     { &hf_tetra_frame11,
9429       { "frame11", "tetra.frame11",
9430         FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
9431         "FRAME", HFILL }},
9432     { &hf_tetra_frame12,
9433       { "frame12", "tetra.frame12",
9434         FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
9435         "FRAME", HFILL }},
9436     { &hf_tetra_frame13,
9437       { "frame13", "tetra.frame13",
9438         FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
9439         "FRAME", HFILL }},
9440     { &hf_tetra_frame14,
9441       { "frame14", "tetra.frame14",
9442         FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
9443         "FRAME", HFILL }},
9444     { &hf_tetra_frame15,
9445       { "frame15", "tetra.frame15",
9446         FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
9447         "FRAME", HFILL }},
9448     { &hf_tetra_frame16,
9449       { "frame16", "tetra.frame16",
9450         FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
9451         "FRAME", HFILL }},
9452     { &hf_tetra_frame17,
9453       { "frame17", "tetra.frame17",
9454         FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
9455         "FRAME", HFILL }},
9456     { &hf_tetra_frame18,
9457       { "frame18", "tetra.frame18",
9458         FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
9459         "FRAME", HFILL }},
9460     { &hf_tetra_imm,
9461       { "imm", "tetra.imm",
9462         FT_UINT32, BASE_DEC, VALS(tetra_IMM_vals), 0,
9463         NULL, HFILL }},
9464     { &hf_tetra_wt,
9465       { "wt", "tetra.wt",
9466         FT_UINT32, BASE_DEC, VALS(tetra_WT_vals), 0,
9467         NULL, HFILL }},
9468     { &hf_tetra_nu,
9469       { "nu", "tetra.nu",
9470         FT_UINT32, BASE_DEC, VALS(tetra_NU_vals), 0,
9471         NULL, HFILL }},
9472     { &hf_tetra_frame_len_factor,
9473       { "frame-len-factor", "tetra.frame_len_factor",
9474         FT_UINT32, BASE_DEC, VALS(tetra_Frame_Len_Factor_vals), 0,
9475         NULL, HFILL }},
9476     { &hf_tetra_timeslot_pointer,
9477       { "timeslot-pointer", "tetra.timeslot_pointer",
9478         FT_UINT32, BASE_DEC, VALS(tetra_Timeslot_Pointer_vals), 0,
9479         NULL, HFILL }},
9480     { &hf_tetra_min_pdu_priority,
9481       { "min-pdu-priority", "tetra.min_pdu_priority",
9482         FT_UINT32, BASE_DEC, VALS(tetra_Min_Pdu_Priority_vals), 0,
9483         NULL, HFILL }},
9484     { &hf_tetra_security_information,
9485       { "security-information", "tetra.security_information",
9486         FT_UINT32, BASE_DEC, NULL, 0,
9487         "INTEGER_0_255", HFILL }},
9488     { &hf_tetra_sds_tl_addressing_method,
9489       { "sds-tl-addressing-method", "tetra.sds_tl_addressing_method",
9490         FT_UINT32, BASE_DEC, VALS(tetra_SDS_TL_Addressing_Method_vals), 0,
9491         NULL, HFILL }},
9492     { &hf_tetra_gck_supported,
9493       { "gck-supported", "tetra.gck_supported",
9494         FT_UINT32, BASE_DEC, NULL, 0,
9495         "INTEGER_0_1", HFILL }},
9496     { &hf_tetra_section,
9497       { "section", "tetra.section",
9498         FT_UINT32, BASE_DEC, VALS(tetra_T_section_vals), 0,
9499         NULL, HFILL }},
9500     { &hf_tetra_present_1,
9501       { "present-1", "tetra.present_1",
9502         FT_NONE, BASE_NONE, NULL, 0,
9503         "PRESENT1", HFILL }},
9504     { &hf_tetra_present_2,
9505       { "present-2", "tetra.present_2",
9506         FT_UINT32, BASE_DEC, NULL, 0,
9507         "INTEGER_0_127", HFILL }},
9508     { &hf_tetra_present_3,
9509       { "present-3", "tetra.present_3",
9510         FT_UINT32, BASE_DEC, NULL, 0,
9511         "INTEGER_0_127", HFILL }},
9512     { &hf_tetra_present_4,
9513       { "present-4", "tetra.present_4",
9514         FT_UINT32, BASE_DEC, NULL, 0,
9515         "INTEGER_0_127", HFILL }},
9516     { &hf_tetra_data_priority_supported,
9517       { "data-priority-supported", "tetra.data_priority_supported",
9518         FT_UINT32, BASE_DEC, VALS(tetra_Data_Priority_Supported_vals), 0,
9519         NULL, HFILL }},
9520     { &hf_tetra_reserved_02,
9521       { "reserved", "tetra.reserved",
9522         FT_UINT32, BASE_DEC, NULL, 0,
9523         "INTEGER_0_7", HFILL }},
9524     { &hf_tetra_section_2_information,
9525       { "section-2-information", "tetra.section_2_information",
9526         FT_UINT32, BASE_DEC, VALS(tetra_Section_Information_vals), 0,
9527         "Section_Information", HFILL }},
9528     { &hf_tetra_section_3_information,
9529       { "section-3-information", "tetra.section_3_information",
9530         FT_UINT32, BASE_DEC, VALS(tetra_Section_Information_vals), 0,
9531         "Section_Information", HFILL }},
9532     { &hf_tetra_section_4_information,
9533       { "section-4-information", "tetra.section_4_information",
9534         FT_UINT32, BASE_DEC, VALS(tetra_Section_Information_vals), 0,
9535         "Section_Information", HFILL }},
9536     { &hf_tetra_pdu_type_01,
9537       { "pdu-type", "tetra.pdu_type",
9538         FT_UINT32, BASE_DEC, NULL, 0,
9539         "INTEGER_0_1", HFILL }},
9540     { &hf_tetra_fill_bit_indication,
9541       { "fill-bit-indication", "tetra.fill_bit_indication",
9542         FT_UINT32, BASE_DEC, VALS(tetra_Fill_Bit_Indication_vals), 0,
9543         NULL, HFILL }},
9544     { &hf_tetra_encrypted_flag,
9545       { "encrypted-flag", "tetra.encrypted_flag",
9546         FT_UINT32, BASE_DEC, VALS(tetra_Encrypted_Flag_vals), 0,
9547         NULL, HFILL }},
9548     { &hf_tetra_address,
9549       { "address", "tetra.address",
9550         FT_UINT32, BASE_DEC, VALS(tetra_Address_vals), 0,
9551         NULL, HFILL }},
9552     { &hf_tetra_data,
9553       { "data", "tetra.data",
9554         FT_UINT32, BASE_DEC, VALS(tetra_T_data_vals), 0,
9555         NULL, HFILL }},
9556     { &hf_tetra_sdu1,
9557       { "sdu1", "tetra.sdu1",
9558         FT_UINT32, BASE_DEC, VALS(tetra_U_LLC_PDU_vals), 0,
9559         "U_LLC_PDU", HFILL }},
9560     { &hf_tetra_sdu2,
9561       { "sdu2", "tetra.sdu2",
9562         FT_NONE, BASE_NONE, NULL, 0,
9563         "ComplexSDU", HFILL }},
9564     { &hf_tetra_ssi,
9565       { "ssi", "tetra.ssi",
9566         FT_UINT32, BASE_DEC, NULL, 0,
9567         "INTEGER_0_16777215", HFILL }},
9568     { &hf_tetra_eventLabel,
9569       { "eventLabel", "tetra.eventLabel",
9570         FT_UINT32, BASE_DEC, NULL, 0,
9571         "INTEGER_0_1023", HFILL }},
9572     { &hf_tetra_ussi,
9573       { "ussi", "tetra.ussi",
9574         FT_UINT32, BASE_DEC, NULL, 0,
9575         "INTEGER_0_16777215", HFILL }},
9576     { &hf_tetra_smi,
9577       { "smi", "tetra.smi",
9578         FT_UINT32, BASE_DEC, NULL, 0,
9579         "INTEGER_0_16777215", HFILL }},
9580     { &hf_tetra_bl_adata,
9581       { "bl-adata", "tetra.bl_adata",
9582         FT_NONE, BASE_NONE, NULL, 0,
9583         "U_BL_ADATA", HFILL }},
9584     { &hf_tetra_bl_data,
9585       { "bl-data", "tetra.bl_data",
9586         FT_NONE, BASE_NONE, NULL, 0,
9587         "U_BL_DATA", HFILL }},
9588     { &hf_tetra_bl_udata,
9589       { "bl-udata", "tetra.bl_udata",
9590         FT_UINT32, BASE_DEC, VALS(tetra_U_MLE_PDU_vals), 0,
9591         "U_MLE_PDU", HFILL }},
9592     { &hf_tetra_bl_ack,
9593       { "bl-ack", "tetra.bl_ack",
9594         FT_NONE, BASE_NONE, NULL, 0,
9595         "U_BL_ACK", HFILL }},
9596     { &hf_tetra_bl_adata_fcs,
9597       { "bl-adata-fcs", "tetra.bl_adata_fcs",
9598         FT_NONE, BASE_NONE, NULL, 0,
9599         "U_BL_ADATA_FCS", HFILL }},
9600     { &hf_tetra_bl_data_fcs,
9601       { "bl-data-fcs", "tetra.bl_data_fcs",
9602         FT_NONE, BASE_NONE, NULL, 0,
9603         "U_BL_DATA_FCS", HFILL }},
9604     { &hf_tetra_bl_udata_fcs,
9605       { "bl-udata-fcs", "tetra.bl_udata_fcs",
9606         FT_NONE, BASE_NONE, NULL, 0,
9607         "U_MLE_PDU_FCS", HFILL }},
9608     { &hf_tetra_bl_ack_fcs,
9609       { "bl-ack-fcs", "tetra.bl_ack_fcs",
9610         FT_NONE, BASE_NONE, NULL, 0,
9611         "U_BL_ACK_FCS", HFILL }},
9612     { &hf_tetra_al_setup,
9613       { "al-setup", "tetra.al_setup",
9614         FT_NONE, BASE_NONE, NULL, 0,
9615         NULL, HFILL }},
9616     { &hf_tetra_al_data,
9617       { "al-data", "tetra.al_data",
9618         FT_NONE, BASE_NONE, NULL, 0,
9619         NULL, HFILL }},
9620     { &hf_tetra_al_udata,
9621       { "al-udata", "tetra.al_udata",
9622         FT_NONE, BASE_NONE, NULL, 0,
9623         NULL, HFILL }},
9624     { &hf_tetra_al_ack,
9625       { "al-ack", "tetra.al_ack",
9626         FT_NONE, BASE_NONE, NULL, 0,
9627         NULL, HFILL }},
9628     { &hf_tetra_al_reconnect,
9629       { "al-reconnect", "tetra.al_reconnect",
9630         FT_NONE, BASE_NONE, NULL, 0,
9631         NULL, HFILL }},
9632     { &hf_tetra_reserve1,
9633       { "reserve1", "tetra.reserve1",
9634         FT_NONE, BASE_NONE, NULL, 0,
9635         NULL, HFILL }},
9636     { &hf_tetra_reserve2,
9637       { "reserve2", "tetra.reserve2",
9638         FT_NONE, BASE_NONE, NULL, 0,
9639         NULL, HFILL }},
9640     { &hf_tetra_al_disc,
9641       { "al-disc", "tetra.al_disc",
9642         FT_NONE, BASE_NONE, NULL, 0,
9643         NULL, HFILL }},
9644     { &hf_tetra_nr,
9645       { "nr", "tetra.nr",
9646         FT_UINT32, BASE_DEC, NULL, 0,
9647         "INTEGER_0_1", HFILL }},
9648     { &hf_tetra_tl_sdu,
9649       { "tl-sdu", "tetra.tl_sdu",
9650         FT_UINT32, BASE_DEC, VALS(tetra_U_MLE_PDU_vals), 0,
9651         "U_MLE_PDU", HFILL }},
9652     { &hf_tetra_fcs,
9653       { "fcs", "tetra.fcs",
9654         FT_BYTES, BASE_NONE, NULL, 0,
9655         "OCTET_STRING_SIZE_4", HFILL }},
9656     { &hf_tetra_u_mle_pdu,
9657       { "u-mle-pdu", "tetra.u_mle_pdu",
9658         FT_UINT32, BASE_DEC, VALS(tetra_U_MLE_PDU_vals), 0,
9659         NULL, HFILL }},
9660     { &hf_tetra_ns,
9661       { "ns", "tetra.ns",
9662         FT_UINT32, BASE_DEC, NULL, 0,
9663         "INTEGER_0_1", HFILL }},
9664     { &hf_tetra_u_mle_reserved1,
9665       { "u-mle-reserved1", "tetra.u_mle_reserved1",
9666         FT_NONE, BASE_NONE, NULL, 0,
9667         NULL, HFILL }},
9668     { &hf_tetra_mm,
9669       { "mm", "tetra.mm",
9670         FT_UINT32, BASE_DEC, VALS(tetra_U_MM_PDU_vals), 0,
9671         "U_MM_PDU", HFILL }},
9672     { &hf_tetra_cmce,
9673       { "cmce", "tetra.cmce",
9674         FT_UINT32, BASE_DEC, VALS(tetra_U_CMCE_PDU_vals), 0,
9675         "U_CMCE_PDU", HFILL }},
9676     { &hf_tetra_u_mle_reserved2,
9677       { "u-mle-reserved2", "tetra.u_mle_reserved2",
9678         FT_NONE, BASE_NONE, NULL, 0,
9679         NULL, HFILL }},
9680     { &hf_tetra_sndcp,
9681       { "sndcp", "tetra.sndcp",
9682         FT_NONE, BASE_NONE, NULL, 0,
9683         NULL, HFILL }},
9684     { &hf_tetra_mle,
9685       { "mle", "tetra.mle",
9686         FT_UINT32, BASE_DEC, VALS(tetra_UMLE_PDU_vals), 0,
9687         "UMLE_PDU", HFILL }},
9688     { &hf_tetra_tetra_management_entity_protocol,
9689       { "tetra-management-entity-protocol", "tetra.tetra_management_entity_protocol",
9690         FT_NONE, BASE_NONE, NULL, 0,
9691         NULL, HFILL }},
9692     { &hf_tetra_u_mle_reserved3,
9693       { "u-mle-reserved3", "tetra.u_mle_reserved3",
9694         FT_NONE, BASE_NONE, NULL, 0,
9695         NULL, HFILL }},
9696     { &hf_tetra_lengthIndicationOrCapacityRequest,
9697       { "lengthIndicationOrCapacityRequest", "tetra.lengthIndicationOrCapacityRequest",
9698         FT_UINT32, BASE_DEC, VALS(tetra_T_lengthIndicationOrCapacityRequest_vals), 0,
9699         NULL, HFILL }},
9700     { &hf_tetra_lengthIndication,
9701       { "lengthIndication", "tetra.lengthIndication",
9702         FT_UINT32, BASE_DEC, VALS(tetra_LengthIndication_vals), 0,
9703         NULL, HFILL }},
9704     { &hf_tetra_capacityRequest,
9705       { "capacityRequest", "tetra.capacityRequest",
9706         FT_NONE, BASE_NONE, NULL, 0,
9707         "FRAG", HFILL }},
9708     { &hf_tetra_tm_sdu_01,
9709       { "tm-sdu", "tetra.tm_sdu",
9710         FT_UINT32, BASE_DEC, VALS(tetra_U_LLC_PDU_vals), 0,
9711         "U_LLC_PDU", HFILL }},
9712     { &hf_tetra_frag,
9713       { "frag", "tetra.frag",
9714         FT_UINT32, BASE_DEC, VALS(tetra_Frag1_vals), 0,
9715         "Frag1", HFILL }},
9716     { &hf_tetra_reservation_requirement,
9717       { "reservation-requirement", "tetra.reservation_requirement",
9718         FT_UINT32, BASE_DEC, VALS(tetra_SLOT_APPLY_vals), 0,
9719         "SLOT_APPLY", HFILL }},
9720     { &hf_tetra_sub_type,
9721       { "sub-type", "tetra.sub_type",
9722         FT_UINT32, BASE_DEC, NULL, 0,
9723         "INTEGER_0_1", HFILL }},
9724     { &hf_tetra_tm_sdu_02,
9725       { "tm-sdu", "tetra.tm_sdu",
9726         FT_BYTES, BASE_NONE, NULL, 0,
9727         "BIT_STRING_SIZE_264", HFILL }},
9728     { &hf_tetra_tm_sdu_03,
9729       { "tm-sdu", "tetra.tm_sdu",
9730         FT_BYTES, BASE_NONE, NULL, 0,
9731         "BIT_STRING_SIZE_120", HFILL }},
9732     { &hf_tetra_lengthInd_ReservationReq,
9733       { "lengthInd-ReservationReq", "tetra.lengthInd_ReservationReq",
9734         FT_UINT32, BASE_DEC, VALS(tetra_LengthIndOrReservationReq_vals), 0,
9735         "LengthIndOrReservationReq", HFILL }},
9736     { &hf_tetra_tm_sdu_04,
9737       { "tm-sdu", "tetra.tm_sdu",
9738         FT_BYTES, BASE_NONE, NULL, 0,
9739         "BIT_STRING_SIZE_258", HFILL }},
9740     { &hf_tetra_pdu_subtype,
9741       { "pdu-subtype", "tetra.pdu_subtype",
9742         FT_UINT32, BASE_DEC, NULL, 0,
9743         "INTEGER_0_1", HFILL }},
9744     { &hf_tetra_tm_sdu_05,
9745       { "tm-sdu", "tetra.tm_sdu",
9746         FT_BYTES, BASE_NONE, NULL, 0,
9747         "BIT_STRING_SIZE_114", HFILL }},
9748     { &hf_tetra_lengthInd_ReservationReq_01,
9749       { "lengthInd-ReservationReq", "tetra.lengthInd_ReservationReq",
9750         FT_UINT32, BASE_DEC, VALS(tetra_T_lengthInd_ReservationReq_vals), 0,
9751         NULL, HFILL }},
9752     { &hf_tetra_lengthInd,
9753       { "lengthInd", "tetra.lengthInd",
9754         FT_UINT32, BASE_DEC, VALS(tetra_LengthIndMacHu_vals), 0,
9755         "LengthIndMacHu", HFILL }},
9756     { &hf_tetra_tm_sdu_06,
9757       { "tm-sdu", "tetra.tm_sdu",
9758         FT_BYTES, BASE_NONE, NULL, 0,
9759         "BIT_STRING_SIZE_85", HFILL }},
9760     { &hf_tetra_position_of_grant,
9761       { "position-of-grant", "tetra.position_of_grant",
9762         FT_UINT32, BASE_DEC, VALS(tetra_Position_Of_Grant_vals), 0,
9763         NULL, HFILL }},
9764     { &hf_tetra_lengthIndication_01,
9765       { "lengthIndication", "tetra.lengthIndication",
9766         FT_UINT32, BASE_DEC, VALS(tetra_LengthIndicationMacEndDl_vals), 0,
9767         "LengthIndicationMacEndDl", HFILL }},
9768     { &hf_tetra_slot_granting,
9769       { "slot-granting", "tetra.slot_granting",
9770         FT_UINT32, BASE_DEC, VALS(tetra_T_slot_granting_vals), 0,
9771         "T_slot_granting", HFILL }},
9772     { &hf_tetra_none,
9773       { "none", "tetra.none",
9774         FT_NONE, BASE_NONE, NULL, 0,
9775         NULL, HFILL }},
9776     { &hf_tetra_slot_granting_param,
9777       { "slot-granting-param", "tetra.slot_granting_param",
9778         FT_NONE, BASE_NONE, NULL, 0,
9779         "SlotGranting", HFILL }},
9780     { &hf_tetra_channel_allocation,
9781       { "channel-allocation", "tetra.channel_allocation",
9782         FT_UINT32, BASE_DEC, VALS(tetra_T_channel_allocation_vals), 0,
9783         NULL, HFILL }},
9784     { &hf_tetra_channel_allocation_element,
9785       { "channel-allocation-element", "tetra.channel_allocation_element",
9786         FT_NONE, BASE_NONE, NULL, 0,
9787         "ChannelAllocation", HFILL }},
9788     { &hf_tetra_tm_sdu_07,
9789       { "tm-sdu", "tetra.tm_sdu",
9790         FT_BYTES, BASE_NONE, NULL, 0,
9791         "BIT_STRING_SIZE_255", HFILL }},
9792     { &hf_tetra_capacity_allocation,
9793       { "capacity-allocation", "tetra.capacity_allocation",
9794         FT_UINT32, BASE_DEC, VALS(tetra_Capacity_Allocation_vals), 0,
9795         NULL, HFILL }},
9796     { &hf_tetra_granting_delay,
9797       { "granting-delay", "tetra.granting_delay",
9798         FT_UINT32, BASE_DEC, VALS(tetra_Granting_delay_vals), 0,
9799         NULL, HFILL }},
9800     { &hf_tetra_allocation_type,
9801       { "allocation-type", "tetra.allocation_type",
9802         FT_UINT32, BASE_DEC, VALS(tetra_T_allocation_type_vals), 0,
9803         NULL, HFILL }},
9804     { &hf_tetra_timeslot_assigned,
9805       { "timeslot-assigned", "tetra.timeslot_assigned",
9806         FT_UINT32, BASE_DEC, VALS(tetra_Timeslot_Assigned_vals), 0,
9807         NULL, HFILL }},
9808     { &hf_tetra_up_down_assigned,
9809       { "up-down-assigned", "tetra.up_down_assigned",
9810         FT_UINT32, BASE_DEC, VALS(tetra_T_up_down_assigned_vals), 0,
9811         NULL, HFILL }},
9812     { &hf_tetra_clch_permission,
9813       { "clch-permission", "tetra.clch_permission",
9814         FT_UINT32, BASE_DEC, VALS(tetra_CLCH_permission_vals), 0,
9815         NULL, HFILL }},
9816     { &hf_tetra_cell_change,
9817       { "cell-change", "tetra.cell_change",
9818         FT_UINT32, BASE_DEC, VALS(tetra_Cell_change_flag_vals), 0,
9819         "Cell_change_flag", HFILL }},
9820     { &hf_tetra_carrier_number,
9821       { "carrier-number", "tetra.carrier_number",
9822         FT_UINT32, BASE_DEC, NULL, 0,
9823         "INTEGER_0_4095", HFILL }},
9824     { &hf_tetra_extend_carrier_flag,
9825       { "extend-carrier-flag", "tetra.extend_carrier_flag",
9826         FT_UINT32, BASE_DEC, VALS(tetra_T_extend_carrier_flag_vals), 0,
9827         NULL, HFILL }},
9828     { &hf_tetra_extended,
9829       { "extended", "tetra.extended",
9830         FT_NONE, BASE_NONE, NULL, 0,
9831         "Extended_carrier_flag", HFILL }},
9832     { &hf_tetra_monitoring_pattern,
9833       { "monitoring-pattern", "tetra.monitoring_pattern",
9834         FT_UINT32, BASE_DEC, VALS(tetra_T_monitoring_pattern_vals), 0,
9835         NULL, HFILL }},
9836     { &hf_tetra_one,
9837       { "one", "tetra.one",
9838         FT_UINT32, BASE_DEC, VALS(tetra_Monitoring_pattern_vals), 0,
9839         "Monitoring_pattern", HFILL }},
9840     { &hf_tetra_none1,
9841       { "none1", "tetra.none1",
9842         FT_NONE, BASE_NONE, NULL, 0,
9843         NULL, HFILL }},
9844     { &hf_tetra_none2,
9845       { "none2", "tetra.none2",
9846         FT_NONE, BASE_NONE, NULL, 0,
9847         NULL, HFILL }},
9848     { &hf_tetra_none3,
9849       { "none3", "tetra.none3",
9850         FT_NONE, BASE_NONE, NULL, 0,
9851         NULL, HFILL }},
9852     { &hf_tetra_offset_01,
9853       { "offset", "tetra.offset",
9854         FT_UINT32, BASE_DEC, NULL, 0,
9855         "INTEGER_0_3", HFILL }},
9856     { &hf_tetra_reverse_operation_01,
9857       { "reverse-operation", "tetra.reverse_operation",
9858         FT_UINT32, BASE_DEC, VALS(tetra_T_reverse_operation_vals), 0,
9859         NULL, HFILL }},
9860     { &hf_tetra_pdu_type_02,
9861       { "pdu-type", "tetra.pdu_type",
9862         FT_UINT32, BASE_DEC, NULL, 0,
9863         "INTEGER_0_7", HFILL }},
9864     { &hf_tetra_fill_bit_ind,
9865       { "fill-bit-ind", "tetra.fill_bit_ind",
9866         FT_BOOLEAN, BASE_NONE, NULL, 0,
9867         "BOOLEAN", HFILL }},
9868     { &hf_tetra_position_of_grant_01,
9869       { "position-of-grant", "tetra.position_of_grant",
9870         FT_UINT32, BASE_DEC, NULL, 0,
9871         "INTEGER_0_1", HFILL }},
9872     { &hf_tetra_slot_granting_01,
9873       { "slot-granting", "tetra.slot_granting",
9874         FT_UINT32, BASE_DEC, VALS(tetra_T_slot_granting_01_vals), 0,
9875         "T_slot_granting_01", HFILL }},
9876     { &hf_tetra_channel_allocation_01,
9877       { "channel-allocation", "tetra.channel_allocation",
9878         FT_UINT32, BASE_DEC, VALS(tetra_T_channel_allocation_01_vals), 0,
9879         "T_channel_allocation_01", HFILL }},
9880     { &hf_tetra_tm_sdu_08,
9881       { "tm-sdu", "tetra.tm_sdu",
9882         FT_BYTES, BASE_NONE, NULL, 0,
9883         "BIT_STRING_SIZE_111", HFILL }},
9884     { &hf_tetra_encryption_mode,
9885       { "encryption-mode", "tetra.encryption_mode",
9886         FT_UINT32, BASE_DEC, NULL, 0,
9887         "INTEGER_0_3", HFILL }},
9888     { &hf_tetra_access_ack,
9889       { "access-ack", "tetra.access_ack",
9890         FT_UINT32, BASE_DEC, VALS(tetra_T_access_ack_vals), 0,
9891         NULL, HFILL }},
9892     { &hf_tetra_lengthIndication_02,
9893       { "lengthIndication", "tetra.lengthIndication",
9894         FT_UINT32, BASE_DEC, VALS(tetra_LengthIndicationMacResource_vals), 0,
9895         "LengthIndicationMacResource", HFILL }},
9896     { &hf_tetra_address_01,
9897       { "address", "tetra.address",
9898         FT_UINT32, BASE_DEC, VALS(tetra_AddressMacResource_vals), 0,
9899         "AddressMacResource", HFILL }},
9900     { &hf_tetra_power_control,
9901       { "power-control", "tetra.power_control",
9902         FT_UINT32, BASE_DEC, VALS(tetra_T_power_control_vals), 0,
9903         NULL, HFILL }},
9904     { &hf_tetra_powerParameters,
9905       { "powerParameters", "tetra.powerParameters",
9906         FT_UINT32, BASE_DEC, VALS(tetra_PowerControl_vals), 0,
9907         "PowerControl", HFILL }},
9908     { &hf_tetra_slot_granting_02,
9909       { "slot-granting", "tetra.slot_granting",
9910         FT_UINT32, BASE_DEC, VALS(tetra_T_slot_granting_02_vals), 0,
9911         "T_slot_granting_02", HFILL }},
9912     { &hf_tetra_channel_allocation_02,
9913       { "channel-allocation", "tetra.channel_allocation",
9914         FT_UINT32, BASE_DEC, VALS(tetra_T_channel_allocation_02_vals), 0,
9915         "T_channel_allocation_02", HFILL }},
9916     { &hf_tetra_tm_sdu_09,
9917       { "tm-sdu", "tetra.tm_sdu",
9918         FT_UINT32, BASE_DEC, VALS(tetra_D_LLC_PDU_vals), 0,
9919         "D_LLC_PDU", HFILL }},
9920     { &hf_tetra_null_pdu,
9921       { "null-pdu", "tetra.null_pdu",
9922         FT_NONE, BASE_NONE, NULL, 0,
9923         NULL, HFILL }},
9924     { &hf_tetra_ssi_01,
9925       { "ssi", "tetra.ssi",
9926         FT_NONE, BASE_NONE, NULL, 0,
9927         "SSI_NEED", HFILL }},
9928     { &hf_tetra_eventLabel_01,
9929       { "eventLabel", "tetra.eventLabel",
9930         FT_NONE, BASE_NONE, NULL, 0,
9931         "EVENT_NEED", HFILL }},
9932     { &hf_tetra_ussi_01,
9933       { "ussi", "tetra.ussi",
9934         FT_NONE, BASE_NONE, NULL, 0,
9935         "USSI_NEED", HFILL }},
9936     { &hf_tetra_smi_01,
9937       { "smi", "tetra.smi",
9938         FT_NONE, BASE_NONE, NULL, 0,
9939         "SMI_NEED", HFILL }},
9940     { &hf_tetra_ssi_eventLabel,
9941       { "ssi-eventLabel", "tetra.ssi_eventLabel",
9942         FT_NONE, BASE_NONE, NULL, 0,
9943         "SSI_EVENT_NEED", HFILL }},
9944     { &hf_tetra_ssi_usage_maker,
9945       { "ssi-usage-maker", "tetra.ssi_usage_maker",
9946         FT_NONE, BASE_NONE, NULL, 0,
9947         "SSI_USAGE_NEED", HFILL }},
9948     { &hf_tetra_smi_eventLabel,
9949       { "smi-eventLabel", "tetra.smi_eventLabel",
9950         FT_NONE, BASE_NONE, NULL, 0,
9951         "SMI_EVENT_NEED", HFILL }},
9952     { &hf_tetra_other,
9953       { "other", "tetra.other",
9954         FT_NONE, BASE_NONE, NULL, 0,
9955         "OTHER_DATA", HFILL }},
9956     { &hf_tetra_eventlabel,
9957       { "eventlabel", "tetra.eventlabel",
9958         FT_UINT32, BASE_DEC, NULL, 0,
9959         "INTEGER_0_1023", HFILL }},
9960     { &hf_tetra_ventlabel,
9961       { "ventlabel", "tetra.ventlabel",
9962         FT_UINT32, BASE_DEC, NULL, 0,
9963         "INTEGER_0_1023", HFILL }},
9964     { &hf_tetra_usage_maker,
9965       { "usage-maker", "tetra.usage_maker",
9966         FT_UINT32, BASE_DEC, NULL, 0,
9967         "INTEGER_0_63", HFILL }},
9968     { &hf_tetra_smi_eventlabel,
9969       { "smi-eventlabel", "tetra.smi_eventlabel",
9970         FT_BYTES, BASE_NONE, NULL, 0,
9971         "BIT_STRING_SIZE_34", HFILL }},
9972     { &hf_tetra_broadcast_channel,
9973       { "broadcast-channel", "tetra.broadcast_channel",
9974         FT_UINT32, BASE_DEC, NULL, 0,
9975         "INTEGER_0_1", HFILL }},
9976     { &hf_tetra_access_code,
9977       { "access-code", "tetra.access_code",
9978         FT_UINT32, BASE_DEC, NULL, 0,
9979         "INTEGER_0_3", HFILL }},
9980     { &hf_tetra_imm_01,
9981       { "imm", "tetra.imm",
9982         FT_UINT32, BASE_DEC, NULL, 0,
9983         "INTEGER_0_15", HFILL }},
9984     { &hf_tetra_wt_01,
9985       { "wt", "tetra.wt",
9986         FT_UINT32, BASE_DEC, NULL, 0,
9987         "INTEGER_0_15", HFILL }},
9988     { &hf_tetra_nu_01,
9989       { "nu", "tetra.nu",
9990         FT_UINT32, BASE_DEC, NULL, 0,
9991         "INTEGER_0_15", HFILL }},
9992     { &hf_tetra_frame_len_factor_01,
9993       { "frame-len-factor", "tetra.frame_len_factor",
9994         FT_UINT32, BASE_DEC, NULL, 0,
9995         "INTEGER_0_1", HFILL }},
9996     { &hf_tetra_timeslot_pointer_01,
9997       { "timeslot-pointer", "tetra.timeslot_pointer",
9998         FT_UINT32, BASE_DEC, NULL, 0,
9999         "INTEGER_0_15", HFILL }},
10000     { &hf_tetra_min_priority,
10001       { "min-priority", "tetra.min_priority",
10002         FT_UINT32, BASE_DEC, NULL, 0,
10003         "INTEGER_0_7", HFILL }},
10004     { &hf_tetra_optional_field,
10005       { "optional-field", "tetra.optional_field",
10006         FT_UINT32, BASE_DEC, VALS(tetra_T_optional_field_vals), 0,
10007         NULL, HFILL }},
10008     { &hf_tetra_class_bitmap,
10009       { "class-bitmap", "tetra.class_bitmap",
10010         FT_UINT32, BASE_DEC, NULL, 0,
10011         "INTEGER_0_65535", HFILL }},
10012     { &hf_tetra_gssi,
10013       { "gssi", "tetra.gssi",
10014         FT_UINT32, BASE_DEC, NULL, 0,
10015         "INTEGER_0_33554431", HFILL }},
10016     { &hf_tetra_reserved_03,
10017       { "reserved", "tetra.reserved",
10018         FT_NONE, BASE_NONE, NULL, 0,
10019         NULL, HFILL }},
10020     { &hf_tetra_filler_bits,
10021       { "filler-bits", "tetra.filler_bits",
10022         FT_UINT32, BASE_DEC, NULL, 0,
10023         "INTEGER_0_7", HFILL }},
10024     { &hf_tetra_bl_adata_01,
10025       { "bl-adata", "tetra.bl_adata",
10026         FT_NONE, BASE_NONE, NULL, 0,
10027         "D_BL_ADATA", HFILL }},
10028     { &hf_tetra_bl_data_01,
10029       { "bl-data", "tetra.bl_data",
10030         FT_NONE, BASE_NONE, NULL, 0,
10031         "D_BL_DATA", HFILL }},
10032     { &hf_tetra_bl_udata_01,
10033       { "bl-udata", "tetra.bl_udata",
10034         FT_UINT32, BASE_DEC, VALS(tetra_D_MLE_PDU_vals), 0,
10035         "D_MLE_PDU", HFILL }},
10036     { &hf_tetra_bl_ack_01,
10037       { "bl-ack", "tetra.bl_ack",
10038         FT_NONE, BASE_NONE, NULL, 0,
10039         "D_BL_ACK", HFILL }},
10040     { &hf_tetra_bl_adata_fcs_01,
10041       { "bl-adata-fcs", "tetra.bl_adata_fcs",
10042         FT_NONE, BASE_NONE, NULL, 0,
10043         "D_BL_ADATA_FCS", HFILL }},
10044     { &hf_tetra_bl_data_fcs_01,
10045       { "bl-data-fcs", "tetra.bl_data_fcs",
10046         FT_NONE, BASE_NONE, NULL, 0,
10047         "D_BL_DATA_FCS", HFILL }},
10048     { &hf_tetra_bl_udata_fcs_01,
10049       { "bl-udata-fcs", "tetra.bl_udata_fcs",
10050         FT_NONE, BASE_NONE, NULL, 0,
10051         "D_MLE_PDU_FCS", HFILL }},
10052     { &hf_tetra_bl_ack_fcs_01,
10053       { "bl-ack-fcs", "tetra.bl_ack_fcs",
10054         FT_NONE, BASE_NONE, NULL, 0,
10055         "D_BL_ACK_FCS", HFILL }},
10056     { &hf_tetra_tl_sdu_01,
10057       { "tl-sdu", "tetra.tl_sdu",
10058         FT_UINT32, BASE_DEC, VALS(tetra_D_MLE_PDU_vals), 0,
10059         "D_MLE_PDU", HFILL }},
10060     { &hf_tetra_d_mle_pdu,
10061       { "d-mle-pdu", "tetra.d_mle_pdu",
10062         FT_UINT32, BASE_DEC, VALS(tetra_D_MLE_PDU_vals), 0,
10063         NULL, HFILL }},
10064     { &hf_tetra_mm_01,
10065       { "mm", "tetra.mm",
10066         FT_UINT32, BASE_DEC, VALS(tetra_D_MM_PDU_vals), 0,
10067         "D_MM_PDU", HFILL }},
10068     { &hf_tetra_cmce_01,
10069       { "cmce", "tetra.cmce",
10070         FT_UINT32, BASE_DEC, VALS(tetra_D_CMCE_PDU_vals), 0,
10071         "D_CMCE_PDU", HFILL }},
10072     { &hf_tetra_mle_01,
10073       { "mle", "tetra.mle",
10074         FT_UINT32, BASE_DEC, VALS(tetra_DMLE_PDU_vals), 0,
10075         "DMLE_PDU", HFILL }},
10076     { &hf_tetra_u_prepare,
10077       { "u-prepare", "tetra.u_prepare",
10078         FT_NONE, BASE_NONE, NULL, 0,
10079         NULL, HFILL }},
10080     { &hf_tetra_umle_reserved1,
10081       { "umle-reserved1", "tetra.umle_reserved1",
10082         FT_NONE, BASE_NONE, NULL, 0,
10083         NULL, HFILL }},
10084     { &hf_tetra_umle_reserved2,
10085       { "umle-reserved2", "tetra.umle_reserved2",
10086         FT_NONE, BASE_NONE, NULL, 0,
10087         NULL, HFILL }},
10088     { &hf_tetra_umle_reserved3,
10089       { "umle-reserved3", "tetra.umle_reserved3",
10090         FT_NONE, BASE_NONE, NULL, 0,
10091         NULL, HFILL }},
10092     { &hf_tetra_u_restore,
10093       { "u-restore", "tetra.u_restore",
10094         FT_NONE, BASE_NONE, NULL, 0,
10095         NULL, HFILL }},
10096     { &hf_tetra_umle_reserved4,
10097       { "umle-reserved4", "tetra.umle_reserved4",
10098         FT_NONE, BASE_NONE, NULL, 0,
10099         NULL, HFILL }},
10100     { &hf_tetra_umle_reserved5,
10101       { "umle-reserved5", "tetra.umle_reserved5",
10102         FT_NONE, BASE_NONE, NULL, 0,
10103         NULL, HFILL }},
10104     { &hf_tetra_umle_reserved6,
10105       { "umle-reserved6", "tetra.umle_reserved6",
10106         FT_NONE, BASE_NONE, NULL, 0,
10107         NULL, HFILL }},
10108     { &hf_tetra_d_new_cell,
10109       { "d-new-cell", "tetra.d_new_cell",
10110         FT_NONE, BASE_NONE, NULL, 0,
10111         NULL, HFILL }},
10112     { &hf_tetra_d_prepare_fail,
10113       { "d-prepare-fail", "tetra.d_prepare_fail",
10114         FT_NONE, BASE_NONE, NULL, 0,
10115         NULL, HFILL }},
10116     { &hf_tetra_d_nwrk_broadcast,
10117       { "d-nwrk-broadcast", "tetra.d_nwrk_broadcast",
10118         FT_NONE, BASE_NONE, NULL, 0,
10119         "D_NWRK_BRDADCAST", HFILL }},
10120     { &hf_tetra_dmle_reserved1,
10121       { "dmle-reserved1", "tetra.dmle_reserved1",
10122         FT_NONE, BASE_NONE, NULL, 0,
10123         NULL, HFILL }},
10124     { &hf_tetra_d_restore_ack,
10125       { "d-restore-ack", "tetra.d_restore_ack",
10126         FT_NONE, BASE_NONE, NULL, 0,
10127         NULL, HFILL }},
10128     { &hf_tetra_d_restore_fail,
10129       { "d-restore-fail", "tetra.d_restore_fail",
10130         FT_NONE, BASE_NONE, NULL, 0,
10131         NULL, HFILL }},
10132     { &hf_tetra_dmle_reserved2,
10133       { "dmle-reserved2", "tetra.dmle_reserved2",
10134         FT_NONE, BASE_NONE, NULL, 0,
10135         NULL, HFILL }},
10136     { &hf_tetra_dmle_reserved3,
10137       { "dmle-reserved3", "tetra.dmle_reserved3",
10138         FT_NONE, BASE_NONE, NULL, 0,
10139         NULL, HFILL }},
10140     { &hf_tetra_optional_elements,
10141       { "optional-elements", "tetra.optional_elements",
10142         FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_vals), 0,
10143         NULL, HFILL }},
10144     { &hf_tetra_no_type2,
10145       { "no-type2", "tetra.no_type2",
10146         FT_NONE, BASE_NONE, NULL, 0,
10147         NULL, HFILL }},
10148     { &hf_tetra_type2_parameters,
10149       { "type2-parameters", "tetra.type2_parameters",
10150         FT_NONE, BASE_NONE, NULL, 0,
10151         NULL, HFILL }},
10152     { &hf_tetra_cell_number,
10153       { "cell-number", "tetra.cell_number",
10154         FT_UINT32, BASE_DEC, VALS(tetra_T_cell_number_vals), 0,
10155         NULL, HFILL }},
10156     { &hf_tetra_cell_number_01,
10157       { "cell-number", "tetra.cell_number",
10158         FT_UINT32, BASE_DEC, NULL, 0,
10159         "INTEGER_0_65535", HFILL }},
10160     { &hf_tetra_sdu,
10161       { "sdu", "tetra.sdu",
10162         FT_BYTES, BASE_NONE, NULL, 0,
10163         "BIT_STRING", HFILL }},
10164     { &hf_tetra_optional_elements_01,
10165       { "optional-elements", "tetra.optional_elements",
10166         FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_01_vals), 0,
10167         "T_optional_elements_01", HFILL }},
10168     { &hf_tetra_type2_parameters_01,
10169       { "type2-parameters", "tetra.type2_parameters",
10170         FT_NONE, BASE_NONE, NULL, 0,
10171         "T_type2_parameters_01", HFILL }},
10172     { &hf_tetra_mcc_01,
10173       { "mcc", "tetra.mcc",
10174         FT_UINT32, BASE_DEC, VALS(tetra_T_mcc_vals), 0,
10175         NULL, HFILL }},
10176     { &hf_tetra_mnc_01,
10177       { "mnc", "tetra.mnc",
10178         FT_UINT32, BASE_DEC, VALS(tetra_T_mnc_vals), 0,
10179         NULL, HFILL }},
10180     { &hf_tetra_la_01,
10181       { "la", "tetra.la",
10182         FT_UINT32, BASE_DEC, VALS(tetra_T_la_vals), 0,
10183         NULL, HFILL }},
10184     { &hf_tetra_channel_command_valid,
10185       { "channel-command-valid", "tetra.channel_command_valid",
10186         FT_UINT32, BASE_DEC, NULL, 0,
10187         "INTEGER_0_3", HFILL }},
10188     { &hf_tetra_optional_elements_02,
10189       { "optional-elements", "tetra.optional_elements",
10190         FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_02_vals), 0,
10191         "T_optional_elements_02", HFILL }},
10192     { &hf_tetra_fail_cause,
10193       { "fail-cause", "tetra.fail_cause",
10194         FT_UINT32, BASE_DEC, NULL, 0,
10195         "INTEGER_0_3", HFILL }},
10196     { &hf_tetra_optional_elements_03,
10197       { "optional-elements", "tetra.optional_elements",
10198         FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_03_vals), 0,
10199         "T_optional_elements_03", HFILL }},
10200     { &hf_tetra_cell_re_select_parameters,
10201       { "cell-re-select-parameters", "tetra.cell_re_select_parameters",
10202         FT_UINT32, BASE_DEC, NULL, 0,
10203         "INTEGER_0_65535", HFILL }},
10204     { &hf_tetra_optional_elements_04,
10205       { "optional-elements", "tetra.optional_elements",
10206         FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_04_vals), 0,
10207         "T_optional_elements_04", HFILL }},
10208     { &hf_tetra_type2_parameters_02,
10209       { "type2-parameters", "tetra.type2_parameters",
10210         FT_NONE, BASE_NONE, NULL, 0,
10211         "T_type2_parameters_02", HFILL }},
10212     { &hf_tetra_tetra_network_time,
10213       { "tetra-network-time", "tetra.tetra_network_time",
10214         FT_UINT32, BASE_DEC, VALS(tetra_T_tetra_network_time_vals), 0,
10215         NULL, HFILL }},
10216     { &hf_tetra_tetra_network_time_01,
10217       { "tetra-network-time", "tetra.tetra_network_time",
10218         FT_NONE, BASE_NONE, NULL, 0,
10219         NULL, HFILL }},
10220     { &hf_tetra_number_of_neighbour_cells,
10221       { "number-of-neighbour-cells", "tetra.number_of_neighbour_cells",
10222         FT_UINT32, BASE_DEC, VALS(tetra_T_number_of_neighbour_cells_vals), 0,
10223         NULL, HFILL }},
10224     { &hf_tetra_number_of_neighbour_cells_01,
10225       { "number-of-neighbour-cells", "tetra.number_of_neighbour_cells",
10226         FT_UINT32, BASE_DEC, NULL, 0,
10227         "INTEGER_0_7", HFILL }},
10228     { &hf_tetra_network_time,
10229       { "network-time", "tetra.network_time",
10230         FT_UINT32, BASE_DEC, NULL, 0,
10231         NULL, HFILL }},
10232     { &hf_tetra_local_time_offset_sign,
10233       { "local-time-offset-sign", "tetra.local_time_offset_sign",
10234         FT_UINT32, BASE_DEC, NULL, 0,
10235         "INTEGER_0_1", HFILL }},
10236     { &hf_tetra_local_time_offset,
10237       { "local-time-offset", "tetra.local_time_offset",
10238         FT_UINT32, BASE_DEC, NULL, 0,
10239         "INTEGER_0_63", HFILL }},
10240     { &hf_tetra_year,
10241       { "year", "tetra.year",
10242         FT_UINT32, BASE_DEC, NULL, 0,
10243         "INTEGER_0_63", HFILL }},
10244     { &hf_tetra_reserved_04,
10245       { "reserved", "tetra.reserved",
10246         FT_UINT32, BASE_DEC, NULL, 0,
10247         NULL, HFILL }},
10248     { &hf_tetra_u_Authentication,
10249       { "u-Authentication", "tetra.u_Authentication",
10250         FT_NONE, BASE_NONE, NULL, 0,
10251         NULL, HFILL }},
10252     { &hf_tetra_u_Itsi_Detach,
10253       { "u-Itsi-Detach", "tetra.u_Itsi_Detach",
10254         FT_NONE, BASE_NONE, NULL, 0,
10255         NULL, HFILL }},
10256     { &hf_tetra_u_Location_Update_Demand,
10257       { "u-Location-Update-Demand", "tetra.u_Location_Update_Demand",
10258         FT_NONE, BASE_NONE, NULL, 0,
10259         NULL, HFILL }},
10260     { &hf_tetra_u_MM_Status,
10261       { "u-MM-Status", "tetra.u_MM_Status",
10262         FT_NONE, BASE_NONE, NULL, 0,
10263         NULL, HFILL }},
10264     { &hf_tetra_u_MM_reserved1,
10265       { "u-MM-reserved1", "tetra.u_MM_reserved1",
10266         FT_NONE, BASE_NONE, NULL, 0,
10267         NULL, HFILL }},
10268     { &hf_tetra_u_WK,
10269       { "u-WK", "tetra.u_WK",
10270         FT_NONE, BASE_NONE, NULL, 0,
10271         NULL, HFILL }},
10272     { &hf_tetra_u_MM_reserved3,
10273       { "u-MM-reserved3", "tetra.u_MM_reserved3",
10274         FT_NONE, BASE_NONE, NULL, 0,
10275         NULL, HFILL }},
10276     { &hf_tetra_u_Attach_Detach_Group_Identity,
10277       { "u-Attach-Detach-Group-Identity", "tetra.u_Attach_Detach_Group_Identity",
10278         FT_NONE, BASE_NONE, NULL, 0,
10279         NULL, HFILL }},
10280     { &hf_tetra_u_Attach_Detach_Group_Identity_Ack,
10281       { "u-Attach-Detach-Group-Identity-Ack", "tetra.u_Attach_Detach_Group_Identity_Ack",
10282         FT_NONE, BASE_NONE, NULL, 0,
10283         NULL, HFILL }},
10284     { &hf_tetra_u_TEI_Provide,
10285       { "u-TEI-Provide", "tetra.u_TEI_Provide",
10286         FT_NONE, BASE_NONE, NULL, 0,
10287         NULL, HFILL }},
10288     { &hf_tetra_u_MM_reserved6,
10289       { "u-MM-reserved6", "tetra.u_MM_reserved6",
10290         FT_NONE, BASE_NONE, NULL, 0,
10291         NULL, HFILL }},
10292     { &hf_tetra_u_Disabled_Status,
10293       { "u-Disabled-Status", "tetra.u_Disabled_Status",
10294         FT_NONE, BASE_NONE, NULL, 0,
10295         NULL, HFILL }},
10296     { &hf_tetra_u_MM_reserved7,
10297       { "u-MM-reserved7", "tetra.u_MM_reserved7",
10298         FT_NONE, BASE_NONE, NULL, 0,
10299         NULL, HFILL }},
10300     { &hf_tetra_u_MM_reserved8,
10301       { "u-MM-reserved8", "tetra.u_MM_reserved8",
10302         FT_NONE, BASE_NONE, NULL, 0,
10303         NULL, HFILL }},
10304     { &hf_tetra_u_MM_reserved9,
10305       { "u-MM-reserved9", "tetra.u_MM_reserved9",
10306         FT_NONE, BASE_NONE, NULL, 0,
10307         NULL, HFILL }},
10308     { &hf_tetra_u_MM_Function_Not_Support,
10309       { "u-MM-Function-Not-Support", "tetra.u_MM_Function_Not_Support",
10310         FT_NONE, BASE_NONE, NULL, 0,
10311         NULL, HFILL }},
10312     { &hf_tetra_d_Otar,
10313       { "d-Otar", "tetra.d_Otar",
10314         FT_NONE, BASE_NONE, NULL, 0,
10315         NULL, HFILL }},
10316     { &hf_tetra_d_Authentication,
10317       { "d-Authentication", "tetra.d_Authentication",
10318         FT_NONE, BASE_NONE, NULL, 0,
10319         NULL, HFILL }},
10320     { &hf_tetra_d_Authentication_Reject,
10321       { "d-Authentication-Reject", "tetra.d_Authentication_Reject",
10322         FT_NONE, BASE_NONE, NULL, 0,
10323         NULL, HFILL }},
10324     { &hf_tetra_d_Disable,
10325       { "d-Disable", "tetra.d_Disable",
10326         FT_NONE, BASE_NONE, NULL, 0,
10327         NULL, HFILL }},
10328     { &hf_tetra_d_Enable,
10329       { "d-Enable", "tetra.d_Enable",
10330         FT_NONE, BASE_NONE, NULL, 0,
10331         NULL, HFILL }},
10332     { &hf_tetra_d_Location_Update_Accept,
10333       { "d-Location-Update-Accept", "tetra.d_Location_Update_Accept",
10334         FT_NONE, BASE_NONE, NULL, 0,
10335         NULL, HFILL }},
10336     { &hf_tetra_d_Location_Update_Command,
10337       { "d-Location-Update-Command", "tetra.d_Location_Update_Command",
10338         FT_NONE, BASE_NONE, NULL, 0,
10339         NULL, HFILL }},
10340     { &hf_tetra_d_Location_Update_Reject,
10341       { "d-Location-Update-Reject", "tetra.d_Location_Update_Reject",
10342         FT_NONE, BASE_NONE, NULL, 0,
10343         NULL, HFILL }},
10344     { &hf_tetra_d_MM_reserved2,
10345       { "d-MM-reserved2", "tetra.d_MM_reserved2",
10346         FT_NONE, BASE_NONE, NULL, 0,
10347         NULL, HFILL }},
10348     { &hf_tetra_d_Location_Update_Proceeding,
10349       { "d-Location-Update-Proceeding", "tetra.d_Location_Update_Proceeding",
10350         FT_NONE, BASE_NONE, NULL, 0,
10351         NULL, HFILL }},
10352     { &hf_tetra_d_Attach_Detach_Group_Identity,
10353       { "d-Attach-Detach-Group-Identity", "tetra.d_Attach_Detach_Group_Identity",
10354         FT_NONE, BASE_NONE, NULL, 0,
10355         NULL, HFILL }},
10356     { &hf_tetra_d_Attach_Detach_Group_Identity_Ack,
10357       { "d-Attach-Detach-Group-Identity-Ack", "tetra.d_Attach_Detach_Group_Identity_Ack",
10358         FT_NONE, BASE_NONE, NULL, 0,
10359         NULL, HFILL }},
10360     { &hf_tetra_d_MM_Status,
10361       { "d-MM-Status", "tetra.d_MM_Status",
10362         FT_NONE, BASE_NONE, NULL, 0,
10363         NULL, HFILL }},
10364     { &hf_tetra_d_MM_reserved5,
10365       { "d-MM-reserved5", "tetra.d_MM_reserved5",
10366         FT_NONE, BASE_NONE, NULL, 0,
10367         NULL, HFILL }},
10368     { &hf_tetra_d_MM_reserved6,
10369       { "d-MM-reserved6", "tetra.d_MM_reserved6",
10370         FT_NONE, BASE_NONE, NULL, 0,
10371         NULL, HFILL }},
10372     { &hf_tetra_d_MM_Function_Not_Support,
10373       { "d-MM-Function-Not-Support", "tetra.d_MM_Function_Not_Support",
10374         FT_NONE, BASE_NONE, NULL, 0,
10375         NULL, HFILL }},
10376     { &hf_tetra_attach_detach_identifiet,
10377       { "attach-detach-identifiet", "tetra.attach_detach_identifiet",
10378         FT_UINT32, BASE_DEC, VALS(tetra_T_attach_detach_identifiet_vals), 0,
10379         NULL, HFILL }},
10380     { &hf_tetra_attach,
10381       { "attach", "tetra.attach",
10382         FT_NONE, BASE_NONE, NULL, 0,
10383         NULL, HFILL }},
10384     { &hf_tetra_lifetime,
10385       { "lifetime", "tetra.lifetime",
10386         FT_UINT32, BASE_DEC, NULL, 0,
10387         "INTEGER_0_3", HFILL }},
10388     { &hf_tetra_class_of_usage,
10389       { "class-of-usage", "tetra.class_of_usage",
10390         FT_UINT32, BASE_DEC, NULL, 0,
10391         "INTEGER_0_7", HFILL }},
10392     { &hf_tetra_detach,
10393       { "detach", "tetra.detach",
10394         FT_NONE, BASE_NONE, NULL, 0,
10395         NULL, HFILL }},
10396     { &hf_tetra_detach_downlike,
10397       { "detach-downlike", "tetra.detach_downlike",
10398         FT_UINT32, BASE_DEC, VALS(tetra_T_detach_downlike_vals), 0,
10399         NULL, HFILL }},
10400     { &hf_tetra_address_type,
10401       { "address-type", "tetra.address_type",
10402         FT_UINT32, BASE_DEC, VALS(tetra_T_address_type_vals), 0,
10403         NULL, HFILL }},
10404     { &hf_tetra_gssi_01,
10405       { "gssi", "tetra.gssi",
10406         FT_BYTES, BASE_NONE, NULL, 0,
10407         "OCTET_STRING_SIZE_3", HFILL }},
10408     { &hf_tetra_gssi_extension,
10409       { "gssi-extension", "tetra.gssi_extension",
10410         FT_NONE, BASE_NONE, NULL, 0,
10411         NULL, HFILL }},
10412     { &hf_tetra_extension,
10413       { "extension", "tetra.extension",
10414         FT_BYTES, BASE_NONE, NULL, 0,
10415         "OCTET_STRING_SIZE_3", HFILL }},
10416     { &hf_tetra_vgssi,
10417       { "vgssi", "tetra.vgssi",
10418         FT_BYTES, BASE_NONE, NULL, 0,
10419         "OCTET_STRING_SIZE_3", HFILL }},
10420     { &hf_tetra_attach_detach_identifiet_01,
10421       { "attach-detach-identifiet", "tetra.attach_detach_identifiet",
10422         FT_UINT32, BASE_DEC, VALS(tetra_T_attach_detach_identifiet_01_vals), 0,
10423         "T_attach_detach_identifiet_01", HFILL }},
10424     { &hf_tetra_attach_01,
10425       { "attach", "tetra.attach",
10426         FT_NONE, BASE_NONE, NULL, 0,
10427         "T_attach_01", HFILL }},
10428     { &hf_tetra_detach_01,
10429       { "detach", "tetra.detach",
10430         FT_NONE, BASE_NONE, NULL, 0,
10431         "T_detach_01", HFILL }},
10432     { &hf_tetra_detach_uplike,
10433       { "detach-uplike", "tetra.detach_uplike",
10434         FT_UINT32, BASE_DEC, VALS(tetra_T_detach_uplike_vals), 0,
10435         NULL, HFILL }},
10436     { &hf_tetra_address_type_01,
10437       { "address-type", "tetra.address_type",
10438         FT_UINT32, BASE_DEC, VALS(tetra_T_address_type_01_vals), 0,
10439         "T_address_type_01", HFILL }},
10440     { &hf_tetra_gssi_extension_01,
10441       { "gssi-extension", "tetra.gssi_extension",
10442         FT_NONE, BASE_NONE, NULL, 0,
10443         "T_gssi_extension_01", HFILL }},
10444     { &hf_tetra_location_update_type,
10445       { "location-update-type", "tetra.location_update_type",
10446         FT_UINT32, BASE_DEC, VALS(tetra_UPDATE_TYPE_vals), 0,
10447         "UPDATE_TYPE", HFILL }},
10448     { &hf_tetra_optional_elements_05,
10449       { "optional-elements", "tetra.optional_elements",
10450         FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_05_vals), 0,
10451         "T_optional_elements_05", HFILL }},
10452     { &hf_tetra_type2_parameters_03,
10453       { "type2-parameters", "tetra.type2_parameters",
10454         FT_NONE, BASE_NONE, NULL, 0,
10455         "T_type2_parameters_03", HFILL }},
10456     { &hf_tetra_ssi_02,
10457       { "ssi", "tetra.ssi",
10458         FT_UINT32, BASE_DEC, VALS(tetra_T_ssi_vals), 0,
10459         NULL, HFILL }},
10460     { &hf_tetra_ssi_03,
10461       { "ssi", "tetra.ssi",
10462         FT_BYTES, BASE_NONE, NULL, 0,
10463         "OCTET_STRING_SIZE_3", HFILL }},
10464     { &hf_tetra_address_extension,
10465       { "address-extension", "tetra.address_extension",
10466         FT_UINT32, BASE_DEC, VALS(tetra_T_address_extension_vals), 0,
10467         NULL, HFILL }},
10468     { &hf_tetra_address_extension_01,
10469       { "address-extension", "tetra.address_extension",
10470         FT_BYTES, BASE_NONE, NULL, 0,
10471         "OCTET_STRING_SIZE_3", HFILL }},
10472     { &hf_tetra_suscriber_class,
10473       { "suscriber-class", "tetra.suscriber_class",
10474         FT_UINT32, BASE_DEC, VALS(tetra_T_suscriber_class_vals), 0,
10475         NULL, HFILL }},
10476     { &hf_tetra_suscriber_class_01,
10477       { "suscriber-class", "tetra.suscriber_class",
10478         FT_UINT32, BASE_DEC, NULL, 0,
10479         "INTEGER_0_32767", HFILL }},
10480     { &hf_tetra_energy_saving_mode,
10481       { "energy-saving-mode", "tetra.energy_saving_mode",
10482         FT_UINT32, BASE_DEC, VALS(tetra_T_energy_saving_mode_vals), 0,
10483         NULL, HFILL }},
10484     { &hf_tetra_energy_saving_mode_01,
10485       { "energy-saving-mode", "tetra.energy_saving_mode",
10486         FT_UINT32, BASE_DEC, NULL, 0,
10487         "INTEGER_0_7", HFILL }},
10488     { &hf_tetra_scch_info,
10489       { "scch-info", "tetra.scch_info",
10490         FT_UINT32, BASE_DEC, VALS(tetra_T_scch_info_vals), 0,
10491         NULL, HFILL }},
10492     { &hf_tetra_scch_info_01,
10493       { "scch-info", "tetra.scch_info",
10494         FT_UINT32, BASE_DEC, NULL, 0,
10495         "INTEGER_0_16383", HFILL }},
10496     { &hf_tetra_type3,
10497       { "type3", "tetra.type3",
10498         FT_UINT32, BASE_DEC, VALS(tetra_T_type3_vals), 0,
10499         NULL, HFILL }},
10500     { &hf_tetra_no_type3,
10501       { "no-type3", "tetra.no_type3",
10502         FT_NONE, BASE_NONE, NULL, 0,
10503         NULL, HFILL }},
10504     { &hf_tetra_type3_elements,
10505       { "type3-elements", "tetra.type3_elements",
10506         FT_NONE, BASE_NONE, NULL, 0,
10507         NULL, HFILL }},
10508     { &hf_tetra_type2_existance,
10509       { "type2-existance", "tetra.type2_existance",
10510         FT_BOOLEAN, BASE_NONE, NULL, 0,
10511         "BOOLEAN", HFILL }},
10512     { &hf_tetra_type3_identifier,
10513       { "type3-identifier", "tetra.type3_identifier",
10514         FT_UINT32, BASE_DEC, VALS(tetra_TYPE3_IDENTIFIER_vals), 0,
10515         NULL, HFILL }},
10516     { &hf_tetra_new_ra,
10517       { "new-ra", "tetra.new_ra",
10518         FT_UINT32, BASE_DEC, VALS(tetra_T_new_ra_vals), 0,
10519         NULL, HFILL }},
10520     { &hf_tetra_new_ra_01,
10521       { "new-ra", "tetra.new_ra",
10522         FT_UINT32, BASE_DEC, NULL, 0,
10523         "INTEGER_0_3", HFILL }},
10524     { &hf_tetra_group_identity_location_accept,
10525       { "group-identity-location-accept", "tetra.group_identity_location_accept",
10526         FT_UINT32, BASE_DEC, VALS(tetra_T_group_identity_location_accept_vals), 0,
10527         NULL, HFILL }},
10528     { &hf_tetra_group_identity_location_accept_01,
10529       { "group-identity-location-accept", "tetra.group_identity_location_accept",
10530         FT_UINT32, BASE_DEC, NULL, 0,
10531         "INTEGER_0_3", HFILL }},
10532     { &hf_tetra_group_predefined_lifetime,
10533       { "group-predefined-lifetime", "tetra.group_predefined_lifetime",
10534         FT_UINT32, BASE_DEC, VALS(tetra_T_group_predefined_lifetime_vals), 0,
10535         NULL, HFILL }},
10536     { &hf_tetra_group_predefined_lifetime_01,
10537       { "group-predefined-lifetime", "tetra.group_predefined_lifetime",
10538         FT_UINT32, BASE_DEC, NULL, 0,
10539         "INTEGER_0_3", HFILL }},
10540     { &hf_tetra_group_identity_downlink,
10541       { "group-identity-downlink", "tetra.group_identity_downlink",
10542         FT_UINT32, BASE_DEC, VALS(tetra_T_group_identity_downlink_vals), 0,
10543         NULL, HFILL }},
10544     { &hf_tetra_group_identity_downlink_01,
10545       { "group-identity-downlink", "tetra.group_identity_downlink",
10546         FT_UINT32, BASE_DEC, NULL, 0,
10547         "INTEGER_0_15", HFILL }},
10548     { &hf_tetra_proprietary,
10549       { "proprietary", "tetra.proprietary",
10550         FT_UINT32, BASE_DEC, VALS(tetra_T_proprietary_vals), 0,
10551         NULL, HFILL }},
10552     { &hf_tetra_proprietary_01,
10553       { "proprietary", "tetra.proprietary",
10554         FT_UINT32, BASE_DEC, NULL, 0,
10555         "INTEGER_0_7", HFILL }},
10556     { &hf_tetra_reject_cause,
10557       { "reject-cause", "tetra.reject_cause",
10558         FT_UINT32, BASE_DEC, NULL, 0,
10559         "INTEGER_0_31", HFILL }},
10560     { &hf_tetra_cipher_control,
10561       { "cipher-control", "tetra.cipher_control",
10562         FT_BOOLEAN, BASE_NONE, NULL, 0,
10563         "BOOLEAN", HFILL }},
10564     { &hf_tetra_status_uplink,
10565       { "status-uplink", "tetra.status_uplink",
10566         FT_UINT32, BASE_DEC, NULL, 0,
10567         "INTEGER_0_63", HFILL }},
10568     { &hf_tetra_scanning_on_off,
10569       { "scanning-on-off", "tetra.scanning_on_off",
10570         FT_UINT32, BASE_DEC, VALS(tetra_T_scanning_on_off_vals), 0,
10571         NULL, HFILL }},
10572     { &hf_tetra_status_downlink,
10573       { "status-downlink", "tetra.status_downlink",
10574         FT_UINT32, BASE_DEC, NULL, 0,
10575         "INTEGER_0_63", HFILL }},
10576     { &hf_tetra_u_Alert,
10577       { "u-Alert", "tetra.u_Alert",
10578         FT_NONE, BASE_NONE, NULL, 0,
10579         NULL, HFILL }},
10580     { &hf_tetra_reserved1,
10581       { "reserved1", "tetra.reserved1",
10582         FT_NONE, BASE_NONE, NULL, 0,
10583         NULL, HFILL }},
10584     { &hf_tetra_u_Connect,
10585       { "u-Connect", "tetra.u_Connect",
10586         FT_NONE, BASE_NONE, NULL, 0,
10587         NULL, HFILL }},
10588     { &hf_tetra_reserved2,
10589       { "reserved2", "tetra.reserved2",
10590         FT_NONE, BASE_NONE, NULL, 0,
10591         NULL, HFILL }},
10592     { &hf_tetra_u_Disconnect,
10593       { "u-Disconnect", "tetra.u_Disconnect",
10594         FT_NONE, BASE_NONE, NULL, 0,
10595         NULL, HFILL }},
10596     { &hf_tetra_u_Info,
10597       { "u-Info", "tetra.u_Info",
10598         FT_NONE, BASE_NONE, NULL, 0,
10599         NULL, HFILL }},
10600     { &hf_tetra_u_Release,
10601       { "u-Release", "tetra.u_Release",
10602         FT_NONE, BASE_NONE, NULL, 0,
10603         NULL, HFILL }},
10604     { &hf_tetra_u_Setup,
10605       { "u-Setup", "tetra.u_Setup",
10606         FT_NONE, BASE_NONE, NULL, 0,
10607         NULL, HFILL }},
10608     { &hf_tetra_u_Status,
10609       { "u-Status", "tetra.u_Status",
10610         FT_NONE, BASE_NONE, NULL, 0,
10611         NULL, HFILL }},
10612     { &hf_tetra_u_Tx_Ceased,
10613       { "u-Tx-Ceased", "tetra.u_Tx_Ceased",
10614         FT_NONE, BASE_NONE, NULL, 0,
10615         NULL, HFILL }},
10616     { &hf_tetra_u_Tx_Demand,
10617       { "u-Tx-Demand", "tetra.u_Tx_Demand",
10618         FT_NONE, BASE_NONE, NULL, 0,
10619         NULL, HFILL }},
10620     { &hf_tetra_reserved3,
10621       { "reserved3", "tetra.reserved3",
10622         FT_NONE, BASE_NONE, NULL, 0,
10623         NULL, HFILL }},
10624     { &hf_tetra_reserved4,
10625       { "reserved4", "tetra.reserved4",
10626         FT_NONE, BASE_NONE, NULL, 0,
10627         NULL, HFILL }},
10628     { &hf_tetra_reserved5,
10629       { "reserved5", "tetra.reserved5",
10630         FT_NONE, BASE_NONE, NULL, 0,
10631         NULL, HFILL }},
10632     { &hf_tetra_u_Call_Restore,
10633       { "u-Call-Restore", "tetra.u_Call_Restore",
10634         FT_NONE, BASE_NONE, NULL, 0,
10635         NULL, HFILL }},
10636     { &hf_tetra_u_SDS_Data,
10637       { "u-SDS-Data", "tetra.u_SDS_Data",
10638         FT_NONE, BASE_NONE, NULL, 0,
10639         NULL, HFILL }},
10640     { &hf_tetra_u_Facility,
10641       { "u-Facility", "tetra.u_Facility",
10642         FT_NONE, BASE_NONE, NULL, 0,
10643         NULL, HFILL }},
10644     { &hf_tetra_call_identifier,
10645       { "call-identifier", "tetra.call_identifier",
10646         FT_UINT32, BASE_DEC, NULL, 0,
10647         "INTEGER_0_16383", HFILL }},
10648     { &hf_tetra_disconnect_cause,
10649       { "disconnect-cause", "tetra.disconnect_cause",
10650         FT_UINT32, BASE_DEC, NULL, 0,
10651         "INTEGER_0_31", HFILL }},
10652     { &hf_tetra_area_selection,
10653       { "area-selection", "tetra.area_selection",
10654         FT_UINT32, BASE_DEC, NULL, 0,
10655         "INTEGER_0_15", HFILL }},
10656     { &hf_tetra_called_party_type_identifier,
10657       { "called-party-type-identifier", "tetra.called_party_type_identifier",
10658         FT_UINT32, BASE_DEC, VALS(tetra_T_called_party_type_identifier_vals), 0,
10659         NULL, HFILL }},
10660     { &hf_tetra_sna,
10661       { "sna", "tetra.sna",
10662         FT_UINT32, BASE_DEC, NULL, 0,
10663         "INTEGER_0_255", HFILL }},
10664     { &hf_tetra_ssi_extension,
10665       { "ssi-extension", "tetra.ssi_extension",
10666         FT_BYTES, BASE_NONE, NULL, 0,
10667         "BIT_STRING_SIZE_48", HFILL }},
10668     { &hf_tetra_short_data_type_identifier,
10669       { "short-data-type-identifier", "tetra.short_data_type_identifier",
10670         FT_UINT32, BASE_DEC, VALS(tetra_T_short_data_type_identifier_vals), 0,
10671         "T_short_data_type_identifier", HFILL }},
10672     { &hf_tetra_data_1,
10673       { "data-1", "tetra.data_1",
10674         FT_UINT32, BASE_DEC, NULL, 0,
10675         "INTEGER_0_65535", HFILL }},
10676     { &hf_tetra_data_2,
10677       { "data-2", "tetra.data_2",
10678         FT_BYTES, BASE_NONE, NULL, 0,
10679         "OCTET_STRING_SIZE_4", HFILL }},
10680     { &hf_tetra_data_3,
10681       { "data-3", "tetra.data_3",
10682         FT_BYTES, BASE_NONE, NULL, 0,
10683         "BIT_STRING_SIZE_64", HFILL }},
10684     { &hf_tetra_length_indicator_data_4,
10685       { "length-indicator-data-4", "tetra.length_indicator_data_4",
10686         FT_UINT32, BASE_DEC, NULL, 0,
10687         "INTEGER_0_4194304", HFILL }},
10688     { &hf_tetra_called_party_type_identifier_01,
10689       { "called-party-type-identifier", "tetra.called_party_type_identifier",
10690         FT_UINT32, BASE_DEC, VALS(tetra_T_called_party_type_identifier_01_vals), 0,
10691         "T_called_party_type_identifier_01", HFILL }},
10692     { &hf_tetra_short_number_address,
10693       { "short-number-address", "tetra.short_number_address",
10694         FT_UINT32, BASE_DEC, NULL, 0,
10695         "INTEGER_0_255", HFILL }},
10696     { &hf_tetra_called_ssi_called_extension,
10697       { "called-ssi-called-extension", "tetra.called_ssi_called_extension",
10698         FT_BYTES, BASE_NONE, NULL, 0,
10699         "BIT_STRING_SIZE_48", HFILL }},
10700     { &hf_tetra_pre_coded_status,
10701       { "pre-coded-status", "tetra.pre_coded_status",
10702         FT_UINT32, BASE_DEC, NULL, 0,
10703         "INTEGER_0_65535", HFILL }},
10704     { &hf_tetra_call_id,
10705       { "call-id", "tetra.call_id",
10706         FT_UINT32, BASE_DEC, NULL, 0,
10707         "INTEGER_0_16383", HFILL }},
10708     { &hf_tetra_poll_response,
10709       { "poll-response", "tetra.poll_response",
10710         FT_UINT32, BASE_DEC, NULL, 0,
10711         "INTEGER_0_1", HFILL }},
10712     { &hf_tetra_d_Alert,
10713       { "d-Alert", "tetra.d_Alert",
10714         FT_NONE, BASE_NONE, NULL, 0,
10715         NULL, HFILL }},
10716     { &hf_tetra_d_Call_Proceeding,
10717       { "d-Call-Proceeding", "tetra.d_Call_Proceeding",
10718         FT_NONE, BASE_NONE, NULL, 0,
10719         NULL, HFILL }},
10720     { &hf_tetra_d_Connect,
10721       { "d-Connect", "tetra.d_Connect",
10722         FT_NONE, BASE_NONE, NULL, 0,
10723         NULL, HFILL }},
10724     { &hf_tetra_d_Connect_Ack,
10725       { "d-Connect-Ack", "tetra.d_Connect_Ack",
10726         FT_NONE, BASE_NONE, NULL, 0,
10727         NULL, HFILL }},
10728     { &hf_tetra_d_Disconnect,
10729       { "d-Disconnect", "tetra.d_Disconnect",
10730         FT_NONE, BASE_NONE, NULL, 0,
10731         NULL, HFILL }},
10732     { &hf_tetra_d_Info,
10733       { "d-Info", "tetra.d_Info",
10734         FT_NONE, BASE_NONE, NULL, 0,
10735         NULL, HFILL }},
10736     { &hf_tetra_d_Release,
10737       { "d-Release", "tetra.d_Release",
10738         FT_NONE, BASE_NONE, NULL, 0,
10739         NULL, HFILL }},
10740     { &hf_tetra_d_Setup,
10741       { "d-Setup", "tetra.d_Setup",
10742         FT_NONE, BASE_NONE, NULL, 0,
10743         NULL, HFILL }},
10744     { &hf_tetra_d_Status,
10745       { "d-Status", "tetra.d_Status",
10746         FT_NONE, BASE_NONE, NULL, 0,
10747         NULL, HFILL }},
10748     { &hf_tetra_d_Tx_Ceased,
10749       { "d-Tx-Ceased", "tetra.d_Tx_Ceased",
10750         FT_NONE, BASE_NONE, NULL, 0,
10751         NULL, HFILL }},
10752     { &hf_tetra_d_Tx_Continue,
10753       { "d-Tx-Continue", "tetra.d_Tx_Continue",
10754         FT_NONE, BASE_NONE, NULL, 0,
10755         NULL, HFILL }},
10756     { &hf_tetra_d_Tx_Granted,
10757       { "d-Tx-Granted", "tetra.d_Tx_Granted",
10758         FT_NONE, BASE_NONE, NULL, 0,
10759         NULL, HFILL }},
10760     { &hf_tetra_d_Tx_Wait,
10761       { "d-Tx-Wait", "tetra.d_Tx_Wait",
10762         FT_NONE, BASE_NONE, NULL, 0,
10763         NULL, HFILL }},
10764     { &hf_tetra_d_Tx_Interrupt,
10765       { "d-Tx-Interrupt", "tetra.d_Tx_Interrupt",
10766         FT_NONE, BASE_NONE, NULL, 0,
10767         NULL, HFILL }},
10768     { &hf_tetra_d_Call_Restore,
10769       { "d-Call-Restore", "tetra.d_Call_Restore",
10770         FT_NONE, BASE_NONE, NULL, 0,
10771         NULL, HFILL }},
10772     { &hf_tetra_d_SDS_Data,
10773       { "d-SDS-Data", "tetra.d_SDS_Data",
10774         FT_NONE, BASE_NONE, NULL, 0,
10775         NULL, HFILL }},
10776     { &hf_tetra_d_Facility,
10777       { "d-Facility", "tetra.d_Facility",
10778         FT_NONE, BASE_NONE, NULL, 0,
10779         NULL, HFILL }},
10780     { &hf_tetra_calling_party_type_identifier,
10781       { "calling-party-type-identifier", "tetra.calling_party_type_identifier",
10782         FT_UINT32, BASE_DEC, VALS(tetra_T_calling_party_type_identifier_vals), 0,
10783         NULL, HFILL }},
10784     { &hf_tetra_ssi_extension_01,
10785       { "ssi-extension", "tetra.ssi_extension",
10786         FT_BYTES, BASE_NONE, NULL, 0,
10787         "OCTET_STRING_SIZE_6", HFILL }},
10788     { &hf_tetra_short_data_type_identifier_01,
10789       { "short-data-type-identifier", "tetra.short_data_type_identifier",
10790         FT_UINT32, BASE_DEC, VALS(tetra_T_short_data_type_identifier_01_vals), 0,
10791         "T_short_data_type_identifier_01", HFILL }},
10792     { &hf_tetra_data_3_01,
10793       { "data-3", "tetra.data_3",
10794         FT_BYTES, BASE_NONE, NULL, 0,
10795         "OCTET_STRING_SIZE_8", HFILL }},
10796     { &hf_tetra_calling_party_type_identifier_01,
10797       { "calling-party-type-identifier", "tetra.calling_party_type_identifier",
10798         FT_UINT32, BASE_DEC, VALS(tetra_T_calling_party_type_identifier_01_vals), 0,
10799         "T_calling_party_type_identifier_01", HFILL }},
10800     { &hf_tetra_calling_party_address_SSI,
10801       { "calling-party-address-SSI", "tetra.calling_party_address_SSI",
10802         FT_UINT32, BASE_DEC, NULL, 0,
10803         "INTEGER_0_16777215", HFILL }},
10804     { &hf_tetra_reset_call_time_out_timer,
10805       { "reset-call-time-out-timer", "tetra.reset_call_time_out_timer",
10806         FT_UINT32, BASE_DEC, NULL, 0,
10807         "INTEGER_0_1", HFILL }},
10808     { &hf_tetra_poll_request,
10809       { "poll-request", "tetra.poll_request",
10810         FT_UINT32, BASE_DEC, NULL, 0,
10811         "INTEGER_0_1", HFILL }},
10812     { &hf_tetra_transmission_request_permission,
10813       { "transmission-request-permission", "tetra.transmission_request_permission",
10814         FT_UINT32, BASE_DEC, NULL, 0,
10815         "INTEGER_0_1", HFILL }},
10816     { &hf_tetra_continue,
10817       { "continue", "tetra.continue",
10818         FT_UINT32, BASE_DEC, NULL, 0,
10819         "INTEGER_0_1", HFILL }},
10820     { &hf_tetra_request_to_append_LA,
10821       { "request-to-append-LA", "tetra.request_to_append_LA",
10822         FT_BOOLEAN, BASE_NONE, NULL, 0,
10823         "BOOLEAN", HFILL }},
10824     { &hf_tetra_cipher_control_01,
10825       { "cipher-control", "tetra.cipher_control",
10826         FT_UINT32, BASE_DEC, VALS(tetra_T_cipher_control_vals), 0,
10827         NULL, HFILL }},
10828     { &hf_tetra_no_cipher,
10829       { "no-cipher", "tetra.no_cipher",
10830         FT_NONE, BASE_NONE, NULL, 0,
10831         NULL, HFILL }},
10832     { &hf_tetra_ciphering_parameters,
10833       { "ciphering-parameters", "tetra.ciphering_parameters",
10834         FT_UINT32, BASE_DEC, NULL, 0,
10835         "INTEGER_0_1023", HFILL }},
10836     { &hf_tetra_class_of_MS,
10837       { "class-of-MS", "tetra.class_of_MS",
10838         FT_BYTES, BASE_NONE, NULL, 0,
10839         "OCTET_STRING_SIZE_4", HFILL }},
10840     { &hf_tetra_optional_elements_06,
10841       { "optional-elements", "tetra.optional_elements",
10842         FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_06_vals), 0,
10843         "T_optional_elements_06", HFILL }},
10844     { &hf_tetra_type2_parameters_04,
10845       { "type2-parameters", "tetra.type2_parameters",
10846         FT_NONE, BASE_NONE, NULL, 0,
10847         "T_type2_parameters_04", HFILL }},
10848     { &hf_tetra_energy_saving_mode_02,
10849       { "energy-saving-mode", "tetra.energy_saving_mode",
10850         FT_UINT32, BASE_DEC, VALS(tetra_T_energy_saving_mode_01_vals), 0,
10851         "T_energy_saving_mode_01", HFILL }},
10852     { &hf_tetra_la_information,
10853       { "la-information", "tetra.la_information",
10854         FT_UINT32, BASE_DEC, VALS(tetra_T_la_information_vals), 0,
10855         NULL, HFILL }},
10856     { &hf_tetra_la_information_01,
10857       { "la-information", "tetra.la_information",
10858         FT_UINT32, BASE_DEC, NULL, 0,
10859         "INTEGER_0_16383", HFILL }},
10860     { &hf_tetra_ssi_04,
10861       { "ssi", "tetra.ssi",
10862         FT_UINT32, BASE_DEC, VALS(tetra_T_ssi_01_vals), 0,
10863         "T_ssi_01", HFILL }},
10864     { &hf_tetra_address_extension_02,
10865       { "address-extension", "tetra.address_extension",
10866         FT_UINT32, BASE_DEC, VALS(tetra_T_address_extension_01_vals), 0,
10867         "T_address_extension_01", HFILL }},
10868     { &hf_tetra_type3_01,
10869       { "type3", "tetra.type3",
10870         FT_UINT32, BASE_DEC, VALS(tetra_T_type3_01_vals), 0,
10871         "T_type3_01", HFILL }},
10872     { &hf_tetra_type3_elements_01,
10873       { "type3-elements", "tetra.type3_elements",
10874         FT_NONE, BASE_NONE, NULL, 0,
10875         "T_type3_elements_01", HFILL }},
10876     { &hf_tetra_group_identity_location_demand,
10877       { "group-identity-location-demand", "tetra.group_identity_location_demand",
10878         FT_UINT32, BASE_DEC, VALS(tetra_T_group_identity_location_demand_vals), 0,
10879         NULL, HFILL }},
10880     { &hf_tetra_group_identity_location_demand_01,
10881       { "group-identity-location-demand", "tetra.group_identity_location_demand",
10882         FT_UINT32, BASE_DEC, NULL, 0,
10883         "INTEGER_0_3", HFILL }},
10884     { &hf_tetra_group_report_response,
10885       { "group-report-response", "tetra.group_report_response",
10886         FT_UINT32, BASE_DEC, VALS(tetra_T_group_report_response_vals), 0,
10887         "T_group_report_response", HFILL }},
10888     { &hf_tetra_group_report_response_01,
10889       { "group-report-response", "tetra.group_report_response",
10890         FT_BOOLEAN, BASE_NONE, NULL, 0,
10891         "BOOLEAN", HFILL }},
10892     { &hf_tetra_group_identity_uplink,
10893       { "group-identity-uplink", "tetra.group_identity_uplink",
10894         FT_UINT32, BASE_DEC, VALS(tetra_T_group_identity_uplink_vals), 0,
10895         NULL, HFILL }},
10896     { &hf_tetra_group_identity_uplink_01,
10897       { "group-identity-uplink", "tetra.group_identity_uplink",
10898         FT_UINT32, BASE_DEC, NULL, 0,
10899         "INTEGER_0_15", HFILL }},
10900     { &hf_tetra_proprietary_02,
10901       { "proprietary", "tetra.proprietary",
10902         FT_UINT32, BASE_DEC, VALS(tetra_T_proprietary_01_vals), 0,
10903         "T_proprietary_01", HFILL }},
10904     { &hf_tetra_group_identity_report,
10905       { "group-identity-report", "tetra.group_identity_report",
10906         FT_BOOLEAN, BASE_NONE, NULL, 0,
10907         "BOOLEAN", HFILL }},
10908     { &hf_tetra_group_identity_attach_detach_mode,
10909       { "group-identity-attach-detach-mode", "tetra.group_identity_attach_detach_mode",
10910         FT_BOOLEAN, BASE_NONE, NULL, 0,
10911         "BOOLEAN", HFILL }},
10912     { &hf_tetra_optional_elements_07,
10913       { "optional-elements", "tetra.optional_elements",
10914         FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_07_vals), 0,
10915         "T_optional_elements_07", HFILL }},
10916     { &hf_tetra_type2_element,
10917       { "type2-element", "tetra.type2_element",
10918         FT_NONE, BASE_NONE, NULL, 0,
10919         NULL, HFILL }},
10920     { &hf_tetra_type3_02,
10921       { "type3", "tetra.type3",
10922         FT_UINT32, BASE_DEC, VALS(tetra_T_type3_02_vals), 0,
10923         "T_type3_02", HFILL }},
10924     { &hf_tetra_type3_elements_02,
10925       { "type3-elements", "tetra.type3_elements",
10926         FT_NONE, BASE_NONE, NULL, 0,
10927         "T_type3_elements_02", HFILL }},
10928     { &hf_tetra_length,
10929       { "length", "tetra.length",
10930         FT_UINT32, BASE_DEC, NULL, 0,
10931         "INTEGER_0_2047", HFILL }},
10932     { &hf_tetra_repeat_num,
10933       { "repeat-num", "tetra.repeat_num",
10934         FT_UINT32, BASE_DEC, NULL, 0,
10935         "INTEGER_0_63", HFILL }},
10936     { &hf_tetra_group_identity_uplink_02,
10937       { "group-identity-uplink", "tetra.group_identity_uplink",
10938         FT_NONE, BASE_NONE, NULL, 0,
10939         NULL, HFILL }},
10940     { &hf_tetra_group_identity_ack_type,
10941       { "group-identity-ack-type", "tetra.group_identity_ack_type",
10942         FT_BOOLEAN, BASE_NONE, NULL, 0,
10943         "BOOLEAN", HFILL }},
10944     { &hf_tetra_optional_elements_08,
10945       { "optional-elements", "tetra.optional_elements",
10946         FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_08_vals), 0,
10947         "T_optional_elements_08", HFILL }},
10948     { &hf_tetra_type2_element_01,
10949       { "type2-element", "tetra.type2_element",
10950         FT_NONE, BASE_NONE, NULL, 0,
10951         "T_type2_element_01", HFILL }},
10952     { &hf_tetra_type3_03,
10953       { "type3", "tetra.type3",
10954         FT_UINT32, BASE_DEC, VALS(tetra_T_type3_03_vals), 0,
10955         "T_type3_03", HFILL }},
10956     { &hf_tetra_type3_elements_03,
10957       { "type3-elements", "tetra.type3_elements",
10958         FT_NONE, BASE_NONE, NULL, 0,
10959         "T_type3_elements_03", HFILL }},
10960     { &hf_tetra_hook_method_selection,
10961       { "hook-method-selection", "tetra.hook_method_selection",
10962         FT_BOOLEAN, BASE_NONE, NULL, 0,
10963         "BOOLEAN", HFILL }},
10964     { &hf_tetra_simple_duplex_selection,
10965       { "simple-duplex-selection", "tetra.simple_duplex_selection",
10966         FT_UINT32, BASE_DEC, VALS(tetra_T_simple_duplex_selection_vals), 0,
10967         NULL, HFILL }},
10968     { &hf_tetra_basic_service_information,
10969       { "basic-service-information", "tetra.basic_service_information",
10970         FT_NONE, BASE_NONE, NULL, 0,
10971         NULL, HFILL }},
10972     { &hf_tetra_request_transmit_send_data,
10973       { "request-transmit-send-data", "tetra.request_transmit_send_data",
10974         FT_UINT32, BASE_DEC, NULL, 0,
10975         "INTEGER_0_1", HFILL }},
10976     { &hf_tetra_call_priority,
10977       { "call-priority", "tetra.call_priority",
10978         FT_UINT32, BASE_DEC, NULL, 0,
10979         "INTEGER_0_15", HFILL }},
10980     { &hf_tetra_clir_control,
10981       { "clir-control", "tetra.clir_control",
10982         FT_UINT32, BASE_DEC, NULL, 0,
10983         "INTEGER_0_3", HFILL }},
10984     { &hf_tetra_called_party_address,
10985       { "called-party-address", "tetra.called_party_address",
10986         FT_UINT32, BASE_DEC, VALS(tetra_Calling_party_address_type_vals), 0,
10987         "Called_party_address_type", HFILL }},
10988     { &hf_tetra_optional_elements_09,
10989       { "optional-elements", "tetra.optional_elements",
10990         FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_09_vals), 0,
10991         "T_optional_elements_09", HFILL }},
10992     { &hf_tetra_type2_parameters_05,
10993       { "type2-parameters", "tetra.type2_parameters",
10994         FT_NONE, BASE_NONE, NULL, 0,
10995         "T_type2_parameters_05", HFILL }},
10996     { &hf_tetra_external_subscriber_number,
10997       { "external-subscriber-number", "tetra.external_subscriber_number",
10998         FT_UINT32, BASE_DEC, VALS(tetra_T_external_subscriber_number_vals), 0,
10999         NULL, HFILL }},
11000     { &hf_tetra_external_subscriber_number_01,
11001       { "external-subscriber-number", "tetra.external_subscriber_number",
11002         FT_UINT32, BASE_DEC, NULL, 0,
11003         "INTEGER_0_31", HFILL }},
11004     { &hf_tetra_prop,
11005       { "prop", "tetra.prop",
11006         FT_UINT32, BASE_DEC, VALS(tetra_T_prop_vals), 0,
11007         NULL, HFILL }},
11008     { &hf_tetra_prop_01,
11009       { "prop", "tetra.prop",
11010         FT_NONE, BASE_NONE, NULL, 0,
11011         "Proprietary", HFILL }},
11012     { &hf_tetra_circuit_mode,
11013       { "circuit-mode", "tetra.circuit_mode",
11014         FT_UINT32, BASE_DEC, VALS(tetra_CIRCUIT_vals), 0,
11015         "CIRCUIT", HFILL }},
11016     { &hf_tetra_encryption,
11017       { "encryption", "tetra.encryption",
11018         FT_UINT32, BASE_DEC, NULL, 0,
11019         "INTEGER_0_1", HFILL }},
11020     { &hf_tetra_communication,
11021       { "communication", "tetra.communication",
11022         FT_UINT32, BASE_DEC, NULL, 0,
11023         "INTEGER_0_3", HFILL }},
11024     { &hf_tetra_slots_or_speech,
11025       { "slots-or-speech", "tetra.slots_or_speech",
11026         FT_UINT32, BASE_DEC, NULL, 0,
11027         "INTEGER_0_3", HFILL }},
11028     { &hf_tetra_call_identifier_01,
11029       { "call-identifier", "tetra.call_identifier",
11030         FT_UINT32, BASE_DEC, NULL, 0,
11031         "INTEGER_0_1023", HFILL }},
11032     { &hf_tetra_simplex_duplex_selection,
11033       { "simplex-duplex-selection", "tetra.simplex_duplex_selection",
11034         FT_UINT32, BASE_DEC, VALS(tetra_T_simplex_duplex_selection_vals), 0,
11035         NULL, HFILL }},
11036     { &hf_tetra_optional_elements_10,
11037       { "optional-elements", "tetra.optional_elements",
11038         FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_10_vals), 0,
11039         "T_optional_elements_10", HFILL }},
11040     { &hf_tetra_type2_parameters_06,
11041       { "type2-parameters", "tetra.type2_parameters",
11042         FT_NONE, BASE_NONE, NULL, 0,
11043         "T_type2_parameters_06", HFILL }},
11044     { &hf_tetra_basic_service_information_01,
11045       { "basic-service-information", "tetra.basic_service_information",
11046         FT_UINT32, BASE_DEC, VALS(tetra_T_basic_service_information_vals), 0,
11047         NULL, HFILL }},
11048     { &hf_tetra_prop_02,
11049       { "prop", "tetra.prop",
11050         FT_UINT32, BASE_DEC, VALS(tetra_T_prop_01_vals), 0,
11051         "T_prop_01", HFILL }},
11052     { &hf_tetra_simplex_duplex_selection_01,
11053       { "simplex-duplex-selection", "tetra.simplex_duplex_selection",
11054         FT_UINT32, BASE_DEC, VALS(tetra_T_simplex_duplex_selection_01_vals), 0,
11055         "T_simplex_duplex_selection_01", HFILL }},
11056     { &hf_tetra_optional_elements_11,
11057       { "optional-elements", "tetra.optional_elements",
11058         FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_11_vals), 0,
11059         "T_optional_elements_11", HFILL }},
11060     { &hf_tetra_type2_parameters_07,
11061       { "type2-parameters", "tetra.type2_parameters",
11062         FT_NONE, BASE_NONE, NULL, 0,
11063         "T_type2_parameters_07", HFILL }},
11064     { &hf_tetra_basic_service_information_02,
11065       { "basic-service-information", "tetra.basic_service_information",
11066         FT_UINT32, BASE_DEC, VALS(tetra_T_basic_service_information_01_vals), 0,
11067         "T_basic_service_information_01", HFILL }},
11068     { &hf_tetra_prop_03,
11069       { "prop", "tetra.prop",
11070         FT_UINT32, BASE_DEC, VALS(tetra_T_prop_02_vals), 0,
11071         "T_prop_02", HFILL }},
11072     { &hf_tetra_optional_elements_12,
11073       { "optional-elements", "tetra.optional_elements",
11074         FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_12_vals), 0,
11075         "T_optional_elements_12", HFILL }},
11076     { &hf_tetra_type2_parameters_08,
11077       { "type2-parameters", "tetra.type2_parameters",
11078         FT_NONE, BASE_NONE, NULL, 0,
11079         "T_type2_parameters_08", HFILL }},
11080     { &hf_tetra_prop_04,
11081       { "prop", "tetra.prop",
11082         FT_UINT32, BASE_DEC, VALS(tetra_T_prop_03_vals), 0,
11083         "T_prop_03", HFILL }},
11084     { &hf_tetra_tx_demand_priority,
11085       { "tx-demand-priority", "tetra.tx_demand_priority",
11086         FT_UINT32, BASE_DEC, NULL, 0,
11087         "INTEGER_0_3", HFILL }},
11088     { &hf_tetra_encryption_control,
11089       { "encryption-control", "tetra.encryption_control",
11090         FT_UINT32, BASE_DEC, NULL, 0,
11091         "INTEGER_0_1", HFILL }},
11092     { &hf_tetra_optional_elements_13,
11093       { "optional-elements", "tetra.optional_elements",
11094         FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_13_vals), 0,
11095         "T_optional_elements_13", HFILL }},
11096     { &hf_tetra_type2_parameters_09,
11097       { "type2-parameters", "tetra.type2_parameters",
11098         FT_NONE, BASE_NONE, NULL, 0,
11099         "T_type2_parameters_09", HFILL }},
11100     { &hf_tetra_prop_05,
11101       { "prop", "tetra.prop",
11102         FT_UINT32, BASE_DEC, VALS(tetra_T_prop_04_vals), 0,
11103         "T_prop_04", HFILL }},
11104     { &hf_tetra_optional_elements_14,
11105       { "optional-elements", "tetra.optional_elements",
11106         FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_14_vals), 0,
11107         "T_optional_elements_14", HFILL }},
11108     { &hf_tetra_type2_parameters_10,
11109       { "type2-parameters", "tetra.type2_parameters",
11110         FT_NONE, BASE_NONE, NULL, 0,
11111         "T_type2_parameters_10", HFILL }},
11112     { &hf_tetra_prop_06,
11113       { "prop", "tetra.prop",
11114         FT_UINT32, BASE_DEC, VALS(tetra_T_prop_05_vals), 0,
11115         "T_prop_05", HFILL }},
11116     { &hf_tetra_request_to_transmit_send_data,
11117       { "request-to-transmit-send-data", "tetra.request_to_transmit_send_data",
11118         FT_UINT32, BASE_DEC, NULL, 0,
11119         "INTEGER_0_1", HFILL }},
11120     { &hf_tetra_other_party_address,
11121       { "other-party-address", "tetra.other_party_address",
11122         FT_UINT32, BASE_DEC, VALS(tetra_Calling_party_address_type_vals), 0,
11123         "Other_party_address_type", HFILL }},
11124     { &hf_tetra_optional_elements_15,
11125       { "optional-elements", "tetra.optional_elements",
11126         FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_15_vals), 0,
11127         "T_optional_elements_15", HFILL }},
11128     { &hf_tetra_type2_parameters_11,
11129       { "type2-parameters", "tetra.type2_parameters",
11130         FT_NONE, BASE_NONE, NULL, 0,
11131         "T_type2_parameters_11", HFILL }},
11132     { &hf_tetra_prop_07,
11133       { "prop", "tetra.prop",
11134         FT_UINT32, BASE_DEC, VALS(tetra_T_prop_06_vals), 0,
11135         "T_prop_06", HFILL }},
11136     { &hf_tetra_call_time_out,
11137       { "call-time-out", "tetra.call_time_out",
11138         FT_UINT32, BASE_DEC, NULL, 0,
11139         "INTEGER_0_15", HFILL }},
11140     { &hf_tetra_hook_method_selection_01,
11141       { "hook-method-selection", "tetra.hook_method_selection",
11142         FT_UINT32, BASE_DEC, NULL, 0,
11143         "INTEGER_0_1", HFILL }},
11144     { &hf_tetra_simplex_duplex_selection_02,
11145       { "simplex-duplex-selection", "tetra.simplex_duplex_selection",
11146         FT_UINT32, BASE_DEC, VALS(tetra_T_simplex_duplex_selection_02_vals), 0,
11147         "T_simplex_duplex_selection_02", HFILL }},
11148     { &hf_tetra_transmission_grant,
11149       { "transmission-grant", "tetra.transmission_grant",
11150         FT_UINT32, BASE_DEC, NULL, 0,
11151         "INTEGER_0_3", HFILL }},
11152     { &hf_tetra_optional_elements_16,
11153       { "optional-elements", "tetra.optional_elements",
11154         FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_16_vals), 0,
11155         "T_optional_elements_16", HFILL }},
11156     { &hf_tetra_type2_parameters_12,
11157       { "type2-parameters", "tetra.type2_parameters",
11158         FT_NONE, BASE_NONE, NULL, 0,
11159         "T_type2_parameters_12", HFILL }},
11160     { &hf_tetra_calling_party_address,
11161       { "calling-party-address", "tetra.calling_party_address",
11162         FT_UINT32, BASE_DEC, VALS(tetra_T_calling_party_address_vals), 0,
11163         NULL, HFILL }},
11164     { &hf_tetra_calling_party_address_01,
11165       { "calling-party-address", "tetra.calling_party_address",
11166         FT_UINT32, BASE_DEC, VALS(tetra_Calling_party_address_type_vals), 0,
11167         "Calling_party_address_type", HFILL }},
11168     { &hf_tetra_external_subscriber_number_02,
11169       { "external-subscriber-number", "tetra.external_subscriber_number",
11170         FT_UINT32, BASE_DEC, VALS(tetra_T_external_subscriber_number_01_vals), 0,
11171         "T_external_subscriber_number_01", HFILL }},
11172     { &hf_tetra_external_subscriber_number_03,
11173       { "external-subscriber-number", "tetra.external_subscriber_number",
11174         FT_UINT32, BASE_DEC, NULL, 0,
11175         "INTEGER_0_15", HFILL }},
11176     { &hf_tetra_prop_08,
11177       { "prop", "tetra.prop",
11178         FT_UINT32, BASE_DEC, VALS(tetra_T_prop_07_vals), 0,
11179         "T_prop_07", HFILL }},
11180     { &hf_tetra_call_time_out_setup_phase,
11181       { "call-time-out-setup-phase", "tetra.call_time_out_setup_phase",
11182         FT_UINT32, BASE_DEC, NULL, 0,
11183         "INTEGER_0_7", HFILL }},
11184     { &hf_tetra_simplex_duplex_selection_03,
11185       { "simplex-duplex-selection", "tetra.simplex_duplex_selection",
11186         FT_UINT32, BASE_DEC, NULL, 0,
11187         "INTEGER_0_1", HFILL }},
11188     { &hf_tetra_optional_elements_17,
11189       { "optional-elements", "tetra.optional_elements",
11190         FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_17_vals), 0,
11191         "T_optional_elements_17", HFILL }},
11192     { &hf_tetra_type2_parameters_13,
11193       { "type2-parameters", "tetra.type2_parameters",
11194         FT_NONE, BASE_NONE, NULL, 0,
11195         "T_type2_parameters_13", HFILL }},
11196     { &hf_tetra_basic_service_information_03,
11197       { "basic-service-information", "tetra.basic_service_information",
11198         FT_UINT32, BASE_DEC, VALS(tetra_T_basic_service_information_02_vals), 0,
11199         "T_basic_service_information_02", HFILL }},
11200     { &hf_tetra_call_status,
11201       { "call-status", "tetra.call_status",
11202         FT_UINT32, BASE_DEC, VALS(tetra_T_call_status_vals), 0,
11203         NULL, HFILL }},
11204     { &hf_tetra_call_status_01,
11205       { "call-status", "tetra.call_status",
11206         FT_UINT32, BASE_DEC, NULL, 0,
11207         "INTEGER_0_7", HFILL }},
11208     { &hf_tetra_notification_indicator,
11209       { "notification-indicator", "tetra.notification_indicator",
11210         FT_UINT32, BASE_DEC, VALS(tetra_T_notification_indicator_vals), 0,
11211         NULL, HFILL }},
11212     { &hf_tetra_notification_indicator_01,
11213       { "notification-indicator", "tetra.notification_indicator",
11214         FT_UINT32, BASE_DEC, NULL, 0,
11215         "INTEGER_0_63", HFILL }},
11216     { &hf_tetra_prop_09,
11217       { "prop", "tetra.prop",
11218         FT_UINT32, BASE_DEC, VALS(tetra_T_prop_08_vals), 0,
11219         "T_prop_08", HFILL }},
11220     { &hf_tetra_simplex_duplex_selection_04,
11221       { "simplex-duplex-selection", "tetra.simplex_duplex_selection",
11222         FT_UINT32, BASE_DEC, VALS(tetra_T_simplex_duplex_selection_03_vals), 0,
11223         "T_simplex_duplex_selection_03", HFILL }},
11224     { &hf_tetra_call_queued,
11225       { "call-queued", "tetra.call_queued",
11226         FT_BOOLEAN, BASE_NONE, NULL, 0,
11227         "BOOLEAN", HFILL }},
11228     { &hf_tetra_optional_elements_18,
11229       { "optional-elements", "tetra.optional_elements",
11230         FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_18_vals), 0,
11231         "T_optional_elements_18", HFILL }},
11232     { &hf_tetra_type2_parameters_14,
11233       { "type2-parameters", "tetra.type2_parameters",
11234         FT_NONE, BASE_NONE, NULL, 0,
11235         "T_type2_parameters_14", HFILL }},
11236     { &hf_tetra_basic_service_infomation,
11237       { "basic-service-infomation", "tetra.basic_service_infomation",
11238         FT_UINT32, BASE_DEC, VALS(tetra_T_basic_service_infomation_vals), 0,
11239         NULL, HFILL }},
11240     { &hf_tetra_basic_service_infomation_01,
11241       { "basic-service-infomation", "tetra.basic_service_infomation",
11242         FT_NONE, BASE_NONE, NULL, 0,
11243         "Basic_service_information", HFILL }},
11244     { &hf_tetra_notification_indicator_02,
11245       { "notification-indicator", "tetra.notification_indicator",
11246         FT_UINT32, BASE_DEC, VALS(tetra_T_notification_indicator_01_vals), 0,
11247         "T_notification_indicator_01", HFILL }},
11248     { &hf_tetra_prop_10,
11249       { "prop", "tetra.prop",
11250         FT_UINT32, BASE_DEC, VALS(tetra_T_prop_09_vals), 0,
11251         "T_prop_09", HFILL }},
11252     { &hf_tetra_call_time_out_01,
11253       { "call-time-out", "tetra.call_time_out",
11254         FT_UINT32, BASE_DEC, NULL, 0,
11255         "INTEGER_0_31", HFILL }},
11256     { &hf_tetra_simplex_duplex_selection_05,
11257       { "simplex-duplex-selection", "tetra.simplex_duplex_selection",
11258         FT_UINT32, BASE_DEC, VALS(tetra_T_simplex_duplex_selection_04_vals), 0,
11259         "T_simplex_duplex_selection_04", HFILL }},
11260     { &hf_tetra_call_ownership,
11261       { "call-ownership", "tetra.call_ownership",
11262         FT_UINT32, BASE_DEC, NULL, 0,
11263         "INTEGER_0_1", HFILL }},
11264     { &hf_tetra_optional_elements_19,
11265       { "optional-elements", "tetra.optional_elements",
11266         FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_19_vals), 0,
11267         "T_optional_elements_19", HFILL }},
11268     { &hf_tetra_type2_parameters_15,
11269       { "type2-parameters", "tetra.type2_parameters",
11270         FT_NONE, BASE_NONE, NULL, 0,
11271         "T_type2_parameters_15", HFILL }},
11272     { &hf_tetra_call_priority_01,
11273       { "call-priority", "tetra.call_priority",
11274         FT_UINT32, BASE_DEC, VALS(tetra_T_call_priority_vals), 0,
11275         NULL, HFILL }},
11276     { &hf_tetra_basic_service_information_04,
11277       { "basic-service-information", "tetra.basic_service_information",
11278         FT_UINT32, BASE_DEC, VALS(tetra_T_basic_service_information_03_vals), 0,
11279         "T_basic_service_information_03", HFILL }},
11280     { &hf_tetra_temporary_address,
11281       { "temporary-address", "tetra.temporary_address",
11282         FT_UINT32, BASE_DEC, VALS(tetra_T_temporary_address_vals), 0,
11283         NULL, HFILL }},
11284     { &hf_tetra_temporary_address_01,
11285       { "temporary-address", "tetra.temporary_address",
11286         FT_UINT32, BASE_DEC, VALS(tetra_Calling_party_address_type_vals), 0,
11287         "Calling_party_address_type", HFILL }},
11288     { &hf_tetra_notification_indicator_03,
11289       { "notification-indicator", "tetra.notification_indicator",
11290         FT_UINT32, BASE_DEC, VALS(tetra_T_notification_indicator_02_vals), 0,
11291         "T_notification_indicator_02", HFILL }},
11292     { &hf_tetra_prop_11,
11293       { "prop", "tetra.prop",
11294         FT_UINT32, BASE_DEC, VALS(tetra_T_prop_10_vals), 0,
11295         "T_prop_10", HFILL }},
11296     { &hf_tetra_optional_elements_20,
11297       { "optional-elements", "tetra.optional_elements",
11298         FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_20_vals), 0,
11299         "T_optional_elements_20", HFILL }},
11300     { &hf_tetra_type2_parameters_16,
11301       { "type2-parameters", "tetra.type2_parameters",
11302         FT_NONE, BASE_NONE, NULL, 0,
11303         "T_type2_parameters_16", HFILL }},
11304     { &hf_tetra_notification_indicator_04,
11305       { "notification-indicator", "tetra.notification_indicator",
11306         FT_UINT32, BASE_DEC, VALS(tetra_T_notification_indicator_03_vals), 0,
11307         "T_notification_indicator_03", HFILL }},
11308     { &hf_tetra_prop_12,
11309       { "prop", "tetra.prop",
11310         FT_UINT32, BASE_DEC, VALS(tetra_T_prop_11_vals), 0,
11311         "T_prop_11", HFILL }},
11312     { &hf_tetra_optional_elements_21,
11313       { "optional-elements", "tetra.optional_elements",
11314         FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_21_vals), 0,
11315         "T_optional_elements_21", HFILL }},
11316     { &hf_tetra_type2_parameters_17,
11317       { "type2-parameters", "tetra.type2_parameters",
11318         FT_NONE, BASE_NONE, NULL, 0,
11319         "T_type2_parameters_17", HFILL }},
11320     { &hf_tetra_notification_indicator_05,
11321       { "notification-indicator", "tetra.notification_indicator",
11322         FT_UINT32, BASE_DEC, VALS(tetra_T_notification_indicator_04_vals), 0,
11323         "T_notification_indicator_04", HFILL }},
11324     { &hf_tetra_prop_13,
11325       { "prop", "tetra.prop",
11326         FT_UINT32, BASE_DEC, VALS(tetra_T_prop_12_vals), 0,
11327         "T_prop_12", HFILL }},
11328     { &hf_tetra_reset_call_time_out,
11329       { "reset-call-time-out", "tetra.reset_call_time_out",
11330         FT_UINT32, BASE_DEC, NULL, 0,
11331         "INTEGER_0_1", HFILL }},
11332     { &hf_tetra_optional_elements_22,
11333       { "optional-elements", "tetra.optional_elements",
11334         FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_22_vals), 0,
11335         "T_optional_elements_22", HFILL }},
11336     { &hf_tetra_type2_parameters_18,
11337       { "type2-parameters", "tetra.type2_parameters",
11338         FT_NONE, BASE_NONE, NULL, 0,
11339         "T_type2_parameters_18", HFILL }},
11340     { &hf_tetra_new_call_identifier,
11341       { "new-call-identifier", "tetra.new_call_identifier",
11342         FT_UINT32, BASE_DEC, VALS(tetra_T_new_call_identifier_vals), 0,
11343         NULL, HFILL }},
11344     { &hf_tetra_new_call_identifier_01,
11345       { "new-call-identifier", "tetra.new_call_identifier",
11346         FT_UINT32, BASE_DEC, NULL, 0,
11347         "INTEGER_0_1023", HFILL }},
11348     { &hf_tetra_call_time_out_02,
11349       { "call-time-out", "tetra.call_time_out",
11350         FT_UINT32, BASE_DEC, VALS(tetra_T_call_time_out_vals), 0,
11351         NULL, HFILL }},
11352     { &hf_tetra_call_time_out_03,
11353       { "call-time-out", "tetra.call_time_out",
11354         FT_UINT32, BASE_DEC, NULL, 0,
11355         "INTEGER_0_7", HFILL }},
11356     { &hf_tetra_call_status_02,
11357       { "call-status", "tetra.call_status",
11358         FT_UINT32, BASE_DEC, VALS(tetra_T_call_status_01_vals), 0,
11359         "T_call_status_01", HFILL }},
11360     { &hf_tetra_modify,
11361       { "modify", "tetra.modify",
11362         FT_UINT32, BASE_DEC, VALS(tetra_T_modify_vals), 0,
11363         NULL, HFILL }},
11364     { &hf_tetra_modify_01,
11365       { "modify", "tetra.modify",
11366         FT_NONE, BASE_NONE, NULL, 0,
11367         "Modify_type", HFILL }},
11368     { &hf_tetra_notification_indicator_06,
11369       { "notification-indicator", "tetra.notification_indicator",
11370         FT_UINT32, BASE_DEC, VALS(tetra_T_notification_indicator_05_vals), 0,
11371         "T_notification_indicator_05", HFILL }},
11372     { &hf_tetra_prop_14,
11373       { "prop", "tetra.prop",
11374         FT_UINT32, BASE_DEC, VALS(tetra_T_prop_13_vals), 0,
11375         "T_prop_13", HFILL }},
11376     { &hf_tetra_optional_elements_23,
11377       { "optional-elements", "tetra.optional_elements",
11378         FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_23_vals), 0,
11379         "T_optional_elements_23", HFILL }},
11380     { &hf_tetra_type2_parameters_19,
11381       { "type2-parameters", "tetra.type2_parameters",
11382         FT_NONE, BASE_NONE, NULL, 0,
11383         "T_type2_parameters_19", HFILL }},
11384     { &hf_tetra_notification_indicator_07,
11385       { "notification-indicator", "tetra.notification_indicator",
11386         FT_UINT32, BASE_DEC, VALS(tetra_T_notification_indicator_06_vals), 0,
11387         "T_notification_indicator_06", HFILL }},
11388     { &hf_tetra_prop_15,
11389       { "prop", "tetra.prop",
11390         FT_UINT32, BASE_DEC, VALS(tetra_T_prop_14_vals), 0,
11391         "T_prop_14", HFILL }},
11392     { &hf_tetra_group_identity_ack_request,
11393       { "group-identity-ack-request", "tetra.group_identity_ack_request",
11394         FT_BOOLEAN, BASE_NONE, NULL, 0,
11395         "BOOLEAN", HFILL }},
11396     { &hf_tetra_optional_elements_24,
11397       { "optional-elements", "tetra.optional_elements",
11398         FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_24_vals), 0,
11399         "T_optional_elements_24", HFILL }},
11400     { &hf_tetra_type2_element_02,
11401       { "type2-element", "tetra.type2_element",
11402         FT_NONE, BASE_NONE, NULL, 0,
11403         "T_type2_element_02", HFILL }},
11404     { &hf_tetra_type3_04,
11405       { "type3", "tetra.type3",
11406         FT_UINT32, BASE_DEC, VALS(tetra_T_type3_04_vals), 0,
11407         "T_type3_04", HFILL }},
11408     { &hf_tetra_type3_elements_04,
11409       { "type3-elements", "tetra.type3_elements",
11410         FT_NONE, BASE_NONE, NULL, 0,
11411         "T_type3_elements_04", HFILL }},
11412     { &hf_tetra_group_identity_downlink_02,
11413       { "group-identity-downlink", "tetra.group_identity_downlink",
11414         FT_NONE, BASE_NONE, NULL, 0,
11415         NULL, HFILL }},
11416     { &hf_tetra_group_identity_attach_detach_accept,
11417       { "group-identity-attach-detach-accept", "tetra.group_identity_attach_detach_accept",
11418         FT_BOOLEAN, BASE_NONE, NULL, 0,
11419         "BOOLEAN", HFILL }},
11420     { &hf_tetra_optional_elements_25,
11421       { "optional-elements", "tetra.optional_elements",
11422         FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_25_vals), 0,
11423         "T_optional_elements_25", HFILL }},
11424     { &hf_tetra_type2_element_03,
11425       { "type2-element", "tetra.type2_element",
11426         FT_NONE, BASE_NONE, NULL, 0,
11427         "T_type2_element_03", HFILL }},
11428     { &hf_tetra_type3_05,
11429       { "type3", "tetra.type3",
11430         FT_UINT32, BASE_DEC, VALS(tetra_T_type3_05_vals), 0,
11431         "T_type3_05", HFILL }},
11432     { &hf_tetra_type3_elements_05,
11433       { "type3-elements", "tetra.type3_elements",
11434         FT_NONE, BASE_NONE, NULL, 0,
11435         "T_type3_elements_05", HFILL }},
11436     { &hf_tetra_called_party_sna,
11437       { "called-party-sna", "tetra.called_party_sna",
11438         FT_UINT32, BASE_DEC, NULL, 0,
11439         "INTEGER_0_255", HFILL }},
11440     { &hf_tetra_called_party_ssi,
11441       { "called-party-ssi", "tetra.called_party_ssi",
11442         FT_UINT32, BASE_DEC, NULL, 0,
11443         "INTEGER_0_16777215", HFILL }},
11444     { &hf_tetra_called_party_ssi_extention,
11445       { "called-party-ssi-extention", "tetra.called_party_ssi_extention",
11446         FT_NONE, BASE_NONE, NULL, 0,
11447         NULL, HFILL }},
11448     { &hf_tetra_called_party_extention,
11449       { "called-party-extention", "tetra.called_party_extention",
11450         FT_UINT32, BASE_DEC, NULL, 0,
11451         "INTEGER_0_16777215", HFILL }},
11452     { &hf_tetra_data_01,
11453       { "data", "tetra.data",
11454         FT_UINT32, BASE_DEC, VALS(tetra_T_data_01_vals), 0,
11455         "T_data_01", HFILL }},
11456     { &hf_tetra_element1,
11457       { "element1", "tetra.element1",
11458         FT_NONE, BASE_NONE, NULL, 0,
11459         "Type1", HFILL }},
11460     { &hf_tetra_element,
11461       { "element", "tetra.element",
11462         FT_NONE, BASE_NONE, NULL, 0,
11463         "Type2", HFILL }},
11464     { &hf_tetra_proprietary_element_owner,
11465       { "proprietary-element-owner", "tetra.proprietary_element_owner",
11466         FT_UINT32, BASE_DEC, NULL, 0,
11467         NULL, HFILL }},
11468     { &hf_tetra_proprietary_element_owner_extension,
11469       { "proprietary-element-owner-extension", "tetra.proprietary_element_owner_extension",
11470         FT_BYTES, BASE_NONE, NULL, 0,
11471         "BIT_STRING", HFILL }},
11472     { &hf_tetra_simplex_duplex_selection_06,
11473       { "simplex-duplex-selection", "tetra.simplex_duplex_selection",
11474         FT_UINT32, BASE_DEC, VALS(tetra_T_simplex_duplex_selection_05_vals), 0,
11475         "T_simplex_duplex_selection_05", HFILL }},
11476
11477 /*--- End of included file: packet-tetra-hfarr.c ---*/
11478 #line 612 "../../asn1/tetra/packet-tetra-template.c"
11479         };
11480
11481         /* List of subtrees */
11482         static gint *ett[] = {
11483                 &ett_tetra,
11484                 &ett_tetra_header,
11485                 &ett_tetra_length,
11486                 &ett_tetra_txreg,
11487                 &ett_tetra_text,
11488
11489 /*--- Included file: packet-tetra-ettarr.c ---*/
11490 #line 1 "../../asn1/tetra/packet-tetra-ettarr.c"
11491     &ett_tetra_AACH,
11492     &ett_tetra_BSCH,
11493     &ett_tetra_MLE_Sync,
11494     &ett_tetra_BNCH,
11495     &ett_tetra_T_hyperframe_or_cck,
11496     &ett_tetra_T_optional_params,
11497     &ett_tetra_TS_COMMON_FRAMES,
11498     &ett_tetra_Default_Code_A,
11499     &ett_tetra_Extended_Services_Broadcast,
11500     &ett_tetra_T_section,
11501     &ett_tetra_PRESENT1,
11502     &ett_tetra_MAC_ACCESS,
11503     &ett_tetra_T_data,
11504     &ett_tetra_Address,
11505     &ett_tetra_U_LLC_PDU,
11506     &ett_tetra_U_BL_ACK_FCS,
11507     &ett_tetra_U_MLE_PDU_FCS,
11508     &ett_tetra_U_BL_DATA_FCS,
11509     &ett_tetra_U_BL_ADATA_FCS,
11510     &ett_tetra_U_MLE_PDU,
11511     &ett_tetra_ComplexSDU,
11512     &ett_tetra_T_lengthIndicationOrCapacityRequest,
11513     &ett_tetra_FRAG,
11514     &ett_tetra_MAC_FRAG,
11515     &ett_tetra_MAC_FRAG120,
11516     &ett_tetra_MAC_END_UPLINK,
11517     &ett_tetra_MAC_END_UP114,
11518     &ett_tetra_MAC_END_HU,
11519     &ett_tetra_T_lengthInd_ReservationReq,
11520     &ett_tetra_MAC_END_DOWNLINK,
11521     &ett_tetra_T_slot_granting,
11522     &ett_tetra_T_channel_allocation,
11523     &ett_tetra_SlotGranting,
11524     &ett_tetra_ChannelAllocation,
11525     &ett_tetra_T_extend_carrier_flag,
11526     &ett_tetra_T_monitoring_pattern,
11527     &ett_tetra_Extended_carrier_flag,
11528     &ett_tetra_MAC_END_DOWN111,
11529     &ett_tetra_T_slot_granting_01,
11530     &ett_tetra_T_channel_allocation_01,
11531     &ett_tetra_MAC_RESOURCE,
11532     &ett_tetra_OTHER_DATA,
11533     &ett_tetra_T_power_control,
11534     &ett_tetra_T_slot_granting_02,
11535     &ett_tetra_T_channel_allocation_02,
11536     &ett_tetra_AddressMacResource,
11537     &ett_tetra_SSI_NEED,
11538     &ett_tetra_EVENT_NEED,
11539     &ett_tetra_USSI_NEED,
11540     &ett_tetra_SMI_NEED,
11541     &ett_tetra_SSI_EVENT_NEED,
11542     &ett_tetra_SSI_USAGE_NEED,
11543     &ett_tetra_SMI_EVENT_NEED,
11544     &ett_tetra_MAC_ACCESS_DEFINE,
11545     &ett_tetra_T_optional_field,
11546     &ett_tetra_D_LLC_PDU,
11547     &ett_tetra_D_BL_ACK_FCS,
11548     &ett_tetra_D_MLE_PDU_FCS,
11549     &ett_tetra_D_BL_ADATA_FCS,
11550     &ett_tetra_D_BL_DATA_FCS,
11551     &ett_tetra_U_BL_ACK,
11552     &ett_tetra_D_BL_ACK,
11553     &ett_tetra_U_BL_DATA,
11554     &ett_tetra_D_BL_DATA,
11555     &ett_tetra_U_BL_ADATA,
11556     &ett_tetra_D_BL_ADATA,
11557     &ett_tetra_D_MLE_PDU,
11558     &ett_tetra_UMLE_PDU,
11559     &ett_tetra_DMLE_PDU,
11560     &ett_tetra_U_PREPARE,
11561     &ett_tetra_T_optional_elements,
11562     &ett_tetra_T_type2_parameters,
11563     &ett_tetra_T_cell_number,
11564     &ett_tetra_U_RESTORE,
11565     &ett_tetra_T_optional_elements_01,
11566     &ett_tetra_T_type2_parameters_01,
11567     &ett_tetra_T_mcc,
11568     &ett_tetra_T_mnc,
11569     &ett_tetra_T_la,
11570     &ett_tetra_D_NEW_CELL,
11571     &ett_tetra_T_optional_elements_02,
11572     &ett_tetra_D_PREPARE_FAIL,
11573     &ett_tetra_T_optional_elements_03,
11574     &ett_tetra_D_NWRK_BRDADCAST,
11575     &ett_tetra_T_optional_elements_04,
11576     &ett_tetra_T_type2_parameters_02,
11577     &ett_tetra_T_tetra_network_time,
11578     &ett_tetra_T_number_of_neighbour_cells,
11579     &ett_tetra_TETRA_NETWORK_TIME,
11580     &ett_tetra_D_RESTORE_ACK,
11581     &ett_tetra_D_RESTORE_FAIL,
11582     &ett_tetra_U_MM_PDU,
11583     &ett_tetra_D_MM_PDU,
11584     &ett_tetra_GROUP_IDENTITY_DOWNLINK,
11585     &ett_tetra_T_attach_detach_identifiet,
11586     &ett_tetra_T_attach,
11587     &ett_tetra_T_detach,
11588     &ett_tetra_T_address_type,
11589     &ett_tetra_T_gssi_extension,
11590     &ett_tetra_GROUP_IDENTITY_UPLINK,
11591     &ett_tetra_T_attach_detach_identifiet_01,
11592     &ett_tetra_T_attach_01,
11593     &ett_tetra_T_detach_01,
11594     &ett_tetra_T_address_type_01,
11595     &ett_tetra_T_gssi_extension_01,
11596     &ett_tetra_D_LOCATION_UPDATE_ACCEPT,
11597     &ett_tetra_T_optional_elements_05,
11598     &ett_tetra_T_type2_parameters_03,
11599     &ett_tetra_T_ssi,
11600     &ett_tetra_T_address_extension,
11601     &ett_tetra_T_suscriber_class,
11602     &ett_tetra_T_energy_saving_mode,
11603     &ett_tetra_T_scch_info,
11604     &ett_tetra_T_type3,
11605     &ett_tetra_T_type3_elements,
11606     &ett_tetra_T_new_ra,
11607     &ett_tetra_T_group_identity_location_accept,
11608     &ett_tetra_T_group_predefined_lifetime,
11609     &ett_tetra_T_group_identity_downlink,
11610     &ett_tetra_T_proprietary,
11611     &ett_tetra_D_LOCATION_UPDATE_REJECT,
11612     &ett_tetra_U_MM_STATUS,
11613     &ett_tetra_D_MM_STATUS,
11614     &ett_tetra_U_CMCE_PDU,
11615     &ett_tetra_U_RELEASE,
11616     &ett_tetra_U_SDS_DATA,
11617     &ett_tetra_T_called_party_type_identifier,
11618     &ett_tetra_T_short_data_type_identifier,
11619     &ett_tetra_U_STATUS,
11620     &ett_tetra_T_called_party_type_identifier_01,
11621     &ett_tetra_U_INFO,
11622     &ett_tetra_D_CMCE_PDU,
11623     &ett_tetra_D_SDS_DATA,
11624     &ett_tetra_T_calling_party_type_identifier,
11625     &ett_tetra_T_short_data_type_identifier_01,
11626     &ett_tetra_D_STATUS,
11627     &ett_tetra_T_calling_party_type_identifier_01,
11628     &ett_tetra_D_DISCONNECT,
11629     &ett_tetra_D_INFO,
11630     &ett_tetra_D_TX_WAIT,
11631     &ett_tetra_D_TX_CONTINUE,
11632     &ett_tetra_U_LOCATION_UPDATE_DEMAND,
11633     &ett_tetra_T_cipher_control,
11634     &ett_tetra_T_optional_elements_06,
11635     &ett_tetra_T_type2_parameters_04,
11636     &ett_tetra_T_energy_saving_mode_01,
11637     &ett_tetra_T_la_information,
11638     &ett_tetra_T_ssi_01,
11639     &ett_tetra_T_address_extension_01,
11640     &ett_tetra_T_type3_01,
11641     &ett_tetra_T_type3_elements_01,
11642     &ett_tetra_T_group_identity_location_demand,
11643     &ett_tetra_T_group_report_response,
11644     &ett_tetra_T_group_identity_uplink,
11645     &ett_tetra_T_proprietary_01,
11646     &ett_tetra_U_ATTACH_DETACH_GROUP_IDENTITY,
11647     &ett_tetra_T_optional_elements_07,
11648     &ett_tetra_T_type2_element,
11649     &ett_tetra_T_type3_02,
11650     &ett_tetra_T_type3_elements_02,
11651     &ett_tetra_U_ATTACH_DETACH_GROUP_IDENTITY_ACK,
11652     &ett_tetra_T_optional_elements_08,
11653     &ett_tetra_T_type2_element_01,
11654     &ett_tetra_T_type3_03,
11655     &ett_tetra_T_type3_elements_03,
11656     &ett_tetra_U_SETUP,
11657     &ett_tetra_T_optional_elements_09,
11658     &ett_tetra_T_type2_parameters_05,
11659     &ett_tetra_T_external_subscriber_number,
11660     &ett_tetra_T_prop,
11661     &ett_tetra_Basic_service_information,
11662     &ett_tetra_U_ALERT,
11663     &ett_tetra_T_optional_elements_10,
11664     &ett_tetra_T_type2_parameters_06,
11665     &ett_tetra_T_basic_service_information,
11666     &ett_tetra_T_prop_01,
11667     &ett_tetra_U_CONNECT,
11668     &ett_tetra_T_optional_elements_11,
11669     &ett_tetra_T_type2_parameters_07,
11670     &ett_tetra_T_basic_service_information_01,
11671     &ett_tetra_T_prop_02,
11672     &ett_tetra_U_TX_CEASED,
11673     &ett_tetra_T_optional_elements_12,
11674     &ett_tetra_T_type2_parameters_08,
11675     &ett_tetra_T_prop_03,
11676     &ett_tetra_U_TX_DEMAND,
11677     &ett_tetra_T_optional_elements_13,
11678     &ett_tetra_T_type2_parameters_09,
11679     &ett_tetra_T_prop_04,
11680     &ett_tetra_U_DISCONNECT,
11681     &ett_tetra_T_optional_elements_14,
11682     &ett_tetra_T_type2_parameters_10,
11683     &ett_tetra_T_prop_05,
11684     &ett_tetra_U_CALL_RESTORE,
11685     &ett_tetra_T_optional_elements_15,
11686     &ett_tetra_T_type2_parameters_11,
11687     &ett_tetra_T_prop_06,
11688     &ett_tetra_D_SETUP,
11689     &ett_tetra_T_optional_elements_16,
11690     &ett_tetra_T_type2_parameters_12,
11691     &ett_tetra_T_calling_party_address,
11692     &ett_tetra_T_external_subscriber_number_01,
11693     &ett_tetra_T_prop_07,
11694     &ett_tetra_D_CALL_PROCEEDING,
11695     &ett_tetra_T_optional_elements_17,
11696     &ett_tetra_T_type2_parameters_13,
11697     &ett_tetra_T_basic_service_information_02,
11698     &ett_tetra_T_call_status,
11699     &ett_tetra_T_notification_indicator,
11700     &ett_tetra_T_prop_08,
11701     &ett_tetra_D_ALERT,
11702     &ett_tetra_T_optional_elements_18,
11703     &ett_tetra_T_type2_parameters_14,
11704     &ett_tetra_T_basic_service_infomation,
11705     &ett_tetra_T_notification_indicator_01,
11706     &ett_tetra_T_prop_09,
11707     &ett_tetra_D_CONNECT,
11708     &ett_tetra_T_optional_elements_19,
11709     &ett_tetra_T_type2_parameters_15,
11710     &ett_tetra_T_call_priority,
11711     &ett_tetra_T_basic_service_information_03,
11712     &ett_tetra_T_temporary_address,
11713     &ett_tetra_T_notification_indicator_02,
11714     &ett_tetra_T_prop_10,
11715     &ett_tetra_D_CONNECT_ACK,
11716     &ett_tetra_T_optional_elements_20,
11717     &ett_tetra_T_type2_parameters_16,
11718     &ett_tetra_T_notification_indicator_03,
11719     &ett_tetra_T_prop_11,
11720     &ett_tetra_D_RELEASE,
11721     &ett_tetra_T_optional_elements_21,
11722     &ett_tetra_T_type2_parameters_17,
11723     &ett_tetra_T_notification_indicator_04,
11724     &ett_tetra_T_prop_12,
11725     &ett_tetra_D_CALL_RESTORE,
11726     &ett_tetra_T_optional_elements_22,
11727     &ett_tetra_T_type2_parameters_18,
11728     &ett_tetra_T_new_call_identifier,
11729     &ett_tetra_T_call_time_out,
11730     &ett_tetra_T_call_status_01,
11731     &ett_tetra_T_modify,
11732     &ett_tetra_T_notification_indicator_05,
11733     &ett_tetra_T_prop_13,
11734     &ett_tetra_D_TX_CEASED,
11735     &ett_tetra_T_optional_elements_23,
11736     &ett_tetra_T_type2_parameters_19,
11737     &ett_tetra_T_notification_indicator_06,
11738     &ett_tetra_T_prop_14,
11739     &ett_tetra_D_TX_GRANTED,
11740     &ett_tetra_D_ATTACH_DETACH_GROUP_IDENTITY,
11741     &ett_tetra_T_optional_elements_24,
11742     &ett_tetra_T_type2_element_02,
11743     &ett_tetra_T_type3_04,
11744     &ett_tetra_T_type3_elements_04,
11745     &ett_tetra_D_ATTACH_DETACH_GROUP_IDENTITY_ACK,
11746     &ett_tetra_T_optional_elements_25,
11747     &ett_tetra_T_type2_element_03,
11748     &ett_tetra_T_type3_05,
11749     &ett_tetra_T_type3_elements_05,
11750     &ett_tetra_Calling_party_address_type,
11751     &ett_tetra_T_called_party_ssi_extention,
11752     &ett_tetra_Proprietary,
11753     &ett_tetra_T_data_01,
11754     &ett_tetra_Type1,
11755     &ett_tetra_Type2,
11756     &ett_tetra_Modify_type,
11757
11758 /*--- End of included file: packet-tetra-ettarr.c ---*/
11759 #line 622 "../../asn1/tetra/packet-tetra-template.c"
11760         };
11761
11762         /* execute protocol initialization only once */
11763         if (proto_tetra != -1)
11764                 return;
11765
11766         proto_tetra = proto_register_protocol("TETRA Protocol", "tetra", "tetra");
11767         proto_register_field_array (proto_tetra, hf, array_length (hf));
11768         proto_register_subtree_array (ett, array_length (ett));
11769         register_dissector("tetra", dissect_tetra, proto_tetra);
11770
11771         per_module = prefs_register_protocol(proto_tetra, NULL);
11772         prefs_register_bool_preference(per_module, "include_carrier_number",
11773                         "The data include carrier numbers",
11774                         "Whether the captured data include carrier number",
11775                         &include_carrier_number);
11776 }