Convert 'encoding' parameter of certain proto_tree_add_item() calls in asn1 dissectors:
[obnox/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 . 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., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
35  *
36  * REF: ETSI EN 300 392-2 V3.2.1
37  */
38
39 #ifdef HAVE_CONFIG_H
40 #include "config.h"
41 #endif
42
43 #include <glib.h>
44 #include <epan/packet.h>
45 #include <epan/conversation.h>
46 #include <epan/asn1.h>
47 #include <epan/prefs.h>
48
49 #include <stdio.h>
50 #include <string.h>
51
52 #include <epan/dissectors/packet-per.h>
53 #include "packet-tetra.h"
54
55 #define PROTO_TAG_tetra "TETRA"
56
57 /* Wireshark ID of the tetra protocol */
58 static int proto_tetra = -1;
59
60 /* These are the handles of our subdissectors */
61 static dissector_handle_t data_handle = NULL;
62
63 static dissector_handle_t tetra_handle;
64 static void dissect_tetra(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
65
66 static int global_tetra_port = 7074;
67
68 /* Whether the capture data include carrier numbers */
69 static gboolean include_carrier_number = TRUE;
70
71 /* The following hf_* variables are used to hold the Wireshark IDs of
72 * our header fields; they are filled out when we call
73 * proto_register_field_array() in proto_register_tetra()
74 */
75 /** Kts attempt at defining the protocol */
76 static gint hf_tetra = -1;
77 static gint hf_tetra_header = -1;
78 static gint hf_tetra_channels = -1;
79 static gint hf_tetra_channel1 = -1;
80 static gint hf_tetra_channel2 = -1;
81 static gint hf_tetra_channel3 = -1;
82 static gint hf_tetra_txreg = -1;
83 static gint hf_tetra_timer = -1;
84 static gint hf_tetra_pdu = -1;
85 static gint hf_tetra_rvstr = -1;
86 static gint hf_tetra_carriernumber = -1;
87 static gint hf_tetra_rxchannel1 = -1;
88 static gint hf_tetra_rxchannel2 = -1;
89 static gint hf_tetra_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_DATA_PDU = -1;            /* MAC_DATA */
100 static int hf_tetra_MAC_FRAG_PDU = -1;            /* MAC_FRAG */
101 static int hf_tetra_MAC_FRAG120_PDU = -1;         /* MAC_FRAG120 */
102 static int hf_tetra_MAC_END_UPLINK_PDU = -1;      /* MAC_END_UPLINK */
103 static int hf_tetra_MAC_END_UP114_PDU = -1;       /* MAC_END_UP114 */
104 static int hf_tetra_MAC_END_HU_PDU = -1;          /* MAC_END_HU */
105 static int hf_tetra_MAC_END_DOWNLINK_PDU = -1;    /* MAC_END_DOWNLINK */
106 static int hf_tetra_MAC_END_DOWN111_PDU = -1;     /* MAC_END_DOWN111 */
107 static int hf_tetra_MAC_RESOURCE_PDU = -1;        /* MAC_RESOURCE */
108 static int hf_tetra_MAC_ACCESS_DEFINE_PDU = -1;   /* MAC_ACCESS_DEFINE */
109 static int hf_tetra_function = -1;                /* INTEGER_0_3 */
110 static int hf_tetra_field1 = -1;                  /* INTEGER_0_63 */
111 static int hf_tetra_field2 = -1;                  /* INTEGER_0_63 */
112 static int hf_tetra_system_code = -1;             /* System_Code */
113 static int hf_tetra_colour_code = -1;             /* Colour_Code */
114 static int hf_tetra_timeslot_number = -1;         /* Timeslot_Number */
115 static int hf_tetra_frame_number = -1;            /* Frame_Number */
116 static int hf_tetra_multiple_frame_number = -1;   /* Multiple_Frame_Number */
117 static int hf_tetra_sharing_mod = -1;             /* Sharing_Mod */
118 static int hf_tetra_ts_reserved_frames = -1;      /* TS_Reserved_Frames */
119 static int hf_tetra_u_plane_dtx = -1;             /* U_Plane_DTX */
120 static int hf_tetra_frame_18_extension = -1;      /* Frame_18_Extension */
121 static int hf_tetra_reserved = -1;                /* Reserved */
122 static int hf_tetra_tm_sdu = -1;                  /* MLE_Sync */
123 static int hf_tetra_mcc = -1;                     /* INTEGER_0_1023 */
124 static int hf_tetra_mnc = -1;                     /* INTEGER_0_16383 */
125 static int hf_tetra_neighbour_cell_broadcast = -1;  /* INTEGER_0_3 */
126 static int hf_tetra_cell_service_level = -1;      /* INTEGER_0_3 */
127 static int hf_tetra_late_entry_information = -1;  /* INTEGER_0_1 */
128 static int hf_tetra_pdu_type = -1;                /* INTEGER_0_3 */
129 static int hf_tetra_broadcast_type = -1;          /* INTEGER_0_3 */
130 static int hf_tetra_main_carrier = -1;            /* INTEGER_0_4095 */
131 static int hf_tetra_frequency_band = -1;          /* INTEGER_0_15 */
132 static int hf_tetra_offset = -1;                  /* Offset */
133 static int hf_tetra_duplex_spacing = -1;          /* INTEGER_0_7 */
134 static int hf_tetra_reverse_operation = -1;       /* Reverse_Operation */
135 static int hf_tetra_sencond_ctl_carrier = -1;     /* Sencond_Ctl_Carrier */
136 static int hf_tetra_ms_txpwr_max_cell = -1;       /* MS_TXPWR_MAX_CELL */
137 static int hf_tetra_rxlev_access_min = -1;        /* RXLEV_ACCESS_MIN */
138 static int hf_tetra_access_parameter = -1;        /* ACCESS_PARAMETER */
139 static int hf_tetra_radio_downlink_timeout = -1;  /* RADIO_DOWNLINK_TIMEOUT */
140 static int hf_tetra_hyperframe_or_cck = -1;       /* T_hyperframe_or_cck */
141 static int hf_tetra_hyperframe = -1;              /* INTEGER_0_65535 */
142 static int hf_tetra_cckid = -1;                   /* INTEGER_0_65535 */
143 static int hf_tetra_optional_params = -1;         /* T_optional_params */
144 static int hf_tetra_even_multiframe = -1;         /* TS_COMMON_FRAMES */
145 static int hf_tetra_odd_multiframe = -1;          /* TS_COMMON_FRAMES */
146 static int hf_tetra_access_a_code = -1;           /* Default_Code_A */
147 static int hf_tetra_extend_service = -1;          /* Extended_Services_Broadcast */
148 static int hf_tetra_la = -1;                      /* INTEGER_0_16383 */
149 static int hf_tetra_subscriber_class = -1;        /* INTEGER_0_65535 */
150 static int hf_tetra_registriation = -1;           /* INTEGER_0_1 */
151 static int hf_tetra_de_registration = -1;         /* INTEGER_0_1 */
152 static int hf_tetra_priority_cell = -1;           /* INTEGER_0_1 */
153 static int hf_tetra_minimum_mode_service = -1;    /* INTEGER_0_1 */
154 static int hf_tetra_migration = -1;               /* INTEGER_0_1 */
155 static int hf_tetra_system_wide_service = -1;     /* INTEGER_0_1 */
156 static int hf_tetra_tetra_voice_service = -1;     /* INTEGER_0_1 */
157 static int hf_tetra_circuit_mode_data_service = -1;  /* INTEGER_0_1 */
158 static int hf_tetra_reserved_01 = -1;             /* INTEGER_0_1 */
159 static int hf_tetra_sndcp_service = -1;           /* INTEGER_0_1 */
160 static int hf_tetra_air_interface_encryption = -1;  /* INTEGER_0_1 */
161 static int hf_tetra_advanced_link_support = -1;   /* INTEGER_0_1 */
162 static int hf_tetra_frame1 = -1;                  /* FRAME */
163 static int hf_tetra_frame2 = -1;                  /* FRAME */
164 static int hf_tetra_frame3 = -1;                  /* FRAME */
165 static int hf_tetra_frame4 = -1;                  /* FRAME */
166 static int hf_tetra_frame5 = -1;                  /* FRAME */
167 static int hf_tetra_frame6 = -1;                  /* FRAME */
168 static int hf_tetra_frame7 = -1;                  /* FRAME */
169 static int hf_tetra_frame8 = -1;                  /* FRAME */
170 static int hf_tetra_frame9 = -1;                  /* FRAME */
171 static int hf_tetra_frame10 = -1;                 /* FRAME */
172 static int hf_tetra_frame11 = -1;                 /* FRAME */
173 static int hf_tetra_frame12 = -1;                 /* FRAME */
174 static int hf_tetra_frame13 = -1;                 /* FRAME */
175 static int hf_tetra_frame14 = -1;                 /* FRAME */
176 static int hf_tetra_frame15 = -1;                 /* FRAME */
177 static int hf_tetra_frame16 = -1;                 /* FRAME */
178 static int hf_tetra_frame17 = -1;                 /* FRAME */
179 static int hf_tetra_frame18 = -1;                 /* FRAME */
180 static int hf_tetra_imm = -1;                     /* IMM */
181 static int hf_tetra_wt = -1;                      /* WT */
182 static int hf_tetra_nu = -1;                      /* NU */
183 static int hf_tetra_frame_len_factor = -1;        /* Frame_Len_Factor */
184 static int hf_tetra_timeslot_pointer = -1;        /* Timeslot_Pointer */
185 static int hf_tetra_min_pdu_priority = -1;        /* Min_Pdu_Priority */
186 static int hf_tetra_security_information = -1;    /* INTEGER_0_255 */
187 static int hf_tetra_sds_tl_addressing_method = -1;  /* SDS_TL_Addressing_Method */
188 static int hf_tetra_gck_supported = -1;           /* INTEGER_0_1 */
189 static int hf_tetra_section = -1;                 /* T_section */
190 static int hf_tetra_present_1 = -1;               /* PRESENT1 */
191 static int hf_tetra_present_2 = -1;               /* INTEGER_0_127 */
192 static int hf_tetra_present_3 = -1;               /* INTEGER_0_127 */
193 static int hf_tetra_present_4 = -1;               /* INTEGER_0_127 */
194 static int hf_tetra_data_priority_supported = -1;  /* Data_Priority_Supported */
195 static int hf_tetra_reserved_02 = -1;             /* INTEGER_0_7 */
196 static int hf_tetra_section_2_information = -1;   /* Section_Information */
197 static int hf_tetra_section_3_information = -1;   /* Section_Information */
198 static int hf_tetra_section_4_information = -1;   /* Section_Information */
199 static int hf_tetra_pdu_type_01 = -1;             /* INTEGER_0_1 */
200 static int hf_tetra_fill_bit_indication = -1;     /* Fill_Bit_Indication */
201 static int hf_tetra_encrypted_flag = -1;          /* Encrypted_Flag */
202 static int hf_tetra_address = -1;                 /* Address */
203 static int hf_tetra_data = -1;                    /* T_data */
204 static int hf_tetra_sdu1 = -1;                    /* U_LLC_PDU */
205 static int hf_tetra_sdu2 = -1;                    /* ComplexSDU */
206 static int hf_tetra_ssi = -1;                     /* INTEGER_0_16777215 */
207 static int hf_tetra_eventLabel = -1;              /* INTEGER_0_1023 */
208 static int hf_tetra_ussi = -1;                    /* INTEGER_0_16777215 */
209 static int hf_tetra_smi = -1;                     /* INTEGER_0_16777215 */
210 static int hf_tetra_bl_adata = -1;                /* U_BL_ADATA */
211 static int hf_tetra_bl_data = -1;                 /* U_BL_DATA */
212 static int hf_tetra_bl_udata = -1;                /* U_MLE_PDU */
213 static int hf_tetra_bl_ack = -1;                  /* U_BL_ACK */
214 static int hf_tetra_bl_adata_fcs = -1;            /* U_BL_ADATA_FCS */
215 static int hf_tetra_bl_data_fcs = -1;             /* U_BL_DATA_FCS */
216 static int hf_tetra_bl_udata_fcs = -1;            /* U_MLE_PDU_FCS */
217 static int hf_tetra_bl_ack_fcs = -1;              /* U_BL_ACK_FCS */
218 static int hf_tetra_al_setup = -1;                /* NULL */
219 static int hf_tetra_al_data = -1;                 /* NULL */
220 static int hf_tetra_al_udata = -1;                /* NULL */
221 static int hf_tetra_al_ack = -1;                  /* NULL */
222 static int hf_tetra_al_reconnect = -1;            /* NULL */
223 static int hf_tetra_reserve1 = -1;                /* NULL */
224 static int hf_tetra_reserve2 = -1;                /* NULL */
225 static int hf_tetra_al_disc = -1;                 /* NULL */
226 static int hf_tetra_nr = -1;                      /* INTEGER_0_1 */
227 static int hf_tetra_tl_sdu = -1;                  /* U_MLE_PDU */
228 static int hf_tetra_fcs = -1;                     /* OCTET_STRING_SIZE_4 */
229 static int hf_tetra_u_mle_pdu = -1;               /* U_MLE_PDU */
230 static int hf_tetra_ns = -1;                      /* INTEGER_0_1 */
231 static int hf_tetra_u_mle_reserved1 = -1;         /* NULL */
232 static int hf_tetra_mm = -1;                      /* U_MM_PDU */
233 static int hf_tetra_cmce = -1;                    /* U_CMCE_PDU */
234 static int hf_tetra_u_mle_reserved2 = -1;         /* NULL */
235 static int hf_tetra_sndcp = -1;                   /* NULL */
236 static int hf_tetra_mle = -1;                     /* UMLE_PDU */
237 static int hf_tetra_tetra_management_entity_protocol = -1;  /* NULL */
238 static int hf_tetra_u_mle_reserved3 = -1;         /* NULL */
239 static int hf_tetra_lengthIndicationOrCapacityRequest = -1;  /* T_lengthIndicationOrCapacityRequest */
240 static int hf_tetra_lengthIndication = -1;        /* LengthIndication */
241 static int hf_tetra_capacityRequest = -1;         /* FRAG */
242 static int hf_tetra_tm_sdu_01 = -1;               /* U_LLC_PDU */
243 static int hf_tetra_frag = -1;                    /* Frag1 */
244 static int hf_tetra_reservation_requirement = -1;  /* SLOT_APPLY */
245 static int hf_tetra_lengthIndicationOrCapacityRequest_01 = -1;  /* T_lengthIndicationOrCapacityRequest_01 */
246 static int hf_tetra_lengthIndication_01 = -1;     /* LengthIndicationMacData */
247 static int hf_tetra_capacityRequest_01 = -1;      /* FRAG6 */
248 static int hf_tetra_sub_type = -1;                /* INTEGER_0_1 */
249 static int hf_tetra_tm_sdu_02 = -1;               /* BIT_STRING_SIZE_264 */
250 static int hf_tetra_tm_sdu_03 = -1;               /* BIT_STRING_SIZE_120 */
251 static int hf_tetra_lengthInd_ReservationReq = -1;  /* LengthIndOrReservationReq */
252 static int hf_tetra_tm_sdu_04 = -1;               /* BIT_STRING_SIZE_258 */
253 static int hf_tetra_pdu_subtype = -1;             /* INTEGER_0_1 */
254 static int hf_tetra_tm_sdu_05 = -1;               /* BIT_STRING_SIZE_114 */
255 static int hf_tetra_lengthInd_ReservationReq_01 = -1;  /* T_lengthInd_ReservationReq */
256 static int hf_tetra_lengthInd = -1;               /* LengthIndMacHu */
257 static int hf_tetra_tm_sdu_06 = -1;               /* BIT_STRING_SIZE_85 */
258 static int hf_tetra_position_of_grant = -1;       /* Position_Of_Grant */
259 static int hf_tetra_lengthIndication_02 = -1;     /* LengthIndicationMacEndDl */
260 static int hf_tetra_slot_granting = -1;           /* T_slot_granting */
261 static int hf_tetra_none = -1;                    /* NULL */
262 static int hf_tetra_slot_granting_param = -1;     /* SlotGranting */
263 static int hf_tetra_channel_allocation = -1;      /* T_channel_allocation */
264 static int hf_tetra_channel_allocation_element = -1;  /* ChannelAllocation */
265 static int hf_tetra_tm_sdu_07 = -1;               /* BIT_STRING_SIZE_255 */
266 static int hf_tetra_capacity_allocation = -1;     /* Capacity_Allocation */
267 static int hf_tetra_granting_delay = -1;          /* Granting_delay */
268 static int hf_tetra_allocation_type = -1;         /* T_allocation_type */
269 static int hf_tetra_timeslot_assigned = -1;       /* Timeslot_Assigned */
270 static int hf_tetra_up_down_assigned = -1;        /* T_up_down_assigned */
271 static int hf_tetra_clch_permission = -1;         /* CLCH_permission */
272 static int hf_tetra_cell_change = -1;             /* Cell_change_flag */
273 static int hf_tetra_carrier_number = -1;          /* INTEGER_0_4095 */
274 static int hf_tetra_extend_carrier_flag = -1;     /* T_extend_carrier_flag */
275 static int hf_tetra_extended = -1;                /* Extended_carrier_flag */
276 static int hf_tetra_monitoring_pattern = -1;      /* T_monitoring_pattern */
277 static int hf_tetra_one = -1;                     /* Monitoring_pattern */
278 static int hf_tetra_none1 = -1;                   /* NULL */
279 static int hf_tetra_none2 = -1;                   /* NULL */
280 static int hf_tetra_none3 = -1;                   /* NULL */
281 static int hf_tetra_offset_01 = -1;               /* INTEGER_0_3 */
282 static int hf_tetra_reverse_operation_01 = -1;    /* T_reverse_operation */
283 static int hf_tetra_pdu_type_02 = -1;             /* INTEGER_0_7 */
284 static int hf_tetra_fill_bit_ind = -1;            /* BOOLEAN */
285 static int hf_tetra_position_of_grant_01 = -1;    /* INTEGER_0_1 */
286 static int hf_tetra_slot_granting_01 = -1;        /* T_slot_granting_01 */
287 static int hf_tetra_channel_allocation_01 = -1;   /* T_channel_allocation_01 */
288 static int hf_tetra_tm_sdu_08 = -1;               /* BIT_STRING_SIZE_111 */
289 static int hf_tetra_encryption_mode = -1;         /* INTEGER_0_3 */
290 static int hf_tetra_access_ack = -1;              /* T_access_ack */
291 static int hf_tetra_lengthIndication_03 = -1;     /* LengthIndicationMacResource */
292 static int hf_tetra_address_01 = -1;              /* AddressMacResource */
293 static int hf_tetra_power_control = -1;           /* T_power_control */
294 static int hf_tetra_powerParameters = -1;         /* PowerControl */
295 static int hf_tetra_slot_granting_02 = -1;        /* T_slot_granting_02 */
296 static int hf_tetra_channel_allocation_02 = -1;   /* T_channel_allocation_02 */
297 static int hf_tetra_tm_sdu_09 = -1;               /* D_LLC_PDU */
298 static int hf_tetra_null_pdu = -1;                /* NULL */
299 static int hf_tetra_ssi_01 = -1;                  /* SSI_NEED */
300 static int hf_tetra_eventLabel_01 = -1;           /* EVENT_NEED */
301 static int hf_tetra_ussi_01 = -1;                 /* USSI_NEED */
302 static int hf_tetra_smi_01 = -1;                  /* SMI_NEED */
303 static int hf_tetra_ssi_eventLabel = -1;          /* SSI_EVENT_NEED */
304 static int hf_tetra_ssi_usage_maker = -1;         /* SSI_USAGE_NEED */
305 static int hf_tetra_smi_eventLabel = -1;          /* SMI_EVENT_NEED */
306 static int hf_tetra_other = -1;                   /* OTHER_DATA */
307 static int hf_tetra_eventlabel = -1;              /* INTEGER_0_1023 */
308 static int hf_tetra_ventlabel = -1;               /* INTEGER_0_1023 */
309 static int hf_tetra_usage_maker = -1;             /* INTEGER_0_63 */
310 static int hf_tetra_smi_eventlabel = -1;          /* BIT_STRING_SIZE_34 */
311 static int hf_tetra_freq_band = -1;               /* INTEGER_0_15 */
312 static int hf_tetra_reverse_operation_02 = -1;    /* BOOLEAN */
313 static int hf_tetra_broadcast_channel = -1;       /* INTEGER_0_1 */
314 static int hf_tetra_access_code = -1;             /* INTEGER_0_3 */
315 static int hf_tetra_imm_01 = -1;                  /* INTEGER_0_15 */
316 static int hf_tetra_wt_01 = -1;                   /* INTEGER_0_15 */
317 static int hf_tetra_nu_01 = -1;                   /* INTEGER_0_15 */
318 static int hf_tetra_frame_len_factor_01 = -1;     /* INTEGER_0_1 */
319 static int hf_tetra_timeslot_pointer_01 = -1;     /* INTEGER_0_15 */
320 static int hf_tetra_min_priority = -1;            /* INTEGER_0_7 */
321 static int hf_tetra_optional_field = -1;          /* T_optional_field */
322 static int hf_tetra_class_bitmap = -1;            /* INTEGER_0_65535 */
323 static int hf_tetra_gssi = -1;                    /* INTEGER_0_33554431 */
324 static int hf_tetra_reserved_03 = -1;             /* NULL */
325 static int hf_tetra_filler_bits = -1;             /* INTEGER_0_7 */
326 static int hf_tetra_bl_adata_01 = -1;             /* D_BL_ADATA */
327 static int hf_tetra_bl_data_01 = -1;              /* D_BL_DATA */
328 static int hf_tetra_bl_udata_01 = -1;             /* D_MLE_PDU */
329 static int hf_tetra_bl_ack_01 = -1;               /* D_BL_ACK */
330 static int hf_tetra_bl_adata_fcs_01 = -1;         /* D_BL_ADATA_FCS */
331 static int hf_tetra_bl_data_fcs_01 = -1;          /* D_BL_DATA_FCS */
332 static int hf_tetra_bl_udata_fcs_01 = -1;         /* D_MLE_PDU_FCS */
333 static int hf_tetra_bl_ack_fcs_01 = -1;           /* D_BL_ACK_FCS */
334 static int hf_tetra_tl_sdu_01 = -1;               /* D_MLE_PDU */
335 static int hf_tetra_d_mle_pdu = -1;               /* D_MLE_PDU */
336 static int hf_tetra_mm_01 = -1;                   /* D_MM_PDU */
337 static int hf_tetra_cmce_01 = -1;                 /* D_CMCE_PDU */
338 static int hf_tetra_mle_01 = -1;                  /* DMLE_PDU */
339 static int hf_tetra_u_prepare = -1;               /* U_PREPARE */
340 static int hf_tetra_umle_reserved1 = -1;          /* NULL */
341 static int hf_tetra_umle_reserved2 = -1;          /* NULL */
342 static int hf_tetra_umle_reserved3 = -1;          /* NULL */
343 static int hf_tetra_u_restore = -1;               /* U_RESTORE */
344 static int hf_tetra_umle_reserved4 = -1;          /* NULL */
345 static int hf_tetra_umle_reserved5 = -1;          /* NULL */
346 static int hf_tetra_umle_reserved6 = -1;          /* NULL */
347 static int hf_tetra_d_new_cell = -1;              /* D_NEW_CELL */
348 static int hf_tetra_d_prepare_fail = -1;          /* D_PREPARE_FAIL */
349 static int hf_tetra_d_nwrk_broadcast = -1;        /* D_NWRK_BRDADCAST */
350 static int hf_tetra_dmle_reserved1 = -1;          /* NULL */
351 static int hf_tetra_d_restore_ack = -1;           /* D_RESTORE_ACK */
352 static int hf_tetra_d_restore_fail = -1;          /* D_RESTORE_FAIL */
353 static int hf_tetra_dmle_reserved2 = -1;          /* NULL */
354 static int hf_tetra_dmle_reserved3 = -1;          /* NULL */
355 static int hf_tetra_optional_elements = -1;       /* T_optional_elements */
356 static int hf_tetra_no_type2 = -1;                /* NULL */
357 static int hf_tetra_type2_parameters = -1;        /* T_type2_parameters */
358 static int hf_tetra_cell_number = -1;             /* T_cell_number */
359 static int hf_tetra_cell_number_01 = -1;          /* INTEGER_0_65535 */
360 static int hf_tetra_sdu = -1;                     /* BIT_STRING */
361 static int hf_tetra_optional_elements_01 = -1;    /* T_optional_elements_01 */
362 static int hf_tetra_type2_parameters_01 = -1;     /* T_type2_parameters_01 */
363 static int hf_tetra_mcc_01 = -1;                  /* T_mcc */
364 static int hf_tetra_mnc_01 = -1;                  /* T_mnc */
365 static int hf_tetra_la_01 = -1;                   /* T_la */
366 static int hf_tetra_channel_command_valid = -1;   /* INTEGER_0_3 */
367 static int hf_tetra_optional_elements_02 = -1;    /* T_optional_elements_02 */
368 static int hf_tetra_fail_cause = -1;              /* INTEGER_0_3 */
369 static int hf_tetra_optional_elements_03 = -1;    /* T_optional_elements_03 */
370 static int hf_tetra_cell_re_select_parameters = -1;  /* INTEGER_0_65535 */
371 static int hf_tetra_optional_elements_04 = -1;    /* T_optional_elements_04 */
372 static int hf_tetra_type2_parameters_02 = -1;     /* T_type2_parameters_02 */
373 static int hf_tetra_tetra_network_time = -1;      /* T_tetra_network_time */
374 static int hf_tetra_tetra_network_time_01 = -1;   /* TETRA_NETWORK_TIME */
375 static int hf_tetra_number_of_neighbour_cells = -1;  /* T_number_of_neighbour_cells */
376 static int hf_tetra_number_of_neighbour_cells_01 = -1;  /* INTEGER_0_7 */
377 static int hf_tetra_network_time = -1;            /* T_network_time */
378 static int hf_tetra_local_time_offset_sign = -1;  /* INTEGER_0_1 */
379 static int hf_tetra_local_time_offset = -1;       /* INTEGER_0_63 */
380 static int hf_tetra_year = -1;                    /* INTEGER_0_63 */
381 static int hf_tetra_reserved_04 = -1;             /* T_reserved */
382 static int hf_tetra_u_Authentication = -1;        /* NULL */
383 static int hf_tetra_u_Itsi_Detach = -1;           /* NULL */
384 static int hf_tetra_u_Location_Update_Demand = -1;  /* U_LOCATION_UPDATE_DEMAND */
385 static int hf_tetra_u_MM_Status = -1;             /* U_MM_STATUS */
386 static int hf_tetra_u_MM_reserved1 = -1;          /* NULL */
387 static int hf_tetra_u_WK = -1;                    /* NULL */
388 static int hf_tetra_u_MM_reserved3 = -1;          /* NULL */
389 static int hf_tetra_u_Attach_Detach_Group_Identity = -1;  /* U_ATTACH_DETACH_GROUP_IDENTITY */
390 static int hf_tetra_u_Attach_Detach_Group_Identity_Ack = -1;  /* U_ATTACH_DETACH_GROUP_IDENTITY_ACK */
391 static int hf_tetra_u_TEI_Provide = -1;           /* NULL */
392 static int hf_tetra_u_MM_reserved6 = -1;          /* NULL */
393 static int hf_tetra_u_Disabled_Status = -1;       /* NULL */
394 static int hf_tetra_u_MM_reserved7 = -1;          /* NULL */
395 static int hf_tetra_u_MM_reserved8 = -1;          /* NULL */
396 static int hf_tetra_u_MM_reserved9 = -1;          /* NULL */
397 static int hf_tetra_u_MM_Function_Not_Support = -1;  /* NULL */
398 static int hf_tetra_d_Otar = -1;                  /* NULL */
399 static int hf_tetra_d_Authentication = -1;        /* NULL */
400 static int hf_tetra_d_Authentication_Reject = -1;  /* NULL */
401 static int hf_tetra_d_Disable = -1;               /* NULL */
402 static int hf_tetra_d_Enable = -1;                /* NULL */
403 static int hf_tetra_d_Location_Update_Accept = -1;  /* D_LOCATION_UPDATE_ACCEPT */
404 static int hf_tetra_d_Location_Update_Command = -1;  /* NULL */
405 static int hf_tetra_d_Location_Update_Reject = -1;  /* D_LOCATION_UPDATE_REJECT */
406 static int hf_tetra_d_MM_reserved2 = -1;          /* NULL */
407 static int hf_tetra_d_Location_Update_Proceeding = -1;  /* NULL */
408 static int hf_tetra_d_Attach_Detach_Group_Identity = -1;  /* D_ATTACH_DETACH_GROUP_IDENTITY */
409 static int hf_tetra_d_Attach_Detach_Group_Identity_Ack = -1;  /* D_ATTACH_DETACH_GROUP_IDENTITY_ACK */
410 static int hf_tetra_d_MM_Status = -1;             /* D_MM_STATUS */
411 static int hf_tetra_d_MM_reserved5 = -1;          /* NULL */
412 static int hf_tetra_d_MM_reserved6 = -1;          /* NULL */
413 static int hf_tetra_d_MM_Function_Not_Support = -1;  /* NULL */
414 static int hf_tetra_attach_detach_identifiet = -1;  /* T_attach_detach_identifiet */
415 static int hf_tetra_attach = -1;                  /* T_attach */
416 static int hf_tetra_lifetime = -1;                /* INTEGER_0_3 */
417 static int hf_tetra_class_of_usage = -1;          /* INTEGER_0_7 */
418 static int hf_tetra_detach = -1;                  /* T_detach */
419 static int hf_tetra_detach_downlike = -1;         /* T_detach_downlike */
420 static int hf_tetra_address_type = -1;            /* T_address_type */
421 static int hf_tetra_gssi_01 = -1;                 /* OCTET_STRING_SIZE_3 */
422 static int hf_tetra_gssi_extension = -1;          /* T_gssi_extension */
423 static int hf_tetra_extension = -1;               /* OCTET_STRING_SIZE_3 */
424 static int hf_tetra_vgssi = -1;                   /* OCTET_STRING_SIZE_3 */
425 static int hf_tetra_attach_detach_identifiet_01 = -1;  /* T_attach_detach_identifiet_01 */
426 static int hf_tetra_attach_01 = -1;               /* T_attach_01 */
427 static int hf_tetra_detach_01 = -1;               /* T_detach_01 */
428 static int hf_tetra_detach_uplike = -1;           /* T_detach_uplike */
429 static int hf_tetra_address_type_01 = -1;         /* T_address_type_01 */
430 static int hf_tetra_gssi_extension_01 = -1;       /* T_gssi_extension_01 */
431 static int hf_tetra_location_update_type = -1;    /* UPDATE_TYPE */
432 static int hf_tetra_optional_elements_05 = -1;    /* T_optional_elements_05 */
433 static int hf_tetra_type2_parameters_03 = -1;     /* T_type2_parameters_03 */
434 static int hf_tetra_ssi_02 = -1;                  /* T_ssi */
435 static int hf_tetra_ssi_03 = -1;                  /* OCTET_STRING_SIZE_3 */
436 static int hf_tetra_address_extension = -1;       /* T_address_extension */
437 static int hf_tetra_address_extension_01 = -1;    /* OCTET_STRING_SIZE_3 */
438 static int hf_tetra_suscriber_class = -1;         /* T_suscriber_class */
439 static int hf_tetra_suscriber_class_01 = -1;      /* INTEGER_0_32767 */
440 static int hf_tetra_energy_saving_mode = -1;      /* T_energy_saving_mode */
441 static int hf_tetra_energy_saving_mode_01 = -1;   /* INTEGER_0_7 */
442 static int hf_tetra_scch_info = -1;               /* T_scch_info */
443 static int hf_tetra_scch_info_01 = -1;            /* INTEGER_0_16383 */
444 static int hf_tetra_type3 = -1;                   /* T_type3 */
445 static int hf_tetra_no_type3 = -1;                /* NULL */
446 static int hf_tetra_type3_elements = -1;          /* T_type3_elements */
447 static int hf_tetra_type2_existance = -1;         /* BOOLEAN */
448 static int hf_tetra_type3_identifier = -1;        /* TYPE3_IDENTIFIER */
449 static int hf_tetra_new_ra = -1;                  /* T_new_ra */
450 static int hf_tetra_new_ra_01 = -1;               /* INTEGER_0_3 */
451 static int hf_tetra_group_identity_location_accept = -1;  /* T_group_identity_location_accept */
452 static int hf_tetra_group_identity_location_accept_01 = -1;  /* INTEGER_0_3 */
453 static int hf_tetra_group_predefined_lifetime = -1;  /* T_group_predefined_lifetime */
454 static int hf_tetra_group_predefined_lifetime_01 = -1;  /* INTEGER_0_3 */
455 static int hf_tetra_group_identity_downlink = -1;  /* T_group_identity_downlink */
456 static int hf_tetra_group_identity_downlink_01 = -1;  /* INTEGER_0_15 */
457 static int hf_tetra_proprietary = -1;             /* T_proprietary */
458 static int hf_tetra_proprietary_01 = -1;          /* INTEGER_0_7 */
459 static int hf_tetra_reject_cause = -1;            /* INTEGER_0_31 */
460 static int hf_tetra_cipher_control = -1;          /* BOOLEAN */
461 static int hf_tetra_status_uplink = -1;           /* INTEGER_0_63 */
462 static int hf_tetra_scanning_on_off = -1;         /* T_scanning_on_off */
463 static int hf_tetra_status_downlink = -1;         /* INTEGER_0_63 */
464 static int hf_tetra_u_Alert = -1;                 /* U_ALERT */
465 static int hf_tetra_reserved1 = -1;               /* NULL */
466 static int hf_tetra_u_Connect = -1;               /* U_CONNECT */
467 static int hf_tetra_reserved2 = -1;               /* NULL */
468 static int hf_tetra_u_Disconnect = -1;            /* U_DISCONNECT */
469 static int hf_tetra_u_Info = -1;                  /* U_INFO */
470 static int hf_tetra_u_Release = -1;               /* U_RELEASE */
471 static int hf_tetra_u_Setup = -1;                 /* U_SETUP */
472 static int hf_tetra_u_Status = -1;                /* U_STATUS */
473 static int hf_tetra_u_Tx_Ceased = -1;             /* U_TX_CEASED */
474 static int hf_tetra_u_Tx_Demand = -1;             /* U_TX_DEMAND */
475 static int hf_tetra_reserved3 = -1;               /* NULL */
476 static int hf_tetra_reserved4 = -1;               /* NULL */
477 static int hf_tetra_reserved5 = -1;               /* NULL */
478 static int hf_tetra_u_Call_Restore = -1;          /* U_CALL_RESTORE */
479 static int hf_tetra_u_SDS_Data = -1;              /* U_SDS_DATA */
480 static int hf_tetra_u_Facility = -1;              /* NULL */
481 static int hf_tetra_call_identifier = -1;         /* INTEGER_0_16383 */
482 static int hf_tetra_disconnect_cause = -1;        /* INTEGER_0_31 */
483 static int hf_tetra_area_selection = -1;          /* INTEGER_0_15 */
484 static int hf_tetra_called_party_type_identifier = -1;  /* T_called_party_type_identifier */
485 static int hf_tetra_sna = -1;                     /* INTEGER_0_255 */
486 static int hf_tetra_ssi_extension = -1;           /* BIT_STRING_SIZE_48 */
487 static int hf_tetra_short_data_type_identifier = -1;  /* T_short_data_type_identifier */
488 static int hf_tetra_data_1 = -1;                  /* INTEGER_0_65535 */
489 static int hf_tetra_data_2 = -1;                  /* OCTET_STRING_SIZE_4 */
490 static int hf_tetra_data_3 = -1;                  /* BIT_STRING_SIZE_64 */
491 static int hf_tetra_length_indicator_data_4 = -1;  /* INTEGER_0_4194304 */
492 static int hf_tetra_called_party_type_identifier_01 = -1;  /* T_called_party_type_identifier_01 */
493 static int hf_tetra_short_number_address = -1;    /* INTEGER_0_255 */
494 static int hf_tetra_called_ssi_called_extension = -1;  /* BIT_STRING_SIZE_48 */
495 static int hf_tetra_pre_coded_status = -1;        /* INTEGER_0_65535 */
496 static int hf_tetra_call_id = -1;                 /* INTEGER_0_16383 */
497 static int hf_tetra_poll_response = -1;           /* INTEGER_0_1 */
498 static int hf_tetra_d_Alert = -1;                 /* D_ALERT */
499 static int hf_tetra_d_Call_Proceeding = -1;       /* D_CALL_PROCEEDING */
500 static int hf_tetra_d_Connect = -1;               /* D_CONNECT */
501 static int hf_tetra_d_Connect_Ack = -1;           /* D_CONNECT_ACK */
502 static int hf_tetra_d_Disconnect = -1;            /* D_DISCONNECT */
503 static int hf_tetra_d_Info = -1;                  /* D_INFO */
504 static int hf_tetra_d_Release = -1;               /* D_RELEASE */
505 static int hf_tetra_d_Setup = -1;                 /* D_SETUP */
506 static int hf_tetra_d_Status = -1;                /* D_STATUS */
507 static int hf_tetra_d_Tx_Ceased = -1;             /* D_TX_CEASED */
508 static int hf_tetra_d_Tx_Continue = -1;           /* D_TX_CONTINUE */
509 static int hf_tetra_d_Tx_Granted = -1;            /* D_TX_GRANTED */
510 static int hf_tetra_d_Tx_Wait = -1;               /* D_TX_WAIT */
511 static int hf_tetra_d_Tx_Interrupt = -1;          /* NULL */
512 static int hf_tetra_d_Call_Restore = -1;          /* D_CALL_RESTORE */
513 static int hf_tetra_d_SDS_Data = -1;              /* D_SDS_DATA */
514 static int hf_tetra_d_Facility = -1;              /* NULL */
515 static int hf_tetra_calling_party_type_identifier = -1;  /* T_calling_party_type_identifier */
516 static int hf_tetra_ssi_extension_01 = -1;        /* OCTET_STRING_SIZE_6 */
517 static int hf_tetra_short_data_type_identifier_01 = -1;  /* T_short_data_type_identifier_01 */
518 static int hf_tetra_data_3_01 = -1;               /* OCTET_STRING_SIZE_8 */
519 static int hf_tetra_calling_party_type_identifier_01 = -1;  /* T_calling_party_type_identifier_01 */
520 static int hf_tetra_calling_party_address_SSI = -1;  /* INTEGER_0_16777215 */
521 static int hf_tetra_reset_call_time_out_timer = -1;  /* INTEGER_0_1 */
522 static int hf_tetra_poll_request = -1;            /* INTEGER_0_1 */
523 static int hf_tetra_transmission_request_permission = -1;  /* INTEGER_0_1 */
524 static int hf_tetra_continue = -1;                /* INTEGER_0_1 */
525 static int hf_tetra_request_to_append_LA = -1;    /* BOOLEAN */
526 static int hf_tetra_cipher_control_01 = -1;       /* T_cipher_control */
527 static int hf_tetra_no_cipher = -1;               /* NULL */
528 static int hf_tetra_ciphering_parameters = -1;    /* INTEGER_0_1023 */
529 static int hf_tetra_class_of_MS = -1;             /* OCTET_STRING_SIZE_4 */
530 static int hf_tetra_optional_elements_06 = -1;    /* T_optional_elements_06 */
531 static int hf_tetra_type2_parameters_04 = -1;     /* T_type2_parameters_04 */
532 static int hf_tetra_energy_saving_mode_02 = -1;   /* T_energy_saving_mode_01 */
533 static int hf_tetra_la_information = -1;          /* T_la_information */
534 static int hf_tetra_la_information_01 = -1;       /* INTEGER_0_16383 */
535 static int hf_tetra_ssi_04 = -1;                  /* T_ssi_01 */
536 static int hf_tetra_address_extension_02 = -1;    /* T_address_extension_01 */
537 static int hf_tetra_type3_01 = -1;                /* T_type3_01 */
538 static int hf_tetra_type3_elements_01 = -1;       /* T_type3_elements_01 */
539 static int hf_tetra_group_identity_location_demand = -1;  /* T_group_identity_location_demand */
540 static int hf_tetra_group_identity_location_demand_01 = -1;  /* INTEGER_0_3 */
541 static int hf_tetra_group_report_response = -1;   /* T_group_report_response */
542 static int hf_tetra_group_report_response_01 = -1;  /* BOOLEAN */
543 static int hf_tetra_group_identity_uplink = -1;   /* T_group_identity_uplink */
544 static int hf_tetra_group_identity_uplink_01 = -1;  /* INTEGER_0_15 */
545 static int hf_tetra_proprietary_02 = -1;          /* T_proprietary_01 */
546 static int hf_tetra_group_identity_report = -1;   /* BOOLEAN */
547 static int hf_tetra_group_identity_attach_detach_mode = -1;  /* BOOLEAN */
548 static int hf_tetra_optional_elements_07 = -1;    /* T_optional_elements_07 */
549 static int hf_tetra_type2_element = -1;           /* T_type2_element */
550 static int hf_tetra_type3_02 = -1;                /* T_type3_02 */
551 static int hf_tetra_type3_elements_02 = -1;       /* T_type3_elements_02 */
552 static int hf_tetra_length = -1;                  /* INTEGER_0_2047 */
553 static int hf_tetra_repeat_num = -1;              /* INTEGER_0_63 */
554 static int hf_tetra_group_identity_uplink_02 = -1;  /* GROUP_IDENTITY_UPLINK */
555 static int hf_tetra_group_identity_ack_type = -1;  /* BOOLEAN */
556 static int hf_tetra_optional_elements_08 = -1;    /* T_optional_elements_08 */
557 static int hf_tetra_type2_element_01 = -1;        /* T_type2_element_01 */
558 static int hf_tetra_type3_03 = -1;                /* T_type3_03 */
559 static int hf_tetra_type3_elements_03 = -1;       /* T_type3_elements_03 */
560 static int hf_tetra_hook_method_selection = -1;   /* BOOLEAN */
561 static int hf_tetra_simple_duplex_selection = -1;  /* T_simple_duplex_selection */
562 static int hf_tetra_basic_service_information = -1;  /* Basic_service_information */
563 static int hf_tetra_request_transmit_send_data = -1;  /* INTEGER_0_1 */
564 static int hf_tetra_call_priority = -1;           /* INTEGER_0_15 */
565 static int hf_tetra_clir_control = -1;            /* INTEGER_0_3 */
566 static int hf_tetra_called_party_address = -1;    /* Called_party_address_type */
567 static int hf_tetra_optional_elements_09 = -1;    /* T_optional_elements_09 */
568 static int hf_tetra_type2_parameters_05 = -1;     /* T_type2_parameters_05 */
569 static int hf_tetra_external_subscriber_number = -1;  /* T_external_subscriber_number */
570 static int hf_tetra_external_subscriber_number_01 = -1;  /* INTEGER_0_31 */
571 static int hf_tetra_prop = -1;                    /* T_prop */
572 static int hf_tetra_prop_01 = -1;                 /* Proprietary */
573 static int hf_tetra_circuit_mode = -1;            /* CIRCUIT */
574 static int hf_tetra_encryption = -1;              /* INTEGER_0_1 */
575 static int hf_tetra_communication = -1;           /* INTEGER_0_3 */
576 static int hf_tetra_slots_or_speech = -1;         /* INTEGER_0_3 */
577 static int hf_tetra_call_identifier_01 = -1;      /* INTEGER_0_1023 */
578 static int hf_tetra_simplex_duplex_selection = -1;  /* T_simplex_duplex_selection */
579 static int hf_tetra_optional_elements_10 = -1;    /* T_optional_elements_10 */
580 static int hf_tetra_type2_parameters_06 = -1;     /* T_type2_parameters_06 */
581 static int hf_tetra_basic_service_information_01 = -1;  /* T_basic_service_information */
582 static int hf_tetra_prop_02 = -1;                 /* T_prop_01 */
583 static int hf_tetra_simplex_duplex_selection_01 = -1;  /* T_simplex_duplex_selection_01 */
584 static int hf_tetra_optional_elements_11 = -1;    /* T_optional_elements_11 */
585 static int hf_tetra_type2_parameters_07 = -1;     /* T_type2_parameters_07 */
586 static int hf_tetra_basic_service_information_02 = -1;  /* T_basic_service_information_01 */
587 static int hf_tetra_prop_03 = -1;                 /* T_prop_02 */
588 static int hf_tetra_optional_elements_12 = -1;    /* T_optional_elements_12 */
589 static int hf_tetra_type2_parameters_08 = -1;     /* T_type2_parameters_08 */
590 static int hf_tetra_prop_04 = -1;                 /* T_prop_03 */
591 static int hf_tetra_tx_demand_priority = -1;      /* INTEGER_0_3 */
592 static int hf_tetra_encryption_control = -1;      /* INTEGER_0_1 */
593 static int hf_tetra_optional_elements_13 = -1;    /* T_optional_elements_13 */
594 static int hf_tetra_type2_parameters_09 = -1;     /* T_type2_parameters_09 */
595 static int hf_tetra_prop_05 = -1;                 /* T_prop_04 */
596 static int hf_tetra_optional_elements_14 = -1;    /* T_optional_elements_14 */
597 static int hf_tetra_type2_parameters_10 = -1;     /* T_type2_parameters_10 */
598 static int hf_tetra_prop_06 = -1;                 /* T_prop_05 */
599 static int hf_tetra_request_to_transmit_send_data = -1;  /* INTEGER_0_1 */
600 static int hf_tetra_other_party_address = -1;     /* Other_party_address_type */
601 static int hf_tetra_optional_elements_15 = -1;    /* T_optional_elements_15 */
602 static int hf_tetra_type2_parameters_11 = -1;     /* T_type2_parameters_11 */
603 static int hf_tetra_prop_07 = -1;                 /* T_prop_06 */
604 static int hf_tetra_call_time_out = -1;           /* INTEGER_0_15 */
605 static int hf_tetra_hook_method_selection_01 = -1;  /* INTEGER_0_1 */
606 static int hf_tetra_simplex_duplex_selection_02 = -1;  /* T_simplex_duplex_selection_02 */
607 static int hf_tetra_transmission_grant = -1;      /* INTEGER_0_3 */
608 static int hf_tetra_optional_elements_16 = -1;    /* T_optional_elements_16 */
609 static int hf_tetra_type2_parameters_12 = -1;     /* T_type2_parameters_12 */
610 static int hf_tetra_calling_party_address = -1;   /* T_calling_party_address */
611 static int hf_tetra_calling_party_address_01 = -1;  /* Calling_party_address_type */
612 static int hf_tetra_external_subscriber_number_02 = -1;  /* T_external_subscriber_number_01 */
613 static int hf_tetra_external_subscriber_number_03 = -1;  /* INTEGER_0_15 */
614 static int hf_tetra_prop_08 = -1;                 /* T_prop_07 */
615 static int hf_tetra_call_time_out_setup_phase = -1;  /* INTEGER_0_7 */
616 static int hf_tetra_simplex_duplex_selection_03 = -1;  /* INTEGER_0_1 */
617 static int hf_tetra_optional_elements_17 = -1;    /* T_optional_elements_17 */
618 static int hf_tetra_type2_parameters_13 = -1;     /* T_type2_parameters_13 */
619 static int hf_tetra_basic_service_information_03 = -1;  /* T_basic_service_information_02 */
620 static int hf_tetra_call_status = -1;             /* T_call_status */
621 static int hf_tetra_call_status_01 = -1;          /* INTEGER_0_7 */
622 static int hf_tetra_notification_indicator = -1;  /* T_notification_indicator */
623 static int hf_tetra_notification_indicator_01 = -1;  /* INTEGER_0_63 */
624 static int hf_tetra_prop_09 = -1;                 /* T_prop_08 */
625 static int hf_tetra_simplex_duplex_selection_04 = -1;  /* T_simplex_duplex_selection_03 */
626 static int hf_tetra_call_queued = -1;             /* BOOLEAN */
627 static int hf_tetra_optional_elements_18 = -1;    /* T_optional_elements_18 */
628 static int hf_tetra_type2_parameters_14 = -1;     /* T_type2_parameters_14 */
629 static int hf_tetra_basic_service_infomation = -1;  /* T_basic_service_infomation */
630 static int hf_tetra_basic_service_infomation_01 = -1;  /* Basic_service_information */
631 static int hf_tetra_notification_indicator_02 = -1;  /* T_notification_indicator_01 */
632 static int hf_tetra_prop_10 = -1;                 /* T_prop_09 */
633 static int hf_tetra_call_time_out_01 = -1;        /* INTEGER_0_31 */
634 static int hf_tetra_simplex_duplex_selection_05 = -1;  /* T_simplex_duplex_selection_04 */
635 static int hf_tetra_call_ownership = -1;          /* INTEGER_0_1 */
636 static int hf_tetra_optional_elements_19 = -1;    /* T_optional_elements_19 */
637 static int hf_tetra_type2_parameters_15 = -1;     /* T_type2_parameters_15 */
638 static int hf_tetra_call_priority_01 = -1;        /* T_call_priority */
639 static int hf_tetra_call_priority_02 = -1;        /* INTEGER_0_31 */
640 static int hf_tetra_basic_service_information_04 = -1;  /* T_basic_service_information_03 */
641 static int hf_tetra_temporary_address = -1;       /* T_temporary_address */
642 static int hf_tetra_temporary_address_01 = -1;    /* Calling_party_address_type */
643 static int hf_tetra_notification_indicator_03 = -1;  /* T_notification_indicator_02 */
644 static int hf_tetra_prop_11 = -1;                 /* T_prop_10 */
645 static int hf_tetra_optional_elements_20 = -1;    /* T_optional_elements_20 */
646 static int hf_tetra_type2_parameters_16 = -1;     /* T_type2_parameters_16 */
647 static int hf_tetra_notification_indicator_04 = -1;  /* T_notification_indicator_03 */
648 static int hf_tetra_prop_12 = -1;                 /* T_prop_11 */
649 static int hf_tetra_optional_elements_21 = -1;    /* T_optional_elements_21 */
650 static int hf_tetra_type2_parameters_17 = -1;     /* T_type2_parameters_17 */
651 static int hf_tetra_notification_indicator_05 = -1;  /* T_notification_indicator_04 */
652 static int hf_tetra_prop_13 = -1;                 /* T_prop_12 */
653 static int hf_tetra_reset_call_time_out = -1;     /* INTEGER_0_1 */
654 static int hf_tetra_optional_elements_22 = -1;    /* T_optional_elements_22 */
655 static int hf_tetra_type2_parameters_18 = -1;     /* T_type2_parameters_18 */
656 static int hf_tetra_new_call_identifier = -1;     /* T_new_call_identifier */
657 static int hf_tetra_new_call_identifier_01 = -1;  /* INTEGER_0_1023 */
658 static int hf_tetra_call_time_out_02 = -1;        /* T_call_time_out */
659 static int hf_tetra_call_time_out_03 = -1;        /* INTEGER_0_7 */
660 static int hf_tetra_call_status_02 = -1;          /* T_call_status_01 */
661 static int hf_tetra_modify = -1;                  /* T_modify */
662 static int hf_tetra_modify_01 = -1;               /* Modify_type */
663 static int hf_tetra_notification_indicator_06 = -1;  /* T_notification_indicator_05 */
664 static int hf_tetra_prop_14 = -1;                 /* T_prop_13 */
665 static int hf_tetra_optional_elements_23 = -1;    /* T_optional_elements_23 */
666 static int hf_tetra_type2_parameters_19 = -1;     /* T_type2_parameters_19 */
667 static int hf_tetra_notification_indicator_07 = -1;  /* T_notification_indicator_06 */
668 static int hf_tetra_prop_15 = -1;                 /* T_prop_14 */
669 static int hf_tetra_group_identity_ack_request = -1;  /* BOOLEAN */
670 static int hf_tetra_optional_elements_24 = -1;    /* T_optional_elements_24 */
671 static int hf_tetra_type2_element_02 = -1;        /* T_type2_element_02 */
672 static int hf_tetra_type3_04 = -1;                /* T_type3_04 */
673 static int hf_tetra_type3_elements_04 = -1;       /* T_type3_elements_04 */
674 static int hf_tetra_group_identity_downlink_02 = -1;  /* GROUP_IDENTITY_DOWNLINK */
675 static int hf_tetra_group_identity_attach_detach_accept = -1;  /* BOOLEAN */
676 static int hf_tetra_optional_elements_25 = -1;    /* T_optional_elements_25 */
677 static int hf_tetra_type2_element_03 = -1;        /* T_type2_element_03 */
678 static int hf_tetra_type3_05 = -1;                /* T_type3_05 */
679 static int hf_tetra_type3_elements_05 = -1;       /* T_type3_elements_05 */
680 static int hf_tetra_encryption_flag = -1;         /* INTEGER_0_1 */
681 static int hf_tetra_communication_type = -1;      /* CALLMODE */
682 static int hf_tetra_speech_service = -1;          /* INTEGER_0_3 */
683 static int hf_tetra_communication_type_01 = -1;   /* INTEGER_0_3 */
684 static int hf_tetra_slots_per_frame = -1;         /* INTEGER_0_3 */
685 static int hf_tetra_called_party_sna = -1;        /* INTEGER_0_255 */
686 static int hf_tetra_called_party_ssi = -1;        /* INTEGER_0_16777215 */
687 static int hf_tetra_called_party_ssi_extention = -1;  /* T_called_party_ssi_extention */
688 static int hf_tetra_called_party_extention = -1;  /* INTEGER_0_16777215 */
689 static int hf_tetra_data_01 = -1;                 /* T_data_01 */
690 static int hf_tetra_element1 = -1;                /* Type1 */
691 static int hf_tetra_element = -1;                 /* Type2 */
692 static int hf_tetra_proprietary_element_owner = -1;  /* Proprietary_element_owner */
693 static int hf_tetra_proprietary_element_owner_extension = -1;  /* BIT_STRING */
694 static int hf_tetra_simplex_duplex_selection_06 = -1;  /* T_simplex_duplex_selection_05 */
695
696 /*--- End of included file: packet-tetra-hf.c ---*/
697 #line 85 "../../asn1/tetra/packet-tetra-template.c"
698
699 /* Initialize the subtree pointers */
700 /* These are the ids of the subtrees that we may be creating */
701 static gint ett_tetra = -1;
702 static gint ett_tetra_header = -1;
703 static gint ett_tetra_length = -1;
704 static gint ett_tetra_txreg = -1;
705 static gint ett_tetra_text = -1;
706
707
708 /*--- Included file: packet-tetra-ett.c ---*/
709 #line 1 "../../asn1/tetra/packet-tetra-ett.c"
710 static gint ett_tetra_AACH = -1;
711 static gint ett_tetra_BSCH = -1;
712 static gint ett_tetra_MLE_Sync = -1;
713 static gint ett_tetra_BNCH = -1;
714 static gint ett_tetra_T_hyperframe_or_cck = -1;
715 static gint ett_tetra_T_optional_params = -1;
716 static gint ett_tetra_TS_COMMON_FRAMES = -1;
717 static gint ett_tetra_Default_Code_A = -1;
718 static gint ett_tetra_Extended_Services_Broadcast = -1;
719 static gint ett_tetra_T_section = -1;
720 static gint ett_tetra_PRESENT1 = -1;
721 static gint ett_tetra_MAC_ACCESS = -1;
722 static gint ett_tetra_T_data = -1;
723 static gint ett_tetra_Address = -1;
724 static gint ett_tetra_U_LLC_PDU = -1;
725 static gint ett_tetra_U_BL_ACK_FCS = -1;
726 static gint ett_tetra_U_MLE_PDU_FCS = -1;
727 static gint ett_tetra_U_BL_DATA_FCS = -1;
728 static gint ett_tetra_U_BL_ADATA_FCS = -1;
729 static gint ett_tetra_U_MLE_PDU = -1;
730 static gint ett_tetra_ComplexSDU = -1;
731 static gint ett_tetra_T_lengthIndicationOrCapacityRequest = -1;
732 static gint ett_tetra_FRAG = -1;
733 static gint ett_tetra_MAC_DATA = -1;
734 static gint ett_tetra_T_lengthIndicationOrCapacityRequest_01 = -1;
735 static gint ett_tetra_FRAG6 = -1;
736 static gint ett_tetra_MAC_FRAG = -1;
737 static gint ett_tetra_MAC_FRAG120 = -1;
738 static gint ett_tetra_MAC_END_UPLINK = -1;
739 static gint ett_tetra_MAC_END_UP114 = -1;
740 static gint ett_tetra_MAC_END_HU = -1;
741 static gint ett_tetra_T_lengthInd_ReservationReq = -1;
742 static gint ett_tetra_MAC_END_DOWNLINK = -1;
743 static gint ett_tetra_T_slot_granting = -1;
744 static gint ett_tetra_T_channel_allocation = -1;
745 static gint ett_tetra_SlotGranting = -1;
746 static gint ett_tetra_ChannelAllocation = -1;
747 static gint ett_tetra_T_extend_carrier_flag = -1;
748 static gint ett_tetra_T_monitoring_pattern = -1;
749 static gint ett_tetra_Extended_carrier_flag = -1;
750 static gint ett_tetra_MAC_END_DOWN111 = -1;
751 static gint ett_tetra_T_slot_granting_01 = -1;
752 static gint ett_tetra_T_channel_allocation_01 = -1;
753 static gint ett_tetra_MAC_RESOURCE = -1;
754 static gint ett_tetra_OTHER_DATA = -1;
755 static gint ett_tetra_T_power_control = -1;
756 static gint ett_tetra_T_slot_granting_02 = -1;
757 static gint ett_tetra_T_channel_allocation_02 = -1;
758 static gint ett_tetra_AddressMacResource = -1;
759 static gint ett_tetra_SSI_NEED = -1;
760 static gint ett_tetra_EVENT_NEED = -1;
761 static gint ett_tetra_USSI_NEED = -1;
762 static gint ett_tetra_SMI_NEED = -1;
763 static gint ett_tetra_SSI_EVENT_NEED = -1;
764 static gint ett_tetra_SSI_USAGE_NEED = -1;
765 static gint ett_tetra_SMI_EVENT_NEED = -1;
766 static gint ett_tetra_ExtendCarrier = -1;
767 static gint ett_tetra_MAC_ACCESS_DEFINE = -1;
768 static gint ett_tetra_T_optional_field = -1;
769 static gint ett_tetra_D_LLC_PDU = -1;
770 static gint ett_tetra_D_BL_ACK_FCS = -1;
771 static gint ett_tetra_D_MLE_PDU_FCS = -1;
772 static gint ett_tetra_D_BL_ADATA_FCS = -1;
773 static gint ett_tetra_D_BL_DATA_FCS = -1;
774 static gint ett_tetra_U_BL_ACK = -1;
775 static gint ett_tetra_D_BL_ACK = -1;
776 static gint ett_tetra_U_BL_DATA = -1;
777 static gint ett_tetra_D_BL_DATA = -1;
778 static gint ett_tetra_U_BL_ADATA = -1;
779 static gint ett_tetra_D_BL_ADATA = -1;
780 static gint ett_tetra_D_MLE_PDU = -1;
781 static gint ett_tetra_UMLE_PDU = -1;
782 static gint ett_tetra_DMLE_PDU = -1;
783 static gint ett_tetra_U_PREPARE = -1;
784 static gint ett_tetra_T_optional_elements = -1;
785 static gint ett_tetra_T_type2_parameters = -1;
786 static gint ett_tetra_T_cell_number = -1;
787 static gint ett_tetra_U_RESTORE = -1;
788 static gint ett_tetra_T_optional_elements_01 = -1;
789 static gint ett_tetra_T_type2_parameters_01 = -1;
790 static gint ett_tetra_T_mcc = -1;
791 static gint ett_tetra_T_mnc = -1;
792 static gint ett_tetra_T_la = -1;
793 static gint ett_tetra_D_NEW_CELL = -1;
794 static gint ett_tetra_T_optional_elements_02 = -1;
795 static gint ett_tetra_D_PREPARE_FAIL = -1;
796 static gint ett_tetra_T_optional_elements_03 = -1;
797 static gint ett_tetra_D_NWRK_BRDADCAST = -1;
798 static gint ett_tetra_T_optional_elements_04 = -1;
799 static gint ett_tetra_T_type2_parameters_02 = -1;
800 static gint ett_tetra_T_tetra_network_time = -1;
801 static gint ett_tetra_T_number_of_neighbour_cells = -1;
802 static gint ett_tetra_TETRA_NETWORK_TIME = -1;
803 static gint ett_tetra_D_RESTORE_ACK = -1;
804 static gint ett_tetra_D_RESTORE_FAIL = -1;
805 static gint ett_tetra_U_MM_PDU = -1;
806 static gint ett_tetra_D_MM_PDU = -1;
807 static gint ett_tetra_GROUP_IDENTITY_DOWNLINK = -1;
808 static gint ett_tetra_T_attach_detach_identifiet = -1;
809 static gint ett_tetra_T_attach = -1;
810 static gint ett_tetra_T_detach = -1;
811 static gint ett_tetra_T_address_type = -1;
812 static gint ett_tetra_T_gssi_extension = -1;
813 static gint ett_tetra_GROUP_IDENTITY_UPLINK = -1;
814 static gint ett_tetra_T_attach_detach_identifiet_01 = -1;
815 static gint ett_tetra_T_attach_01 = -1;
816 static gint ett_tetra_T_detach_01 = -1;
817 static gint ett_tetra_T_address_type_01 = -1;
818 static gint ett_tetra_T_gssi_extension_01 = -1;
819 static gint ett_tetra_D_LOCATION_UPDATE_ACCEPT = -1;
820 static gint ett_tetra_T_optional_elements_05 = -1;
821 static gint ett_tetra_T_type2_parameters_03 = -1;
822 static gint ett_tetra_T_ssi = -1;
823 static gint ett_tetra_T_address_extension = -1;
824 static gint ett_tetra_T_suscriber_class = -1;
825 static gint ett_tetra_T_energy_saving_mode = -1;
826 static gint ett_tetra_T_scch_info = -1;
827 static gint ett_tetra_T_type3 = -1;
828 static gint ett_tetra_T_type3_elements = -1;
829 static gint ett_tetra_T_new_ra = -1;
830 static gint ett_tetra_T_group_identity_location_accept = -1;
831 static gint ett_tetra_T_group_predefined_lifetime = -1;
832 static gint ett_tetra_T_group_identity_downlink = -1;
833 static gint ett_tetra_T_proprietary = -1;
834 static gint ett_tetra_D_LOCATION_UPDATE_REJECT = -1;
835 static gint ett_tetra_U_MM_STATUS = -1;
836 static gint ett_tetra_D_MM_STATUS = -1;
837 static gint ett_tetra_U_CMCE_PDU = -1;
838 static gint ett_tetra_U_RELEASE = -1;
839 static gint ett_tetra_U_SDS_DATA = -1;
840 static gint ett_tetra_T_called_party_type_identifier = -1;
841 static gint ett_tetra_T_short_data_type_identifier = -1;
842 static gint ett_tetra_U_STATUS = -1;
843 static gint ett_tetra_T_called_party_type_identifier_01 = -1;
844 static gint ett_tetra_U_INFO = -1;
845 static gint ett_tetra_D_CMCE_PDU = -1;
846 static gint ett_tetra_D_SDS_DATA = -1;
847 static gint ett_tetra_T_calling_party_type_identifier = -1;
848 static gint ett_tetra_T_short_data_type_identifier_01 = -1;
849 static gint ett_tetra_D_STATUS = -1;
850 static gint ett_tetra_T_calling_party_type_identifier_01 = -1;
851 static gint ett_tetra_D_DISCONNECT = -1;
852 static gint ett_tetra_D_INFO = -1;
853 static gint ett_tetra_D_TX_WAIT = -1;
854 static gint ett_tetra_D_TX_CONTINUE = -1;
855 static gint ett_tetra_U_LOCATION_UPDATE_DEMAND = -1;
856 static gint ett_tetra_T_cipher_control = -1;
857 static gint ett_tetra_T_optional_elements_06 = -1;
858 static gint ett_tetra_T_type2_parameters_04 = -1;
859 static gint ett_tetra_T_energy_saving_mode_01 = -1;
860 static gint ett_tetra_T_la_information = -1;
861 static gint ett_tetra_T_ssi_01 = -1;
862 static gint ett_tetra_T_address_extension_01 = -1;
863 static gint ett_tetra_T_type3_01 = -1;
864 static gint ett_tetra_T_type3_elements_01 = -1;
865 static gint ett_tetra_T_group_identity_location_demand = -1;
866 static gint ett_tetra_T_group_report_response = -1;
867 static gint ett_tetra_T_group_identity_uplink = -1;
868 static gint ett_tetra_T_proprietary_01 = -1;
869 static gint ett_tetra_U_ATTACH_DETACH_GROUP_IDENTITY = -1;
870 static gint ett_tetra_T_optional_elements_07 = -1;
871 static gint ett_tetra_T_type2_element = -1;
872 static gint ett_tetra_T_type3_02 = -1;
873 static gint ett_tetra_T_type3_elements_02 = -1;
874 static gint ett_tetra_U_ATTACH_DETACH_GROUP_IDENTITY_ACK = -1;
875 static gint ett_tetra_T_optional_elements_08 = -1;
876 static gint ett_tetra_T_type2_element_01 = -1;
877 static gint ett_tetra_T_type3_03 = -1;
878 static gint ett_tetra_T_type3_elements_03 = -1;
879 static gint ett_tetra_U_SETUP = -1;
880 static gint ett_tetra_T_optional_elements_09 = -1;
881 static gint ett_tetra_T_type2_parameters_05 = -1;
882 static gint ett_tetra_T_external_subscriber_number = -1;
883 static gint ett_tetra_T_prop = -1;
884 static gint ett_tetra_Basic_service_information = -1;
885 static gint ett_tetra_U_ALERT = -1;
886 static gint ett_tetra_T_optional_elements_10 = -1;
887 static gint ett_tetra_T_type2_parameters_06 = -1;
888 static gint ett_tetra_T_basic_service_information = -1;
889 static gint ett_tetra_T_prop_01 = -1;
890 static gint ett_tetra_U_CONNECT = -1;
891 static gint ett_tetra_T_optional_elements_11 = -1;
892 static gint ett_tetra_T_type2_parameters_07 = -1;
893 static gint ett_tetra_T_basic_service_information_01 = -1;
894 static gint ett_tetra_T_prop_02 = -1;
895 static gint ett_tetra_U_TX_CEASED = -1;
896 static gint ett_tetra_T_optional_elements_12 = -1;
897 static gint ett_tetra_T_type2_parameters_08 = -1;
898 static gint ett_tetra_T_prop_03 = -1;
899 static gint ett_tetra_U_TX_DEMAND = -1;
900 static gint ett_tetra_T_optional_elements_13 = -1;
901 static gint ett_tetra_T_type2_parameters_09 = -1;
902 static gint ett_tetra_T_prop_04 = -1;
903 static gint ett_tetra_U_DISCONNECT = -1;
904 static gint ett_tetra_T_optional_elements_14 = -1;
905 static gint ett_tetra_T_type2_parameters_10 = -1;
906 static gint ett_tetra_T_prop_05 = -1;
907 static gint ett_tetra_U_CALL_RESTORE = -1;
908 static gint ett_tetra_T_optional_elements_15 = -1;
909 static gint ett_tetra_T_type2_parameters_11 = -1;
910 static gint ett_tetra_T_prop_06 = -1;
911 static gint ett_tetra_D_SETUP = -1;
912 static gint ett_tetra_T_optional_elements_16 = -1;
913 static gint ett_tetra_T_type2_parameters_12 = -1;
914 static gint ett_tetra_T_calling_party_address = -1;
915 static gint ett_tetra_T_external_subscriber_number_01 = -1;
916 static gint ett_tetra_T_prop_07 = -1;
917 static gint ett_tetra_D_CALL_PROCEEDING = -1;
918 static gint ett_tetra_T_optional_elements_17 = -1;
919 static gint ett_tetra_T_type2_parameters_13 = -1;
920 static gint ett_tetra_T_basic_service_information_02 = -1;
921 static gint ett_tetra_T_call_status = -1;
922 static gint ett_tetra_T_notification_indicator = -1;
923 static gint ett_tetra_T_prop_08 = -1;
924 static gint ett_tetra_D_ALERT = -1;
925 static gint ett_tetra_T_optional_elements_18 = -1;
926 static gint ett_tetra_T_type2_parameters_14 = -1;
927 static gint ett_tetra_T_basic_service_infomation = -1;
928 static gint ett_tetra_T_notification_indicator_01 = -1;
929 static gint ett_tetra_T_prop_09 = -1;
930 static gint ett_tetra_D_CONNECT = -1;
931 static gint ett_tetra_T_optional_elements_19 = -1;
932 static gint ett_tetra_T_type2_parameters_15 = -1;
933 static gint ett_tetra_T_call_priority = -1;
934 static gint ett_tetra_T_basic_service_information_03 = -1;
935 static gint ett_tetra_T_temporary_address = -1;
936 static gint ett_tetra_T_notification_indicator_02 = -1;
937 static gint ett_tetra_T_prop_10 = -1;
938 static gint ett_tetra_D_CONNECT_ACK = -1;
939 static gint ett_tetra_T_optional_elements_20 = -1;
940 static gint ett_tetra_T_type2_parameters_16 = -1;
941 static gint ett_tetra_T_notification_indicator_03 = -1;
942 static gint ett_tetra_T_prop_11 = -1;
943 static gint ett_tetra_D_RELEASE = -1;
944 static gint ett_tetra_T_optional_elements_21 = -1;
945 static gint ett_tetra_T_type2_parameters_17 = -1;
946 static gint ett_tetra_T_notification_indicator_04 = -1;
947 static gint ett_tetra_T_prop_12 = -1;
948 static gint ett_tetra_D_CALL_RESTORE = -1;
949 static gint ett_tetra_T_optional_elements_22 = -1;
950 static gint ett_tetra_T_type2_parameters_18 = -1;
951 static gint ett_tetra_T_new_call_identifier = -1;
952 static gint ett_tetra_T_call_time_out = -1;
953 static gint ett_tetra_T_call_status_01 = -1;
954 static gint ett_tetra_T_modify = -1;
955 static gint ett_tetra_T_notification_indicator_05 = -1;
956 static gint ett_tetra_T_prop_13 = -1;
957 static gint ett_tetra_D_TX_CEASED = -1;
958 static gint ett_tetra_T_optional_elements_23 = -1;
959 static gint ett_tetra_T_type2_parameters_19 = -1;
960 static gint ett_tetra_T_notification_indicator_06 = -1;
961 static gint ett_tetra_T_prop_14 = -1;
962 static gint ett_tetra_D_TX_GRANTED = -1;
963 static gint ett_tetra_D_ATTACH_DETACH_GROUP_IDENTITY = -1;
964 static gint ett_tetra_T_optional_elements_24 = -1;
965 static gint ett_tetra_T_type2_element_02 = -1;
966 static gint ett_tetra_T_type3_04 = -1;
967 static gint ett_tetra_T_type3_elements_04 = -1;
968 static gint ett_tetra_D_ATTACH_DETACH_GROUP_IDENTITY_ACK = -1;
969 static gint ett_tetra_T_optional_elements_25 = -1;
970 static gint ett_tetra_T_type2_element_03 = -1;
971 static gint ett_tetra_T_type3_05 = -1;
972 static gint ett_tetra_T_type3_elements_05 = -1;
973 static gint ett_tetra_SPEECHMODE = -1;
974 static gint ett_tetra_DATAMODE = -1;
975 static gint ett_tetra_Calling_party_address_type = -1;
976 static gint ett_tetra_T_called_party_ssi_extention = -1;
977 static gint ett_tetra_Proprietary = -1;
978 static gint ett_tetra_T_data_01 = -1;
979 static gint ett_tetra_Type1 = -1;
980 static gint ett_tetra_Type2 = -1;
981 static gint ett_tetra_Modify_type = -1;
982
983 /*--- End of included file: packet-tetra-ett.c ---*/
984 #line 95 "../../asn1/tetra/packet-tetra-template.c"
985
986
987 /*--- Included file: packet-tetra-fn.c ---*/
988 #line 1 "../../asn1/tetra/packet-tetra-fn.c"
989
990
991 static int
992 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_) {
993   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
994                                                             0U, 3U, NULL, FALSE);
995
996   return offset;
997 }
998
999
1000
1001 static int
1002 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_) {
1003   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1004                                                             0U, 63U, NULL, FALSE);
1005
1006   return offset;
1007 }
1008
1009
1010 static const per_sequence_t AACH_sequence[] = {
1011   { &hf_tetra_function      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
1012   { &hf_tetra_field1        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_63 },
1013   { &hf_tetra_field2        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_63 },
1014   { NULL, 0, 0, NULL }
1015 };
1016
1017 static int
1018 dissect_tetra_AACH(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1019   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1020                                    ett_tetra_AACH, AACH_sequence);
1021
1022   return offset;
1023 }
1024
1025
1026 static const value_string tetra_System_Code_vals[] = {
1027   {   0, "ets-300-392-2" },
1028   {   1, "ets-300-392-2anden-300-392-7" },
1029   {   2, "en-300-392-2-v2-3-2orlateranden-300-392-7" },
1030   {   3, "v-d-reserved" },
1031   {   4, "v-d-reserved" },
1032   {   5, "v-d-reserved" },
1033   {   6, "v-d-reserved" },
1034   {   7, "v-d-reserved" },
1035   {   8, "reserved" },
1036   {   9, "reserved" },
1037   {  10, "direct-mode-operation" },
1038   {  11, "direct-mode-operation" },
1039   {  12, "direct-mode-operation" },
1040   {  13, "direct-mode-operation" },
1041   {  14, "direct-mode-operation" },
1042   {  15, "direct-mode-operation" },
1043   { 0, NULL }
1044 };
1045
1046
1047 static int
1048 dissect_tetra_System_Code(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1049   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1050                                      16, NULL, FALSE, 0, NULL);
1051
1052   return offset;
1053 }
1054
1055
1056 static const value_string tetra_Colour_Code_vals[] = {
1057   {   0, "pre-defined" },
1058   {   1, "operator-defined" },
1059   {   2, "operator-defined" },
1060   {   3, "operator-defined" },
1061   {   4, "operator-defined" },
1062   {   5, "operator-defined" },
1063   {   6, "operator-defined" },
1064   {   7, "operator-defined" },
1065   {   8, "operator-defined" },
1066   {   9, "operator-defined" },
1067   {  10, "operator-defined" },
1068   {  11, "operator-defined" },
1069   {  12, "operator-defined" },
1070   {  13, "operator-defined" },
1071   {  14, "operator-defined" },
1072   {  15, "operator-defined" },
1073   {  16, "operator-defined" },
1074   {  17, "operator-defined" },
1075   {  18, "operator-defined" },
1076   {  19, "operator-defined" },
1077   {  20, "operator-defined" },
1078   {  21, "operator-defined" },
1079   {  22, "operator-defined" },
1080   {  23, "operator-defined" },
1081   {  24, "operator-defined" },
1082   {  25, "operator-defined" },
1083   {  26, "operator-defined" },
1084   {  27, "operator-defined" },
1085   {  28, "operator-defined" },
1086   {  29, "operator-defined" },
1087   {  30, "operator-defined" },
1088   {  31, "operator-defined" },
1089   {  32, "operator-defined" },
1090   {  33, "operator-defined" },
1091   {  34, "operator-defined" },
1092   {  35, "operator-defined" },
1093   {  36, "operator-defined" },
1094   {  37, "operator-defined" },
1095   {  38, "operator-defined" },
1096   {  39, "operator-defined" },
1097   {  40, "operator-defined" },
1098   {  41, "operator-defined" },
1099   {  42, "operator-defined" },
1100   {  43, "operator-defined" },
1101   {  44, "operator-defined" },
1102   {  45, "operator-defined" },
1103   {  46, "operator-defined" },
1104   {  47, "operator-defined" },
1105   {  48, "operator-defined" },
1106   {  49, "operator-defined" },
1107   {  50, "operator-defined" },
1108   {  51, "operator-defined" },
1109   {  52, "operator-defined" },
1110   {  53, "operator-defined" },
1111   {  54, "operator-defined" },
1112   {  55, "operator-defined" },
1113   {  56, "operator-defined" },
1114   {  57, "operator-defined" },
1115   {  58, "operator-defined" },
1116   {  59, "operator-defined" },
1117   {  60, "operator-defined" },
1118   {  61, "operator-defined" },
1119   {  62, "operator-defined" },
1120   {  63, "operator-defined" },
1121   { 0, NULL }
1122 };
1123
1124
1125 static int
1126 dissect_tetra_Colour_Code(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                                      64, NULL, FALSE, 0, NULL);
1129
1130   return offset;
1131 }
1132
1133
1134 static const value_string tetra_Timeslot_Number_vals[] = {
1135   {   0, "timeslot-1" },
1136   {   1, "timeslot-2" },
1137   {   2, "timeslot-3" },
1138   {   3, "timeslot-4" },
1139   { 0, NULL }
1140 };
1141
1142
1143 static int
1144 dissect_tetra_Timeslot_Number(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1145   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1146                                      4, NULL, FALSE, 0, NULL);
1147
1148   return offset;
1149 }
1150
1151
1152 static const value_string tetra_Frame_Number_vals[] = {
1153   {   0, "reserved" },
1154   {   1, "frame-1" },
1155   {   2, "frame-2" },
1156   {   3, "frame-3" },
1157   {   4, "frame-4" },
1158   {   5, "frame-5" },
1159   {   6, "frame-6" },
1160   {   7, "frame-7" },
1161   {   8, "frame-8" },
1162   {   9, "frame-9" },
1163   {  10, "frame-10" },
1164   {  11, "frame-11" },
1165   {  12, "frame-12" },
1166   {  13, "frame-13" },
1167   {  14, "frame-14" },
1168   {  15, "frame-15" },
1169   {  16, "frame-16" },
1170   {  17, "frame-17" },
1171   {  18, "frame-18" },
1172   {  19, "reserved" },
1173   {  20, "reserved" },
1174   {  21, "reserved" },
1175   {  22, "reserved" },
1176   {  23, "reserved" },
1177   {  24, "reserved" },
1178   {  25, "reserved" },
1179   {  26, "reserved" },
1180   {  27, "reserved" },
1181   {  28, "reserved" },
1182   {  29, "reserved" },
1183   {  30, "reserved" },
1184   {  31, "reserved" },
1185   { 0, NULL }
1186 };
1187
1188
1189 static int
1190 dissect_tetra_Frame_Number(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1191   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1192                                      32, NULL, FALSE, 0, NULL);
1193
1194   return offset;
1195 }
1196
1197
1198 static const value_string tetra_Multiple_Frame_Number_vals[] = {
1199   {   0, "reserved" },
1200   {   1, "multiframe-1" },
1201   {   2, "multiframe-2" },
1202   {   3, "multiframe-3" },
1203   {   4, "multiframe-4" },
1204   {   5, "multiframe-5" },
1205   {   6, "multiframe-6" },
1206   {   7, "multiframe-7" },
1207   {   8, "multiframe-8" },
1208   {   9, "multiframe-9" },
1209   {  10, "multiframe-10" },
1210   {  11, "multiframe-11" },
1211   {  12, "multiframe-12" },
1212   {  13, "multiframe-13" },
1213   {  14, "multiframe-14" },
1214   {  15, "multiframe-15" },
1215   {  16, "multiframe-16" },
1216   {  17, "multiframe-17" },
1217   {  18, "multiframe-18" },
1218   {  19, "multiframe-19" },
1219   {  20, "multiframe-20" },
1220   {  21, "multiframe-21" },
1221   {  22, "multiframe-22" },
1222   {  23, "multiframe-23" },
1223   {  24, "multiframe-24" },
1224   {  25, "multiframe-25" },
1225   {  26, "multiframe-26" },
1226   {  27, "multiframe-27" },
1227   {  28, "multiframe-28" },
1228   {  29, "multiframe-29" },
1229   {  30, "multiframe-30" },
1230   {  31, "multiframe-31" },
1231   {  32, "multiframe-32" },
1232   {  33, "multiframe-33" },
1233   {  34, "multiframe-34" },
1234   {  35, "multiframe-35" },
1235   {  36, "multiframe-36" },
1236   {  37, "multiframe-37" },
1237   {  38, "multiframe-38" },
1238   {  39, "multiframe-39" },
1239   {  40, "multiframe-40" },
1240   {  41, "multiframe-41" },
1241   {  42, "multiframe-42" },
1242   {  43, "multiframe-43" },
1243   {  44, "multiframe-44" },
1244   {  45, "multiframe-45" },
1245   {  46, "multiframe-46" },
1246   {  47, "multiframe-47" },
1247   {  48, "multiframe-48" },
1248   {  49, "multiframe-49" },
1249   {  50, "multiframe-50" },
1250   {  51, "multiframe-51" },
1251   {  52, "multiframe-52" },
1252   {  53, "multiframe-53" },
1253   {  54, "multiframe-54" },
1254   {  55, "multiframe-55" },
1255   {  56, "multiframe-56" },
1256   {  57, "multiframe-57" },
1257   {  58, "multiframe-58" },
1258   {  59, "multiframe-59" },
1259   {  60, "multiframe-60" },
1260   {  61, "reserved" },
1261   {  62, "reserved" },
1262   {  63, "reserved" },
1263   { 0, NULL }
1264 };
1265
1266
1267 static int
1268 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_) {
1269   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1270                                      64, NULL, FALSE, 0, NULL);
1271
1272   return offset;
1273 }
1274
1275
1276 static const value_string tetra_Sharing_Mod_vals[] = {
1277   {   0, "continuous-transmission" },
1278   {   1, "carrier-sharing" },
1279   {   2, "mcch-sharing" },
1280   {   3, "traffic-carrier-sharing" },
1281   { 0, NULL }
1282 };
1283
1284
1285 static int
1286 dissect_tetra_Sharing_Mod(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1287   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1288                                      4, NULL, FALSE, 0, NULL);
1289
1290   return offset;
1291 }
1292
1293
1294 static const value_string tetra_TS_Reserved_Frames_vals[] = {
1295   {   0, "frame-reserved-1" },
1296   {   1, "frames-reserved-2" },
1297   {   2, "frames-reserved-3" },
1298   {   3, "frames-reserved-4" },
1299   {   4, "frames-reserved-6" },
1300   {   5, "frames-reserved-9" },
1301   {   6, "frames-reserved-12" },
1302   {   7, "frames-reserved-18" },
1303   { 0, NULL }
1304 };
1305
1306
1307 static int
1308 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_) {
1309   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1310                                      8, NULL, FALSE, 0, NULL);
1311
1312   return offset;
1313 }
1314
1315
1316 static const value_string tetra_U_Plane_DTX_vals[] = {
1317   {   0, "not-allowed" },
1318   {   1, "allowed" },
1319   { 0, NULL }
1320 };
1321
1322
1323 static int
1324 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_) {
1325   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1326                                      2, NULL, FALSE, 0, NULL);
1327
1328   return offset;
1329 }
1330
1331
1332 static const value_string tetra_Frame_18_Extension_vals[] = {
1333   {   0, "not-allowed" },
1334   {   1, "allowed" },
1335   { 0, NULL }
1336 };
1337
1338
1339 static int
1340 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_) {
1341   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1342                                      2, NULL, FALSE, 0, NULL);
1343
1344   return offset;
1345 }
1346
1347
1348 static const value_string tetra_Reserved_vals[] = {
1349   {   0, "default" },
1350   {   1, "not-used" },
1351   { 0, NULL }
1352 };
1353
1354
1355 static int
1356 dissect_tetra_Reserved(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1357   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1358                                      2, NULL, FALSE, 0, NULL);
1359
1360   return offset;
1361 }
1362
1363
1364
1365 static int
1366 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_) {
1367   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1368                                                             0U, 1023U, NULL, FALSE);
1369
1370   return offset;
1371 }
1372
1373
1374
1375 static int
1376 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_) {
1377   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1378                                                             0U, 16383U, NULL, FALSE);
1379
1380   return offset;
1381 }
1382
1383
1384
1385 static int
1386 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_) {
1387   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1388                                                             0U, 1U, NULL, FALSE);
1389
1390   return offset;
1391 }
1392
1393
1394 static const per_sequence_t MLE_Sync_sequence[] = {
1395   { &hf_tetra_mcc           , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1023 },
1396   { &hf_tetra_mnc           , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
1397   { &hf_tetra_neighbour_cell_broadcast, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
1398   { &hf_tetra_cell_service_level, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
1399   { &hf_tetra_late_entry_information, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
1400   { NULL, 0, 0, NULL }
1401 };
1402
1403 static int
1404 dissect_tetra_MLE_Sync(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1405   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1406                                    ett_tetra_MLE_Sync, MLE_Sync_sequence);
1407
1408   return offset;
1409 }
1410
1411
1412 static const per_sequence_t BSCH_sequence[] = {
1413   { &hf_tetra_system_code   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_System_Code },
1414   { &hf_tetra_colour_code   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Colour_Code },
1415   { &hf_tetra_timeslot_number, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Timeslot_Number },
1416   { &hf_tetra_frame_number  , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Frame_Number },
1417   { &hf_tetra_multiple_frame_number, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Multiple_Frame_Number },
1418   { &hf_tetra_sharing_mod   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Sharing_Mod },
1419   { &hf_tetra_ts_reserved_frames, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_TS_Reserved_Frames },
1420   { &hf_tetra_u_plane_dtx   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_U_Plane_DTX },
1421   { &hf_tetra_frame_18_extension, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Frame_18_Extension },
1422   { &hf_tetra_reserved      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Reserved },
1423   { &hf_tetra_tm_sdu        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_MLE_Sync },
1424   { NULL, 0, 0, NULL }
1425 };
1426
1427 static int
1428 dissect_tetra_BSCH(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1429   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1430                                    ett_tetra_BSCH, BSCH_sequence);
1431
1432   return offset;
1433 }
1434
1435
1436
1437 static int
1438 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_) {
1439   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1440                                                             0U, 4095U, NULL, FALSE);
1441
1442   return offset;
1443 }
1444
1445
1446
1447 static int
1448 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_) {
1449   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1450                                                             0U, 15U, NULL, FALSE);
1451
1452   return offset;
1453 }
1454
1455
1456 static const value_string tetra_Offset_vals[] = {
1457   {   0, "offset-0" },
1458   {   1, "offset-positive-6-point-25" },
1459   {   2, "offset-minus-6-point-25" },
1460   {   3, "offset-12-point-5" },
1461   { 0, NULL }
1462 };
1463
1464
1465 static int
1466 dissect_tetra_Offset(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1467   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1468                                      4, NULL, FALSE, 0, NULL);
1469
1470   return offset;
1471 }
1472
1473
1474
1475 static int
1476 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_) {
1477   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1478                                                             0U, 7U, NULL, FALSE);
1479
1480   return offset;
1481 }
1482
1483
1484 static const value_string tetra_Reverse_Operation_vals[] = {
1485   {   0, "normal" },
1486   {   1, "reverse" },
1487   { 0, NULL }
1488 };
1489
1490
1491 static int
1492 dissect_tetra_Reverse_Operation(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                                      2, NULL, FALSE, 0, NULL);
1495
1496   return offset;
1497 }
1498
1499
1500 static const value_string tetra_Sencond_Ctl_Carrier_vals[] = {
1501   {   0, "none" },
1502   {   1, "timeslot-2" },
1503   {   2, "timeslots-2and3" },
1504   {   3, "timeslots-2and3and4" },
1505   { 0, NULL }
1506 };
1507
1508
1509 static int
1510 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_) {
1511   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1512                                      4, NULL, FALSE, 0, NULL);
1513
1514   return offset;
1515 }
1516
1517
1518 static const value_string tetra_MS_TXPWR_MAX_CELL_vals[] = {
1519   {   0, "reserved" },
1520   {   1, "dbm-15" },
1521   {   2, "dbm-20" },
1522   {   3, "dbm-25" },
1523   {   4, "dbm-30" },
1524   {   5, "dbm-35" },
1525   {   6, "dbm-40" },
1526   {   7, "dbm-45" },
1527   { 0, NULL }
1528 };
1529
1530
1531 static int
1532 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_) {
1533   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1534                                      8, NULL, FALSE, 0, NULL);
1535
1536   return offset;
1537 }
1538
1539
1540 static const value_string tetra_RXLEV_ACCESS_MIN_vals[] = {
1541   {   0, "dbm-125" },
1542   {   1, "dbm-120" },
1543   {   2, "dbm-115" },
1544   {   3, "dbm-110" },
1545   {   4, "dbm-105" },
1546   {   5, "dbm-100" },
1547   {   6, "dbm-95" },
1548   {   7, "dnm-90" },
1549   {   8, "dbm-85" },
1550   {   9, "dbm-80" },
1551   {  10, "dbm-75" },
1552   {  11, "dbm-70" },
1553   {  12, "dbm-65" },
1554   {  13, "dbm-60" },
1555   {  14, "dbm-55" },
1556   {  15, "dbm-50" },
1557   { 0, NULL }
1558 };
1559
1560
1561 static int
1562 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_) {
1563   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1564                                      16, NULL, FALSE, 0, NULL);
1565
1566   return offset;
1567 }
1568
1569
1570 static const value_string tetra_ACCESS_PARAMETER_vals[] = {
1571   {   0, "dbm-53" },
1572   {   1, "dbm-51" },
1573   {   2, "dbm-49" },
1574   {   3, "dbm-47" },
1575   {   4, "dbm-45" },
1576   {   5, "dbm-43" },
1577   {   6, "dbm-41" },
1578   {   7, "dbm-39" },
1579   {   8, "dbm-37" },
1580   {   9, "dbm-35" },
1581   {  10, "dbm-33" },
1582   {  11, "dbm-31" },
1583   {  12, "dbm-29" },
1584   {  13, "dbm-27" },
1585   {  14, "dbm-25" },
1586   {  15, "dbm-23" },
1587   { 0, NULL }
1588 };
1589
1590
1591 static int
1592 dissect_tetra_ACCESS_PARAMETER(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1593   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1594                                      16, NULL, FALSE, 0, NULL);
1595
1596   return offset;
1597 }
1598
1599
1600 static const value_string tetra_RADIO_DOWNLINK_TIMEOUT_vals[] = {
1601   {   0, "disable" },
1602   {   1, "timeslots-144" },
1603   {   2, "timeslots-288" },
1604   {   3, "timeslots-432" },
1605   {   4, "timeslots-576" },
1606   {   5, "timeslots-720" },
1607   {   6, "timeslots-864" },
1608   {   7, "timeslots-1008" },
1609   {   8, "timeslots-1152" },
1610   {   9, "timeslots-1296" },
1611   {  10, "timeslots-1440" },
1612   {  11, "timeslots-1584" },
1613   {  12, "timeslots-1728" },
1614   {  13, "timeslots-1872" },
1615   {  14, "timeslots-2016" },
1616   {  15, "timeslots-2160" },
1617   { 0, NULL }
1618 };
1619
1620
1621 static int
1622 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_) {
1623   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1624                                      16, NULL, FALSE, 0, NULL);
1625
1626   return offset;
1627 }
1628
1629
1630
1631 static int
1632 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_) {
1633   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1634                                                             0U, 65535U, NULL, FALSE);
1635
1636   return offset;
1637 }
1638
1639
1640 static const value_string tetra_T_hyperframe_or_cck_vals[] = {
1641   {   0, "hyperframe" },
1642   {   1, "cckid" },
1643   { 0, NULL }
1644 };
1645
1646 static const per_choice_t T_hyperframe_or_cck_choice[] = {
1647   {   0, &hf_tetra_hyperframe    , ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_65535 },
1648   {   1, &hf_tetra_cckid         , ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_65535 },
1649   { 0, NULL, 0, NULL }
1650 };
1651
1652 static int
1653 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_) {
1654   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
1655                                  ett_tetra_T_hyperframe_or_cck, T_hyperframe_or_cck_choice,
1656                                  NULL);
1657
1658   return offset;
1659 }
1660
1661
1662 static const value_string tetra_FRAME_vals[] = {
1663   {   0, "not-common" },
1664   {   1, "common" },
1665   { 0, NULL }
1666 };
1667
1668
1669 static int
1670 dissect_tetra_FRAME(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1671   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1672                                      2, NULL, FALSE, 0, NULL);
1673
1674   return offset;
1675 }
1676
1677
1678 static const per_sequence_t TS_COMMON_FRAMES_sequence[] = {
1679   { &hf_tetra_frame1        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1680   { &hf_tetra_frame2        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1681   { &hf_tetra_frame3        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1682   { &hf_tetra_frame4        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1683   { &hf_tetra_frame5        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1684   { &hf_tetra_frame6        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1685   { &hf_tetra_frame7        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1686   { &hf_tetra_frame8        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1687   { &hf_tetra_frame9        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1688   { &hf_tetra_frame10       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1689   { &hf_tetra_frame11       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1690   { &hf_tetra_frame12       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1691   { &hf_tetra_frame13       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1692   { &hf_tetra_frame14       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1693   { &hf_tetra_frame15       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1694   { &hf_tetra_frame16       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1695   { &hf_tetra_frame17       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1696   { &hf_tetra_frame18       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1697   { NULL, 0, 0, NULL }
1698 };
1699
1700 static int
1701 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_) {
1702   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1703                                    ett_tetra_TS_COMMON_FRAMES, TS_COMMON_FRAMES_sequence);
1704
1705   return offset;
1706 }
1707
1708
1709 static const value_string tetra_IMM_vals[] = {
1710   {   0, "always-randomize" },
1711   {   1, "randomize-after-imm-tdma" },
1712   {   2, "randomize-after-imm-tdma" },
1713   {   3, "randomize-after-imm-tdma" },
1714   {   4, "randomize-after-imm-tdma" },
1715   {   5, "randomize-after-imm-tdma" },
1716   {   6, "randomize-after-imm-tdma" },
1717   {   7, "randomize-after-imm-tdma" },
1718   {   8, "randomize-after-imm-tdma" },
1719   {   9, "randomize-after-imm-tdma" },
1720   {  10, "randomize-after-imm-tdma" },
1721   {  11, "randomize-after-imm-tdma" },
1722   {  12, "randomize-after-imm-tdma" },
1723   {  13, "randomize-after-imm-tdma" },
1724   {  14, "randomize-after-imm-tdma" },
1725   {  15, "immediate-access-allowed" },
1726   { 0, NULL }
1727 };
1728
1729
1730 static int
1731 dissect_tetra_IMM(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1732   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1733                                      16, NULL, FALSE, 0, NULL);
1734
1735   return offset;
1736 }
1737
1738
1739 static const value_string tetra_WT_vals[] = {
1740   {   0, "reserved" },
1741   {   1, "response-within-wt-downlink" },
1742   {   2, "response-within-wt-downlink" },
1743   {   3, "response-within-wt-downlink" },
1744   {   4, "response-within-wt-downlink" },
1745   {   5, "response-within-wt-downlink" },
1746   {   6, "response-within-wt-downlink" },
1747   {   7, "response-within-wt-downlink" },
1748   {   8, "response-within-wt-downlink" },
1749   {   9, "response-within-wt-downlink" },
1750   {  10, "response-within-wt-downlink" },
1751   {  11, "response-within-wt-downlink" },
1752   {  12, "response-within-wt-downlink" },
1753   {  13, "response-within-wt-downlink" },
1754   {  14, "response-within-wt-downlink" },
1755   {  15, "response-within-wt-downlink" },
1756   { 0, NULL }
1757 };
1758
1759
1760 static int
1761 dissect_tetra_WT(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1762   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1763                                      16, NULL, FALSE, 0, NULL);
1764
1765   return offset;
1766 }
1767
1768
1769 static const value_string tetra_NU_vals[] = {
1770   {   0, "no-random" },
1771   {   1, "random-1" },
1772   {   2, "random-2" },
1773   {   3, "random-3" },
1774   {   4, "random-4" },
1775   {   5, "random-5" },
1776   {   6, "random-6" },
1777   {   7, "random-7" },
1778   {   8, "random-8" },
1779   {   9, "random-9" },
1780   {  10, "random-10" },
1781   {  11, "random-11" },
1782   {  12, "random-12" },
1783   {  13, "random-13" },
1784   {  14, "random-14" },
1785   {  15, "random-15" },
1786   { 0, NULL }
1787 };
1788
1789
1790 static int
1791 dissect_tetra_NU(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1792   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1793                                      16, NULL, FALSE, 0, NULL);
1794
1795   return offset;
1796 }
1797
1798
1799 static const value_string tetra_Frame_Len_Factor_vals[] = {
1800   {   0, "multiply-1" },
1801   {   1, "multiply-4" },
1802   { 0, NULL }
1803 };
1804
1805
1806 static int
1807 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_) {
1808   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1809                                      2, NULL, FALSE, 0, NULL);
1810
1811   return offset;
1812 }
1813
1814
1815 static const value_string tetra_Timeslot_Pointer_vals[] = {
1816   {   0, "same-as-downlink" },
1817   {   1, "timeslot-4" },
1818   {   2, "timeslot-bit-map" },
1819   {   3, "timeslot-bit-map" },
1820   {   4, "timeslot-bit-map" },
1821   {   5, "timeslot-bit-map" },
1822   {   6, "timeslot-bit-map" },
1823   {   7, "timeslot-bit-map" },
1824   {   8, "timeslot-bit-map" },
1825   {   9, "timeslot-bit-map" },
1826   {  10, "timeslot-bit-map" },
1827   {  11, "timeslot-bit-map" },
1828   {  12, "timeslot-bit-map" },
1829   {  13, "timeslot-bit-map" },
1830   {  14, "timeslot-bit-map" },
1831   {  15, "all-four-timeslots" },
1832   { 0, NULL }
1833 };
1834
1835
1836 static int
1837 dissect_tetra_Timeslot_Pointer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1838   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1839                                      16, NULL, FALSE, 0, NULL);
1840
1841   return offset;
1842 }
1843
1844
1845 static const value_string tetra_Min_Pdu_Priority_vals[] = {
1846   {   0, "priority-0" },
1847   {   1, "priority-1" },
1848   {   2, "priority-2" },
1849   {   3, "priority-3" },
1850   {   4, "priority-4" },
1851   {   5, "priority-5" },
1852   {   6, "priority-6" },
1853   {   7, "priority-7" },
1854   { 0, NULL }
1855 };
1856
1857
1858 static int
1859 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_) {
1860   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1861                                      8, NULL, FALSE, 0, NULL);
1862
1863   return offset;
1864 }
1865
1866
1867 static const per_sequence_t Default_Code_A_sequence[] = {
1868   { &hf_tetra_imm           , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_IMM },
1869   { &hf_tetra_wt            , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_WT },
1870   { &hf_tetra_nu            , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_NU },
1871   { &hf_tetra_frame_len_factor, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Frame_Len_Factor },
1872   { &hf_tetra_timeslot_pointer, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Timeslot_Pointer },
1873   { &hf_tetra_min_pdu_priority, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Min_Pdu_Priority },
1874   { NULL, 0, 0, NULL }
1875 };
1876
1877 static int
1878 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_) {
1879   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1880                                    ett_tetra_Default_Code_A, Default_Code_A_sequence);
1881
1882   return offset;
1883 }
1884
1885
1886
1887 static int
1888 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_) {
1889   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1890                                                             0U, 255U, NULL, FALSE);
1891
1892   return offset;
1893 }
1894
1895
1896 static const value_string tetra_SDS_TL_Addressing_Method_vals[] = {
1897   {   0, "reserved" },
1898   {   1, "service-centre" },
1899   {   2, "never-use-service-centre" },
1900   {   3, "ms-choice-to-use-service-centre" },
1901   { 0, NULL }
1902 };
1903
1904
1905 static int
1906 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_) {
1907   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1908                                      4, NULL, FALSE, 0, NULL);
1909
1910   return offset;
1911 }
1912
1913
1914 static const value_string tetra_Data_Priority_Supported_vals[] = {
1915   {   0, "not-supported" },
1916   {   1, "supported" },
1917   { 0, NULL }
1918 };
1919
1920
1921 static int
1922 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_) {
1923   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1924                                      2, NULL, FALSE, 0, NULL);
1925
1926   return offset;
1927 }
1928
1929
1930 static const value_string tetra_Section_Information_vals[] = {
1931   {   0, "no-information" },
1932   {   1, "futher-information" },
1933   { 0, NULL }
1934 };
1935
1936
1937 static int
1938 dissect_tetra_Section_Information(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1939   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1940                                      2, NULL, FALSE, 0, NULL);
1941
1942   return offset;
1943 }
1944
1945
1946 static const per_sequence_t PRESENT1_sequence[] = {
1947   { &hf_tetra_data_priority_supported, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Data_Priority_Supported },
1948   { &hf_tetra_reserved_02   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
1949   { &hf_tetra_section_2_information, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Section_Information },
1950   { &hf_tetra_section_3_information, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Section_Information },
1951   { &hf_tetra_section_4_information, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Section_Information },
1952   { NULL, 0, 0, NULL }
1953 };
1954
1955 static int
1956 dissect_tetra_PRESENT1(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1957   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1958                                    ett_tetra_PRESENT1, PRESENT1_sequence);
1959
1960   return offset;
1961 }
1962
1963
1964
1965 static int
1966 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_) {
1967   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1968                                                             0U, 127U, NULL, FALSE);
1969
1970   return offset;
1971 }
1972
1973
1974 static const value_string tetra_T_section_vals[] = {
1975   {   0, "present-1" },
1976   {   1, "present-2" },
1977   {   2, "present-3" },
1978   {   3, "present-4" },
1979   { 0, NULL }
1980 };
1981
1982 static const per_choice_t T_section_choice[] = {
1983   {   0, &hf_tetra_present_1     , ASN1_NO_EXTENSIONS     , dissect_tetra_PRESENT1 },
1984   {   1, &hf_tetra_present_2     , ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_127 },
1985   {   2, &hf_tetra_present_3     , ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_127 },
1986   {   3, &hf_tetra_present_4     , ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_127 },
1987   { 0, NULL, 0, NULL }
1988 };
1989
1990 static int
1991 dissect_tetra_T_section(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1992   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
1993                                  ett_tetra_T_section, T_section_choice,
1994                                  NULL);
1995
1996   return offset;
1997 }
1998
1999
2000 static const per_sequence_t Extended_Services_Broadcast_sequence[] = {
2001   { &hf_tetra_security_information, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_255 },
2002   { &hf_tetra_sds_tl_addressing_method, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_SDS_TL_Addressing_Method },
2003   { &hf_tetra_gck_supported , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
2004   { &hf_tetra_section       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_section },
2005   { NULL, 0, 0, NULL }
2006 };
2007
2008 static int
2009 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_) {
2010   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2011                                    ett_tetra_Extended_Services_Broadcast, Extended_Services_Broadcast_sequence);
2012
2013   return offset;
2014 }
2015
2016
2017 static const value_string tetra_T_optional_params_vals[] = {
2018   {   0, "even-multiframe" },
2019   {   1, "odd-multiframe" },
2020   {   2, "access-a-code" },
2021   {   3, "extend-service" },
2022   { 0, NULL }
2023 };
2024
2025 static const per_choice_t T_optional_params_choice[] = {
2026   {   0, &hf_tetra_even_multiframe, ASN1_NO_EXTENSIONS     , dissect_tetra_TS_COMMON_FRAMES },
2027   {   1, &hf_tetra_odd_multiframe, ASN1_NO_EXTENSIONS     , dissect_tetra_TS_COMMON_FRAMES },
2028   {   2, &hf_tetra_access_a_code , ASN1_NO_EXTENSIONS     , dissect_tetra_Default_Code_A },
2029   {   3, &hf_tetra_extend_service, ASN1_NO_EXTENSIONS     , dissect_tetra_Extended_Services_Broadcast },
2030   { 0, NULL, 0, NULL }
2031 };
2032
2033 static int
2034 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_) {
2035   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2036                                  ett_tetra_T_optional_params, T_optional_params_choice,
2037                                  NULL);
2038
2039   return offset;
2040 }
2041
2042
2043 static const per_sequence_t BNCH_sequence[] = {
2044   { &hf_tetra_pdu_type      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
2045   { &hf_tetra_broadcast_type, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
2046   { &hf_tetra_main_carrier  , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_4095 },
2047   { &hf_tetra_frequency_band, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_15 },
2048   { &hf_tetra_offset        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Offset },
2049   { &hf_tetra_duplex_spacing, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
2050   { &hf_tetra_reverse_operation, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Reverse_Operation },
2051   { &hf_tetra_sencond_ctl_carrier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Sencond_Ctl_Carrier },
2052   { &hf_tetra_ms_txpwr_max_cell, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_MS_TXPWR_MAX_CELL },
2053   { &hf_tetra_rxlev_access_min, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_RXLEV_ACCESS_MIN },
2054   { &hf_tetra_access_parameter, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_ACCESS_PARAMETER },
2055   { &hf_tetra_radio_downlink_timeout, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_RADIO_DOWNLINK_TIMEOUT },
2056   { &hf_tetra_hyperframe_or_cck, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_hyperframe_or_cck },
2057   { &hf_tetra_optional_params, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_params },
2058   { &hf_tetra_la            , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
2059   { &hf_tetra_subscriber_class, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_65535 },
2060   { &hf_tetra_registriation , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
2061   { &hf_tetra_de_registration, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
2062   { &hf_tetra_priority_cell , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
2063   { &hf_tetra_minimum_mode_service, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
2064   { &hf_tetra_migration     , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
2065   { &hf_tetra_system_wide_service, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
2066   { &hf_tetra_tetra_voice_service, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
2067   { &hf_tetra_circuit_mode_data_service, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
2068   { &hf_tetra_reserved_01   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
2069   { &hf_tetra_sndcp_service , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
2070   { &hf_tetra_air_interface_encryption, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
2071   { &hf_tetra_advanced_link_support, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
2072   { NULL, 0, 0, NULL }
2073 };
2074
2075 static int
2076 dissect_tetra_BNCH(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2077   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2078                                    ett_tetra_BNCH, BNCH_sequence);
2079
2080   return offset;
2081 }
2082
2083
2084 static const value_string tetra_Fill_Bit_Indication_vals[] = {
2085   {   0, "no-present" },
2086   {   1, "present" },
2087   { 0, NULL }
2088 };
2089
2090
2091 static int
2092 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_) {
2093   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2094                                      2, NULL, FALSE, 0, NULL);
2095
2096   return offset;
2097 }
2098
2099
2100 static const value_string tetra_Encrypted_Flag_vals[] = {
2101   {   0, "not-encrypted" },
2102   {   1, "encrypted" },
2103   { 0, NULL }
2104 };
2105
2106
2107 static int
2108 dissect_tetra_Encrypted_Flag(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2109   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2110                                      2, NULL, FALSE, 0, NULL);
2111
2112   return offset;
2113 }
2114
2115
2116
2117 static int
2118 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_) {
2119   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
2120                                                             0U, 16777215U, NULL, FALSE);
2121
2122   return offset;
2123 }
2124
2125
2126 static const value_string tetra_Address_vals[] = {
2127   {   0, "ssi" },
2128   {   1, "eventLabel" },
2129   {   2, "ussi" },
2130   {   3, "smi" },
2131   { 0, NULL }
2132 };
2133
2134 static const per_choice_t Address_choice[] = {
2135   {   0, &hf_tetra_ssi           , ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_16777215 },
2136   {   1, &hf_tetra_eventLabel    , ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_1023 },
2137   {   2, &hf_tetra_ussi          , ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_16777215 },
2138   {   3, &hf_tetra_smi           , ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_16777215 },
2139   { 0, NULL, 0, NULL }
2140 };
2141
2142 static int
2143 dissect_tetra_Address(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2144   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2145                                  ett_tetra_Address, Address_choice,
2146                                  NULL);
2147
2148   return offset;
2149 }
2150
2151
2152
2153 static int
2154 dissect_tetra_NULL(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2155   offset = dissect_per_null(tvb, offset, actx, tree, hf_index);
2156
2157   return offset;
2158 }
2159
2160
2161 static const value_string tetra_UPDATE_TYPE_vals[] = {
2162   {   0, "roaming-location-updating" },
2163   {   1, "temporary-registration" },
2164   {   2, "periodic-location-updating" },
2165   {   3, "itsi-attach" },
2166   {   4, "call-restoration-roaming" },
2167   {   5, "migrating-or-call-restoration-migrating" },
2168   {   6, "demand-location-updating" },
2169   {   7, "disabled-MS-updating" },
2170   { 0, NULL }
2171 };
2172
2173
2174 static int
2175 dissect_tetra_UPDATE_TYPE(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2176   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2177                                      8, NULL, FALSE, 0, NULL);
2178
2179   return offset;
2180 }
2181
2182
2183
2184 static int
2185 dissect_tetra_BOOLEAN(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2186   offset = dissect_per_boolean(tvb, offset, actx, tree, hf_index, NULL);
2187
2188   return offset;
2189 }
2190
2191
2192 static const value_string tetra_T_cipher_control_vals[] = {
2193   {   0, "no-cipher" },
2194   {   1, "ciphering-parameters" },
2195   { 0, NULL }
2196 };
2197
2198 static const per_choice_t T_cipher_control_choice[] = {
2199   {   0, &hf_tetra_no_cipher     , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2200   {   1, &hf_tetra_ciphering_parameters, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_1023 },
2201   { 0, NULL, 0, NULL }
2202 };
2203
2204 static int
2205 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_) {
2206   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2207                                  ett_tetra_T_cipher_control, T_cipher_control_choice,
2208                                  NULL);
2209
2210   return offset;
2211 }
2212
2213
2214
2215 static int
2216 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_) {
2217   offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
2218                                        4, 4, FALSE, NULL);
2219
2220   return offset;
2221 }
2222
2223
2224 static const value_string tetra_T_energy_saving_mode_01_vals[] = {
2225   {   0, "none" },
2226   {   1, "energy-saving-mode" },
2227   { 0, NULL }
2228 };
2229
2230 static const per_choice_t T_energy_saving_mode_01_choice[] = {
2231   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2232   {   1, &hf_tetra_energy_saving_mode_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_7 },
2233   { 0, NULL, 0, NULL }
2234 };
2235
2236 static int
2237 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_) {
2238   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2239                                  ett_tetra_T_energy_saving_mode_01, T_energy_saving_mode_01_choice,
2240                                  NULL);
2241
2242   return offset;
2243 }
2244
2245
2246 static const value_string tetra_T_la_information_vals[] = {
2247   {   0, "none" },
2248   {   1, "la-information" },
2249   { 0, NULL }
2250 };
2251
2252 static const per_choice_t T_la_information_choice[] = {
2253   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2254   {   1, &hf_tetra_la_information_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_16383 },
2255   { 0, NULL, 0, NULL }
2256 };
2257
2258 static int
2259 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_) {
2260   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2261                                  ett_tetra_T_la_information, T_la_information_choice,
2262                                  NULL);
2263
2264   return offset;
2265 }
2266
2267
2268
2269 static int
2270 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_) {
2271   offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
2272                                        3, 3, FALSE, NULL);
2273
2274   return offset;
2275 }
2276
2277
2278 static const value_string tetra_T_ssi_01_vals[] = {
2279   {   0, "none" },
2280   {   1, "ssi" },
2281   { 0, NULL }
2282 };
2283
2284 static const per_choice_t T_ssi_01_choice[] = {
2285   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2286   {   1, &hf_tetra_ssi_03        , ASN1_NO_EXTENSIONS     , dissect_tetra_OCTET_STRING_SIZE_3 },
2287   { 0, NULL, 0, NULL }
2288 };
2289
2290 static int
2291 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_) {
2292   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2293                                  ett_tetra_T_ssi_01, T_ssi_01_choice,
2294                                  NULL);
2295
2296   return offset;
2297 }
2298
2299
2300 static const value_string tetra_T_address_extension_01_vals[] = {
2301   {   0, "none" },
2302   {   1, "address-extension" },
2303   { 0, NULL }
2304 };
2305
2306 static const per_choice_t T_address_extension_01_choice[] = {
2307   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2308   {   1, &hf_tetra_address_extension_01, ASN1_NO_EXTENSIONS     , dissect_tetra_OCTET_STRING_SIZE_3 },
2309   { 0, NULL, 0, NULL }
2310 };
2311
2312 static int
2313 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_) {
2314   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2315                                  ett_tetra_T_address_extension_01, T_address_extension_01_choice,
2316                                  NULL);
2317
2318   return offset;
2319 }
2320
2321
2322 static const value_string tetra_TYPE3_IDENTIFIER_vals[] = {
2323   {   0, "reserved" },
2324   {   1, "default-group-attachment-lifetime" },
2325   {   2, "new-registered-area" },
2326   {   3, "group-identity-location-demand" },
2327   {   4, "group-report-response" },
2328   {   5, "group-identity-location-accept" },
2329   {   6, "dm-ms-address" },
2330   {   7, "group-identity-downlink" },
2331   {   8, "group-identity-uplink" },
2332   {   9, "authentication-uplink" },
2333   {  10, "authentication-downlink" },
2334   {  11, "reserved" },
2335   {  12, "reserved1" },
2336   {  13, "reserved2" },
2337   {  14, "reserved3" },
2338   {  15, "proprietary" },
2339   { 0, NULL }
2340 };
2341
2342
2343 static int
2344 dissect_tetra_TYPE3_IDENTIFIER(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2345   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2346                                      16, NULL, FALSE, 0, NULL);
2347
2348   return offset;
2349 }
2350
2351
2352 static const value_string tetra_T_group_identity_location_demand_vals[] = {
2353   {   0, "none" },
2354   {   1, "group-identity-location-demand" },
2355   { 0, NULL }
2356 };
2357
2358 static const per_choice_t T_group_identity_location_demand_choice[] = {
2359   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2360   {   1, &hf_tetra_group_identity_location_demand_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_3 },
2361   { 0, NULL, 0, NULL }
2362 };
2363
2364 static int
2365 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_) {
2366   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2367                                  ett_tetra_T_group_identity_location_demand, T_group_identity_location_demand_choice,
2368                                  NULL);
2369
2370   return offset;
2371 }
2372
2373
2374 static const value_string tetra_T_group_report_response_vals[] = {
2375   {   0, "none" },
2376   {   1, "group-report-response" },
2377   { 0, NULL }
2378 };
2379
2380 static const per_choice_t T_group_report_response_choice[] = {
2381   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2382   {   1, &hf_tetra_group_report_response_01, ASN1_NO_EXTENSIONS     , dissect_tetra_BOOLEAN },
2383   { 0, NULL, 0, NULL }
2384 };
2385
2386 static int
2387 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_) {
2388   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2389                                  ett_tetra_T_group_report_response, T_group_report_response_choice,
2390                                  NULL);
2391
2392   return offset;
2393 }
2394
2395
2396 static const value_string tetra_T_group_identity_uplink_vals[] = {
2397   {   0, "none" },
2398   {   1, "group-identity-uplink" },
2399   { 0, NULL }
2400 };
2401
2402 static const per_choice_t T_group_identity_uplink_choice[] = {
2403   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2404   {   1, &hf_tetra_group_identity_uplink_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_15 },
2405   { 0, NULL, 0, NULL }
2406 };
2407
2408 static int
2409 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_) {
2410   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2411                                  ett_tetra_T_group_identity_uplink, T_group_identity_uplink_choice,
2412                                  NULL);
2413
2414   return offset;
2415 }
2416
2417
2418 static const value_string tetra_T_proprietary_01_vals[] = {
2419   {   0, "none" },
2420   {   1, "proprietary" },
2421   { 0, NULL }
2422 };
2423
2424 static const per_choice_t T_proprietary_01_choice[] = {
2425   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2426   {   1, &hf_tetra_proprietary_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_7 },
2427   { 0, NULL, 0, NULL }
2428 };
2429
2430 static int
2431 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_) {
2432   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2433                                  ett_tetra_T_proprietary_01, T_proprietary_01_choice,
2434                                  NULL);
2435
2436   return offset;
2437 }
2438
2439
2440 static const per_sequence_t T_type3_elements_01_sequence[] = {
2441   { &hf_tetra_type3_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_TYPE3_IDENTIFIER },
2442   { &hf_tetra_group_identity_location_demand, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_group_identity_location_demand },
2443   { &hf_tetra_group_report_response, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_group_report_response },
2444   { &hf_tetra_group_identity_uplink, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_group_identity_uplink },
2445   { &hf_tetra_proprietary_02, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_proprietary_01 },
2446   { NULL, 0, 0, NULL }
2447 };
2448
2449 static int
2450 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_) {
2451   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2452                                    ett_tetra_T_type3_elements_01, T_type3_elements_01_sequence);
2453
2454   return offset;
2455 }
2456
2457
2458 static const value_string tetra_T_type3_01_vals[] = {
2459   {   0, "no-type3" },
2460   {   1, "type3-elements" },
2461   { 0, NULL }
2462 };
2463
2464 static const per_choice_t T_type3_01_choice[] = {
2465   {   0, &hf_tetra_no_type3      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2466   {   1, &hf_tetra_type3_elements_01, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type3_elements_01 },
2467   { 0, NULL, 0, NULL }
2468 };
2469
2470 static int
2471 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_) {
2472   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2473                                  ett_tetra_T_type3_01, T_type3_01_choice,
2474                                  NULL);
2475
2476   return offset;
2477 }
2478
2479
2480 static const per_sequence_t T_type2_parameters_04_sequence[] = {
2481   { &hf_tetra_energy_saving_mode_02, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_energy_saving_mode_01 },
2482   { &hf_tetra_la_information, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_la_information },
2483   { &hf_tetra_ssi_04        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_ssi_01 },
2484   { &hf_tetra_address_extension_02, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_address_extension_01 },
2485   { &hf_tetra_type3_01      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_type3_01 },
2486   { NULL, 0, 0, NULL }
2487 };
2488
2489 static int
2490 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_) {
2491   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2492                                    ett_tetra_T_type2_parameters_04, T_type2_parameters_04_sequence);
2493
2494   return offset;
2495 }
2496
2497
2498 static const value_string tetra_T_optional_elements_06_vals[] = {
2499   {   0, "no-type2" },
2500   {   1, "type2-parameters" },
2501   { 0, NULL }
2502 };
2503
2504 static const per_choice_t T_optional_elements_06_choice[] = {
2505   {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2506   {   1, &hf_tetra_type2_parameters_04, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_parameters_04 },
2507   { 0, NULL, 0, NULL }
2508 };
2509
2510 static int
2511 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_) {
2512   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2513                                  ett_tetra_T_optional_elements_06, T_optional_elements_06_choice,
2514                                  NULL);
2515
2516   return offset;
2517 }
2518
2519
2520 static const per_sequence_t U_LOCATION_UPDATE_DEMAND_sequence[] = {
2521   { &hf_tetra_location_update_type, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_UPDATE_TYPE },
2522   { &hf_tetra_request_to_append_LA, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
2523   { &hf_tetra_cipher_control_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_cipher_control },
2524   { &hf_tetra_class_of_MS   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_OCTET_STRING_SIZE_4 },
2525   { &hf_tetra_optional_elements_06, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_06 },
2526   { NULL, 0, 0, NULL }
2527 };
2528
2529 int
2530 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_) {
2531 #line 93 "../../asn1/tetra/tetra.cnf"
2532   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2533                                    ett_tetra_U_LOCATION_UPDATE_DEMAND, U_LOCATION_UPDATE_DEMAND_sequence);
2534
2535         col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-LOCATION-UPDATE-DEMAND");
2536
2537
2538   return offset;
2539 }
2540
2541
2542 static const value_string tetra_T_scanning_on_off_vals[] = {
2543   {   0, "on" },
2544   {   1, "off" },
2545   { 0, NULL }
2546 };
2547
2548
2549 static int
2550 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_) {
2551   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2552                                      2, NULL, FALSE, 0, NULL);
2553
2554   return offset;
2555 }
2556
2557
2558 static const per_sequence_t U_MM_STATUS_sequence[] = {
2559   { &hf_tetra_status_uplink , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_63 },
2560   { &hf_tetra_scanning_on_off, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_scanning_on_off },
2561   { NULL, 0, 0, NULL }
2562 };
2563
2564 int
2565 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_) {
2566 #line 229 "../../asn1/tetra/tetra.cnf"
2567   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2568                                    ett_tetra_U_MM_STATUS, U_MM_STATUS_sequence);
2569
2570         col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-MM-STATUS");
2571
2572
2573   return offset;
2574 }
2575
2576
2577
2578 static int
2579 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_) {
2580   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
2581                                                             0U, 2047U, NULL, FALSE);
2582
2583   return offset;
2584 }
2585
2586
2587 static const per_sequence_t T_attach_01_sequence[] = {
2588   { &hf_tetra_class_of_usage, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
2589   { NULL, 0, 0, NULL }
2590 };
2591
2592 static int
2593 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_) {
2594   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2595                                    ett_tetra_T_attach_01, T_attach_01_sequence);
2596
2597   return offset;
2598 }
2599
2600
2601 static const value_string tetra_T_detach_uplike_vals[] = {
2602   {   0, "unknow-gssi" },
2603   {   1, "unvaild-cipher" },
2604   {   2, "user-intitial" },
2605   {   3, "reseverd" },
2606   { 0, NULL }
2607 };
2608
2609
2610 static int
2611 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_) {
2612   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2613                                      4, NULL, FALSE, 0, NULL);
2614
2615   return offset;
2616 }
2617
2618
2619 static const per_sequence_t T_detach_01_sequence[] = {
2620   { &hf_tetra_detach_uplike , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_detach_uplike },
2621   { NULL, 0, 0, NULL }
2622 };
2623
2624 static int
2625 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_) {
2626   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2627                                    ett_tetra_T_detach_01, T_detach_01_sequence);
2628
2629   return offset;
2630 }
2631
2632
2633 static const value_string tetra_T_attach_detach_identifiet_01_vals[] = {
2634   {   0, "attach" },
2635   {   1, "detach" },
2636   { 0, NULL }
2637 };
2638
2639 static const per_choice_t T_attach_detach_identifiet_01_choice[] = {
2640   {   0, &hf_tetra_attach_01     , ASN1_NO_EXTENSIONS     , dissect_tetra_T_attach_01 },
2641   {   1, &hf_tetra_detach_01     , ASN1_NO_EXTENSIONS     , dissect_tetra_T_detach_01 },
2642   { 0, NULL, 0, NULL }
2643 };
2644
2645 static int
2646 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_) {
2647   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2648                                  ett_tetra_T_attach_detach_identifiet_01, T_attach_detach_identifiet_01_choice,
2649                                  NULL);
2650
2651   return offset;
2652 }
2653
2654
2655 static const per_sequence_t T_gssi_extension_01_sequence[] = {
2656   { &hf_tetra_gssi_01       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_OCTET_STRING_SIZE_3 },
2657   { &hf_tetra_extension     , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_OCTET_STRING_SIZE_3 },
2658   { NULL, 0, 0, NULL }
2659 };
2660
2661 static int
2662 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_) {
2663   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2664                                    ett_tetra_T_gssi_extension_01, T_gssi_extension_01_sequence);
2665
2666   return offset;
2667 }
2668
2669
2670 static const value_string tetra_T_address_type_01_vals[] = {
2671   {   0, "gssi" },
2672   {   1, "gssi-extension" },
2673   {   2, "vgssi" },
2674   { 0, NULL }
2675 };
2676
2677 static const per_choice_t T_address_type_01_choice[] = {
2678   {   0, &hf_tetra_gssi_01       , ASN1_NO_EXTENSIONS     , dissect_tetra_OCTET_STRING_SIZE_3 },
2679   {   1, &hf_tetra_gssi_extension_01, ASN1_NO_EXTENSIONS     , dissect_tetra_T_gssi_extension_01 },
2680   {   2, &hf_tetra_vgssi         , ASN1_NO_EXTENSIONS     , dissect_tetra_OCTET_STRING_SIZE_3 },
2681   { 0, NULL, 0, NULL }
2682 };
2683
2684 static int
2685 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_) {
2686   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2687                                  ett_tetra_T_address_type_01, T_address_type_01_choice,
2688                                  NULL);
2689
2690   return offset;
2691 }
2692
2693
2694 static const per_sequence_t GROUP_IDENTITY_UPLINK_sequence[] = {
2695   { &hf_tetra_attach_detach_identifiet_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_attach_detach_identifiet_01 },
2696   { &hf_tetra_address_type_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_address_type_01 },
2697   { NULL, 0, 0, NULL }
2698 };
2699
2700 static int
2701 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_) {
2702   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2703                                    ett_tetra_GROUP_IDENTITY_UPLINK, GROUP_IDENTITY_UPLINK_sequence);
2704
2705   return offset;
2706 }
2707
2708
2709 static const per_sequence_t T_type3_elements_02_sequence[] = {
2710   { &hf_tetra_type3_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_TYPE3_IDENTIFIER },
2711   { &hf_tetra_length        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_2047 },
2712   { &hf_tetra_repeat_num    , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_63 },
2713   { &hf_tetra_group_identity_uplink_02, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_GROUP_IDENTITY_UPLINK },
2714   { NULL, 0, 0, NULL }
2715 };
2716
2717 static int
2718 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_) {
2719   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2720                                    ett_tetra_T_type3_elements_02, T_type3_elements_02_sequence);
2721
2722   return offset;
2723 }
2724
2725
2726 static const value_string tetra_T_type3_02_vals[] = {
2727   {   0, "no-type3" },
2728   {   1, "type3-elements" },
2729   { 0, NULL }
2730 };
2731
2732 static const per_choice_t T_type3_02_choice[] = {
2733   {   0, &hf_tetra_no_type3      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2734   {   1, &hf_tetra_type3_elements_02, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type3_elements_02 },
2735   { 0, NULL, 0, NULL }
2736 };
2737
2738 static int
2739 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_) {
2740   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2741                                  ett_tetra_T_type3_02, T_type3_02_choice,
2742                                  NULL);
2743
2744   return offset;
2745 }
2746
2747
2748 static const per_sequence_t T_type2_element_sequence[] = {
2749   { &hf_tetra_type3_02      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_type3_02 },
2750   { NULL, 0, 0, NULL }
2751 };
2752
2753 static int
2754 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_) {
2755   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2756                                    ett_tetra_T_type2_element, T_type2_element_sequence);
2757
2758   return offset;
2759 }
2760
2761
2762 static const value_string tetra_T_optional_elements_07_vals[] = {
2763   {   0, "no-type2" },
2764   {   1, "type2-element" },
2765   { 0, NULL }
2766 };
2767
2768 static const per_choice_t T_optional_elements_07_choice[] = {
2769   {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2770   {   1, &hf_tetra_type2_element , ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_element },
2771   { 0, NULL, 0, NULL }
2772 };
2773
2774 static int
2775 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_) {
2776   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2777                                  ett_tetra_T_optional_elements_07, T_optional_elements_07_choice,
2778                                  NULL);
2779
2780   return offset;
2781 }
2782
2783
2784 static const per_sequence_t U_ATTACH_DETACH_GROUP_IDENTITY_sequence[] = {
2785   { &hf_tetra_group_identity_report, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
2786   { &hf_tetra_group_identity_attach_detach_mode, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
2787   { &hf_tetra_optional_elements_07, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_07 },
2788   { NULL, 0, 0, NULL }
2789 };
2790
2791 int
2792 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_) {
2793 #line 239 "../../asn1/tetra/tetra.cnf"
2794   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2795                                    ett_tetra_U_ATTACH_DETACH_GROUP_IDENTITY, U_ATTACH_DETACH_GROUP_IDENTITY_sequence);
2796
2797         col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-ATTACH-DETACH-GROUP-IDENTITY");
2798
2799
2800   return offset;
2801 }
2802
2803
2804 static const per_sequence_t T_type3_elements_03_sequence[] = {
2805   { &hf_tetra_type3_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_TYPE3_IDENTIFIER },
2806   { &hf_tetra_length        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_2047 },
2807   { &hf_tetra_repeat_num    , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_63 },
2808   { &hf_tetra_group_identity_uplink_02, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_GROUP_IDENTITY_UPLINK },
2809   { NULL, 0, 0, NULL }
2810 };
2811
2812 static int
2813 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_) {
2814   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2815                                    ett_tetra_T_type3_elements_03, T_type3_elements_03_sequence);
2816
2817   return offset;
2818 }
2819
2820
2821 static const value_string tetra_T_type3_03_vals[] = {
2822   {   0, "no-type3" },
2823   {   1, "type3-elements" },
2824   { 0, NULL }
2825 };
2826
2827 static const per_choice_t T_type3_03_choice[] = {
2828   {   0, &hf_tetra_no_type3      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2829   {   1, &hf_tetra_type3_elements_03, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type3_elements_03 },
2830   { 0, NULL, 0, NULL }
2831 };
2832
2833 static int
2834 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_) {
2835   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2836                                  ett_tetra_T_type3_03, T_type3_03_choice,
2837                                  NULL);
2838
2839   return offset;
2840 }
2841
2842
2843 static const per_sequence_t T_type2_element_01_sequence[] = {
2844   { &hf_tetra_type3_03      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_type3_03 },
2845   { NULL, 0, 0, NULL }
2846 };
2847
2848 static int
2849 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_) {
2850   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2851                                    ett_tetra_T_type2_element_01, T_type2_element_01_sequence);
2852
2853   return offset;
2854 }
2855
2856
2857 static const value_string tetra_T_optional_elements_08_vals[] = {
2858   {   0, "no-type2" },
2859   {   1, "type2-element" },
2860   { 0, NULL }
2861 };
2862
2863 static const per_choice_t T_optional_elements_08_choice[] = {
2864   {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2865   {   1, &hf_tetra_type2_element_01, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_element_01 },
2866   { 0, NULL, 0, NULL }
2867 };
2868
2869 static int
2870 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_) {
2871   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2872                                  ett_tetra_T_optional_elements_08, T_optional_elements_08_choice,
2873                                  NULL);
2874
2875   return offset;
2876 }
2877
2878
2879 static const per_sequence_t U_ATTACH_DETACH_GROUP_IDENTITY_ACK_sequence[] = {
2880   { &hf_tetra_group_identity_ack_type, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
2881   { &hf_tetra_group_identity_attach_detach_mode, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
2882   { &hf_tetra_optional_elements_08, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_08 },
2883   { NULL, 0, 0, NULL }
2884 };
2885
2886 int
2887 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_) {
2888 #line 244 "../../asn1/tetra/tetra.cnf"
2889   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2890                                    ett_tetra_U_ATTACH_DETACH_GROUP_IDENTITY_ACK, U_ATTACH_DETACH_GROUP_IDENTITY_ACK_sequence);
2891
2892                 col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-ATTACH-DETACH-GROUP-IDENTITY-ACK");
2893
2894
2895   return offset;
2896 }
2897
2898
2899 static const value_string tetra_U_MM_PDU_vals[] = {
2900   {   0, "u-Authentication" },
2901   {   1, "u-Itsi-Detach" },
2902   {   2, "u-Location-Update-Demand" },
2903   {   3, "u-MM-Status" },
2904   {   4, "u-MM-reserved1" },
2905   {   5, "u-WK" },
2906   {   6, "u-MM-reserved3" },
2907   {   7, "u-Attach-Detach-Group-Identity" },
2908   {   8, "u-Attach-Detach-Group-Identity-Ack" },
2909   {   9, "u-TEI-Provide" },
2910   {  10, "u-MM-reserved6" },
2911   {  11, "u-Disabled-Status" },
2912   {  12, "u-MM-reserved7" },
2913   {  13, "u-MM-reserved8" },
2914   {  14, "u-MM-reserved9" },
2915   {  15, "u-MM-Function-Not-Support" },
2916   { 0, NULL }
2917 };
2918
2919 static const per_choice_t U_MM_PDU_choice[] = {
2920   {   0, &hf_tetra_u_Authentication, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2921   {   1, &hf_tetra_u_Itsi_Detach , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2922   {   2, &hf_tetra_u_Location_Update_Demand, ASN1_NO_EXTENSIONS     , dissect_tetra_U_LOCATION_UPDATE_DEMAND },
2923   {   3, &hf_tetra_u_MM_Status   , ASN1_NO_EXTENSIONS     , dissect_tetra_U_MM_STATUS },
2924   {   4, &hf_tetra_u_MM_reserved1, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2925   {   5, &hf_tetra_u_WK          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2926   {   6, &hf_tetra_u_MM_reserved3, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2927   {   7, &hf_tetra_u_Attach_Detach_Group_Identity, ASN1_NO_EXTENSIONS     , dissect_tetra_U_ATTACH_DETACH_GROUP_IDENTITY },
2928   {   8, &hf_tetra_u_Attach_Detach_Group_Identity_Ack, ASN1_NO_EXTENSIONS     , dissect_tetra_U_ATTACH_DETACH_GROUP_IDENTITY_ACK },
2929   {   9, &hf_tetra_u_TEI_Provide , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2930   {  10, &hf_tetra_u_MM_reserved6, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2931   {  11, &hf_tetra_u_Disabled_Status, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2932   {  12, &hf_tetra_u_MM_reserved7, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2933   {  13, &hf_tetra_u_MM_reserved8, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2934   {  14, &hf_tetra_u_MM_reserved9, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2935   {  15, &hf_tetra_u_MM_Function_Not_Support, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2936   { 0, NULL, 0, NULL }
2937 };
2938
2939 static int
2940 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_) {
2941   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2942                                  ett_tetra_U_MM_PDU, U_MM_PDU_choice,
2943                                  NULL);
2944
2945   return offset;
2946 }
2947
2948
2949 static const value_string tetra_T_simplex_duplex_selection_vals[] = {
2950   {   0, "simplex" },
2951   {   1, "duplex" },
2952   { 0, NULL }
2953 };
2954
2955
2956 static int
2957 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_) {
2958   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2959                                      2, NULL, FALSE, 0, NULL);
2960
2961   return offset;
2962 }
2963
2964
2965 static const value_string tetra_CIRCUIT_vals[] = {
2966   {   0, "speech-tch-s" },
2967   {   1, "unprotected-tch-7-2" },
2968   {   2, "low-protection-tch-4-8" },
2969   {   3, "low-protection-tch-4-8" },
2970   {   4, "low-protection-tch-4-8" },
2971   {   5, "high-protection-tch-2-4" },
2972   {   6, "high-protection-tch-2-4" },
2973   {   7, "high-protection-tch-2-4" },
2974   { 0, NULL }
2975 };
2976
2977
2978 static int
2979 dissect_tetra_CIRCUIT(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2980   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2981                                      8, NULL, FALSE, 0, NULL);
2982
2983   return offset;
2984 }
2985
2986
2987 static const per_sequence_t Basic_service_information_sequence[] = {
2988   { &hf_tetra_circuit_mode  , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_CIRCUIT },
2989   { &hf_tetra_encryption    , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
2990   { &hf_tetra_communication , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
2991   { &hf_tetra_slots_or_speech, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
2992   { NULL, 0, 0, NULL }
2993 };
2994
2995 static int
2996 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_) {
2997   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2998                                    ett_tetra_Basic_service_information, Basic_service_information_sequence);
2999
3000   return offset;
3001 }
3002
3003
3004 static const value_string tetra_T_basic_service_information_vals[] = {
3005   {   0, "none" },
3006   {   1, "basic-service-information" },
3007   { 0, NULL }
3008 };
3009
3010 static const per_choice_t T_basic_service_information_choice[] = {
3011   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
3012   {   1, &hf_tetra_basic_service_information, ASN1_NO_EXTENSIONS     , dissect_tetra_Basic_service_information },
3013   { 0, NULL, 0, NULL }
3014 };
3015
3016 static int
3017 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_) {
3018   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3019                                  ett_tetra_T_basic_service_information, T_basic_service_information_choice,
3020                                  NULL);
3021
3022   return offset;
3023 }
3024
3025
3026
3027 static int
3028 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_) {
3029   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
3030                                                             0U, 255U, NULL, FALSE);
3031
3032   return offset;
3033 }
3034
3035
3036
3037 static int
3038 dissect_tetra_BIT_STRING(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3039   offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
3040                                      NO_BOUND, NO_BOUND, FALSE, NULL);
3041
3042   return offset;
3043 }
3044
3045
3046 static const per_sequence_t Type1_sequence[] = {
3047   { &hf_tetra_proprietary_element_owner, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Proprietary_element_owner },
3048   { &hf_tetra_proprietary_element_owner_extension, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BIT_STRING },
3049   { NULL, 0, 0, NULL }
3050 };
3051
3052 static int
3053 dissect_tetra_Type1(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3054   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3055                                    ett_tetra_Type1, Type1_sequence);
3056
3057   return offset;
3058 }
3059
3060
3061 static const per_sequence_t Type2_sequence[] = {
3062   { &hf_tetra_proprietary_element_owner, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Proprietary_element_owner },
3063   { NULL, 0, 0, NULL }
3064 };
3065
3066 static int
3067 dissect_tetra_Type2(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3068   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3069                                    ett_tetra_Type2, Type2_sequence);
3070
3071   return offset;
3072 }
3073
3074
3075 static const value_string tetra_T_data_01_vals[] = {
3076   {   0, "element1" },
3077   {   1, "element" },
3078   { 0, NULL }
3079 };
3080
3081 static const per_choice_t T_data_01_choice[] = {
3082   {   0, &hf_tetra_element1      , ASN1_NO_EXTENSIONS     , dissect_tetra_Type1 },
3083   {   1, &hf_tetra_element       , ASN1_NO_EXTENSIONS     , dissect_tetra_Type2 },
3084   { 0, NULL, 0, NULL }
3085 };
3086
3087 static int
3088 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_) {
3089   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3090                                  ett_tetra_T_data_01, T_data_01_choice,
3091                                  NULL);
3092
3093   return offset;
3094 }
3095
3096
3097 static const per_sequence_t Proprietary_sequence[] = {
3098   { &hf_tetra_data_01       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_data_01 },
3099   { NULL, 0, 0, NULL }
3100 };
3101
3102 static int
3103 dissect_tetra_Proprietary(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3104   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3105                                    ett_tetra_Proprietary, Proprietary_sequence);
3106
3107   return offset;
3108 }
3109
3110
3111 static const value_string tetra_T_prop_01_vals[] = {
3112   {   0, "none" },
3113   {   1, "prop" },
3114   { 0, NULL }
3115 };
3116
3117 static const per_choice_t T_prop_01_choice[] = {
3118   {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
3119   {   1, &hf_tetra_prop_01       , ASN1_NO_EXTENSIONS     , dissect_tetra_Proprietary },
3120   { 0, NULL, 0, NULL }
3121 };
3122
3123 static int
3124 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_) {
3125   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3126                                  ett_tetra_T_prop_01, T_prop_01_choice,
3127                                  NULL);
3128
3129   return offset;
3130 }
3131
3132
3133 static const per_sequence_t T_type2_parameters_06_sequence[] = {
3134   { &hf_tetra_basic_service_information_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_basic_service_information },
3135   { &hf_tetra_prop_02       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop_01 },
3136   { NULL, 0, 0, NULL }
3137 };
3138
3139 static int
3140 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_) {
3141   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3142                                    ett_tetra_T_type2_parameters_06, T_type2_parameters_06_sequence);
3143
3144   return offset;
3145 }
3146
3147
3148 static const value_string tetra_T_optional_elements_10_vals[] = {
3149   {   0, "no-type2" },
3150   {   1, "type2-parameters" },
3151   { 0, NULL }
3152 };
3153
3154 static const per_choice_t T_optional_elements_10_choice[] = {
3155   {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
3156   {   1, &hf_tetra_type2_parameters_06, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_parameters_06 },
3157   { 0, NULL, 0, NULL }
3158 };
3159
3160 static int
3161 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_) {
3162   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3163                                  ett_tetra_T_optional_elements_10, T_optional_elements_10_choice,
3164                                  NULL);
3165
3166   return offset;
3167 }
3168
3169
3170 static const per_sequence_t U_ALERT_sequence[] = {
3171   { &hf_tetra_call_identifier_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1023 },
3172   { &hf_tetra_reserved_01   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
3173   { &hf_tetra_simplex_duplex_selection, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_simplex_duplex_selection },
3174   { &hf_tetra_optional_elements_10, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_10 },
3175   { NULL, 0, 0, NULL }
3176 };
3177
3178 int
3179 dissect_tetra_U_ALERT(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3180 #line 178 "../../asn1/tetra/tetra.cnf"
3181   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3182                                    ett_tetra_U_ALERT, U_ALERT_sequence);
3183
3184         col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-ALERT");
3185
3186
3187   return offset;
3188 }
3189
3190
3191 static const value_string tetra_T_simplex_duplex_selection_01_vals[] = {
3192   {   0, "simplex" },
3193   {   1, "duplex" },
3194   { 0, NULL }
3195 };
3196
3197
3198 static int
3199 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_) {
3200   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
3201                                      2, NULL, FALSE, 0, NULL);
3202
3203   return offset;
3204 }