Coverage Report

Created: 2026-11-12 07:01

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/wireshark/epan/dissectors/packet-tetra.c
Line
Count
Source
1
/* Do not modify this file. Changes will be overwritten.                      */
2
/* Generated automatically by the ASN.1 to Wireshark dissector compiler       */
3
/* packet-tetra.c                                                             */
4
/* asn2wrs.py -u -q -L -p tetra -c ./tetra.cnf -s ./packet-tetra-template -D . -O ../.. tetra.asn */
5
6
/* packet-tetra.c
7
 * Routines for TETRA packet dissection
8
 *
9
 * Copyright (c) 2007 - 2011 Professional Mobile Communication Research Group,
10
 *    Beijing Institute of Technology, China
11
 * Copyright (c) 2011 Holger Hans Peter Freyther
12
 *
13
 * Wireshark - Network traffic analyzer
14
 * By Gerald Combs <gerald@wireshark.org>
15
 * Copyright 1998 Gerald Combs
16
 *
17
 * SPDX-License-Identifier: GPL-2.0-or-later
18
 *
19
 * REF: ETSI EN 300 392-2 V3.2.1
20
 */
21
22
#include "config.h"
23
24
#include <epan/packet.h>
25
#include <epan/expert.h>
26
#include <epan/prefs.h>
27
#include <epan/oids.h>
28
#include <epan/conversation.h>
29
#include <epan/asn1.h>
30
#include <wsutil/array.h>
31
32
#include "packet-per.h"
33
#include "packet-tetra.h"
34
35
void proto_register_tetra(void);
36
void proto_reg_handoff_tetra(void);
37
38
/* Wireshark ID of the tetra protocol */
39
static int proto_tetra;
40
41
static dissector_handle_t tetra_handle;
42
43
16
#define TETRA_UDP_PORT  7074 /* Not IANA assigned */
44
45
/* Whether the capture data include carrier numbers */
46
static bool include_carrier_number = true;
47
48
/* The following hf_* variables are used to hold the Wireshark IDs of
49
* our header fields; they are filled out when we call
50
* proto_register_field_array() in proto_register_tetra()
51
*/
52
/** Kts attempt at defining the protocol */
53
static int hf_tetra_header;
54
static int hf_tetra_channels;
55
static int hf_tetra_channel1;
56
static int hf_tetra_channel2;
57
static int hf_tetra_channel3;
58
static int hf_tetra_txreg;
59
static int hf_tetra_timer;
60
static int hf_tetra_pdu;
61
static int hf_tetra_rvstr;
62
static int hf_tetra_carriernumber;
63
static int hf_tetra_rxchannel1;
64
static int hf_tetra_rxchannel2;
65
static int hf_tetra_rxchannel3;
66
static int hf_tetra_crc;
67
static int hf_tetra_len0;
68
69
static int hf_tetra_AACH_PDU;                     /* AACH */
70
static int hf_tetra_BSCH_PDU;                     /* BSCH */
71
static int hf_tetra_BNCH_PDU;                     /* BNCH */
72
static int hf_tetra_MAC_ACCESS_PDU;               /* MAC_ACCESS */
73
static int hf_tetra_MAC_DATA_PDU;                 /* MAC_DATA */
74
static int hf_tetra_MAC_FRAG_PDU;                 /* MAC_FRAG */
75
static int hf_tetra_MAC_FRAG120_PDU;              /* MAC_FRAG120 */
76
static int hf_tetra_MAC_END_UPLINK_PDU;           /* MAC_END_UPLINK */
77
static int hf_tetra_MAC_END_UP114_PDU;            /* MAC_END_UP114 */
78
static int hf_tetra_MAC_END_HU_PDU;               /* MAC_END_HU */
79
static int hf_tetra_MAC_END_DOWNLINK_PDU;         /* MAC_END_DOWNLINK */
80
static int hf_tetra_MAC_END_DOWN111_PDU;          /* MAC_END_DOWN111 */
81
static int hf_tetra_MAC_RESOURCE_PDU;             /* MAC_RESOURCE */
82
static int hf_tetra_MAC_ACCESS_DEFINE_PDU;        /* MAC_ACCESS_DEFINE */
83
static int hf_tetra_function;                     /* INTEGER_0_3 */
84
static int hf_tetra_field1;                       /* INTEGER_0_63 */
85
static int hf_tetra_field2;                       /* INTEGER_0_63 */
86
static int hf_tetra_system_code;                  /* System_Code */
87
static int hf_tetra_colour_code;                  /* Colour_Code */
88
static int hf_tetra_timeslot_number;              /* Timeslot_Number */
89
static int hf_tetra_frame_number;                 /* Frame_Number */
90
static int hf_tetra_multiple_frame_number;        /* Multiple_Frame_Number */
91
static int hf_tetra_sharing_mod;                  /* Sharing_Mod */
92
static int hf_tetra_ts_reserved_frames;           /* TS_Reserved_Frames */
93
static int hf_tetra_u_plane_dtx;                  /* U_Plane_DTX */
94
static int hf_tetra_frame_18_extension;           /* Frame_18_Extension */
95
static int hf_tetra_reserved;                     /* Reserved */
96
static int hf_tetra_tm_sdu;                       /* MLE_Sync */
97
static int hf_tetra_mcc;                          /* INTEGER_0_1023 */
98
static int hf_tetra_mnc;                          /* INTEGER_0_16383 */
99
static int hf_tetra_neighbour_cell_broadcast;     /* INTEGER_0_3 */
100
static int hf_tetra_cell_service_level;           /* INTEGER_0_3 */
101
static int hf_tetra_late_entry_information;       /* INTEGER_0_1 */
102
static int hf_tetra_pdu_type;                     /* INTEGER_0_3 */
103
static int hf_tetra_broadcast_type;               /* INTEGER_0_3 */
104
static int hf_tetra_main_carrier;                 /* INTEGER_0_4095 */
105
static int hf_tetra_frequency_band;               /* INTEGER_0_15 */
106
static int hf_tetra_offset;                       /* Offset */
107
static int hf_tetra_duplex_spacing;               /* INTEGER_0_7 */
108
static int hf_tetra_reverse_operation;            /* Reverse_Operation */
109
static int hf_tetra_sencond_ctl_carrier;          /* Sencond_Ctl_Carrier */
110
static int hf_tetra_ms_txpwr_max_cell;            /* MS_TXPWR_MAX_CELL */
111
static int hf_tetra_rxlev_access_min;             /* RXLEV_ACCESS_MIN */
112
static int hf_tetra_access_parameter;             /* ACCESS_PARAMETER */
113
static int hf_tetra_radio_downlink_timeout;       /* RADIO_DOWNLINK_TIMEOUT */
114
static int hf_tetra_hyperframe_or_cck;            /* T_hyperframe_or_cck */
115
static int hf_tetra_hyperframe;                   /* INTEGER_0_65535 */
116
static int hf_tetra_cckid;                        /* INTEGER_0_65535 */
117
static int hf_tetra_optional_params;              /* T_optional_params */
118
static int hf_tetra_even_multiframe;              /* TS_COMMON_FRAMES */
119
static int hf_tetra_odd_multiframe;               /* TS_COMMON_FRAMES */
120
static int hf_tetra_access_a_code;                /* Default_Code_A */
121
static int hf_tetra_extend_service;               /* Extended_Services_Broadcast */
122
static int hf_tetra_la;                           /* INTEGER_0_16383 */
123
static int hf_tetra_subscriber_class;             /* Subscriber_class */
124
static int hf_tetra_registriation;                /* INTEGER_0_1 */
125
static int hf_tetra_de_registration;              /* INTEGER_0_1 */
126
static int hf_tetra_priority_cell;                /* INTEGER_0_1 */
127
static int hf_tetra_minimum_mode_service;         /* INTEGER_0_1 */
128
static int hf_tetra_migration;                    /* INTEGER_0_1 */
129
static int hf_tetra_system_wide_service;          /* INTEGER_0_1 */
130
static int hf_tetra_tetra_voice_service;          /* INTEGER_0_1 */
131
static int hf_tetra_circuit_mode_data_service;    /* INTEGER_0_1 */
132
static int hf_tetra_reserved_01;                  /* INTEGER_0_1 */
133
static int hf_tetra_sndcp_service;                /* INTEGER_0_1 */
134
static int hf_tetra_air_interface_encryption;     /* INTEGER_0_1 */
135
static int hf_tetra_advanced_link_support;        /* INTEGER_0_1 */
136
static int hf_tetra_frame1;                       /* FRAME */
137
static int hf_tetra_frame2;                       /* FRAME */
138
static int hf_tetra_frame3;                       /* FRAME */
139
static int hf_tetra_frame4;                       /* FRAME */
140
static int hf_tetra_frame5;                       /* FRAME */
141
static int hf_tetra_frame6;                       /* FRAME */
142
static int hf_tetra_frame7;                       /* FRAME */
143
static int hf_tetra_frame8;                       /* FRAME */
144
static int hf_tetra_frame9;                       /* FRAME */
145
static int hf_tetra_frame10;                      /* FRAME */
146
static int hf_tetra_frame11;                      /* FRAME */
147
static int hf_tetra_frame12;                      /* FRAME */
148
static int hf_tetra_frame13;                      /* FRAME */
149
static int hf_tetra_frame14;                      /* FRAME */
150
static int hf_tetra_frame15;                      /* FRAME */
151
static int hf_tetra_frame16;                      /* FRAME */
152
static int hf_tetra_frame17;                      /* FRAME */
153
static int hf_tetra_frame18;                      /* FRAME */
154
static int hf_tetra_imm;                          /* IMM */
155
static int hf_tetra_wt;                           /* WT */
156
static int hf_tetra_nu;                           /* NU */
157
static int hf_tetra_frame_len_factor;             /* Frame_Len_Factor */
158
static int hf_tetra_timeslot_pointer;             /* Timeslot_Pointer */
159
static int hf_tetra_min_pdu_priority;             /* Min_Pdu_Priority */
160
static int hf_tetra_security_information;         /* INTEGER_0_255 */
161
static int hf_tetra_sds_tl_addressing_method;     /* SDS_TL_Addressing_Method */
162
static int hf_tetra_gck_supported;                /* INTEGER_0_1 */
163
static int hf_tetra_section;                      /* T_section */
164
static int hf_tetra_present_1;                    /* PRESENT1 */
165
static int hf_tetra_present_2;                    /* INTEGER_0_127 */
166
static int hf_tetra_present_3;                    /* INTEGER_0_127 */
167
static int hf_tetra_present_4;                    /* INTEGER_0_127 */
168
static int hf_tetra_data_priority_supported;      /* Data_Priority_Supported */
169
static int hf_tetra_reserved_02;                  /* INTEGER_0_7 */
170
static int hf_tetra_section_2_information;        /* Section_Information */
171
static int hf_tetra_section_3_information;        /* Section_Information */
172
static int hf_tetra_section_4_information;        /* Section_Information */
173
static int hf_tetra_pdu_type_01;                  /* INTEGER_0_1 */
174
static int hf_tetra_fill_bit_indication;          /* Fill_Bit_Indication */
175
static int hf_tetra_encrypted_flag;               /* Encrypted_Flag */
176
static int hf_tetra_address;                      /* Address */
177
static int hf_tetra_data;                         /* T_data */
178
static int hf_tetra_sdu1;                         /* U_LLC_PDU */
179
static int hf_tetra_sdu2;                         /* ComplexSDU */
180
static int hf_tetra_ssi;                          /* INTEGER_0_16777215 */
181
static int hf_tetra_eventLabel;                   /* INTEGER_0_1023 */
182
static int hf_tetra_ussi;                         /* INTEGER_0_16777215 */
183
static int hf_tetra_smi;                          /* INTEGER_0_16777215 */
184
static int hf_tetra_bl_adata;                     /* U_BL_ADATA */
185
static int hf_tetra_bl_data;                      /* U_BL_DATA */
186
static int hf_tetra_bl_udata;                     /* U_MLE_PDU */
187
static int hf_tetra_bl_ack;                       /* U_BL_ACK */
188
static int hf_tetra_bl_adata_fcs;                 /* U_BL_ADATA_FCS */
189
static int hf_tetra_bl_data_fcs;                  /* U_BL_DATA_FCS */
190
static int hf_tetra_bl_udata_fcs;                 /* U_MLE_PDU_FCS */
191
static int hf_tetra_bl_ack_fcs;                   /* U_BL_ACK_FCS */
192
static int hf_tetra_al_setup;                     /* NULL */
193
static int hf_tetra_al_data;                      /* NULL */
194
static int hf_tetra_al_udata;                     /* NULL */
195
static int hf_tetra_al_ack;                       /* NULL */
196
static int hf_tetra_al_reconnect;                 /* NULL */
197
static int hf_tetra_reserve1;                     /* NULL */
198
static int hf_tetra_reserve2;                     /* NULL */
199
static int hf_tetra_al_disc;                      /* NULL */
200
static int hf_tetra_nr;                           /* INTEGER_0_1 */
201
static int hf_tetra_tl_sdu;                       /* U_MLE_PDU */
202
static int hf_tetra_fcs;                          /* OCTET_STRING_SIZE_4 */
203
static int hf_tetra_u_mle_pdu;                    /* U_MLE_PDU */
204
static int hf_tetra_ns;                           /* INTEGER_0_1 */
205
static int hf_tetra_u_mle_reserved1;              /* NULL */
206
static int hf_tetra_mm;                           /* U_MM_PDU */
207
static int hf_tetra_cmce;                         /* U_CMCE_PDU */
208
static int hf_tetra_u_mle_reserved2;              /* NULL */
209
static int hf_tetra_sndcp;                        /* NULL */
210
static int hf_tetra_mle;                          /* UMLE_PDU */
211
static int hf_tetra_tetra_management_entity_protocol;  /* NULL */
212
static int hf_tetra_u_mle_reserved3;              /* NULL */
213
static int hf_tetra_lengthIndicationOrCapacityRequest;  /* T_lengthIndicationOrCapacityRequest */
214
static int hf_tetra_lengthIndication;             /* LengthIndication */
215
static int hf_tetra_capacityRequest;              /* FRAG */
216
static int hf_tetra_tm_sdu_01;                    /* U_LLC_PDU */
217
static int hf_tetra_frag;                         /* Frag1 */
218
static int hf_tetra_reservation_requirement;      /* SLOT_APPLY */
219
static int hf_tetra_lengthIndicationOrCapacityRequest_01;  /* T_lengthIndicationOrCapacityRequest_01 */
220
static int hf_tetra_lengthIndication_01;          /* LengthIndicationMacData */
221
static int hf_tetra_capacityRequest_01;           /* FRAG6 */
222
static int hf_tetra_sub_type;                     /* INTEGER_0_1 */
223
static int hf_tetra_tm_sdu_bit_str;               /* BIT_STRING_SIZE_264 */
224
static int hf_tetra_tm_sdu_bit_str_01;            /* BIT_STRING_SIZE_120 */
225
static int hf_tetra_lengthInd_ReservationReq;     /* LengthIndOrReservationReq */
226
static int hf_tetra_tm_sdu_bit_str_02;            /* BIT_STRING_SIZE_258 */
227
static int hf_tetra_pdu_subtype;                  /* INTEGER_0_1 */
228
static int hf_tetra_tm_sdu_bit_str_03;            /* BIT_STRING_SIZE_114 */
229
static int hf_tetra_lengthInd_ReservationReq_01;  /* T_lengthInd_ReservationReq */
230
static int hf_tetra_lengthInd;                    /* LengthIndMacHu */
231
static int hf_tetra_tm_sdu_bit_str_04;            /* BIT_STRING_SIZE_85 */
232
static int hf_tetra_position_of_grant;            /* Position_Of_Grant */
233
static int hf_tetra_lengthIndication_02;          /* LengthIndicationMacEndDl */
234
static int hf_tetra_slot_granting;                /* T_slot_granting */
235
static int hf_tetra_none;                         /* NULL */
236
static int hf_tetra_slot_granting_param;          /* SlotGranting */
237
static int hf_tetra_channel_allocation;           /* T_channel_allocation */
238
static int hf_tetra_channel_allocation_element;   /* ChannelAllocation */
239
static int hf_tetra_tm_sdu_bit_str_05;            /* BIT_STRING_SIZE_255 */
240
static int hf_tetra_capacity_allocation;          /* Capacity_Allocation */
241
static int hf_tetra_granting_delay;               /* Granting_delay */
242
static int hf_tetra_allocation_type;              /* T_allocation_type */
243
static int hf_tetra_timeslot_assigned;            /* Timeslot_Assigned */
244
static int hf_tetra_up_down_assigned;             /* T_up_down_assigned */
245
static int hf_tetra_clch_permission;              /* CLCH_permission */
246
static int hf_tetra_cell_change;                  /* Cell_change_flag */
247
static int hf_tetra_carrier_number;               /* INTEGER_0_4095 */
248
static int hf_tetra_extend_carrier_flag;          /* T_extend_carrier_flag */
249
static int hf_tetra_extended;                     /* Extended_carrier_flag */
250
static int hf_tetra_monitoring_pattern;           /* T_monitoring_pattern */
251
static int hf_tetra_one;                          /* Monitoring_pattern */
252
static int hf_tetra_none1;                        /* NULL */
253
static int hf_tetra_none2;                        /* NULL */
254
static int hf_tetra_none3;                        /* NULL */
255
static int hf_tetra_offset_01;                    /* INTEGER_0_3 */
256
static int hf_tetra_reverse_operation_01;         /* T_reverse_operation */
257
static int hf_tetra_pdu_type_02;                  /* INTEGER_0_7 */
258
static int hf_tetra_fill_bit_ind;                 /* BOOLEAN */
259
static int hf_tetra_position_of_grant_01;         /* INTEGER_0_1 */
260
static int hf_tetra_slot_granting_01;             /* T_slot_granting_01 */
261
static int hf_tetra_channel_allocation_01;        /* T_channel_allocation_01 */
262
static int hf_tetra_tm_sdu_bit_str_06;            /* BIT_STRING_SIZE_111 */
263
static int hf_tetra_encryption_mode;              /* INTEGER_0_3 */
264
static int hf_tetra_access_ack;                   /* T_access_ack */
265
static int hf_tetra_lengthIndication_03;          /* LengthIndicationMacResource */
266
static int hf_tetra_address_01;                   /* AddressMacResource */
267
static int hf_tetra_power_control;                /* T_power_control */
268
static int hf_tetra_powerParameters;              /* PowerControl */
269
static int hf_tetra_slot_granting_02;             /* T_slot_granting_02 */
270
static int hf_tetra_channel_allocation_02;        /* T_channel_allocation_02 */
271
static int hf_tetra_tm_sdu_02;                    /* D_LLC_PDU */
272
static int hf_tetra_null_pdu;                     /* NULL */
273
static int hf_tetra_ssi_need;                     /* SSI_NEED */
274
static int hf_tetra_eventLabel_01;                /* EVENT_NEED */
275
static int hf_tetra_ussi_01;                      /* USSI_NEED */
276
static int hf_tetra_smi_01;                       /* SMI_NEED */
277
static int hf_tetra_ssi_eventLabel;               /* SSI_EVENT_NEED */
278
static int hf_tetra_ssi_usage_maker;              /* SSI_USAGE_NEED */
279
static int hf_tetra_smi_eventLabel;               /* SMI_EVENT_NEED */
280
static int hf_tetra_other;                        /* OTHER_DATA */
281
static int hf_tetra_eventlabel;                   /* INTEGER_0_1023 */
282
static int hf_tetra_ventlabel;                    /* INTEGER_0_1023 */
283
static int hf_tetra_usage_maker;                  /* INTEGER_0_63 */
284
static int hf_tetra_smi_eventlabel;               /* BIT_STRING_SIZE_34 */
285
static int hf_tetra_broadcast_channel;            /* INTEGER_0_1 */
286
static int hf_tetra_access_code;                  /* INTEGER_0_3 */
287
static int hf_tetra_imm_01;                       /* INTEGER_0_15 */
288
static int hf_tetra_wt_01;                        /* INTEGER_0_15 */
289
static int hf_tetra_nu_01;                        /* INTEGER_0_15 */
290
static int hf_tetra_frame_len_factor_01;          /* INTEGER_0_1 */
291
static int hf_tetra_timeslot_pointer_01;          /* INTEGER_0_15 */
292
static int hf_tetra_min_priority;                 /* INTEGER_0_7 */
293
static int hf_tetra_optional_field;               /* T_optional_field */
294
static int hf_tetra_class_bitmap;                 /* INTEGER_0_65535 */
295
static int hf_tetra_gssi;                         /* INTEGER_0_33554431 */
296
static int hf_tetra_reserved_03;                  /* NULL */
297
static int hf_tetra_filler_bits;                  /* INTEGER_0_7 */
298
static int hf_tetra_bl_adata_01;                  /* D_BL_ADATA */
299
static int hf_tetra_bl_data_01;                   /* D_BL_DATA */
300
static int hf_tetra_bl_udata_01;                  /* D_MLE_PDU */
301
static int hf_tetra_bl_ack_01;                    /* D_BL_ACK */
302
static int hf_tetra_bl_adata_fcs_01;              /* D_BL_ADATA_FCS */
303
static int hf_tetra_bl_data_fcs_01;               /* D_BL_DATA_FCS */
304
static int hf_tetra_bl_udata_fcs_01;              /* D_MLE_PDU_FCS */
305
static int hf_tetra_bl_ack_fcs_01;                /* D_BL_ACK_FCS */
306
static int hf_tetra_tl_sdu_01;                    /* D_MLE_PDU */
307
static int hf_tetra_d_mle_pdu;                    /* D_MLE_PDU */
308
static int hf_tetra_mm_01;                        /* D_MM_PDU */
309
static int hf_tetra_cmce_01;                      /* D_CMCE_PDU */
310
static int hf_tetra_mle_01;                       /* DMLE_PDU */
311
static int hf_tetra_u_prepare;                    /* U_PREPARE */
312
static int hf_tetra_umle_reserved1;               /* NULL */
313
static int hf_tetra_umle_reserved2;               /* NULL */
314
static int hf_tetra_umle_reserved3;               /* NULL */
315
static int hf_tetra_u_restore;                    /* U_RESTORE */
316
static int hf_tetra_umle_reserved4;               /* NULL */
317
static int hf_tetra_umle_reserved5;               /* NULL */
318
static int hf_tetra_umle_reserved6;               /* NULL */
319
static int hf_tetra_d_new_cell;                   /* D_NEW_CELL */
320
static int hf_tetra_d_prepare_fail;               /* D_PREPARE_FAIL */
321
static int hf_tetra_d_nwrk_broadcast;             /* D_NWRK_BRDADCAST */
322
static int hf_tetra_dmle_reserved1;               /* NULL */
323
static int hf_tetra_d_restore_ack;                /* D_RESTORE_ACK */
324
static int hf_tetra_d_restore_fail;               /* D_RESTORE_FAIL */
325
static int hf_tetra_dmle_reserved2;               /* NULL */
326
static int hf_tetra_dmle_reserved3;               /* NULL */
327
static int hf_tetra_optional_elements;            /* T_optional_elements */
328
static int hf_tetra_no_type2;                     /* NULL */
329
static int hf_tetra_type2_parameters;             /* T_type2_parameters */
330
static int hf_tetra_cell_number;                  /* T_cell_number */
331
static int hf_tetra_cell_number_01;               /* INTEGER_0_65535 */
332
static int hf_tetra_sdu;                          /* BIT_STRING */
333
static int hf_tetra_optional_elements_01;         /* T_optional_elements_01 */
334
static int hf_tetra_type2_parameters_01;          /* T_type2_parameters_01 */
335
static int hf_tetra_mcc_01;                       /* T_mcc */
336
static int hf_tetra_mnc_01;                       /* T_mnc */
337
static int hf_tetra_la_01;                        /* T_la */
338
static int hf_tetra_channel_command_valid;        /* INTEGER_0_3 */
339
static int hf_tetra_optional_elements_02;         /* T_optional_elements_02 */
340
static int hf_tetra_fail_cause;                   /* INTEGER_0_3 */
341
static int hf_tetra_optional_elements_03;         /* T_optional_elements_03 */
342
static int hf_tetra_cell_re_select_parameters;    /* INTEGER_0_65535 */
343
static int hf_tetra_optional_elements_04;         /* T_optional_elements_04 */
344
static int hf_tetra_type2_parameters_02;          /* T_type2_parameters_02 */
345
static int hf_tetra_tetra_network_time;           /* T_tetra_network_time */
346
static int hf_tetra_tetra_network_time_01;        /* TETRA_NETWORK_TIME */
347
static int hf_tetra_number_of_neighbour_cells;    /* T_number_of_neighbour_cells */
348
static int hf_tetra_number_of_neighbour_cells_01;  /* INTEGER_0_7 */
349
static int hf_tetra_network_time;                 /* T_network_time */
350
static int hf_tetra_local_time_offset_sign;       /* INTEGER_0_1 */
351
static int hf_tetra_local_time_offset;            /* INTEGER_0_63 */
352
static int hf_tetra_year;                         /* INTEGER_0_63 */
353
static int hf_tetra_reserved_04;                  /* T_reserved */
354
static int hf_tetra_u_Authentication;             /* NULL */
355
static int hf_tetra_u_Itsi_Detach;                /* NULL */
356
static int hf_tetra_u_Location_Update_Demand;     /* U_LOCATION_UPDATE_DEMAND */
357
static int hf_tetra_u_MM_Status;                  /* U_MM_STATUS */
358
static int hf_tetra_u_MM_reserved1;               /* NULL */
359
static int hf_tetra_u_WK;                         /* NULL */
360
static int hf_tetra_u_MM_reserved3;               /* NULL */
361
static int hf_tetra_u_Attach_Detach_Group_Identity;  /* U_ATTACH_DETACH_GROUP_IDENTITY */
362
static int hf_tetra_u_Attach_Detach_Group_Identity_Ack;  /* U_ATTACH_DETACH_GROUP_IDENTITY_ACK */
363
static int hf_tetra_u_TEI_Provide;                /* NULL */
364
static int hf_tetra_u_MM_reserved6;               /* NULL */
365
static int hf_tetra_u_Disabled_Status;            /* NULL */
366
static int hf_tetra_u_MM_reserved7;               /* NULL */
367
static int hf_tetra_u_MM_reserved8;               /* NULL */
368
static int hf_tetra_u_MM_reserved9;               /* NULL */
369
static int hf_tetra_u_MM_Function_Not_Support;    /* NULL */
370
static int hf_tetra_d_Otar;                       /* NULL */
371
static int hf_tetra_d_Authentication;             /* NULL */
372
static int hf_tetra_d_Authentication_Reject;      /* NULL */
373
static int hf_tetra_d_Disable;                    /* NULL */
374
static int hf_tetra_d_Enable;                     /* NULL */
375
static int hf_tetra_d_Location_Update_Accept;     /* D_LOCATION_UPDATE_ACCEPT */
376
static int hf_tetra_d_Location_Update_Command;    /* NULL */
377
static int hf_tetra_d_Location_Update_Reject;     /* D_LOCATION_UPDATE_REJECT */
378
static int hf_tetra_d_MM_reserved2;               /* NULL */
379
static int hf_tetra_d_Location_Update_Proceeding;  /* NULL */
380
static int hf_tetra_d_Attach_Detach_Group_Identity;  /* D_ATTACH_DETACH_GROUP_IDENTITY */
381
static int hf_tetra_d_Attach_Detach_Group_Identity_Ack;  /* D_ATTACH_DETACH_GROUP_IDENTITY_ACK */
382
static int hf_tetra_d_MM_Status;                  /* D_MM_STATUS */
383
static int hf_tetra_d_MM_reserved5;               /* NULL */
384
static int hf_tetra_d_MM_reserved6;               /* NULL */
385
static int hf_tetra_d_MM_Function_Not_Support;    /* NULL */
386
static int hf_tetra_attach_detach_identifier;     /* T_attach_detach_identifier */
387
static int hf_tetra_attach;                       /* T_attach */
388
static int hf_tetra_lifetime;                     /* INTEGER_0_3 */
389
static int hf_tetra_class_of_usage;               /* INTEGER_0_7 */
390
static int hf_tetra_detach;                       /* T_detach */
391
static int hf_tetra_detach_downlike;              /* T_detach_downlike */
392
static int hf_tetra_address_type;                 /* T_address_type */
393
static int hf_tetra_gssi_oct_str;                 /* OCTET_STRING_SIZE_3 */
394
static int hf_tetra_gssi_extension;               /* T_gssi_extension */
395
static int hf_tetra_extension;                    /* OCTET_STRING_SIZE_3 */
396
static int hf_tetra_vgssi;                        /* OCTET_STRING_SIZE_3 */
397
static int hf_tetra_attach_detach_identifier_01;  /* T_attach_detach_identifier_01 */
398
static int hf_tetra_attach_01;                    /* T_attach_01 */
399
static int hf_tetra_detach_01;                    /* T_detach_01 */
400
static int hf_tetra_detach_uplike;                /* T_detach_uplike */
401
static int hf_tetra_address_type_01;              /* T_address_type_01 */
402
static int hf_tetra_gssi_extension_01;            /* T_gssi_extension_01 */
403
static int hf_tetra_location_update_type;         /* UPDATE_TYPE */
404
static int hf_tetra_optional_elements_05;         /* T_optional_elements_05 */
405
static int hf_tetra_type2_parameters_03;          /* T_type2_parameters_03 */
406
static int hf_tetra_ssi_choice;                   /* T_ssi_choice */
407
static int hf_tetra_ssi_oct_str;                  /* OCTET_STRING_SIZE_3 */
408
static int hf_tetra_address_extension_choice;     /* T_address_extension_choice */
409
static int hf_tetra_address_extension;            /* OCTET_STRING_SIZE_3 */
410
static int hf_tetra_subscriber_class_choice;      /* T_subscriber_class_choice */
411
static int hf_tetra_energy_saving_mode;           /* T_energy_saving_mode */
412
static int hf_tetra_energy_saving_mode_01;        /* INTEGER_0_7 */
413
static int hf_tetra_scch_info;                    /* T_scch_info */
414
static int hf_tetra_scch_info_01;                 /* INTEGER_0_16383 */
415
static int hf_tetra_type3;                        /* T_type3 */
416
static int hf_tetra_no_type3;                     /* NULL */
417
static int hf_tetra_type3_elements;               /* T_type3_elements */
418
static int hf_tetra_type2_existance;              /* BOOLEAN */
419
static int hf_tetra_type3_identifier;             /* TYPE3_IDENTIFIER */
420
static int hf_tetra_new_ra;                       /* T_new_ra */
421
static int hf_tetra_new_ra_01;                    /* INTEGER_0_3 */
422
static int hf_tetra_group_identity_location_accept;  /* T_group_identity_location_accept */
423
static int hf_tetra_group_identity_location_accept_01;  /* INTEGER_0_3 */
424
static int hf_tetra_group_predefined_lifetime;    /* T_group_predefined_lifetime */
425
static int hf_tetra_group_predefined_lifetime_01;  /* INTEGER_0_3 */
426
static int hf_tetra_group_identity_downlink;      /* T_group_identity_downlink */
427
static int hf_tetra_group_identity_downlink_01;   /* INTEGER_0_15 */
428
static int hf_tetra_proprietary;                  /* T_proprietary */
429
static int hf_tetra_proprietary_01;               /* INTEGER_0_7 */
430
static int hf_tetra_reject_cause;                 /* INTEGER_0_31 */
431
static int hf_tetra_cipher_control;               /* BOOLEAN */
432
static int hf_tetra_status_uplink;                /* INTEGER_0_63 */
433
static int hf_tetra_scanning_on_off;              /* T_scanning_on_off */
434
static int hf_tetra_status_downlink;              /* INTEGER_0_63 */
435
static int hf_tetra_u_Alert;                      /* U_ALERT */
436
static int hf_tetra_reserved1;                    /* NULL */
437
static int hf_tetra_u_Connect;                    /* U_CONNECT */
438
static int hf_tetra_reserved2;                    /* NULL */
439
static int hf_tetra_u_Disconnect;                 /* U_DISCONNECT */
440
static int hf_tetra_u_Info;                       /* U_INFO */
441
static int hf_tetra_u_Release;                    /* U_RELEASE */
442
static int hf_tetra_u_Setup;                      /* U_SETUP */
443
static int hf_tetra_u_Status;                     /* U_STATUS */
444
static int hf_tetra_u_Tx_Ceased;                  /* U_TX_CEASED */
445
static int hf_tetra_u_Tx_Demand;                  /* U_TX_DEMAND */
446
static int hf_tetra_reserved3;                    /* NULL */
447
static int hf_tetra_reserved4;                    /* NULL */
448
static int hf_tetra_reserved5;                    /* NULL */
449
static int hf_tetra_u_Call_Restore;               /* U_CALL_RESTORE */
450
static int hf_tetra_u_SDS_Data;                   /* U_SDS_DATA */
451
static int hf_tetra_u_Facility;                   /* NULL */
452
static int hf_tetra_call_identifier;              /* INTEGER_0_16383 */
453
static int hf_tetra_disconnect_cause;             /* INTEGER_0_31 */
454
static int hf_tetra_area_selection;               /* INTEGER_0_15 */
455
static int hf_tetra_called_party_type_identifier;  /* T_called_party_type_identifier */
456
static int hf_tetra_sna;                          /* INTEGER_0_255 */
457
static int hf_tetra_ssi_extension;                /* BIT_STRING_SIZE_48 */
458
static int hf_tetra_short_data_type_identifier;   /* T_short_data_type_identifier */
459
static int hf_tetra_data_1;                       /* INTEGER_0_65535 */
460
static int hf_tetra_data_2;                       /* OCTET_STRING_SIZE_4 */
461
static int hf_tetra_data_3;                       /* BIT_STRING_SIZE_64 */
462
static int hf_tetra_length_indicator_data_4;      /* INTEGER_0_4194304 */
463
static int hf_tetra_called_party_type_identifier_01;  /* T_called_party_type_identifier_01 */
464
static int hf_tetra_short_number_address;         /* INTEGER_0_255 */
465
static int hf_tetra_called_ssi_called_extension;  /* BIT_STRING_SIZE_48 */
466
static int hf_tetra_pre_coded_status;             /* INTEGER_0_65535 */
467
static int hf_tetra_call_id;                      /* INTEGER_0_16383 */
468
static int hf_tetra_poll_response;                /* INTEGER_0_1 */
469
static int hf_tetra_d_Alert;                      /* D_ALERT */
470
static int hf_tetra_d_Call_Proceeding;            /* D_CALL_PROCEEDING */
471
static int hf_tetra_d_Connect;                    /* D_CONNECT */
472
static int hf_tetra_d_Connect_Ack;                /* D_CONNECT_ACK */
473
static int hf_tetra_d_Disconnect;                 /* D_DISCONNECT */
474
static int hf_tetra_d_Info;                       /* D_INFO */
475
static int hf_tetra_d_Release;                    /* D_RELEASE */
476
static int hf_tetra_d_Setup;                      /* D_SETUP */
477
static int hf_tetra_d_Status;                     /* D_STATUS */
478
static int hf_tetra_d_Tx_Ceased;                  /* D_TX_CEASED */
479
static int hf_tetra_d_Tx_Continue;                /* D_TX_CONTINUE */
480
static int hf_tetra_d_Tx_Granted;                 /* D_TX_GRANTED */
481
static int hf_tetra_d_Tx_Wait;                    /* D_TX_WAIT */
482
static int hf_tetra_d_Tx_Interrupt;               /* D_TX_INTERRUPT */
483
static int hf_tetra_d_Call_Restore;               /* D_CALL_RESTORE */
484
static int hf_tetra_d_SDS_Data;                   /* D_SDS_DATA */
485
static int hf_tetra_d_Facility;                   /* NULL */
486
static int hf_tetra_calling_party_type_identifier;  /* Calling_party_address_type */
487
static int hf_tetra_short_data_type_identifier_01;  /* T_short_data_type_identifier_01 */
488
static int hf_tetra_data_3_01;                    /* OCTET_STRING_SIZE_8 */
489
static int hf_tetra_optional_elements_06;         /* T_optional_elements_06 */
490
static int hf_tetra_type2_element;                /* T_type2_element */
491
static int hf_tetra_notification_indicator;       /* T_notification_indicator */
492
static int hf_tetra_notification_indicator_element;  /* INTEGER_0_63 */
493
static int hf_tetra_reset_call_time_out_timer;    /* INTEGER_0_1 */
494
static int hf_tetra_poll_request;                 /* INTEGER_0_1 */
495
static int hf_tetra_optional_elements_07;         /* T_optional_elements_07 */
496
static int hf_tetra_type2_element_01;             /* T_type2_element_01 */
497
static int hf_tetra_new_call_identifier;          /* T_new_call_identifier */
498
static int hf_tetra_new_call_identifier_element;  /* INTEGER_0_16383 */
499
static int hf_tetra_call_time_out;                /* T_call_time_out */
500
static int hf_tetra_call_time_out_01;             /* INTEGER_0_15 */
501
static int hf_tetra_call_time_out_set_up_phase;   /* T_call_time_out_set_up_phase */
502
static int hf_tetra_call_time_out_set_up_phase_01;  /* INTEGER_0_7 */
503
static int hf_tetra_call_ownership;               /* T_call_ownership */
504
static int hf_tetra_call_ownership_01;            /* INTEGER_0_1 */
505
static int hf_tetra_modify;                       /* T_modify */
506
static int hf_tetra_modify_01;                    /* Modify_type */
507
static int hf_tetra_call_status;                  /* T_call_status */
508
static int hf_tetra_call_status_01;               /* INTEGER_0_7 */
509
static int hf_tetra_temporary_address;            /* T_temporary_address */
510
static int hf_tetra_temporary_address_01;         /* INTEGER_0_16777215 */
511
static int hf_tetra_notification_indicator_01;    /* T_notification_indicator_01 */
512
static int hf_tetra_poll_response_percentage;     /* T_poll_response_percentage */
513
static int hf_tetra_poll_response_percentage_01;  /* INTEGER_0_63 */
514
static int hf_tetra_poll_response_number;         /* T_poll_response_number */
515
static int hf_tetra_poll_response_number_01;      /* INTEGER_0_63 */
516
static int hf_tetra_transmission_request_permission;  /* INTEGER_0_1 */
517
static int hf_tetra_optional_elements_08;         /* T_optional_elements_08 */
518
static int hf_tetra_type2_element_02;             /* T_type2_element_02 */
519
static int hf_tetra_notification_indicator_02;    /* T_notification_indicator_02 */
520
static int hf_tetra_continue;                     /* INTEGER_0_1 */
521
static int hf_tetra_optional_elements_09;         /* T_optional_elements_09 */
522
static int hf_tetra_type2_element_03;             /* T_type2_element_03 */
523
static int hf_tetra_notification_indicator_03;    /* T_notification_indicator_03 */
524
static int hf_tetra_request_to_append_LA;         /* BOOLEAN */
525
static int hf_tetra_cipher_control_choice;        /* T_cipher_control_choice */
526
static int hf_tetra_no_cipher;                    /* NULL */
527
static int hf_tetra_ciphering_parameters;         /* INTEGER_0_1023 */
528
static int hf_tetra_optional_elements_10;         /* T_optional_elements_10 */
529
static int hf_tetra_type2_parameters_04;          /* T_type2_parameters_04 */
530
static int hf_tetra_class_of_MS;                  /* T_class_of_MS */
531
static int hf_tetra_class_of_MS_01;               /* INTEGER_0_16777215 */
532
static int hf_tetra_energy_saving_mode_02;        /* T_energy_saving_mode_01 */
533
static int hf_tetra_la_information;               /* T_la_information */
534
static int hf_tetra_la_information_01;            /* INTEGER_0_16383 */
535
static int hf_tetra_ssi_choice_01;                /* T_ssi_choice_01 */
536
static int hf_tetra_address_extension_choice_01;  /* T_address_extension_choice_01 */
537
static int hf_tetra_type3_01;                     /* T_type3_01 */
538
static int hf_tetra_type3_elements_01;            /* T_type3_elements_01 */
539
static int hf_tetra_group_identity_location_demand;  /* T_group_identity_location_demand */
540
static int hf_tetra_group_identity_location_demand_01;  /* INTEGER_0_3 */
541
static int hf_tetra_group_report_response_choice;  /* T_group_report_response_choice */
542
static int hf_tetra_group_report_response;        /* BOOLEAN */
543
static int hf_tetra_group_identity_uplink;        /* T_group_identity_uplink */
544
static int hf_tetra_group_identity_uplink_01;     /* INTEGER_0_15 */
545
static int hf_tetra_proprietary_02;               /* T_proprietary_01 */
546
static int hf_tetra_group_identity_report;        /* BOOLEAN */
547
static int hf_tetra_group_identity_attach_detach_mode;  /* BOOLEAN */
548
static int hf_tetra_optional_elements_11;         /* T_optional_elements_11 */
549
static int hf_tetra_type2_element_04;             /* T_type2_element_04 */
550
static int hf_tetra_type3_02;                     /* T_type3_02 */
551
static int hf_tetra_type3_elements_02;            /* T_type3_elements_02 */
552
static int hf_tetra_length;                       /* INTEGER_0_2047 */
553
static int hf_tetra_repeat_num;                   /* INTEGER_0_63 */
554
static int hf_tetra_group_identity_uplink_02;     /* GROUP_IDENTITY_UPLINK */
555
static int hf_tetra_group_identity_ack_type;      /* BOOLEAN */
556
static int hf_tetra_optional_elements_12;         /* T_optional_elements_12 */
557
static int hf_tetra_type2_element_05;             /* T_type2_element_05 */
558
static int hf_tetra_type3_03;                     /* T_type3_03 */
559
static int hf_tetra_type3_elements_03;            /* T_type3_elements_03 */
560
static int hf_tetra_hook_method_selection;        /* BOOLEAN */
561
static int hf_tetra_simple_duplex_selection;      /* T_simple_duplex_selection */
562
static int hf_tetra_basic_service_information;    /* Basic_service_information */
563
static int hf_tetra_request_transmit_send_data;   /* INTEGER_0_1 */
564
static int hf_tetra_call_priority;                /* INTEGER_0_15 */
565
static int hf_tetra_clir_control;                 /* INTEGER_0_3 */
566
static int hf_tetra_called_party_address;         /* Called_party_address_type */
567
static int hf_tetra_optional_elements_13;         /* T_optional_elements_13 */
568
static int hf_tetra_type2_parameters_05;          /* T_type2_parameters_05 */
569
static int hf_tetra_external_subscriber_number;   /* T_external_subscriber_number */
570
static int hf_tetra_external_subscriber_number_01;  /* INTEGER_0_31 */
571
static int hf_tetra_prop;                         /* T_prop */
572
static int hf_tetra_prop_01;                      /* Proprietary */
573
static int hf_tetra_circuit_mode;                 /* CIRCUIT */
574
static int hf_tetra_encryption;                   /* INTEGER_0_1 */
575
static int hf_tetra_communication;                /* INTEGER_0_3 */
576
static int hf_tetra_slots_or_speech;              /* INTEGER_0_3 */
577
static int hf_tetra_simplex_duplex_selection;     /* T_simplex_duplex_selection */
578
static int hf_tetra_optional_elements_14;         /* T_optional_elements_14 */
579
static int hf_tetra_type2_parameters_06;          /* T_type2_parameters_06 */
580
static int hf_tetra_basic_service_information_01;  /* T_basic_service_information */
581
static int hf_tetra_prop_02;                      /* T_prop_01 */
582
static int hf_tetra_simplex_duplex_selection_01;  /* T_simplex_duplex_selection_01 */
583
static int hf_tetra_optional_elements_15;         /* T_optional_elements_15 */
584
static int hf_tetra_type2_parameters_07;          /* T_type2_parameters_07 */
585
static int hf_tetra_basic_service_information_02;  /* T_basic_service_information_01 */
586
static int hf_tetra_prop_03;                      /* T_prop_02 */
587
static int hf_tetra_optional_elements_16;         /* T_optional_elements_16 */
588
static int hf_tetra_type2_parameters_08;          /* T_type2_parameters_08 */
589
static int hf_tetra_prop_04;                      /* T_prop_03 */
590
static int hf_tetra_tx_demand_priority;           /* INTEGER_0_3 */
591
static int hf_tetra_encryption_control;           /* INTEGER_0_1 */
592
static int hf_tetra_optional_elements_17;         /* T_optional_elements_17 */
593
static int hf_tetra_type2_parameters_09;          /* T_type2_parameters_09 */
594
static int hf_tetra_prop_05;                      /* T_prop_04 */
595
static int hf_tetra_optional_elements_18;         /* T_optional_elements_18 */
596
static int hf_tetra_type2_parameters_10;          /* T_type2_parameters_10 */
597
static int hf_tetra_prop_06;                      /* T_prop_05 */
598
static int hf_tetra_request_to_transmit_send_data;  /* INTEGER_0_1 */
599
static int hf_tetra_other_party_address;          /* Other_party_address_type */
600
static int hf_tetra_optional_elements_19;         /* T_optional_elements_19 */
601
static int hf_tetra_type2_parameters_11;          /* T_type2_parameters_11 */
602
static int hf_tetra_prop_07;                      /* T_prop_06 */
603
static int hf_tetra_hook_method_selection_integer;  /* INTEGER_0_1 */
604
static int hf_tetra_simplex_duplex_selection_02;  /* T_simplex_duplex_selection_02 */
605
static int hf_tetra_transmission_grant;           /* INTEGER_0_3 */
606
static int hf_tetra_optional_elements_20;         /* T_optional_elements_20 */
607
static int hf_tetra_type2_element_06;             /* T_type2_element_06 */
608
static int hf_tetra_notification_indicator_04;    /* T_notification_indicator_04 */
609
static int hf_tetra_temporary_address_02;         /* T_temporary_address_01 */
610
static int hf_tetra_temporary_address_element;    /* INTEGER_0_16777215 */
611
static int hf_tetra_calling_party_type_identifier_01;  /* T_calling_party_type_identifier */
612
static int hf_tetra_calling_party_type_identifier_element;  /* Calling_party_address_type */
613
static int hf_tetra_external_subscriber_number_02;  /* T_external_subscriber_number_01 */
614
static int hf_tetra_external_subscriber_number_03;  /* INTEGER_0_15 */
615
static int hf_tetra_prop_08;                      /* T_prop_07 */
616
static int hf_tetra_call_time_out_setup_phase;    /* INTEGER_0_7 */
617
static int hf_tetra_simplex_duplex_selection_03;  /* INTEGER_0_1 */
618
static int hf_tetra_optional_elements_21;         /* T_optional_elements_21 */
619
static int hf_tetra_type2_parameters_12;          /* T_type2_parameters_12 */
620
static int hf_tetra_basic_service_information_03;  /* T_basic_service_information_02 */
621
static int hf_tetra_call_status_02;               /* T_call_status_01 */
622
static int hf_tetra_notification_indicator_05;    /* T_notification_indicator_05 */
623
static int hf_tetra_notification_indicator_06;    /* INTEGER_0_63 */
624
static int hf_tetra_prop_09;                      /* T_prop_08 */
625
static int hf_tetra_simplex_duplex_selection_04;  /* T_simplex_duplex_selection_03 */
626
static int hf_tetra_call_queued;                  /* BOOLEAN */
627
static int hf_tetra_optional_elements_22;         /* T_optional_elements_22 */
628
static int hf_tetra_type2_parameters_13;          /* T_type2_parameters_13 */
629
static int hf_tetra_basic_service_infomation;     /* T_basic_service_infomation */
630
static int hf_tetra_basic_service_infomation_01;  /* Basic_service_information */
631
static int hf_tetra_notification_indicator_07;    /* T_notification_indicator_06 */
632
static int hf_tetra_prop_10;                      /* T_prop_09 */
633
static int hf_tetra_simplex_duplex_selection_05;  /* T_simplex_duplex_selection_04 */
634
static int hf_tetra_optional_elements_23;         /* T_optional_elements_23 */
635
static int hf_tetra_type2_parameters_14;          /* T_type2_parameters_14 */
636
static int hf_tetra_call_priority_01;             /* T_call_priority */
637
static int hf_tetra_basic_service_information_04;  /* T_basic_service_information_03 */
638
static int hf_tetra_temporary_address_03;         /* T_temporary_address_02 */
639
static int hf_tetra_notification_indicator_08;    /* T_notification_indicator_07 */
640
static int hf_tetra_prop_11;                      /* T_prop_10 */
641
static int hf_tetra_optional_elements_24;         /* T_optional_elements_24 */
642
static int hf_tetra_type2_parameters_15;          /* T_type2_parameters_15 */
643
static int hf_tetra_notification_indicator_09;    /* T_notification_indicator_08 */
644
static int hf_tetra_prop_12;                      /* T_prop_11 */
645
static int hf_tetra_optional_elements_25;         /* T_optional_elements_25 */
646
static int hf_tetra_type2_parameters_16;          /* T_type2_parameters_16 */
647
static int hf_tetra_notification_indicator_10;    /* T_notification_indicator_09 */
648
static int hf_tetra_prop_13;                      /* T_prop_12 */
649
static int hf_tetra_reset_call_time_out;          /* INTEGER_0_1 */
650
static int hf_tetra_optional_elements_26;         /* T_optional_elements_26 */
651
static int hf_tetra_type2_parameters_17;          /* T_type2_parameters_17 */
652
static int hf_tetra_new_call_identifier_01;       /* T_new_call_identifier_01 */
653
static int hf_tetra_new_call_identifier_02;       /* INTEGER_0_16383 */
654
static int hf_tetra_call_time_out_02;             /* T_call_time_out_01 */
655
static int hf_tetra_call_status_03;               /* T_call_status_02 */
656
static int hf_tetra_modify_02;                    /* T_modify_01 */
657
static int hf_tetra_notification_indicator_11;    /* T_notification_indicator_10 */
658
static int hf_tetra_prop_14;                      /* T_prop_13 */
659
static int hf_tetra_optional_elements_27;         /* T_optional_elements_27 */
660
static int hf_tetra_type2_parameters_18;          /* T_type2_parameters_18 */
661
static int hf_tetra_notification_indicator_12;    /* T_notification_indicator_11 */
662
static int hf_tetra_prop_15;                      /* T_prop_14 */
663
static int hf_tetra_optional_elements_28;         /* T_optional_elements_28 */
664
static int hf_tetra_type2_element_07;             /* T_type2_element_07 */
665
static int hf_tetra_notification_indicator_13;    /* T_notification_indicator_12 */
666
static int hf_tetra_transmitting_party_type_identifier;  /* T_transmitting_party_type_identifier */
667
static int hf_tetra_tpti_element;                 /* Transmitting_party_address_type */
668
static int hf_tetra_optional_elements_29;         /* T_optional_elements_29 */
669
static int hf_tetra_type2_element_08;             /* T_type2_element_08 */
670
static int hf_tetra_notification_indicator_14;    /* T_notification_indicator_13 */
671
static int hf_tetra_transmitting_party_type_identifier_01;  /* T_transmitting_party_type_identifier_01 */
672
static int hf_tetra_group_identity_ack_request;   /* BOOLEAN */
673
static int hf_tetra_optional_elements_30;         /* T_optional_elements_30 */
674
static int hf_tetra_type2_element_09;             /* T_type2_element_09 */
675
static int hf_tetra_type3_04;                     /* T_type3_04 */
676
static int hf_tetra_type3_elements_04;            /* T_type3_elements_04 */
677
static int hf_tetra_group_identity_downlink_02;   /* GROUP_IDENTITY_DOWNLINK */
678
static int hf_tetra_group_identity_attach_detach_accept;  /* BOOLEAN */
679
static int hf_tetra_optional_elements_31;         /* T_optional_elements_31 */
680
static int hf_tetra_type2_element_10;             /* T_type2_element_10 */
681
static int hf_tetra_type3_05;                     /* T_type3_05 */
682
static int hf_tetra_type3_elements_05;            /* T_type3_elements_05 */
683
static int hf_tetra_called_party_sna;             /* INTEGER_0_255 */
684
static int hf_tetra_called_party_ssi;             /* INTEGER_0_16777215 */
685
static int hf_tetra_called_party_ssi_extension;   /* T_called_party_ssi_extension */
686
static int hf_tetra_called_party_extention;       /* INTEGER_0_16777215 */
687
static int hf_tetra_data_01;                      /* T_data_01 */
688
static int hf_tetra_element1;                     /* Type1 */
689
static int hf_tetra_element;                      /* Type2 */
690
static int hf_tetra_proprietary_element_owner;    /* Proprietary_element_owner */
691
static int hf_tetra_proprietary_element_owner_extension;  /* BIT_STRING */
692
static int hf_tetra_simplex_duplex_selection_06;  /* T_simplex_duplex_selection_05 */
693
694
/* Initialize the subtree pointers */
695
/* These are the ids of the subtrees that we may be creating */
696
static int ett_tetra;
697
static int ett_tetra_header;
698
static int ett_tetra_length;
699
static int ett_tetra_txreg;
700
static int ett_tetra_text;
701
702
static int ett_tetra_AACH;
703
static int ett_tetra_BSCH;
704
static int ett_tetra_MLE_Sync;
705
static int ett_tetra_BNCH;
706
static int ett_tetra_T_hyperframe_or_cck;
707
static int ett_tetra_T_optional_params;
708
static int ett_tetra_TS_COMMON_FRAMES;
709
static int ett_tetra_Default_Code_A;
710
static int ett_tetra_Extended_Services_Broadcast;
711
static int ett_tetra_T_section;
712
static int ett_tetra_PRESENT1;
713
static int ett_tetra_MAC_ACCESS;
714
static int ett_tetra_T_data;
715
static int ett_tetra_Address;
716
static int ett_tetra_U_LLC_PDU;
717
static int ett_tetra_U_BL_ACK_FCS;
718
static int ett_tetra_U_MLE_PDU_FCS;
719
static int ett_tetra_U_BL_DATA_FCS;
720
static int ett_tetra_U_BL_ADATA_FCS;
721
static int ett_tetra_U_MLE_PDU;
722
static int ett_tetra_ComplexSDU;
723
static int ett_tetra_T_lengthIndicationOrCapacityRequest;
724
static int ett_tetra_FRAG;
725
static int ett_tetra_MAC_DATA;
726
static int ett_tetra_T_lengthIndicationOrCapacityRequest_01;
727
static int ett_tetra_FRAG6;
728
static int ett_tetra_MAC_FRAG;
729
static int ett_tetra_MAC_FRAG120;
730
static int ett_tetra_MAC_END_UPLINK;
731
static int ett_tetra_MAC_END_UP114;
732
static int ett_tetra_MAC_END_HU;
733
static int ett_tetra_T_lengthInd_ReservationReq;
734
static int ett_tetra_MAC_END_DOWNLINK;
735
static int ett_tetra_T_slot_granting;
736
static int ett_tetra_T_channel_allocation;
737
static int ett_tetra_SlotGranting;
738
static int ett_tetra_ChannelAllocation;
739
static int ett_tetra_T_extend_carrier_flag;
740
static int ett_tetra_T_monitoring_pattern;
741
static int ett_tetra_Extended_carrier_flag;
742
static int ett_tetra_MAC_END_DOWN111;
743
static int ett_tetra_T_slot_granting_01;
744
static int ett_tetra_T_channel_allocation_01;
745
static int ett_tetra_MAC_RESOURCE;
746
static int ett_tetra_OTHER_DATA;
747
static int ett_tetra_T_power_control;
748
static int ett_tetra_T_slot_granting_02;
749
static int ett_tetra_T_channel_allocation_02;
750
static int ett_tetra_AddressMacResource;
751
static int ett_tetra_SSI_NEED;
752
static int ett_tetra_EVENT_NEED;
753
static int ett_tetra_USSI_NEED;
754
static int ett_tetra_SMI_NEED;
755
static int ett_tetra_SSI_EVENT_NEED;
756
static int ett_tetra_SSI_USAGE_NEED;
757
static int ett_tetra_SMI_EVENT_NEED;
758
static int ett_tetra_MAC_ACCESS_DEFINE;
759
static int ett_tetra_T_optional_field;
760
static int ett_tetra_D_LLC_PDU;
761
static int ett_tetra_D_BL_ACK_FCS;
762
static int ett_tetra_D_MLE_PDU_FCS;
763
static int ett_tetra_D_BL_ADATA_FCS;
764
static int ett_tetra_D_BL_DATA_FCS;
765
static int ett_tetra_U_BL_ACK;
766
static int ett_tetra_D_BL_ACK;
767
static int ett_tetra_U_BL_DATA;
768
static int ett_tetra_D_BL_DATA;
769
static int ett_tetra_U_BL_ADATA;
770
static int ett_tetra_D_BL_ADATA;
771
static int ett_tetra_D_MLE_PDU;
772
static int ett_tetra_UMLE_PDU;
773
static int ett_tetra_DMLE_PDU;
774
static int ett_tetra_U_PREPARE;
775
static int ett_tetra_T_optional_elements;
776
static int ett_tetra_T_type2_parameters;
777
static int ett_tetra_T_cell_number;
778
static int ett_tetra_U_RESTORE;
779
static int ett_tetra_T_optional_elements_01;
780
static int ett_tetra_T_type2_parameters_01;
781
static int ett_tetra_T_mcc;
782
static int ett_tetra_T_mnc;
783
static int ett_tetra_T_la;
784
static int ett_tetra_D_NEW_CELL;
785
static int ett_tetra_T_optional_elements_02;
786
static int ett_tetra_D_PREPARE_FAIL;
787
static int ett_tetra_T_optional_elements_03;
788
static int ett_tetra_D_NWRK_BRDADCAST;
789
static int ett_tetra_T_optional_elements_04;
790
static int ett_tetra_T_type2_parameters_02;
791
static int ett_tetra_T_tetra_network_time;
792
static int ett_tetra_T_number_of_neighbour_cells;
793
static int ett_tetra_TETRA_NETWORK_TIME;
794
static int ett_tetra_D_RESTORE_ACK;
795
static int ett_tetra_D_RESTORE_FAIL;
796
static int ett_tetra_U_MM_PDU;
797
static int ett_tetra_D_MM_PDU;
798
static int ett_tetra_GROUP_IDENTITY_DOWNLINK;
799
static int ett_tetra_T_attach_detach_identifier;
800
static int ett_tetra_T_attach;
801
static int ett_tetra_T_detach;
802
static int ett_tetra_T_address_type;
803
static int ett_tetra_T_gssi_extension;
804
static int ett_tetra_GROUP_IDENTITY_UPLINK;
805
static int ett_tetra_T_attach_detach_identifier_01;
806
static int ett_tetra_T_attach_01;
807
static int ett_tetra_T_detach_01;
808
static int ett_tetra_T_address_type_01;
809
static int ett_tetra_T_gssi_extension_01;
810
static int ett_tetra_D_LOCATION_UPDATE_ACCEPT;
811
static int ett_tetra_T_optional_elements_05;
812
static int ett_tetra_T_type2_parameters_03;
813
static int ett_tetra_T_ssi_choice;
814
static int ett_tetra_T_address_extension_choice;
815
static int ett_tetra_T_subscriber_class_choice;
816
static int ett_tetra_T_energy_saving_mode;
817
static int ett_tetra_T_scch_info;
818
static int ett_tetra_T_type3;
819
static int ett_tetra_T_type3_elements;
820
static int ett_tetra_T_new_ra;
821
static int ett_tetra_T_group_identity_location_accept;
822
static int ett_tetra_T_group_predefined_lifetime;
823
static int ett_tetra_T_group_identity_downlink;
824
static int ett_tetra_T_proprietary;
825
static int ett_tetra_D_LOCATION_UPDATE_REJECT;
826
static int ett_tetra_U_MM_STATUS;
827
static int ett_tetra_D_MM_STATUS;
828
static int ett_tetra_U_CMCE_PDU;
829
static int ett_tetra_U_RELEASE;
830
static int ett_tetra_U_SDS_DATA;
831
static int ett_tetra_T_called_party_type_identifier;
832
static int ett_tetra_T_short_data_type_identifier;
833
static int ett_tetra_U_STATUS;
834
static int ett_tetra_T_called_party_type_identifier_01;
835
static int ett_tetra_U_INFO;
836
static int ett_tetra_D_CMCE_PDU;
837
static int ett_tetra_D_SDS_DATA;
838
static int ett_tetra_T_short_data_type_identifier_01;
839
static int ett_tetra_D_STATUS;
840
static int ett_tetra_D_DISCONNECT;
841
static int ett_tetra_T_optional_elements_06;
842
static int ett_tetra_T_type2_element;
843
static int ett_tetra_T_notification_indicator;
844
static int ett_tetra_D_INFO;
845
static int ett_tetra_T_optional_elements_07;
846
static int ett_tetra_T_type2_element_01;
847
static int ett_tetra_T_new_call_identifier;
848
static int ett_tetra_T_call_time_out;
849
static int ett_tetra_T_call_time_out_set_up_phase;
850
static int ett_tetra_T_call_ownership;
851
static int ett_tetra_T_modify;
852
static int ett_tetra_T_call_status;
853
static int ett_tetra_T_temporary_address;
854
static int ett_tetra_T_notification_indicator_01;
855
static int ett_tetra_T_poll_response_percentage;
856
static int ett_tetra_T_poll_response_number;
857
static int ett_tetra_D_TX_WAIT;
858
static int ett_tetra_T_optional_elements_08;
859
static int ett_tetra_T_type2_element_02;
860
static int ett_tetra_T_notification_indicator_02;
861
static int ett_tetra_D_TX_CONTINUE;
862
static int ett_tetra_T_optional_elements_09;
863
static int ett_tetra_T_type2_element_03;
864
static int ett_tetra_T_notification_indicator_03;
865
static int ett_tetra_U_LOCATION_UPDATE_DEMAND;
866
static int ett_tetra_T_cipher_control_choice;
867
static int ett_tetra_T_optional_elements_10;
868
static int ett_tetra_T_type2_parameters_04;
869
static int ett_tetra_T_class_of_MS;
870
static int ett_tetra_T_energy_saving_mode_01;
871
static int ett_tetra_T_la_information;
872
static int ett_tetra_T_ssi_choice_01;
873
static int ett_tetra_T_address_extension_choice_01;
874
static int ett_tetra_T_type3_01;
875
static int ett_tetra_T_type3_elements_01;
876
static int ett_tetra_T_group_identity_location_demand;
877
static int ett_tetra_T_group_report_response_choice;
878
static int ett_tetra_T_group_identity_uplink;
879
static int ett_tetra_T_proprietary_01;
880
static int ett_tetra_U_ATTACH_DETACH_GROUP_IDENTITY;
881
static int ett_tetra_T_optional_elements_11;
882
static int ett_tetra_T_type2_element_04;
883
static int ett_tetra_T_type3_02;
884
static int ett_tetra_T_type3_elements_02;
885
static int ett_tetra_U_ATTACH_DETACH_GROUP_IDENTITY_ACK;
886
static int ett_tetra_T_optional_elements_12;
887
static int ett_tetra_T_type2_element_05;
888
static int ett_tetra_T_type3_03;
889
static int ett_tetra_T_type3_elements_03;
890
static int ett_tetra_U_SETUP;
891
static int ett_tetra_T_optional_elements_13;
892
static int ett_tetra_T_type2_parameters_05;
893
static int ett_tetra_T_external_subscriber_number;
894
static int ett_tetra_T_prop;
895
static int ett_tetra_Basic_service_information;
896
static int ett_tetra_U_ALERT;
897
static int ett_tetra_T_optional_elements_14;
898
static int ett_tetra_T_type2_parameters_06;
899
static int ett_tetra_T_basic_service_information;
900
static int ett_tetra_T_prop_01;
901
static int ett_tetra_U_CONNECT;
902
static int ett_tetra_T_optional_elements_15;
903
static int ett_tetra_T_type2_parameters_07;
904
static int ett_tetra_T_basic_service_information_01;
905
static int ett_tetra_T_prop_02;
906
static int ett_tetra_U_TX_CEASED;
907
static int ett_tetra_T_optional_elements_16;
908
static int ett_tetra_T_type2_parameters_08;
909
static int ett_tetra_T_prop_03;
910
static int ett_tetra_U_TX_DEMAND;
911
static int ett_tetra_T_optional_elements_17;
912
static int ett_tetra_T_type2_parameters_09;
913
static int ett_tetra_T_prop_04;
914
static int ett_tetra_U_DISCONNECT;
915
static int ett_tetra_T_optional_elements_18;
916
static int ett_tetra_T_type2_parameters_10;
917
static int ett_tetra_T_prop_05;
918
static int ett_tetra_U_CALL_RESTORE;
919
static int ett_tetra_T_optional_elements_19;
920
static int ett_tetra_T_type2_parameters_11;
921
static int ett_tetra_T_prop_06;
922
static int ett_tetra_D_SETUP;
923
static int ett_tetra_T_optional_elements_20;
924
static int ett_tetra_T_type2_element_06;
925
static int ett_tetra_T_notification_indicator_04;
926
static int ett_tetra_T_temporary_address_01;
927
static int ett_tetra_T_calling_party_type_identifier;
928
static int ett_tetra_T_external_subscriber_number_01;
929
static int ett_tetra_T_prop_07;
930
static int ett_tetra_D_CALL_PROCEEDING;
931
static int ett_tetra_T_optional_elements_21;
932
static int ett_tetra_T_type2_parameters_12;
933
static int ett_tetra_T_basic_service_information_02;
934
static int ett_tetra_T_call_status_01;
935
static int ett_tetra_T_notification_indicator_05;
936
static int ett_tetra_T_prop_08;
937
static int ett_tetra_D_ALERT;
938
static int ett_tetra_T_optional_elements_22;
939
static int ett_tetra_T_type2_parameters_13;
940
static int ett_tetra_T_basic_service_infomation;
941
static int ett_tetra_T_notification_indicator_06;
942
static int ett_tetra_T_prop_09;
943
static int ett_tetra_D_CONNECT;
944
static int ett_tetra_T_optional_elements_23;
945
static int ett_tetra_T_type2_parameters_14;
946
static int ett_tetra_T_call_priority;
947
static int ett_tetra_T_basic_service_information_03;
948
static int ett_tetra_T_temporary_address_02;
949
static int ett_tetra_T_notification_indicator_07;
950
static int ett_tetra_T_prop_10;
951
static int ett_tetra_D_CONNECT_ACK;
952
static int ett_tetra_T_optional_elements_24;
953
static int ett_tetra_T_type2_parameters_15;
954
static int ett_tetra_T_notification_indicator_08;
955
static int ett_tetra_T_prop_11;
956
static int ett_tetra_D_RELEASE;
957
static int ett_tetra_T_optional_elements_25;
958
static int ett_tetra_T_type2_parameters_16;
959
static int ett_tetra_T_notification_indicator_09;
960
static int ett_tetra_T_prop_12;
961
static int ett_tetra_D_CALL_RESTORE;
962
static int ett_tetra_T_optional_elements_26;
963
static int ett_tetra_T_type2_parameters_17;
964
static int ett_tetra_T_new_call_identifier_01;
965
static int ett_tetra_T_call_time_out_01;
966
static int ett_tetra_T_call_status_02;
967
static int ett_tetra_T_modify_01;
968
static int ett_tetra_T_notification_indicator_10;
969
static int ett_tetra_T_prop_13;
970
static int ett_tetra_D_TX_CEASED;
971
static int ett_tetra_T_optional_elements_27;
972
static int ett_tetra_T_type2_parameters_18;
973
static int ett_tetra_T_notification_indicator_11;
974
static int ett_tetra_T_prop_14;
975
static int ett_tetra_D_TX_GRANTED;
976
static int ett_tetra_T_optional_elements_28;
977
static int ett_tetra_T_type2_element_07;
978
static int ett_tetra_T_notification_indicator_12;
979
static int ett_tetra_T_transmitting_party_type_identifier;
980
static int ett_tetra_D_TX_INTERRUPT;
981
static int ett_tetra_T_optional_elements_29;
982
static int ett_tetra_T_type2_element_08;
983
static int ett_tetra_T_notification_indicator_13;
984
static int ett_tetra_T_transmitting_party_type_identifier_01;
985
static int ett_tetra_D_ATTACH_DETACH_GROUP_IDENTITY;
986
static int ett_tetra_T_optional_elements_30;
987
static int ett_tetra_T_type2_element_09;
988
static int ett_tetra_T_type3_04;
989
static int ett_tetra_T_type3_elements_04;
990
static int ett_tetra_D_ATTACH_DETACH_GROUP_IDENTITY_ACK;
991
static int ett_tetra_T_optional_elements_31;
992
static int ett_tetra_T_type2_element_10;
993
static int ett_tetra_T_type3_05;
994
static int ett_tetra_T_type3_elements_05;
995
static int ett_tetra_Calling_party_address_type;
996
static int ett_tetra_T_called_party_ssi_extension;
997
static int ett_tetra_Proprietary;
998
static int ett_tetra_T_data_01;
999
static int ett_tetra_Type1;
1000
static int ett_tetra_Type2;
1001
static int ett_tetra_Modify_type;
1002
1003
static expert_field ei_tetra_channels_incorrect;
1004
1005
1006
1007
static unsigned
1008
5
dissect_tetra_INTEGER_0_3(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1009
5
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1010
5
                                                            0U, 3U, NULL, false);
1011
1012
5
  return offset;
1013
5
}
1014
1015
1016
1017
static unsigned
1018
0
dissect_tetra_INTEGER_0_63(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1019
0
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1020
0
                                                            0U, 63U, NULL, false);
1021
1022
0
  return offset;
1023
0
}
1024
1025
1026
static const per_sequence_t AACH_sequence[] = {
1027
  { &hf_tetra_function      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
1028
  { &hf_tetra_field1        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_63 },
1029
  { &hf_tetra_field2        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_63 },
1030
  { NULL, 0, 0, NULL }
1031
};
1032
1033
static unsigned
1034
0
dissect_tetra_AACH(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1035
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1036
0
                                   ett_tetra_AACH, AACH_sequence);
1037
1038
0
  return offset;
1039
0
}
1040
1041
1042
static const value_string tetra_System_Code_vals[] = {
1043
  {   0, "ets-300-392-2" },
1044
  {   1, "ets-300-392-2anden-300-392-7" },
1045
  {   2, "en-300-392-2-v2-3-2orlateranden-300-392-7" },
1046
  {   3, "v-d-reserved" },
1047
  {   4, "v-d-reserved" },
1048
  {   5, "v-d-reserved" },
1049
  {   6, "v-d-reserved" },
1050
  {   7, "v-d-reserved" },
1051
  {   8, "reserved" },
1052
  {   9, "reserved" },
1053
  {  10, "direct-mode-operation" },
1054
  {  11, "direct-mode-operation" },
1055
  {  12, "direct-mode-operation" },
1056
  {  13, "direct-mode-operation" },
1057
  {  14, "direct-mode-operation" },
1058
  {  15, "direct-mode-operation" },
1059
  { 0, NULL }
1060
};
1061
1062
1063
static unsigned
1064
0
dissect_tetra_System_Code(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1065
0
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1066
0
                                     16, NULL, false, 0, NULL);
1067
1068
0
  return offset;
1069
0
}
1070
1071
1072
static const value_string tetra_Colour_Code_vals[] = {
1073
  {   0, "pre-defined" },
1074
  {   1, "operator-defined" },
1075
  {   2, "operator-defined" },
1076
  {   3, "operator-defined" },
1077
  {   4, "operator-defined" },
1078
  {   5, "operator-defined" },
1079
  {   6, "operator-defined" },
1080
  {   7, "operator-defined" },
1081
  {   8, "operator-defined" },
1082
  {   9, "operator-defined" },
1083
  {  10, "operator-defined" },
1084
  {  11, "operator-defined" },
1085
  {  12, "operator-defined" },
1086
  {  13, "operator-defined" },
1087
  {  14, "operator-defined" },
1088
  {  15, "operator-defined" },
1089
  {  16, "operator-defined" },
1090
  {  17, "operator-defined" },
1091
  {  18, "operator-defined" },
1092
  {  19, "operator-defined" },
1093
  {  20, "operator-defined" },
1094
  {  21, "operator-defined" },
1095
  {  22, "operator-defined" },
1096
  {  23, "operator-defined" },
1097
  {  24, "operator-defined" },
1098
  {  25, "operator-defined" },
1099
  {  26, "operator-defined" },
1100
  {  27, "operator-defined" },
1101
  {  28, "operator-defined" },
1102
  {  29, "operator-defined" },
1103
  {  30, "operator-defined" },
1104
  {  31, "operator-defined" },
1105
  {  32, "operator-defined" },
1106
  {  33, "operator-defined" },
1107
  {  34, "operator-defined" },
1108
  {  35, "operator-defined" },
1109
  {  36, "operator-defined" },
1110
  {  37, "operator-defined" },
1111
  {  38, "operator-defined" },
1112
  {  39, "operator-defined" },
1113
  {  40, "operator-defined" },
1114
  {  41, "operator-defined" },
1115
  {  42, "operator-defined" },
1116
  {  43, "operator-defined" },
1117
  {  44, "operator-defined" },
1118
  {  45, "operator-defined" },
1119
  {  46, "operator-defined" },
1120
  {  47, "operator-defined" },
1121
  {  48, "operator-defined" },
1122
  {  49, "operator-defined" },
1123
  {  50, "operator-defined" },
1124
  {  51, "operator-defined" },
1125
  {  52, "operator-defined" },
1126
  {  53, "operator-defined" },
1127
  {  54, "operator-defined" },
1128
  {  55, "operator-defined" },
1129
  {  56, "operator-defined" },
1130
  {  57, "operator-defined" },
1131
  {  58, "operator-defined" },
1132
  {  59, "operator-defined" },
1133
  {  60, "operator-defined" },
1134
  {  61, "operator-defined" },
1135
  {  62, "operator-defined" },
1136
  {  63, "operator-defined" },
1137
  { 0, NULL }
1138
};
1139
1140
static value_string_ext tetra_Colour_Code_vals_ext = VALUE_STRING_EXT_INIT(tetra_Colour_Code_vals);
1141
1142
1143
static unsigned
1144
0
dissect_tetra_Colour_Code(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1145
0
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1146
0
                                     64, NULL, false, 0, NULL);
1147
1148
0
  return offset;
1149
0
}
1150
1151
1152
static const value_string tetra_Timeslot_Number_vals[] = {
1153
  {   0, "timeslot-1" },
1154
  {   1, "timeslot-2" },
1155
  {   2, "timeslot-3" },
1156
  {   3, "timeslot-4" },
1157
  { 0, NULL }
1158
};
1159
1160
1161
static unsigned
1162
0
dissect_tetra_Timeslot_Number(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1163
0
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1164
0
                                     4, NULL, false, 0, NULL);
1165
1166
0
  return offset;
1167
0
}
1168
1169
1170
static const value_string tetra_Frame_Number_vals[] = {
1171
  {   0, "reserved" },
1172
  {   1, "frame-1" },
1173
  {   2, "frame-2" },
1174
  {   3, "frame-3" },
1175
  {   4, "frame-4" },
1176
  {   5, "frame-5" },
1177
  {   6, "frame-6" },
1178
  {   7, "frame-7" },
1179
  {   8, "frame-8" },
1180
  {   9, "frame-9" },
1181
  {  10, "frame-10" },
1182
  {  11, "frame-11" },
1183
  {  12, "frame-12" },
1184
  {  13, "frame-13" },
1185
  {  14, "frame-14" },
1186
  {  15, "frame-15" },
1187
  {  16, "frame-16" },
1188
  {  17, "frame-17" },
1189
  {  18, "frame-18" },
1190
  {  19, "reserved" },
1191
  {  20, "reserved" },
1192
  {  21, "reserved" },
1193
  {  22, "reserved" },
1194
  {  23, "reserved" },
1195
  {  24, "reserved" },
1196
  {  25, "reserved" },
1197
  {  26, "reserved" },
1198
  {  27, "reserved" },
1199
  {  28, "reserved" },
1200
  {  29, "reserved" },
1201
  {  30, "reserved" },
1202
  {  31, "reserved" },
1203
  { 0, NULL }
1204
};
1205
1206
1207
static unsigned
1208
0
dissect_tetra_Frame_Number(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1209
0
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1210
0
                                     32, NULL, false, 0, NULL);
1211
1212
0
  return offset;
1213
0
}
1214
1215
1216
static const value_string tetra_Multiple_Frame_Number_vals[] = {
1217
  {   0, "reserved" },
1218
  {   1, "multiframe-1" },
1219
  {   2, "multiframe-2" },
1220
  {   3, "multiframe-3" },
1221
  {   4, "multiframe-4" },
1222
  {   5, "multiframe-5" },
1223
  {   6, "multiframe-6" },
1224
  {   7, "multiframe-7" },
1225
  {   8, "multiframe-8" },
1226
  {   9, "multiframe-9" },
1227
  {  10, "multiframe-10" },
1228
  {  11, "multiframe-11" },
1229
  {  12, "multiframe-12" },
1230
  {  13, "multiframe-13" },
1231
  {  14, "multiframe-14" },
1232
  {  15, "multiframe-15" },
1233
  {  16, "multiframe-16" },
1234
  {  17, "multiframe-17" },
1235
  {  18, "multiframe-18" },
1236
  {  19, "multiframe-19" },
1237
  {  20, "multiframe-20" },
1238
  {  21, "multiframe-21" },
1239
  {  22, "multiframe-22" },
1240
  {  23, "multiframe-23" },
1241
  {  24, "multiframe-24" },
1242
  {  25, "multiframe-25" },
1243
  {  26, "multiframe-26" },
1244
  {  27, "multiframe-27" },
1245
  {  28, "multiframe-28" },
1246
  {  29, "multiframe-29" },
1247
  {  30, "multiframe-30" },
1248
  {  31, "multiframe-31" },
1249
  {  32, "multiframe-32" },
1250
  {  33, "multiframe-33" },
1251
  {  34, "multiframe-34" },
1252
  {  35, "multiframe-35" },
1253
  {  36, "multiframe-36" },
1254
  {  37, "multiframe-37" },
1255
  {  38, "multiframe-38" },
1256
  {  39, "multiframe-39" },
1257
  {  40, "multiframe-40" },
1258
  {  41, "multiframe-41" },
1259
  {  42, "multiframe-42" },
1260
  {  43, "multiframe-43" },
1261
  {  44, "multiframe-44" },
1262
  {  45, "multiframe-45" },
1263
  {  46, "multiframe-46" },
1264
  {  47, "multiframe-47" },
1265
  {  48, "multiframe-48" },
1266
  {  49, "multiframe-49" },
1267
  {  50, "multiframe-50" },
1268
  {  51, "multiframe-51" },
1269
  {  52, "multiframe-52" },
1270
  {  53, "multiframe-53" },
1271
  {  54, "multiframe-54" },
1272
  {  55, "multiframe-55" },
1273
  {  56, "multiframe-56" },
1274
  {  57, "multiframe-57" },
1275
  {  58, "multiframe-58" },
1276
  {  59, "multiframe-59" },
1277
  {  60, "multiframe-60" },
1278
  {  61, "reserved" },
1279
  {  62, "reserved" },
1280
  {  63, "reserved" },
1281
  { 0, NULL }
1282
};
1283
1284
static value_string_ext tetra_Multiple_Frame_Number_vals_ext = VALUE_STRING_EXT_INIT(tetra_Multiple_Frame_Number_vals);
1285
1286
1287
static unsigned
1288
0
dissect_tetra_Multiple_Frame_Number(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1289
0
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1290
0
                                     64, NULL, false, 0, NULL);
1291
1292
0
  return offset;
1293
0
}
1294
1295
1296
static const value_string tetra_Sharing_Mod_vals[] = {
1297
  {   0, "continuous-transmission" },
1298
  {   1, "carrier-sharing" },
1299
  {   2, "mcch-sharing" },
1300
  {   3, "traffic-carrier-sharing" },
1301
  { 0, NULL }
1302
};
1303
1304
1305
static unsigned
1306
0
dissect_tetra_Sharing_Mod(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1307
0
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1308
0
                                     4, NULL, false, 0, NULL);
1309
1310
0
  return offset;
1311
0
}
1312
1313
1314
static const value_string tetra_TS_Reserved_Frames_vals[] = {
1315
  {   0, "frame-reserved-1" },
1316
  {   1, "frames-reserved-2" },
1317
  {   2, "frames-reserved-3" },
1318
  {   3, "frames-reserved-4" },
1319
  {   4, "frames-reserved-6" },
1320
  {   5, "frames-reserved-9" },
1321
  {   6, "frames-reserved-12" },
1322
  {   7, "frames-reserved-18" },
1323
  { 0, NULL }
1324
};
1325
1326
1327
static unsigned
1328
0
dissect_tetra_TS_Reserved_Frames(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1329
0
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1330
0
                                     8, NULL, false, 0, NULL);
1331
1332
0
  return offset;
1333
0
}
1334
1335
1336
static const value_string tetra_U_Plane_DTX_vals[] = {
1337
  {   0, "not-allowed" },
1338
  {   1, "allowed" },
1339
  { 0, NULL }
1340
};
1341
1342
1343
static unsigned
1344
0
dissect_tetra_U_Plane_DTX(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1345
0
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1346
0
                                     2, NULL, false, 0, NULL);
1347
1348
0
  return offset;
1349
0
}
1350
1351
1352
static const value_string tetra_Frame_18_Extension_vals[] = {
1353
  {   0, "not-allowed" },
1354
  {   1, "allowed" },
1355
  { 0, NULL }
1356
};
1357
1358
1359
static unsigned
1360
0
dissect_tetra_Frame_18_Extension(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1361
0
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1362
0
                                     2, NULL, false, 0, NULL);
1363
1364
0
  return offset;
1365
0
}
1366
1367
1368
static const value_string tetra_Reserved_vals[] = {
1369
  {   0, "default" },
1370
  {   1, "not-used" },
1371
  { 0, NULL }
1372
};
1373
1374
1375
static unsigned
1376
0
dissect_tetra_Reserved(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1377
0
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1378
0
                                     2, NULL, false, 0, NULL);
1379
1380
0
  return offset;
1381
0
}
1382
1383
1384
1385
static unsigned
1386
0
dissect_tetra_INTEGER_0_1023(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1387
0
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1388
0
                                                            0U, 1023U, NULL, false);
1389
1390
0
  return offset;
1391
0
}
1392
1393
1394
1395
static unsigned
1396
3
dissect_tetra_INTEGER_0_16383(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1397
3
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1398
3
                                                            0U, 16383U, NULL, false);
1399
1400
3
  return offset;
1401
3
}
1402
1403
1404
1405
static unsigned
1406
3
dissect_tetra_INTEGER_0_1(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1407
3
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1408
3
                                                            0U, 1U, NULL, false);
1409
1410
3
  return offset;
1411
3
}
1412
1413
1414
static const per_sequence_t MLE_Sync_sequence[] = {
1415
  { &hf_tetra_mcc           , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1023 },
1416
  { &hf_tetra_mnc           , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
1417
  { &hf_tetra_neighbour_cell_broadcast, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
1418
  { &hf_tetra_cell_service_level, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
1419
  { &hf_tetra_late_entry_information, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
1420
  { NULL, 0, 0, NULL }
1421
};
1422
1423
static unsigned
1424
0
dissect_tetra_MLE_Sync(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1425
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1426
0
                                   ett_tetra_MLE_Sync, MLE_Sync_sequence);
1427
1428
0
  return offset;
1429
0
}
1430
1431
1432
static const per_sequence_t BSCH_sequence[] = {
1433
  { &hf_tetra_system_code   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_System_Code },
1434
  { &hf_tetra_colour_code   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Colour_Code },
1435
  { &hf_tetra_timeslot_number, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Timeslot_Number },
1436
  { &hf_tetra_frame_number  , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Frame_Number },
1437
  { &hf_tetra_multiple_frame_number, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Multiple_Frame_Number },
1438
  { &hf_tetra_sharing_mod   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Sharing_Mod },
1439
  { &hf_tetra_ts_reserved_frames, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_TS_Reserved_Frames },
1440
  { &hf_tetra_u_plane_dtx   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_U_Plane_DTX },
1441
  { &hf_tetra_frame_18_extension, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Frame_18_Extension },
1442
  { &hf_tetra_reserved      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Reserved },
1443
  { &hf_tetra_tm_sdu        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_MLE_Sync },
1444
  { NULL, 0, 0, NULL }
1445
};
1446
1447
static unsigned
1448
0
dissect_tetra_BSCH(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1449
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1450
0
                                   ett_tetra_BSCH, BSCH_sequence);
1451
1452
0
  return offset;
1453
0
}
1454
1455
1456
1457
static unsigned
1458
2
dissect_tetra_INTEGER_0_4095(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1459
2
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1460
2
                                                            0U, 4095U, NULL, false);
1461
1462
2
  return offset;
1463
2
}
1464
1465
1466
1467
static unsigned
1468
0
dissect_tetra_INTEGER_0_15(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1469
0
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1470
0
                                                            0U, 15U, NULL, false);
1471
1472
0
  return offset;
1473
0
}
1474
1475
1476
static const value_string tetra_Offset_vals[] = {
1477
  {   0, "offset-0" },
1478
  {   1, "offset-positive-6-point-25" },
1479
  {   2, "offset-minus-6-point-25" },
1480
  {   3, "offset-12-point-5" },
1481
  { 0, NULL }
1482
};
1483
1484
1485
static unsigned
1486
0
dissect_tetra_Offset(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1487
0
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1488
0
                                     4, NULL, false, 0, NULL);
1489
1490
0
  return offset;
1491
0
}
1492
1493
1494
1495
static unsigned
1496
0
dissect_tetra_INTEGER_0_7(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1497
0
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1498
0
                                                            0U, 7U, NULL, false);
1499
1500
0
  return offset;
1501
0
}
1502
1503
1504
static const value_string tetra_Reverse_Operation_vals[] = {
1505
  {   0, "normal" },
1506
  {   1, "reverse" },
1507
  { 0, NULL }
1508
};
1509
1510
1511
static unsigned
1512
0
dissect_tetra_Reverse_Operation(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1513
0
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1514
0
                                     2, NULL, false, 0, NULL);
1515
1516
0
  return offset;
1517
0
}
1518
1519
1520
static const value_string tetra_Sencond_Ctl_Carrier_vals[] = {
1521
  {   0, "none" },
1522
  {   1, "timeslot-2" },
1523
  {   2, "timeslots-2and3" },
1524
  {   3, "timeslots-2and3and4" },
1525
  { 0, NULL }
1526
};
1527
1528
1529
static unsigned
1530
0
dissect_tetra_Sencond_Ctl_Carrier(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1531
0
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1532
0
                                     4, NULL, false, 0, NULL);
1533
1534
0
  return offset;
1535
0
}
1536
1537
1538
static const value_string tetra_MS_TXPWR_MAX_CELL_vals[] = {
1539
  {   0, "reserved" },
1540
  {   1, "dbm-15" },
1541
  {   2, "dbm-20" },
1542
  {   3, "dbm-25" },
1543
  {   4, "dbm-30" },
1544
  {   5, "dbm-35" },
1545
  {   6, "dbm-40" },
1546
  {   7, "dbm-45" },
1547
  { 0, NULL }
1548
};
1549
1550
1551
static unsigned
1552
0
dissect_tetra_MS_TXPWR_MAX_CELL(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1553
0
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1554
0
                                     8, NULL, false, 0, NULL);
1555
1556
0
  return offset;
1557
0
}
1558
1559
1560
static const value_string tetra_RXLEV_ACCESS_MIN_vals[] = {
1561
  {   0, "dbm-125" },
1562
  {   1, "dbm-120" },
1563
  {   2, "dbm-115" },
1564
  {   3, "dbm-110" },
1565
  {   4, "dbm-105" },
1566
  {   5, "dbm-100" },
1567
  {   6, "dbm-95" },
1568
  {   7, "dnm-90" },
1569
  {   8, "dbm-85" },
1570
  {   9, "dbm-80" },
1571
  {  10, "dbm-75" },
1572
  {  11, "dbm-70" },
1573
  {  12, "dbm-65" },
1574
  {  13, "dbm-60" },
1575
  {  14, "dbm-55" },
1576
  {  15, "dbm-50" },
1577
  { 0, NULL }
1578
};
1579
1580
1581
static unsigned
1582
0
dissect_tetra_RXLEV_ACCESS_MIN(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1583
0
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1584
0
                                     16, NULL, false, 0, NULL);
1585
1586
0
  return offset;
1587
0
}
1588
1589
1590
static const value_string tetra_ACCESS_PARAMETER_vals[] = {
1591
  {   0, "dbm-53" },
1592
  {   1, "dbm-51" },
1593
  {   2, "dbm-49" },
1594
  {   3, "dbm-47" },
1595
  {   4, "dbm-45" },
1596
  {   5, "dbm-43" },
1597
  {   6, "dbm-41" },
1598
  {   7, "dbm-39" },
1599
  {   8, "dbm-37" },
1600
  {   9, "dbm-35" },
1601
  {  10, "dbm-33" },
1602
  {  11, "dbm-31" },
1603
  {  12, "dbm-29" },
1604
  {  13, "dbm-27" },
1605
  {  14, "dbm-25" },
1606
  {  15, "dbm-23" },
1607
  { 0, NULL }
1608
};
1609
1610
1611
static unsigned
1612
0
dissect_tetra_ACCESS_PARAMETER(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1613
0
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1614
0
                                     16, NULL, false, 0, NULL);
1615
1616
0
  return offset;
1617
0
}
1618
1619
1620
static const value_string tetra_RADIO_DOWNLINK_TIMEOUT_vals[] = {
1621
  {   0, "disable" },
1622
  {   1, "timeslots-144" },
1623
  {   2, "timeslots-288" },
1624
  {   3, "timeslots-432" },
1625
  {   4, "timeslots-576" },
1626
  {   5, "timeslots-720" },
1627
  {   6, "timeslots-864" },
1628
  {   7, "timeslots-1008" },
1629
  {   8, "timeslots-1152" },
1630
  {   9, "timeslots-1296" },
1631
  {  10, "timeslots-1440" },
1632
  {  11, "timeslots-1584" },
1633
  {  12, "timeslots-1728" },
1634
  {  13, "timeslots-1872" },
1635
  {  14, "timeslots-2016" },
1636
  {  15, "timeslots-2160" },
1637
  { 0, NULL }
1638
};
1639
1640
1641
static unsigned
1642
0
dissect_tetra_RADIO_DOWNLINK_TIMEOUT(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1643
0
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1644
0
                                     16, NULL, false, 0, NULL);
1645
1646
0
  return offset;
1647
0
}
1648
1649
1650
1651
static unsigned
1652
0
dissect_tetra_INTEGER_0_65535(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1653
0
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1654
0
                                                            0U, 65535U, NULL, false);
1655
1656
0
  return offset;
1657
0
}
1658
1659
1660
static const value_string tetra_T_hyperframe_or_cck_vals[] = {
1661
  {   0, "hyperframe" },
1662
  {   1, "cckid" },
1663
  { 0, NULL }
1664
};
1665
1666
static const per_choice_t T_hyperframe_or_cck_choice[] = {
1667
  {   0, &hf_tetra_hyperframe    , ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_65535 },
1668
  {   1, &hf_tetra_cckid         , ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_65535 },
1669
  { 0, NULL, 0, NULL }
1670
};
1671
1672
static unsigned
1673
0
dissect_tetra_T_hyperframe_or_cck(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1674
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
1675
0
                                 ett_tetra_T_hyperframe_or_cck, T_hyperframe_or_cck_choice,
1676
0
                                 NULL);
1677
1678
0
  return offset;
1679
0
}
1680
1681
1682
static const value_string tetra_FRAME_vals[] = {
1683
  {   0, "not-common" },
1684
  {   1, "common" },
1685
  { 0, NULL }
1686
};
1687
1688
1689
static unsigned
1690
0
dissect_tetra_FRAME(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1691
0
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1692
0
                                     2, NULL, false, 0, NULL);
1693
1694
0
  return offset;
1695
0
}
1696
1697
1698
static const per_sequence_t TS_COMMON_FRAMES_sequence[] = {
1699
  { &hf_tetra_frame1        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1700
  { &hf_tetra_frame2        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1701
  { &hf_tetra_frame3        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1702
  { &hf_tetra_frame4        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1703
  { &hf_tetra_frame5        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1704
  { &hf_tetra_frame6        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1705
  { &hf_tetra_frame7        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1706
  { &hf_tetra_frame8        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1707
  { &hf_tetra_frame9        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1708
  { &hf_tetra_frame10       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1709
  { &hf_tetra_frame11       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1710
  { &hf_tetra_frame12       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1711
  { &hf_tetra_frame13       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1712
  { &hf_tetra_frame14       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1713
  { &hf_tetra_frame15       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1714
  { &hf_tetra_frame16       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1715
  { &hf_tetra_frame17       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1716
  { &hf_tetra_frame18       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_FRAME },
1717
  { NULL, 0, 0, NULL }
1718
};
1719
1720
static unsigned
1721
0
dissect_tetra_TS_COMMON_FRAMES(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1722
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1723
0
                                   ett_tetra_TS_COMMON_FRAMES, TS_COMMON_FRAMES_sequence);
1724
1725
0
  return offset;
1726
0
}
1727
1728
1729
static const value_string tetra_IMM_vals[] = {
1730
  {   0, "always-randomize" },
1731
  {   1, "randomize-after-imm-tdma" },
1732
  {   2, "randomize-after-imm-tdma" },
1733
  {   3, "randomize-after-imm-tdma" },
1734
  {   4, "randomize-after-imm-tdma" },
1735
  {   5, "randomize-after-imm-tdma" },
1736
  {   6, "randomize-after-imm-tdma" },
1737
  {   7, "randomize-after-imm-tdma" },
1738
  {   8, "randomize-after-imm-tdma" },
1739
  {   9, "randomize-after-imm-tdma" },
1740
  {  10, "randomize-after-imm-tdma" },
1741
  {  11, "randomize-after-imm-tdma" },
1742
  {  12, "randomize-after-imm-tdma" },
1743
  {  13, "randomize-after-imm-tdma" },
1744
  {  14, "randomize-after-imm-tdma" },
1745
  {  15, "immediate-access-allowed" },
1746
  { 0, NULL }
1747
};
1748
1749
1750
static unsigned
1751
0
dissect_tetra_IMM(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1752
0
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1753
0
                                     16, NULL, false, 0, NULL);
1754
1755
0
  return offset;
1756
0
}
1757
1758
1759
static const value_string tetra_WT_vals[] = {
1760
  {   0, "reserved" },
1761
  {   1, "response-within-wt-downlink" },
1762
  {   2, "response-within-wt-downlink" },
1763
  {   3, "response-within-wt-downlink" },
1764
  {   4, "response-within-wt-downlink" },
1765
  {   5, "response-within-wt-downlink" },
1766
  {   6, "response-within-wt-downlink" },
1767
  {   7, "response-within-wt-downlink" },
1768
  {   8, "response-within-wt-downlink" },
1769
  {   9, "response-within-wt-downlink" },
1770
  {  10, "response-within-wt-downlink" },
1771
  {  11, "response-within-wt-downlink" },
1772
  {  12, "response-within-wt-downlink" },
1773
  {  13, "response-within-wt-downlink" },
1774
  {  14, "response-within-wt-downlink" },
1775
  {  15, "response-within-wt-downlink" },
1776
  { 0, NULL }
1777
};
1778
1779
1780
static unsigned
1781
0
dissect_tetra_WT(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1782
0
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1783
0
                                     16, NULL, false, 0, NULL);
1784
1785
0
  return offset;
1786
0
}
1787
1788
1789
static const value_string tetra_NU_vals[] = {
1790
  {   0, "no-random" },
1791
  {   1, "random-1" },
1792
  {   2, "random-2" },
1793
  {   3, "random-3" },
1794
  {   4, "random-4" },
1795
  {   5, "random-5" },
1796
  {   6, "random-6" },
1797
  {   7, "random-7" },
1798
  {   8, "random-8" },
1799
  {   9, "random-9" },
1800
  {  10, "random-10" },
1801
  {  11, "random-11" },
1802
  {  12, "random-12" },
1803
  {  13, "random-13" },
1804
  {  14, "random-14" },
1805
  {  15, "random-15" },
1806
  { 0, NULL }
1807
};
1808
1809
1810
static unsigned
1811
0
dissect_tetra_NU(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1812
0
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1813
0
                                     16, NULL, false, 0, NULL);
1814
1815
0
  return offset;
1816
0
}
1817
1818
1819
static const value_string tetra_Frame_Len_Factor_vals[] = {
1820
  {   0, "multiply-1" },
1821
  {   1, "multiply-4" },
1822
  { 0, NULL }
1823
};
1824
1825
1826
static unsigned
1827
0
dissect_tetra_Frame_Len_Factor(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1828
0
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1829
0
                                     2, NULL, false, 0, NULL);
1830
1831
0
  return offset;
1832
0
}
1833
1834
1835
static const value_string tetra_Timeslot_Pointer_vals[] = {
1836
  {   0, "same-as-downlink" },
1837
  {   1, "timeslot-4" },
1838
  {   2, "timeslot-bit-map" },
1839
  {   3, "timeslot-bit-map" },
1840
  {   4, "timeslot-bit-map" },
1841
  {   5, "timeslot-bit-map" },
1842
  {   6, "timeslot-bit-map" },
1843
  {   7, "timeslot-bit-map" },
1844
  {   8, "timeslot-bit-map" },
1845
  {   9, "timeslot-bit-map" },
1846
  {  10, "timeslot-bit-map" },
1847
  {  11, "timeslot-bit-map" },
1848
  {  12, "timeslot-bit-map" },
1849
  {  13, "timeslot-bit-map" },
1850
  {  14, "timeslot-bit-map" },
1851
  {  15, "all-four-timeslots" },
1852
  { 0, NULL }
1853
};
1854
1855
1856
static unsigned
1857
0
dissect_tetra_Timeslot_Pointer(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1858
0
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1859
0
                                     16, NULL, false, 0, NULL);
1860
1861
0
  return offset;
1862
0
}
1863
1864
1865
static const value_string tetra_Min_Pdu_Priority_vals[] = {
1866
  {   0, "priority-0" },
1867
  {   1, "priority-1" },
1868
  {   2, "priority-2" },
1869
  {   3, "priority-3" },
1870
  {   4, "priority-4" },
1871
  {   5, "priority-5" },
1872
  {   6, "priority-6" },
1873
  {   7, "priority-7" },
1874
  { 0, NULL }
1875
};
1876
1877
1878
static unsigned
1879
0
dissect_tetra_Min_Pdu_Priority(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1880
0
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1881
0
                                     8, NULL, false, 0, NULL);
1882
1883
0
  return offset;
1884
0
}
1885
1886
1887
static const per_sequence_t Default_Code_A_sequence[] = {
1888
  { &hf_tetra_imm           , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_IMM },
1889
  { &hf_tetra_wt            , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_WT },
1890
  { &hf_tetra_nu            , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_NU },
1891
  { &hf_tetra_frame_len_factor, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Frame_Len_Factor },
1892
  { &hf_tetra_timeslot_pointer, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Timeslot_Pointer },
1893
  { &hf_tetra_min_pdu_priority, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Min_Pdu_Priority },
1894
  { NULL, 0, 0, NULL }
1895
};
1896
1897
static unsigned
1898
0
dissect_tetra_Default_Code_A(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1899
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1900
0
                                   ett_tetra_Default_Code_A, Default_Code_A_sequence);
1901
1902
0
  return offset;
1903
0
}
1904
1905
1906
1907
static unsigned
1908
0
dissect_tetra_INTEGER_0_255(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1909
0
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1910
0
                                                            0U, 255U, NULL, false);
1911
1912
0
  return offset;
1913
0
}
1914
1915
1916
static const value_string tetra_SDS_TL_Addressing_Method_vals[] = {
1917
  {   0, "reserved" },
1918
  {   1, "service-centre" },
1919
  {   2, "never-use-service-centre" },
1920
  {   3, "ms-choice-to-use-service-centre" },
1921
  { 0, NULL }
1922
};
1923
1924
1925
static unsigned
1926
0
dissect_tetra_SDS_TL_Addressing_Method(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1927
0
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1928
0
                                     4, NULL, false, 0, NULL);
1929
1930
0
  return offset;
1931
0
}
1932
1933
1934
static const value_string tetra_Data_Priority_Supported_vals[] = {
1935
  {   0, "not-supported" },
1936
  {   1, "supported" },
1937
  { 0, NULL }
1938
};
1939
1940
1941
static unsigned
1942
0
dissect_tetra_Data_Priority_Supported(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1943
0
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1944
0
                                     2, NULL, false, 0, NULL);
1945
1946
0
  return offset;
1947
0
}
1948
1949
1950
static const value_string tetra_Section_Information_vals[] = {
1951
  {   0, "no-information" },
1952
  {   1, "futher-information" },
1953
  { 0, NULL }
1954
};
1955
1956
1957
static unsigned
1958
0
dissect_tetra_Section_Information(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1959
0
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1960
0
                                     2, NULL, false, 0, NULL);
1961
1962
0
  return offset;
1963
0
}
1964
1965
1966
static const per_sequence_t PRESENT1_sequence[] = {
1967
  { &hf_tetra_data_priority_supported, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Data_Priority_Supported },
1968
  { &hf_tetra_reserved_02   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
1969
  { &hf_tetra_section_2_information, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Section_Information },
1970
  { &hf_tetra_section_3_information, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Section_Information },
1971
  { &hf_tetra_section_4_information, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Section_Information },
1972
  { NULL, 0, 0, NULL }
1973
};
1974
1975
static unsigned
1976
0
dissect_tetra_PRESENT1(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1977
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1978
0
                                   ett_tetra_PRESENT1, PRESENT1_sequence);
1979
1980
0
  return offset;
1981
0
}
1982
1983
1984
1985
static unsigned
1986
0
dissect_tetra_INTEGER_0_127(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1987
0
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1988
0
                                                            0U, 127U, NULL, false);
1989
1990
0
  return offset;
1991
0
}
1992
1993
1994
static const value_string tetra_T_section_vals[] = {
1995
  {   0, "present-1" },
1996
  {   1, "present-2" },
1997
  {   2, "present-3" },
1998
  {   3, "present-4" },
1999
  { 0, NULL }
2000
};
2001
2002
static const per_choice_t T_section_choice[] = {
2003
  {   0, &hf_tetra_present_1     , ASN1_NO_EXTENSIONS     , dissect_tetra_PRESENT1 },
2004
  {   1, &hf_tetra_present_2     , ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_127 },
2005
  {   2, &hf_tetra_present_3     , ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_127 },
2006
  {   3, &hf_tetra_present_4     , ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_127 },
2007
  { 0, NULL, 0, NULL }
2008
};
2009
2010
static unsigned
2011
0
dissect_tetra_T_section(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2012
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2013
0
                                 ett_tetra_T_section, T_section_choice,
2014
0
                                 NULL);
2015
2016
0
  return offset;
2017
0
}
2018
2019
2020
static const per_sequence_t Extended_Services_Broadcast_sequence[] = {
2021
  { &hf_tetra_security_information, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_255 },
2022
  { &hf_tetra_sds_tl_addressing_method, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_SDS_TL_Addressing_Method },
2023
  { &hf_tetra_gck_supported , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
2024
  { &hf_tetra_section       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_section },
2025
  { NULL, 0, 0, NULL }
2026
};
2027
2028
static unsigned
2029
0
dissect_tetra_Extended_Services_Broadcast(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2030
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2031
0
                                   ett_tetra_Extended_Services_Broadcast, Extended_Services_Broadcast_sequence);
2032
2033
0
  return offset;
2034
0
}
2035
2036
2037
static const value_string tetra_T_optional_params_vals[] = {
2038
  {   0, "even-multiframe" },
2039
  {   1, "odd-multiframe" },
2040
  {   2, "access-a-code" },
2041
  {   3, "extend-service" },
2042
  { 0, NULL }
2043
};
2044
2045
static const per_choice_t T_optional_params_choice[] = {
2046
  {   0, &hf_tetra_even_multiframe, ASN1_NO_EXTENSIONS     , dissect_tetra_TS_COMMON_FRAMES },
2047
  {   1, &hf_tetra_odd_multiframe, ASN1_NO_EXTENSIONS     , dissect_tetra_TS_COMMON_FRAMES },
2048
  {   2, &hf_tetra_access_a_code , ASN1_NO_EXTENSIONS     , dissect_tetra_Default_Code_A },
2049
  {   3, &hf_tetra_extend_service, ASN1_NO_EXTENSIONS     , dissect_tetra_Extended_Services_Broadcast },
2050
  { 0, NULL, 0, NULL }
2051
};
2052
2053
static unsigned
2054
0
dissect_tetra_T_optional_params(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2055
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2056
0
                                 ett_tetra_T_optional_params, T_optional_params_choice,
2057
0
                                 NULL);
2058
2059
0
  return offset;
2060
0
}
2061
2062
2063
2064
static unsigned
2065
0
dissect_tetra_Subscriber_class(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2066
0
  offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
2067
0
                                     16, 16, false, NULL, 0, NULL, NULL);
2068
2069
0
  return offset;
2070
0
}
2071
2072
2073
static const per_sequence_t BNCH_sequence[] = {
2074
  { &hf_tetra_pdu_type      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
2075
  { &hf_tetra_broadcast_type, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
2076
  { &hf_tetra_main_carrier  , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_4095 },
2077
  { &hf_tetra_frequency_band, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_15 },
2078
  { &hf_tetra_offset        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Offset },
2079
  { &hf_tetra_duplex_spacing, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
2080
  { &hf_tetra_reverse_operation, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Reverse_Operation },
2081
  { &hf_tetra_sencond_ctl_carrier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Sencond_Ctl_Carrier },
2082
  { &hf_tetra_ms_txpwr_max_cell, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_MS_TXPWR_MAX_CELL },
2083
  { &hf_tetra_rxlev_access_min, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_RXLEV_ACCESS_MIN },
2084
  { &hf_tetra_access_parameter, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_ACCESS_PARAMETER },
2085
  { &hf_tetra_radio_downlink_timeout, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_RADIO_DOWNLINK_TIMEOUT },
2086
  { &hf_tetra_hyperframe_or_cck, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_hyperframe_or_cck },
2087
  { &hf_tetra_optional_params, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_params },
2088
  { &hf_tetra_la            , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
2089
  { &hf_tetra_subscriber_class, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Subscriber_class },
2090
  { &hf_tetra_registriation , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
2091
  { &hf_tetra_de_registration, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
2092
  { &hf_tetra_priority_cell , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
2093
  { &hf_tetra_minimum_mode_service, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
2094
  { &hf_tetra_migration     , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
2095
  { &hf_tetra_system_wide_service, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
2096
  { &hf_tetra_tetra_voice_service, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
2097
  { &hf_tetra_circuit_mode_data_service, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
2098
  { &hf_tetra_reserved_01   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
2099
  { &hf_tetra_sndcp_service , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
2100
  { &hf_tetra_air_interface_encryption, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
2101
  { &hf_tetra_advanced_link_support, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
2102
  { NULL, 0, 0, NULL }
2103
};
2104
2105
static unsigned
2106
0
dissect_tetra_BNCH(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2107
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2108
0
                                   ett_tetra_BNCH, BNCH_sequence);
2109
2110
0
  return offset;
2111
0
}
2112
2113
2114
static const value_string tetra_Fill_Bit_Indication_vals[] = {
2115
  {   0, "no-present" },
2116
  {   1, "present" },
2117
  { 0, NULL }
2118
};
2119
2120
2121
static unsigned
2122
3
dissect_tetra_Fill_Bit_Indication(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2123
3
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2124
3
                                     2, NULL, false, 0, NULL);
2125
2126
3
  return offset;
2127
3
}
2128
2129
2130
static const value_string tetra_Encrypted_Flag_vals[] = {
2131
  {   0, "not-encrypted" },
2132
  {   1, "encrypted" },
2133
  { 0, NULL }
2134
};
2135
2136
2137
static unsigned
2138
1
dissect_tetra_Encrypted_Flag(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2139
1
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2140
1
                                     2, NULL, false, 0, NULL);
2141
2142
1
  return offset;
2143
1
}
2144
2145
2146
2147
static unsigned
2148
3
dissect_tetra_INTEGER_0_16777215(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2149
3
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
2150
3
                                                            0U, 16777215U, NULL, false);
2151
2152
3
  return offset;
2153
3
}
2154
2155
2156
static const value_string tetra_Address_vals[] = {
2157
  {   0, "ssi" },
2158
  {   1, "eventLabel" },
2159
  {   2, "ussi" },
2160
  {   3, "smi" },
2161
  { 0, NULL }
2162
};
2163
2164
static const per_choice_t Address_choice[] = {
2165
  {   0, &hf_tetra_ssi           , ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_16777215 },
2166
  {   1, &hf_tetra_eventLabel    , ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_1023 },
2167
  {   2, &hf_tetra_ussi          , ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_16777215 },
2168
  {   3, &hf_tetra_smi           , ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_16777215 },
2169
  { 0, NULL, 0, NULL }
2170
};
2171
2172
static unsigned
2173
1
dissect_tetra_Address(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2174
1
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2175
1
                                 ett_tetra_Address, Address_choice,
2176
1
                                 NULL);
2177
2178
1
  return offset;
2179
1
}
2180
2181
2182
2183
static unsigned
2184
9
dissect_tetra_NULL(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2185
9
  offset = dissect_per_null(tvb, offset, actx, tree, hf_index);
2186
2187
9
  return offset;
2188
9
}
2189
2190
2191
static const value_string tetra_UPDATE_TYPE_vals[] = {
2192
  {   0, "roaming-location-updating" },
2193
  {   1, "temporary-registration" },
2194
  {   2, "periodic-location-updating" },
2195
  {   3, "itsi-attach" },
2196
  {   4, "call-restoration-roaming" },
2197
  {   5, "migrating-or-call-restoration-migrating" },
2198
  {   6, "demand-location-updating" },
2199
  {   7, "disabled-MS-updating" },
2200
  { 0, NULL }
2201
};
2202
2203
2204
static unsigned
2205
0
dissect_tetra_UPDATE_TYPE(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2206
0
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2207
0
                                     8, NULL, false, 0, NULL);
2208
2209
0
  return offset;
2210
0
}
2211
2212
2213
2214
static unsigned
2215
0
dissect_tetra_BOOLEAN(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2216
0
  offset = dissect_per_boolean(tvb, offset, actx, tree, hf_index, NULL);
2217
2218
0
  return offset;
2219
0
}
2220
2221
2222
static const value_string tetra_T_cipher_control_choice_vals[] = {
2223
  {   0, "no-cipher" },
2224
  {   1, "ciphering-parameters" },
2225
  { 0, NULL }
2226
};
2227
2228
static const per_choice_t T_cipher_control_choice_choice[] = {
2229
  {   0, &hf_tetra_no_cipher     , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2230
  {   1, &hf_tetra_ciphering_parameters, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_1023 },
2231
  { 0, NULL, 0, NULL }
2232
};
2233
2234
static unsigned
2235
0
dissect_tetra_T_cipher_control_choice(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2236
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2237
0
                                 ett_tetra_T_cipher_control_choice, T_cipher_control_choice_choice,
2238
0
                                 NULL);
2239
2240
0
  return offset;
2241
0
}
2242
2243
2244
static const value_string tetra_T_class_of_MS_vals[] = {
2245
  {   0, "none" },
2246
  {   1, "class-of-MS" },
2247
  { 0, NULL }
2248
};
2249
2250
static const per_choice_t T_class_of_MS_choice[] = {
2251
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2252
  {   1, &hf_tetra_class_of_MS_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_16777215 },
2253
  { 0, NULL, 0, NULL }
2254
};
2255
2256
static unsigned
2257
0
dissect_tetra_T_class_of_MS(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2258
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2259
0
                                 ett_tetra_T_class_of_MS, T_class_of_MS_choice,
2260
0
                                 NULL);
2261
2262
0
  return offset;
2263
0
}
2264
2265
2266
static const value_string tetra_T_energy_saving_mode_01_vals[] = {
2267
  {   0, "none" },
2268
  {   1, "energy-saving-mode" },
2269
  { 0, NULL }
2270
};
2271
2272
static const per_choice_t T_energy_saving_mode_01_choice[] = {
2273
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2274
  {   1, &hf_tetra_energy_saving_mode_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_7 },
2275
  { 0, NULL, 0, NULL }
2276
};
2277
2278
static unsigned
2279
0
dissect_tetra_T_energy_saving_mode_01(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2280
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2281
0
                                 ett_tetra_T_energy_saving_mode_01, T_energy_saving_mode_01_choice,
2282
0
                                 NULL);
2283
2284
0
  return offset;
2285
0
}
2286
2287
2288
static const value_string tetra_T_la_information_vals[] = {
2289
  {   0, "none" },
2290
  {   1, "la-information" },
2291
  { 0, NULL }
2292
};
2293
2294
static const per_choice_t T_la_information_choice[] = {
2295
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2296
  {   1, &hf_tetra_la_information_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_16383 },
2297
  { 0, NULL, 0, NULL }
2298
};
2299
2300
static unsigned
2301
0
dissect_tetra_T_la_information(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2302
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2303
0
                                 ett_tetra_T_la_information, T_la_information_choice,
2304
0
                                 NULL);
2305
2306
0
  return offset;
2307
0
}
2308
2309
2310
2311
static unsigned
2312
0
dissect_tetra_OCTET_STRING_SIZE_3(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2313
0
  offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
2314
0
                                       3, 3, false, NULL);
2315
2316
0
  return offset;
2317
0
}
2318
2319
2320
static const value_string tetra_T_ssi_choice_01_vals[] = {
2321
  {   0, "none" },
2322
  {   1, "ssi" },
2323
  { 0, NULL }
2324
};
2325
2326
static const per_choice_t T_ssi_choice_01_choice[] = {
2327
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2328
  {   1, &hf_tetra_ssi_oct_str   , ASN1_NO_EXTENSIONS     , dissect_tetra_OCTET_STRING_SIZE_3 },
2329
  { 0, NULL, 0, NULL }
2330
};
2331
2332
static unsigned
2333
0
dissect_tetra_T_ssi_choice_01(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2334
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2335
0
                                 ett_tetra_T_ssi_choice_01, T_ssi_choice_01_choice,
2336
0
                                 NULL);
2337
2338
0
  return offset;
2339
0
}
2340
2341
2342
static const value_string tetra_T_address_extension_choice_01_vals[] = {
2343
  {   0, "none" },
2344
  {   1, "address-extension" },
2345
  { 0, NULL }
2346
};
2347
2348
static const per_choice_t T_address_extension_choice_01_choice[] = {
2349
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2350
  {   1, &hf_tetra_address_extension, ASN1_NO_EXTENSIONS     , dissect_tetra_OCTET_STRING_SIZE_3 },
2351
  { 0, NULL, 0, NULL }
2352
};
2353
2354
static unsigned
2355
0
dissect_tetra_T_address_extension_choice_01(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2356
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2357
0
                                 ett_tetra_T_address_extension_choice_01, T_address_extension_choice_01_choice,
2358
0
                                 NULL);
2359
2360
0
  return offset;
2361
0
}
2362
2363
2364
static const value_string tetra_TYPE3_IDENTIFIER_vals[] = {
2365
  {   0, "reserved" },
2366
  {   1, "default-group-attachment-lifetime" },
2367
  {   2, "new-registered-area" },
2368
  {   3, "group-identity-location-demand" },
2369
  {   4, "group-report-response" },
2370
  {   5, "group-identity-location-accept" },
2371
  {   6, "dm-ms-address" },
2372
  {   7, "group-identity-downlink" },
2373
  {   8, "group-identity-uplink" },
2374
  {   9, "authentication-uplink" },
2375
  {  10, "authentication-downlink" },
2376
  {  11, "reserved" },
2377
  {  12, "reserved1" },
2378
  {  13, "reserved2" },
2379
  {  14, "reserved3" },
2380
  {  15, "proprietary" },
2381
  { 0, NULL }
2382
};
2383
2384
2385
static unsigned
2386
0
dissect_tetra_TYPE3_IDENTIFIER(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2387
0
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2388
0
                                     16, NULL, false, 0, NULL);
2389
2390
0
  return offset;
2391
0
}
2392
2393
2394
static const value_string tetra_T_group_identity_location_demand_vals[] = {
2395
  {   0, "none" },
2396
  {   1, "group-identity-location-demand" },
2397
  { 0, NULL }
2398
};
2399
2400
static const per_choice_t T_group_identity_location_demand_choice[] = {
2401
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2402
  {   1, &hf_tetra_group_identity_location_demand_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_3 },
2403
  { 0, NULL, 0, NULL }
2404
};
2405
2406
static unsigned
2407
0
dissect_tetra_T_group_identity_location_demand(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2408
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2409
0
                                 ett_tetra_T_group_identity_location_demand, T_group_identity_location_demand_choice,
2410
0
                                 NULL);
2411
2412
0
  return offset;
2413
0
}
2414
2415
2416
static const value_string tetra_T_group_report_response_choice_vals[] = {
2417
  {   0, "none" },
2418
  {   1, "group-report-response" },
2419
  { 0, NULL }
2420
};
2421
2422
static const per_choice_t T_group_report_response_choice_choice[] = {
2423
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2424
  {   1, &hf_tetra_group_report_response, ASN1_NO_EXTENSIONS     , dissect_tetra_BOOLEAN },
2425
  { 0, NULL, 0, NULL }
2426
};
2427
2428
static unsigned
2429
0
dissect_tetra_T_group_report_response_choice(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2430
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2431
0
                                 ett_tetra_T_group_report_response_choice, T_group_report_response_choice_choice,
2432
0
                                 NULL);
2433
2434
0
  return offset;
2435
0
}
2436
2437
2438
static const value_string tetra_T_group_identity_uplink_vals[] = {
2439
  {   0, "none" },
2440
  {   1, "group-identity-uplink" },
2441
  { 0, NULL }
2442
};
2443
2444
static const per_choice_t T_group_identity_uplink_choice[] = {
2445
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2446
  {   1, &hf_tetra_group_identity_uplink_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_15 },
2447
  { 0, NULL, 0, NULL }
2448
};
2449
2450
static unsigned
2451
0
dissect_tetra_T_group_identity_uplink(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2452
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2453
0
                                 ett_tetra_T_group_identity_uplink, T_group_identity_uplink_choice,
2454
0
                                 NULL);
2455
2456
0
  return offset;
2457
0
}
2458
2459
2460
static const value_string tetra_T_proprietary_01_vals[] = {
2461
  {   0, "none" },
2462
  {   1, "proprietary" },
2463
  { 0, NULL }
2464
};
2465
2466
static const per_choice_t T_proprietary_01_choice[] = {
2467
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2468
  {   1, &hf_tetra_proprietary_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_7 },
2469
  { 0, NULL, 0, NULL }
2470
};
2471
2472
static unsigned
2473
0
dissect_tetra_T_proprietary_01(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2474
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2475
0
                                 ett_tetra_T_proprietary_01, T_proprietary_01_choice,
2476
0
                                 NULL);
2477
2478
0
  return offset;
2479
0
}
2480
2481
2482
static const per_sequence_t T_type3_elements_01_sequence[] = {
2483
  { &hf_tetra_type3_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_TYPE3_IDENTIFIER },
2484
  { &hf_tetra_group_identity_location_demand, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_group_identity_location_demand },
2485
  { &hf_tetra_group_report_response_choice, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_group_report_response_choice },
2486
  { &hf_tetra_group_identity_uplink, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_group_identity_uplink },
2487
  { &hf_tetra_proprietary_02, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_proprietary_01 },
2488
  { NULL, 0, 0, NULL }
2489
};
2490
2491
static unsigned
2492
0
dissect_tetra_T_type3_elements_01(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2493
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2494
0
                                   ett_tetra_T_type3_elements_01, T_type3_elements_01_sequence);
2495
2496
0
  return offset;
2497
0
}
2498
2499
2500
static const value_string tetra_T_type3_01_vals[] = {
2501
  {   0, "no-type3" },
2502
  {   1, "type3-elements" },
2503
  { 0, NULL }
2504
};
2505
2506
static const per_choice_t T_type3_01_choice[] = {
2507
  {   0, &hf_tetra_no_type3      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2508
  {   1, &hf_tetra_type3_elements_01, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type3_elements_01 },
2509
  { 0, NULL, 0, NULL }
2510
};
2511
2512
static unsigned
2513
0
dissect_tetra_T_type3_01(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2514
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2515
0
                                 ett_tetra_T_type3_01, T_type3_01_choice,
2516
0
                                 NULL);
2517
2518
0
  return offset;
2519
0
}
2520
2521
2522
static const per_sequence_t T_type2_parameters_04_sequence[] = {
2523
  { &hf_tetra_class_of_MS   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_class_of_MS },
2524
  { &hf_tetra_energy_saving_mode_02, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_energy_saving_mode_01 },
2525
  { &hf_tetra_la_information, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_la_information },
2526
  { &hf_tetra_ssi_choice_01 , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_ssi_choice_01 },
2527
  { &hf_tetra_address_extension_choice_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_address_extension_choice_01 },
2528
  { &hf_tetra_type3_01      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_type3_01 },
2529
  { NULL, 0, 0, NULL }
2530
};
2531
2532
static unsigned
2533
0
dissect_tetra_T_type2_parameters_04(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2534
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2535
0
                                   ett_tetra_T_type2_parameters_04, T_type2_parameters_04_sequence);
2536
2537
0
  return offset;
2538
0
}
2539
2540
2541
static const value_string tetra_T_optional_elements_10_vals[] = {
2542
  {   0, "no-type2" },
2543
  {   1, "type2-parameters" },
2544
  { 0, NULL }
2545
};
2546
2547
static const per_choice_t T_optional_elements_10_choice[] = {
2548
  {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2549
  {   1, &hf_tetra_type2_parameters_04, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_parameters_04 },
2550
  { 0, NULL, 0, NULL }
2551
};
2552
2553
static unsigned
2554
0
dissect_tetra_T_optional_elements_10(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2555
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2556
0
                                 ett_tetra_T_optional_elements_10, T_optional_elements_10_choice,
2557
0
                                 NULL);
2558
2559
0
  return offset;
2560
0
}
2561
2562
2563
static const per_sequence_t U_LOCATION_UPDATE_DEMAND_sequence[] = {
2564
  { &hf_tetra_location_update_type, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_UPDATE_TYPE },
2565
  { &hf_tetra_request_to_append_LA, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
2566
  { &hf_tetra_cipher_control_choice, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_cipher_control_choice },
2567
  { &hf_tetra_optional_elements_10, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_10 },
2568
  { NULL, 0, 0, NULL }
2569
};
2570
2571
static unsigned
2572
0
dissect_tetra_U_LOCATION_UPDATE_DEMAND(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2573
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2574
0
                                   ett_tetra_U_LOCATION_UPDATE_DEMAND, U_LOCATION_UPDATE_DEMAND_sequence);
2575
2576
0
  col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-LOCATION-UPDATE-DEMAND");
2577
2578
0
  return offset;
2579
0
}
2580
2581
2582
static const value_string tetra_T_scanning_on_off_vals[] = {
2583
  {   0, "on" },
2584
  {   1, "off" },
2585
  { 0, NULL }
2586
};
2587
2588
2589
static unsigned
2590
0
dissect_tetra_T_scanning_on_off(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2591
0
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2592
0
                                     2, NULL, false, 0, NULL);
2593
2594
0
  return offset;
2595
0
}
2596
2597
2598
static const per_sequence_t U_MM_STATUS_sequence[] = {
2599
  { &hf_tetra_status_uplink , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_63 },
2600
  { &hf_tetra_scanning_on_off, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_scanning_on_off },
2601
  { NULL, 0, 0, NULL }
2602
};
2603
2604
static unsigned
2605
0
dissect_tetra_U_MM_STATUS(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2606
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2607
0
                                   ett_tetra_U_MM_STATUS, U_MM_STATUS_sequence);
2608
2609
0
  col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-MM-STATUS");
2610
2611
0
  return offset;
2612
0
}
2613
2614
2615
2616
static unsigned
2617
0
dissect_tetra_INTEGER_0_2047(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2618
0
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
2619
0
                                                            0U, 2047U, NULL, false);
2620
2621
0
  return offset;
2622
0
}
2623
2624
2625
static const per_sequence_t T_attach_01_sequence[] = {
2626
  { &hf_tetra_class_of_usage, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
2627
  { NULL, 0, 0, NULL }
2628
};
2629
2630
static unsigned
2631
0
dissect_tetra_T_attach_01(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2632
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2633
0
                                   ett_tetra_T_attach_01, T_attach_01_sequence);
2634
2635
0
  return offset;
2636
0
}
2637
2638
2639
static const value_string tetra_T_detach_uplike_vals[] = {
2640
  {   0, "unknow-gssi" },
2641
  {   1, "invalid-cipher" },
2642
  {   2, "user-intitial" },
2643
  {   3, "reserved" },
2644
  { 0, NULL }
2645
};
2646
2647
2648
static unsigned
2649
0
dissect_tetra_T_detach_uplike(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2650
0
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2651
0
                                     4, NULL, false, 0, NULL);
2652
2653
0
  return offset;
2654
0
}
2655
2656
2657
static const per_sequence_t T_detach_01_sequence[] = {
2658
  { &hf_tetra_detach_uplike , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_detach_uplike },
2659
  { NULL, 0, 0, NULL }
2660
};
2661
2662
static unsigned
2663
0
dissect_tetra_T_detach_01(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2664
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2665
0
                                   ett_tetra_T_detach_01, T_detach_01_sequence);
2666
2667
0
  return offset;
2668
0
}
2669
2670
2671
static const value_string tetra_T_attach_detach_identifier_01_vals[] = {
2672
  {   0, "attach" },
2673
  {   1, "detach" },
2674
  { 0, NULL }
2675
};
2676
2677
static const per_choice_t T_attach_detach_identifier_01_choice[] = {
2678
  {   0, &hf_tetra_attach_01     , ASN1_NO_EXTENSIONS     , dissect_tetra_T_attach_01 },
2679
  {   1, &hf_tetra_detach_01     , ASN1_NO_EXTENSIONS     , dissect_tetra_T_detach_01 },
2680
  { 0, NULL, 0, NULL }
2681
};
2682
2683
static unsigned
2684
0
dissect_tetra_T_attach_detach_identifier_01(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2685
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2686
0
                                 ett_tetra_T_attach_detach_identifier_01, T_attach_detach_identifier_01_choice,
2687
0
                                 NULL);
2688
2689
0
  return offset;
2690
0
}
2691
2692
2693
static const per_sequence_t T_gssi_extension_01_sequence[] = {
2694
  { &hf_tetra_gssi_oct_str  , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_OCTET_STRING_SIZE_3 },
2695
  { &hf_tetra_extension     , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_OCTET_STRING_SIZE_3 },
2696
  { NULL, 0, 0, NULL }
2697
};
2698
2699
static unsigned
2700
0
dissect_tetra_T_gssi_extension_01(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2701
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2702
0
                                   ett_tetra_T_gssi_extension_01, T_gssi_extension_01_sequence);
2703
2704
0
  return offset;
2705
0
}
2706
2707
2708
static const value_string tetra_T_address_type_01_vals[] = {
2709
  {   0, "gssi" },
2710
  {   1, "gssi-extension" },
2711
  {   2, "vgssi" },
2712
  { 0, NULL }
2713
};
2714
2715
static const per_choice_t T_address_type_01_choice[] = {
2716
  {   0, &hf_tetra_gssi_oct_str  , ASN1_NO_EXTENSIONS     , dissect_tetra_OCTET_STRING_SIZE_3 },
2717
  {   1, &hf_tetra_gssi_extension_01, ASN1_NO_EXTENSIONS     , dissect_tetra_T_gssi_extension_01 },
2718
  {   2, &hf_tetra_vgssi         , ASN1_NO_EXTENSIONS     , dissect_tetra_OCTET_STRING_SIZE_3 },
2719
  { 0, NULL, 0, NULL }
2720
};
2721
2722
static unsigned
2723
0
dissect_tetra_T_address_type_01(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2724
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2725
0
                                 ett_tetra_T_address_type_01, T_address_type_01_choice,
2726
0
                                 NULL);
2727
2728
0
  return offset;
2729
0
}
2730
2731
2732
static const per_sequence_t GROUP_IDENTITY_UPLINK_sequence[] = {
2733
  { &hf_tetra_attach_detach_identifier_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_attach_detach_identifier_01 },
2734
  { &hf_tetra_address_type_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_address_type_01 },
2735
  { NULL, 0, 0, NULL }
2736
};
2737
2738
static unsigned
2739
0
dissect_tetra_GROUP_IDENTITY_UPLINK(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2740
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2741
0
                                   ett_tetra_GROUP_IDENTITY_UPLINK, GROUP_IDENTITY_UPLINK_sequence);
2742
2743
0
  return offset;
2744
0
}
2745
2746
2747
static const per_sequence_t T_type3_elements_02_sequence[] = {
2748
  { &hf_tetra_type3_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_TYPE3_IDENTIFIER },
2749
  { &hf_tetra_length        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_2047 },
2750
  { &hf_tetra_repeat_num    , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_63 },
2751
  { &hf_tetra_group_identity_uplink_02, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_GROUP_IDENTITY_UPLINK },
2752
  { NULL, 0, 0, NULL }
2753
};
2754
2755
static unsigned
2756
0
dissect_tetra_T_type3_elements_02(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2757
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2758
0
                                   ett_tetra_T_type3_elements_02, T_type3_elements_02_sequence);
2759
2760
0
  return offset;
2761
0
}
2762
2763
2764
static const value_string tetra_T_type3_02_vals[] = {
2765
  {   0, "no-type3" },
2766
  {   1, "type3-elements" },
2767
  { 0, NULL }
2768
};
2769
2770
static const per_choice_t T_type3_02_choice[] = {
2771
  {   0, &hf_tetra_no_type3      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2772
  {   1, &hf_tetra_type3_elements_02, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type3_elements_02 },
2773
  { 0, NULL, 0, NULL }
2774
};
2775
2776
static unsigned
2777
0
dissect_tetra_T_type3_02(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2778
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2779
0
                                 ett_tetra_T_type3_02, T_type3_02_choice,
2780
0
                                 NULL);
2781
2782
0
  return offset;
2783
0
}
2784
2785
2786
static const per_sequence_t T_type2_element_04_sequence[] = {
2787
  { &hf_tetra_type3_02      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_type3_02 },
2788
  { NULL, 0, 0, NULL }
2789
};
2790
2791
static unsigned
2792
0
dissect_tetra_T_type2_element_04(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2793
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2794
0
                                   ett_tetra_T_type2_element_04, T_type2_element_04_sequence);
2795
2796
0
  return offset;
2797
0
}
2798
2799
2800
static const value_string tetra_T_optional_elements_11_vals[] = {
2801
  {   0, "no-type2" },
2802
  {   1, "type2-element" },
2803
  { 0, NULL }
2804
};
2805
2806
static const per_choice_t T_optional_elements_11_choice[] = {
2807
  {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2808
  {   1, &hf_tetra_type2_element_04, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_element_04 },
2809
  { 0, NULL, 0, NULL }
2810
};
2811
2812
static unsigned
2813
0
dissect_tetra_T_optional_elements_11(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2814
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2815
0
                                 ett_tetra_T_optional_elements_11, T_optional_elements_11_choice,
2816
0
                                 NULL);
2817
2818
0
  return offset;
2819
0
}
2820
2821
2822
static const per_sequence_t U_ATTACH_DETACH_GROUP_IDENTITY_sequence[] = {
2823
  { &hf_tetra_group_identity_report, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
2824
  { &hf_tetra_group_identity_attach_detach_mode, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
2825
  { &hf_tetra_optional_elements_11, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_11 },
2826
  { NULL, 0, 0, NULL }
2827
};
2828
2829
static unsigned
2830
0
dissect_tetra_U_ATTACH_DETACH_GROUP_IDENTITY(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2831
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2832
0
                                   ett_tetra_U_ATTACH_DETACH_GROUP_IDENTITY, U_ATTACH_DETACH_GROUP_IDENTITY_sequence);
2833
2834
0
  col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-ATTACH-DETACH-GROUP-IDENTITY");
2835
2836
0
  return offset;
2837
0
}
2838
2839
2840
static const per_sequence_t T_type3_elements_03_sequence[] = {
2841
  { &hf_tetra_type3_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_TYPE3_IDENTIFIER },
2842
  { &hf_tetra_length        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_2047 },
2843
  { &hf_tetra_repeat_num    , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_63 },
2844
  { &hf_tetra_group_identity_uplink_02, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_GROUP_IDENTITY_UPLINK },
2845
  { NULL, 0, 0, NULL }
2846
};
2847
2848
static unsigned
2849
0
dissect_tetra_T_type3_elements_03(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2850
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2851
0
                                   ett_tetra_T_type3_elements_03, T_type3_elements_03_sequence);
2852
2853
0
  return offset;
2854
0
}
2855
2856
2857
static const value_string tetra_T_type3_03_vals[] = {
2858
  {   0, "no-type3" },
2859
  {   1, "type3-elements" },
2860
  { 0, NULL }
2861
};
2862
2863
static const per_choice_t T_type3_03_choice[] = {
2864
  {   0, &hf_tetra_no_type3      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2865
  {   1, &hf_tetra_type3_elements_03, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type3_elements_03 },
2866
  { 0, NULL, 0, NULL }
2867
};
2868
2869
static unsigned
2870
0
dissect_tetra_T_type3_03(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2871
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2872
0
                                 ett_tetra_T_type3_03, T_type3_03_choice,
2873
0
                                 NULL);
2874
2875
0
  return offset;
2876
0
}
2877
2878
2879
static const per_sequence_t T_type2_element_05_sequence[] = {
2880
  { &hf_tetra_type3_03      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_type3_03 },
2881
  { NULL, 0, 0, NULL }
2882
};
2883
2884
static unsigned
2885
0
dissect_tetra_T_type2_element_05(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2886
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2887
0
                                   ett_tetra_T_type2_element_05, T_type2_element_05_sequence);
2888
2889
0
  return offset;
2890
0
}
2891
2892
2893
static const value_string tetra_T_optional_elements_12_vals[] = {
2894
  {   0, "no-type2" },
2895
  {   1, "type2-element" },
2896
  { 0, NULL }
2897
};
2898
2899
static const per_choice_t T_optional_elements_12_choice[] = {
2900
  {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2901
  {   1, &hf_tetra_type2_element_05, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_element_05 },
2902
  { 0, NULL, 0, NULL }
2903
};
2904
2905
static unsigned
2906
0
dissect_tetra_T_optional_elements_12(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2907
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2908
0
                                 ett_tetra_T_optional_elements_12, T_optional_elements_12_choice,
2909
0
                                 NULL);
2910
2911
0
  return offset;
2912
0
}
2913
2914
2915
static const per_sequence_t U_ATTACH_DETACH_GROUP_IDENTITY_ACK_sequence[] = {
2916
  { &hf_tetra_group_identity_ack_type, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
2917
  { &hf_tetra_group_identity_attach_detach_mode, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
2918
  { &hf_tetra_optional_elements_12, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_12 },
2919
  { NULL, 0, 0, NULL }
2920
};
2921
2922
static unsigned
2923
0
dissect_tetra_U_ATTACH_DETACH_GROUP_IDENTITY_ACK(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2924
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2925
0
                                   ett_tetra_U_ATTACH_DETACH_GROUP_IDENTITY_ACK, U_ATTACH_DETACH_GROUP_IDENTITY_ACK_sequence);
2926
2927
0
    col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-ATTACH-DETACH-GROUP-IDENTITY-ACK");
2928
2929
0
  return offset;
2930
0
}
2931
2932
2933
static const value_string tetra_U_MM_PDU_vals[] = {
2934
  {   0, "u-Authentication" },
2935
  {   1, "u-Itsi-Detach" },
2936
  {   2, "u-Location-Update-Demand" },
2937
  {   3, "u-MM-Status" },
2938
  {   4, "u-MM-reserved1" },
2939
  {   5, "u-WK" },
2940
  {   6, "u-MM-reserved3" },
2941
  {   7, "u-Attach-Detach-Group-Identity" },
2942
  {   8, "u-Attach-Detach-Group-Identity-Ack" },
2943
  {   9, "u-TEI-Provide" },
2944
  {  10, "u-MM-reserved6" },
2945
  {  11, "u-Disabled-Status" },
2946
  {  12, "u-MM-reserved7" },
2947
  {  13, "u-MM-reserved8" },
2948
  {  14, "u-MM-reserved9" },
2949
  {  15, "u-MM-Function-Not-Support" },
2950
  { 0, NULL }
2951
};
2952
2953
static const per_choice_t U_MM_PDU_choice[] = {
2954
  {   0, &hf_tetra_u_Authentication, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2955
  {   1, &hf_tetra_u_Itsi_Detach , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2956
  {   2, &hf_tetra_u_Location_Update_Demand, ASN1_NO_EXTENSIONS     , dissect_tetra_U_LOCATION_UPDATE_DEMAND },
2957
  {   3, &hf_tetra_u_MM_Status   , ASN1_NO_EXTENSIONS     , dissect_tetra_U_MM_STATUS },
2958
  {   4, &hf_tetra_u_MM_reserved1, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2959
  {   5, &hf_tetra_u_WK          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2960
  {   6, &hf_tetra_u_MM_reserved3, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2961
  {   7, &hf_tetra_u_Attach_Detach_Group_Identity, ASN1_NO_EXTENSIONS     , dissect_tetra_U_ATTACH_DETACH_GROUP_IDENTITY },
2962
  {   8, &hf_tetra_u_Attach_Detach_Group_Identity_Ack, ASN1_NO_EXTENSIONS     , dissect_tetra_U_ATTACH_DETACH_GROUP_IDENTITY_ACK },
2963
  {   9, &hf_tetra_u_TEI_Provide , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2964
  {  10, &hf_tetra_u_MM_reserved6, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2965
  {  11, &hf_tetra_u_Disabled_Status, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2966
  {  12, &hf_tetra_u_MM_reserved7, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2967
  {  13, &hf_tetra_u_MM_reserved8, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2968
  {  14, &hf_tetra_u_MM_reserved9, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2969
  {  15, &hf_tetra_u_MM_Function_Not_Support, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
2970
  { 0, NULL, 0, NULL }
2971
};
2972
2973
static unsigned
2974
0
dissect_tetra_U_MM_PDU(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2975
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2976
0
                                 ett_tetra_U_MM_PDU, U_MM_PDU_choice,
2977
0
                                 NULL);
2978
2979
0
  return offset;
2980
0
}
2981
2982
2983
static const value_string tetra_T_simplex_duplex_selection_vals[] = {
2984
  {   0, "simplex" },
2985
  {   1, "duplex" },
2986
  { 0, NULL }
2987
};
2988
2989
2990
static unsigned
2991
0
dissect_tetra_T_simplex_duplex_selection(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2992
0
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2993
0
                                     2, NULL, false, 0, NULL);
2994
2995
0
  return offset;
2996
0
}
2997
2998
2999
static const value_string tetra_CIRCUIT_vals[] = {
3000
  {   0, "speech-tch-s" },
3001
  {   1, "unprotected-tch-7-2" },
3002
  {   2, "low-protection-tch-4-8" },
3003
  {   3, "low-protection-tch-4-8" },
3004
  {   4, "low-protection-tch-4-8" },
3005
  {   5, "high-protection-tch-2-4" },
3006
  {   6, "high-protection-tch-2-4" },
3007
  {   7, "high-protection-tch-2-4" },
3008
  { 0, NULL }
3009
};
3010
3011
3012
static unsigned
3013
0
dissect_tetra_CIRCUIT(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3014
0
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
3015
0
                                     8, NULL, false, 0, NULL);
3016
3017
0
  return offset;
3018
0
}
3019
3020
3021
static const per_sequence_t Basic_service_information_sequence[] = {
3022
  { &hf_tetra_circuit_mode  , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_CIRCUIT },
3023
  { &hf_tetra_encryption    , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
3024
  { &hf_tetra_communication , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
3025
  { &hf_tetra_slots_or_speech, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
3026
  { NULL, 0, 0, NULL }
3027
};
3028
3029
static unsigned
3030
0
dissect_tetra_Basic_service_information(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3031
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3032
0
                                   ett_tetra_Basic_service_information, Basic_service_information_sequence);
3033
3034
0
  return offset;
3035
0
}
3036
3037
3038
static const value_string tetra_T_basic_service_information_vals[] = {
3039
  {   0, "none" },
3040
  {   1, "basic-service-information" },
3041
  { 0, NULL }
3042
};
3043
3044
static const per_choice_t T_basic_service_information_choice[] = {
3045
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
3046
  {   1, &hf_tetra_basic_service_information, ASN1_NO_EXTENSIONS     , dissect_tetra_Basic_service_information },
3047
  { 0, NULL, 0, NULL }
3048
};
3049
3050
static unsigned
3051
0
dissect_tetra_T_basic_service_information(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3052
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3053
0
                                 ett_tetra_T_basic_service_information, T_basic_service_information_choice,
3054
0
                                 NULL);
3055
3056
0
  return offset;
3057
0
}
3058
3059
3060
3061
static unsigned
3062
0
dissect_tetra_Proprietary_element_owner(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3063
0
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
3064
0
                                                            0U, 255U, NULL, false);
3065
3066
0
  return offset;
3067
0
}
3068
3069
3070
3071
static unsigned
3072
0
dissect_tetra_BIT_STRING(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3073
0
  offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
3074
0
                                     NO_BOUND, NO_BOUND, false, NULL, 0, NULL, NULL);
3075
3076
0
  return offset;
3077
0
}
3078
3079
3080
static const per_sequence_t Type1_sequence[] = {
3081
  { &hf_tetra_proprietary_element_owner, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Proprietary_element_owner },
3082
  { &hf_tetra_proprietary_element_owner_extension, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BIT_STRING },
3083
  { NULL, 0, 0, NULL }
3084
};
3085
3086
static unsigned
3087
0
dissect_tetra_Type1(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3088
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3089
0
                                   ett_tetra_Type1, Type1_sequence);
3090
3091
0
  return offset;
3092
0
}
3093
3094
3095
static const per_sequence_t Type2_sequence[] = {
3096
  { &hf_tetra_proprietary_element_owner, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Proprietary_element_owner },
3097
  { NULL, 0, 0, NULL }
3098
};
3099
3100
static unsigned
3101
0
dissect_tetra_Type2(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3102
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3103
0
                                   ett_tetra_Type2, Type2_sequence);
3104
3105
0
  return offset;
3106
0
}
3107
3108
3109
static const value_string tetra_T_data_01_vals[] = {
3110
  {   0, "element1" },
3111
  {   1, "element" },
3112
  { 0, NULL }
3113
};
3114
3115
static const per_choice_t T_data_01_choice[] = {
3116
  {   0, &hf_tetra_element1      , ASN1_NO_EXTENSIONS     , dissect_tetra_Type1 },
3117
  {   1, &hf_tetra_element       , ASN1_NO_EXTENSIONS     , dissect_tetra_Type2 },
3118
  { 0, NULL, 0, NULL }
3119
};
3120
3121
static unsigned
3122
0
dissect_tetra_T_data_01(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3123
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3124
0
                                 ett_tetra_T_data_01, T_data_01_choice,
3125
0
                                 NULL);
3126
3127
0
  return offset;
3128
0
}
3129
3130
3131
static const per_sequence_t Proprietary_sequence[] = {
3132
  { &hf_tetra_data_01       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_data_01 },
3133
  { NULL, 0, 0, NULL }
3134
};
3135
3136
static unsigned
3137
0
dissect_tetra_Proprietary(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3138
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3139
0
                                   ett_tetra_Proprietary, Proprietary_sequence);
3140
3141
0
  return offset;
3142
0
}
3143
3144
3145
static const value_string tetra_T_prop_01_vals[] = {
3146
  {   0, "none" },
3147
  {   1, "prop" },
3148
  { 0, NULL }
3149
};
3150
3151
static const per_choice_t T_prop_01_choice[] = {
3152
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
3153
  {   1, &hf_tetra_prop_01       , ASN1_NO_EXTENSIONS     , dissect_tetra_Proprietary },
3154
  { 0, NULL, 0, NULL }
3155
};
3156
3157
static unsigned
3158
0
dissect_tetra_T_prop_01(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3159
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3160
0
                                 ett_tetra_T_prop_01, T_prop_01_choice,
3161
0
                                 NULL);
3162
3163
0
  return offset;
3164
0
}
3165
3166
3167
static const per_sequence_t T_type2_parameters_06_sequence[] = {
3168
  { &hf_tetra_basic_service_information_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_basic_service_information },
3169
  { &hf_tetra_prop_02       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop_01 },
3170
  { NULL, 0, 0, NULL }
3171
};
3172
3173
static unsigned
3174
0
dissect_tetra_T_type2_parameters_06(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3175
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3176
0
                                   ett_tetra_T_type2_parameters_06, T_type2_parameters_06_sequence);
3177
3178
0
  return offset;
3179
0
}
3180
3181
3182
static const value_string tetra_T_optional_elements_14_vals[] = {
3183
  {   0, "no-type2" },
3184
  {   1, "type2-parameters" },
3185
  { 0, NULL }
3186
};
3187
3188
static const per_choice_t T_optional_elements_14_choice[] = {
3189
  {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
3190
  {   1, &hf_tetra_type2_parameters_06, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_parameters_06 },
3191
  { 0, NULL, 0, NULL }
3192
};
3193
3194
static unsigned
3195
0
dissect_tetra_T_optional_elements_14(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3196
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3197
0
                                 ett_tetra_T_optional_elements_14, T_optional_elements_14_choice,
3198
0
                                 NULL);
3199
3200
0
  return offset;
3201
0
}
3202
3203
3204
static const per_sequence_t U_ALERT_sequence[] = {
3205
  { &hf_tetra_call_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
3206
  { &hf_tetra_reserved_01   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
3207
  { &hf_tetra_simplex_duplex_selection, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_simplex_duplex_selection },
3208
  { &hf_tetra_optional_elements_14, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_14 },
3209
  { NULL, 0, 0, NULL }
3210
};
3211
3212
static unsigned
3213
0
dissect_tetra_U_ALERT(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3214
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3215
0
                                   ett_tetra_U_ALERT, U_ALERT_sequence);
3216
3217
0
  col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-ALERT");
3218
3219
0
  return offset;
3220
0
}
3221
3222
3223
static const value_string tetra_T_simplex_duplex_selection_01_vals[] = {
3224
  {   0, "simplex" },
3225
  {   1, "duplex" },
3226
  { 0, NULL }
3227
};
3228
3229
3230
static unsigned
3231
0
dissect_tetra_T_simplex_duplex_selection_01(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3232
0
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
3233
0
                                     2, NULL, false, 0, NULL);
3234
3235
0
  return offset;
3236
0
}
3237
3238
3239
static const value_string tetra_T_basic_service_information_01_vals[] = {
3240
  {   0, "none" },
3241
  {   1, "basic-service-information" },
3242
  { 0, NULL }
3243
};
3244
3245
static const per_choice_t T_basic_service_information_01_choice[] = {
3246
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
3247
  {   1, &hf_tetra_basic_service_information, ASN1_NO_EXTENSIONS     , dissect_tetra_Basic_service_information },
3248
  { 0, NULL, 0, NULL }
3249
};
3250
3251
static unsigned
3252
0
dissect_tetra_T_basic_service_information_01(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3253
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3254
0
                                 ett_tetra_T_basic_service_information_01, T_basic_service_information_01_choice,
3255
0
                                 NULL);
3256
3257
0
  return offset;
3258
0
}
3259
3260
3261
static const value_string tetra_T_prop_02_vals[] = {
3262
  {   0, "none" },
3263
  {   1, "prop" },
3264
  { 0, NULL }
3265
};
3266
3267
static const per_choice_t T_prop_02_choice[] = {
3268
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
3269
  {   1, &hf_tetra_prop_01       , ASN1_NO_EXTENSIONS     , dissect_tetra_Proprietary },
3270
  { 0, NULL, 0, NULL }
3271
};
3272
3273
static unsigned
3274
0
dissect_tetra_T_prop_02(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3275
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3276
0
                                 ett_tetra_T_prop_02, T_prop_02_choice,
3277
0
                                 NULL);
3278
3279
0
  return offset;
3280
0
}
3281
3282
3283
static const per_sequence_t T_type2_parameters_07_sequence[] = {
3284
  { &hf_tetra_basic_service_information_02, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_basic_service_information_01 },
3285
  { &hf_tetra_prop_03       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop_02 },
3286
  { NULL, 0, 0, NULL }
3287
};
3288
3289
static unsigned
3290
0
dissect_tetra_T_type2_parameters_07(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3291
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3292
0
                                   ett_tetra_T_type2_parameters_07, T_type2_parameters_07_sequence);
3293
3294
0
  return offset;
3295
0
}
3296
3297
3298
static const value_string tetra_T_optional_elements_15_vals[] = {
3299
  {   0, "no-type2" },
3300
  {   1, "type2-parameters" },
3301
  { 0, NULL }
3302
};
3303
3304
static const per_choice_t T_optional_elements_15_choice[] = {
3305
  {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
3306
  {   1, &hf_tetra_type2_parameters_07, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_parameters_07 },
3307
  { 0, NULL, 0, NULL }
3308
};
3309
3310
static unsigned
3311
0
dissect_tetra_T_optional_elements_15(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3312
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3313
0
                                 ett_tetra_T_optional_elements_15, T_optional_elements_15_choice,
3314
0
                                 NULL);
3315
3316
0
  return offset;
3317
0
}
3318
3319
3320
static const per_sequence_t U_CONNECT_sequence[] = {
3321
  { &hf_tetra_call_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
3322
  { &hf_tetra_hook_method_selection, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
3323
  { &hf_tetra_simplex_duplex_selection_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_simplex_duplex_selection_01 },
3324
  { &hf_tetra_optional_elements_15, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_15 },
3325
  { NULL, 0, 0, NULL }
3326
};
3327
3328
static unsigned
3329
0
dissect_tetra_U_CONNECT(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3330
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3331
0
                                   ett_tetra_U_CONNECT, U_CONNECT_sequence);
3332
3333
0
  col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-CONNECT");
3334
3335
0
  return offset;
3336
0
}
3337
3338
3339
3340
static unsigned
3341
3
dissect_tetra_INTEGER_0_31(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3342
3
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
3343
3
                                                            0U, 31U, NULL, false);
3344
3345
3
  return offset;
3346
3
}
3347
3348
3349
static const value_string tetra_T_prop_05_vals[] = {
3350
  {   0, "none" },
3351
  {   1, "prop" },
3352
  { 0, NULL }
3353
};
3354
3355
static const per_choice_t T_prop_05_choice[] = {
3356
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
3357
  {   1, &hf_tetra_prop_01       , ASN1_NO_EXTENSIONS     , dissect_tetra_Proprietary },
3358
  { 0, NULL, 0, NULL }
3359
};
3360
3361
static unsigned
3362
0
dissect_tetra_T_prop_05(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3363
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3364
0
                                 ett_tetra_T_prop_05, T_prop_05_choice,
3365
0
                                 NULL);
3366
3367
0
  return offset;
3368
0
}
3369
3370
3371
static const per_sequence_t T_type2_parameters_10_sequence[] = {
3372
  { &hf_tetra_prop_06       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop_05 },
3373
  { NULL, 0, 0, NULL }
3374
};
3375
3376
static unsigned
3377
0
dissect_tetra_T_type2_parameters_10(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3378
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3379
0
                                   ett_tetra_T_type2_parameters_10, T_type2_parameters_10_sequence);
3380
3381
0
  return offset;
3382
0
}
3383
3384
3385
static const value_string tetra_T_optional_elements_18_vals[] = {
3386
  {   0, "no-type2" },
3387
  {   1, "type2-parameters" },
3388
  { 0, NULL }
3389
};
3390
3391
static const per_choice_t T_optional_elements_18_choice[] = {
3392
  {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
3393
  {   1, &hf_tetra_type2_parameters_10, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_parameters_10 },
3394
  { 0, NULL, 0, NULL }
3395
};
3396
3397
static unsigned
3398
0
dissect_tetra_T_optional_elements_18(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3399
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3400
0
                                 ett_tetra_T_optional_elements_18, T_optional_elements_18_choice,
3401
0
                                 NULL);
3402
3403
0
  return offset;
3404
0
}
3405
3406
3407
static const per_sequence_t U_DISCONNECT_sequence[] = {
3408
  { &hf_tetra_call_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
3409
  { &hf_tetra_disconnect_cause, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_31 },
3410
  { &hf_tetra_optional_elements_18, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_18 },
3411
  { NULL, 0, 0, NULL }
3412
};
3413
3414
static unsigned
3415
0
dissect_tetra_U_DISCONNECT(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3416
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3417
0
                                   ett_tetra_U_DISCONNECT, U_DISCONNECT_sequence);
3418
3419
0
  col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-DISCONNECT");
3420
3421
0
  return offset;
3422
0
}
3423
3424
3425
static const per_sequence_t U_INFO_sequence[] = {
3426
  { &hf_tetra_call_id       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
3427
  { &hf_tetra_poll_response , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
3428
  { NULL, 0, 0, NULL }
3429
};
3430
3431
static unsigned
3432
0
dissect_tetra_U_INFO(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3433
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3434
0
                                   ett_tetra_U_INFO, U_INFO_sequence);
3435
3436
0
  return offset;
3437
0
}
3438
3439
3440
static const per_sequence_t U_RELEASE_sequence[] = {
3441
  { &hf_tetra_call_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
3442
  { &hf_tetra_disconnect_cause, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_31 },
3443
  { NULL, 0, 0, NULL }
3444
};
3445
3446
static unsigned
3447
1
dissect_tetra_U_RELEASE(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3448
1
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3449
1
                                   ett_tetra_U_RELEASE, U_RELEASE_sequence);
3450
3451
1
  col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-RELEASE");
3452
3453
1
  return offset;
3454
1
}
3455
3456
3457
static const value_string tetra_T_simple_duplex_selection_vals[] = {
3458
  {   0, "simplex" },
3459
  {   1, "duplex" },
3460
  { 0, NULL }
3461
};
3462
3463
3464
static unsigned
3465
0
dissect_tetra_T_simple_duplex_selection(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3466
0
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
3467
0
                                     2, NULL, false, 0, NULL);
3468
3469
0
  return offset;
3470
0
}
3471
3472
3473
static const per_sequence_t T_called_party_ssi_extension_sequence[] = {
3474
  { &hf_tetra_called_party_ssi, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16777215 },
3475
  { &hf_tetra_called_party_extention, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16777215 },
3476
  { NULL, 0, 0, NULL }
3477
};
3478
3479
static unsigned
3480
0
dissect_tetra_T_called_party_ssi_extension(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3481
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3482
0
                                   ett_tetra_T_called_party_ssi_extension, T_called_party_ssi_extension_sequence);
3483
3484
0
  return offset;
3485
0
}
3486
3487
3488
static const value_string tetra_Calling_party_address_type_vals[] = {
3489
  {   0, "called-party-sna" },
3490
  {   1, "called-party-ssi" },
3491
  {   2, "called-party-ssi-extension" },
3492
  {   3, "reserved" },
3493
  { 0, NULL }
3494
};
3495
3496
static const per_choice_t Calling_party_address_type_choice[] = {
3497
  {   0, &hf_tetra_called_party_sna, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_255 },
3498
  {   1, &hf_tetra_called_party_ssi, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_16777215 },
3499
  {   2, &hf_tetra_called_party_ssi_extension, ASN1_NO_EXTENSIONS     , dissect_tetra_T_called_party_ssi_extension },
3500
  {   3, &hf_tetra_reserved_03   , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
3501
  { 0, NULL, 0, NULL }
3502
};
3503
3504
static unsigned
3505
0
dissect_tetra_Calling_party_address_type(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3506
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3507
0
                                 ett_tetra_Calling_party_address_type, Calling_party_address_type_choice,
3508
0
                                 NULL);
3509
3510
0
  return offset;
3511
0
}
3512
3513
3514
3515
static unsigned
3516
0
dissect_tetra_Called_party_address_type(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3517
0
  offset = dissect_tetra_Calling_party_address_type(tvb, offset, actx, tree, hf_index);
3518
3519
0
  return offset;
3520
0
}
3521
3522
3523
static const value_string tetra_T_external_subscriber_number_vals[] = {
3524
  {   0, "none" },
3525
  {   1, "external-subscriber-number" },
3526
  { 0, NULL }
3527
};
3528
3529
static const per_choice_t T_external_subscriber_number_choice[] = {
3530
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
3531
  {   1, &hf_tetra_external_subscriber_number_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_31 },
3532
  { 0, NULL, 0, NULL }
3533
};
3534
3535
static unsigned
3536
0
dissect_tetra_T_external_subscriber_number(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3537
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3538
0
                                 ett_tetra_T_external_subscriber_number, T_external_subscriber_number_choice,
3539
0
                                 NULL);
3540
3541
0
  return offset;
3542
0
}
3543
3544
3545
static const value_string tetra_T_prop_vals[] = {
3546
  {   0, "none" },
3547
  {   1, "prop" },
3548
  { 0, NULL }
3549
};
3550
3551
static const per_choice_t T_prop_choice[] = {
3552
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
3553
  {   1, &hf_tetra_prop_01       , ASN1_NO_EXTENSIONS     , dissect_tetra_Proprietary },
3554
  { 0, NULL, 0, NULL }
3555
};
3556
3557
static unsigned
3558
0
dissect_tetra_T_prop(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3559
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3560
0
                                 ett_tetra_T_prop, T_prop_choice,
3561
0
                                 NULL);
3562
3563
0
  return offset;
3564
0
}
3565
3566
3567
static const per_sequence_t T_type2_parameters_05_sequence[] = {
3568
  { &hf_tetra_external_subscriber_number, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_external_subscriber_number },
3569
  { &hf_tetra_prop          , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop },
3570
  { NULL, 0, 0, NULL }
3571
};
3572
3573
static unsigned
3574
0
dissect_tetra_T_type2_parameters_05(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3575
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3576
0
                                   ett_tetra_T_type2_parameters_05, T_type2_parameters_05_sequence);
3577
3578
0
  return offset;
3579
0
}
3580
3581
3582
static const value_string tetra_T_optional_elements_13_vals[] = {
3583
  {   0, "no-type2" },
3584
  {   1, "type2-parameters" },
3585
  { 0, NULL }
3586
};
3587
3588
static const per_choice_t T_optional_elements_13_choice[] = {
3589
  {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
3590
  {   1, &hf_tetra_type2_parameters_05, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_parameters_05 },
3591
  { 0, NULL, 0, NULL }
3592
};
3593
3594
static unsigned
3595
0
dissect_tetra_T_optional_elements_13(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3596
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3597
0
                                 ett_tetra_T_optional_elements_13, T_optional_elements_13_choice,
3598
0
                                 NULL);
3599
3600
0
  return offset;
3601
0
}
3602
3603
3604
static const per_sequence_t U_SETUP_sequence[] = {
3605
  { &hf_tetra_area_selection, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_15 },
3606
  { &hf_tetra_hook_method_selection, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
3607
  { &hf_tetra_simple_duplex_selection, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_simple_duplex_selection },
3608
  { &hf_tetra_basic_service_information, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Basic_service_information },
3609
  { &hf_tetra_request_transmit_send_data, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
3610
  { &hf_tetra_call_priority , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_15 },
3611
  { &hf_tetra_clir_control  , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
3612
  { &hf_tetra_called_party_address, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Called_party_address_type },
3613
  { &hf_tetra_optional_elements_13, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_13 },
3614
  { NULL, 0, 0, NULL }
3615
};
3616
3617
static unsigned
3618
0
dissect_tetra_U_SETUP(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3619
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3620
0
                                   ett_tetra_U_SETUP, U_SETUP_sequence);
3621
3622
0
  col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-SETUP");
3623
3624
0
  return offset;
3625
0
}
3626
3627
3628
3629
static unsigned
3630
0
dissect_tetra_BIT_STRING_SIZE_48(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3631
0
  offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
3632
0
                                     48, 48, false, NULL, 0, NULL, NULL);
3633
3634
0
  return offset;
3635
0
}
3636
3637
3638
static const value_string tetra_T_called_party_type_identifier_01_vals[] = {
3639
  {   0, "short-number-address" },
3640
  {   1, "ssi" },
3641
  {   2, "called-ssi-called-extension" },
3642
  {   3, "none" },
3643
  { 0, NULL }
3644
};
3645
3646
static const per_choice_t T_called_party_type_identifier_01_choice[] = {
3647
  {   0, &hf_tetra_short_number_address, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_255 },
3648
  {   1, &hf_tetra_ssi           , ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_16777215 },
3649
  {   2, &hf_tetra_called_ssi_called_extension, ASN1_NO_EXTENSIONS     , dissect_tetra_BIT_STRING_SIZE_48 },
3650
  {   3, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
3651
  { 0, NULL, 0, NULL }
3652
};
3653
3654
static unsigned
3655
0
dissect_tetra_T_called_party_type_identifier_01(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3656
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3657
0
                                 ett_tetra_T_called_party_type_identifier_01, T_called_party_type_identifier_01_choice,
3658
0
                                 NULL);
3659
3660
0
  return offset;
3661
0
}
3662
3663
3664
static const per_sequence_t U_STATUS_sequence[] = {
3665
  { &hf_tetra_area_selection, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_15 },
3666
  { &hf_tetra_called_party_type_identifier_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_called_party_type_identifier_01 },
3667
  { &hf_tetra_pre_coded_status, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_65535 },
3668
  { NULL, 0, 0, NULL }
3669
};
3670
3671
static unsigned
3672
0
dissect_tetra_U_STATUS(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3673
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3674
0
                                   ett_tetra_U_STATUS, U_STATUS_sequence);
3675
3676
0
  col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-STATUS");
3677
3678
0
  return offset;
3679
0
}
3680
3681
3682
static const value_string tetra_T_prop_03_vals[] = {
3683
  {   0, "none" },
3684
  {   1, "prop" },
3685
  { 0, NULL }
3686
};
3687
3688
static const per_choice_t T_prop_03_choice[] = {
3689
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
3690
  {   1, &hf_tetra_prop_01       , ASN1_NO_EXTENSIONS     , dissect_tetra_Proprietary },
3691
  { 0, NULL, 0, NULL }
3692
};
3693
3694
static unsigned
3695
0
dissect_tetra_T_prop_03(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3696
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3697
0
                                 ett_tetra_T_prop_03, T_prop_03_choice,
3698
0
                                 NULL);
3699
3700
0
  return offset;
3701
0
}
3702
3703
3704
static const per_sequence_t T_type2_parameters_08_sequence[] = {
3705
  { &hf_tetra_prop_04       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop_03 },
3706
  { NULL, 0, 0, NULL }
3707
};
3708
3709
static unsigned
3710
0
dissect_tetra_T_type2_parameters_08(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3711
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3712
0
                                   ett_tetra_T_type2_parameters_08, T_type2_parameters_08_sequence);
3713
3714
0
  return offset;
3715
0
}
3716
3717
3718
static const value_string tetra_T_optional_elements_16_vals[] = {
3719
  {   0, "no-type2" },
3720
  {   1, "type2-parameters" },
3721
  { 0, NULL }
3722
};
3723
3724
static const per_choice_t T_optional_elements_16_choice[] = {
3725
  {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
3726
  {   1, &hf_tetra_type2_parameters_08, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_parameters_08 },
3727
  { 0, NULL, 0, NULL }
3728
};
3729
3730
static unsigned
3731
0
dissect_tetra_T_optional_elements_16(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3732
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3733
0
                                 ett_tetra_T_optional_elements_16, T_optional_elements_16_choice,
3734
0
                                 NULL);
3735
3736
0
  return offset;
3737
0
}
3738
3739
3740
static const per_sequence_t U_TX_CEASED_sequence[] = {
3741
  { &hf_tetra_call_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
3742
  { &hf_tetra_optional_elements_16, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_16 },
3743
  { NULL, 0, 0, NULL }
3744
};
3745
3746
static unsigned
3747
0
dissect_tetra_U_TX_CEASED(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3748
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3749
0
                                   ett_tetra_U_TX_CEASED, U_TX_CEASED_sequence);
3750
3751
0
  col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-TX-CEASED");
3752
3753
0
  return offset;
3754
0
}
3755
3756
3757
static const value_string tetra_T_prop_04_vals[] = {
3758
  {   0, "none" },
3759
  {   1, "prop" },
3760
  { 0, NULL }
3761
};
3762
3763
static const per_choice_t T_prop_04_choice[] = {
3764
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
3765
  {   1, &hf_tetra_prop_01       , ASN1_NO_EXTENSIONS     , dissect_tetra_Proprietary },
3766
  { 0, NULL, 0, NULL }
3767
};
3768
3769
static unsigned
3770
0
dissect_tetra_T_prop_04(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3771
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3772
0
                                 ett_tetra_T_prop_04, T_prop_04_choice,
3773
0
                                 NULL);
3774
3775
0
  return offset;
3776
0
}
3777
3778
3779
static const per_sequence_t T_type2_parameters_09_sequence[] = {
3780
  { &hf_tetra_prop_05       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop_04 },
3781
  { NULL, 0, 0, NULL }
3782
};
3783
3784
static unsigned
3785
0
dissect_tetra_T_type2_parameters_09(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3786
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3787
0
                                   ett_tetra_T_type2_parameters_09, T_type2_parameters_09_sequence);
3788
3789
0
  return offset;
3790
0
}
3791
3792
3793
static const value_string tetra_T_optional_elements_17_vals[] = {
3794
  {   0, "no-type2" },
3795
  {   1, "type2-parameters" },
3796
  { 0, NULL }
3797
};
3798
3799
static const per_choice_t T_optional_elements_17_choice[] = {
3800
  {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
3801
  {   1, &hf_tetra_type2_parameters_09, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_parameters_09 },
3802
  { 0, NULL, 0, NULL }
3803
};
3804
3805
static unsigned
3806
0
dissect_tetra_T_optional_elements_17(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3807
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3808
0
                                 ett_tetra_T_optional_elements_17, T_optional_elements_17_choice,
3809
0
                                 NULL);
3810
3811
0
  return offset;
3812
0
}
3813
3814
3815
static const per_sequence_t U_TX_DEMAND_sequence[] = {
3816
  { &hf_tetra_call_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
3817
  { &hf_tetra_tx_demand_priority, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
3818
  { &hf_tetra_encryption_control, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
3819
  { &hf_tetra_reserved_01   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
3820
  { &hf_tetra_optional_elements_17, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_17 },
3821
  { NULL, 0, 0, NULL }
3822
};
3823
3824
static unsigned
3825
0
dissect_tetra_U_TX_DEMAND(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3826
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3827
0
                                   ett_tetra_U_TX_DEMAND, U_TX_DEMAND_sequence);
3828
3829
0
  col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-TX-DEMAND");
3830
3831
0
  return offset;
3832
0
}
3833
3834
3835
3836
static unsigned
3837
0
dissect_tetra_Other_party_address_type(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3838
0
  offset = dissect_tetra_Calling_party_address_type(tvb, offset, actx, tree, hf_index);
3839
3840
0
  return offset;
3841
0
}
3842
3843
3844
static const value_string tetra_T_prop_06_vals[] = {
3845
  {   0, "none" },
3846
  {   1, "prop" },
3847
  { 0, NULL }
3848
};
3849
3850
static const per_choice_t T_prop_06_choice[] = {
3851
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
3852
  {   1, &hf_tetra_prop_01       , ASN1_NO_EXTENSIONS     , dissect_tetra_Proprietary },
3853
  { 0, NULL, 0, NULL }
3854
};
3855
3856
static unsigned
3857
0
dissect_tetra_T_prop_06(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3858
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3859
0
                                 ett_tetra_T_prop_06, T_prop_06_choice,
3860
0
                                 NULL);
3861
3862
0
  return offset;
3863
0
}
3864
3865
3866
static const per_sequence_t T_type2_parameters_11_sequence[] = {
3867
  { &hf_tetra_prop_07       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop_06 },
3868
  { NULL, 0, 0, NULL }
3869
};
3870
3871
static unsigned
3872
0
dissect_tetra_T_type2_parameters_11(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3873
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3874
0
                                   ett_tetra_T_type2_parameters_11, T_type2_parameters_11_sequence);
3875
3876
0
  return offset;
3877
0
}
3878
3879
3880
static const value_string tetra_T_optional_elements_19_vals[] = {
3881
  {   0, "no-type2" },
3882
  {   1, "type2-parameters" },
3883
  { 0, NULL }
3884
};
3885
3886
static const per_choice_t T_optional_elements_19_choice[] = {
3887
  {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
3888
  {   1, &hf_tetra_type2_parameters_11, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_parameters_11 },
3889
  { 0, NULL, 0, NULL }
3890
};
3891
3892
static unsigned
3893
0
dissect_tetra_T_optional_elements_19(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3894
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3895
0
                                 ett_tetra_T_optional_elements_19, T_optional_elements_19_choice,
3896
0
                                 NULL);
3897
3898
0
  return offset;
3899
0
}
3900
3901
3902
static const per_sequence_t U_CALL_RESTORE_sequence[] = {
3903
  { &hf_tetra_call_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
3904
  { &hf_tetra_request_to_transmit_send_data, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
3905
  { &hf_tetra_other_party_address, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Other_party_address_type },
3906
  { &hf_tetra_basic_service_information, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Basic_service_information },
3907
  { &hf_tetra_optional_elements_19, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_19 },
3908
  { NULL, 0, 0, NULL }
3909
};
3910
3911
static unsigned
3912
0
dissect_tetra_U_CALL_RESTORE(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3913
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3914
0
                                   ett_tetra_U_CALL_RESTORE, U_CALL_RESTORE_sequence);
3915
3916
0
  col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-CALL-RESTORE");
3917
3918
0
  return offset;
3919
0
}
3920
3921
3922
static const value_string tetra_T_called_party_type_identifier_vals[] = {
3923
  {   0, "sna" },
3924
  {   1, "ssi" },
3925
  {   2, "ssi-extension" },
3926
  {   3, "none" },
3927
  { 0, NULL }
3928
};
3929
3930
static const per_choice_t T_called_party_type_identifier_choice[] = {
3931
  {   0, &hf_tetra_sna           , ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_255 },
3932
  {   1, &hf_tetra_ssi           , ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_16777215 },
3933
  {   2, &hf_tetra_ssi_extension , ASN1_NO_EXTENSIONS     , dissect_tetra_BIT_STRING_SIZE_48 },
3934
  {   3, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
3935
  { 0, NULL, 0, NULL }
3936
};
3937
3938
static unsigned
3939
0
dissect_tetra_T_called_party_type_identifier(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3940
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3941
0
                                 ett_tetra_T_called_party_type_identifier, T_called_party_type_identifier_choice,
3942
0
                                 NULL);
3943
3944
0
  return offset;
3945
0
}
3946
3947
3948
3949
static unsigned
3950
1
dissect_tetra_OCTET_STRING_SIZE_4(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3951
1
  offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
3952
1
                                       4, 4, false, NULL);
3953
3954
1
  return offset;
3955
1
}
3956
3957
3958
3959
static unsigned
3960
0
dissect_tetra_BIT_STRING_SIZE_64(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3961
0
  offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
3962
0
                                     64, 64, false, NULL, 0, NULL, NULL);
3963
3964
0
  return offset;
3965
0
}
3966
3967
3968
3969
static unsigned
3970
0
dissect_tetra_INTEGER_0_4194304(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3971
0
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
3972
0
                                                            0U, 4194304U, NULL, false);
3973
3974
0
  return offset;
3975
0
}
3976
3977
3978
static const value_string tetra_T_short_data_type_identifier_vals[] = {
3979
  {   0, "data-1" },
3980
  {   1, "data-2" },
3981
  {   2, "data-3" },
3982
  {   3, "length-indicator-data-4" },
3983
  { 0, NULL }
3984
};
3985
3986
static const per_choice_t T_short_data_type_identifier_choice[] = {
3987
  {   0, &hf_tetra_data_1        , ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_65535 },
3988
  {   1, &hf_tetra_data_2        , ASN1_NO_EXTENSIONS     , dissect_tetra_OCTET_STRING_SIZE_4 },
3989
  {   2, &hf_tetra_data_3        , ASN1_NO_EXTENSIONS     , dissect_tetra_BIT_STRING_SIZE_64 },
3990
  {   3, &hf_tetra_length_indicator_data_4, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_4194304 },
3991
  { 0, NULL, 0, NULL }
3992
};
3993
3994
static unsigned
3995
0
dissect_tetra_T_short_data_type_identifier(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3996
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3997
0
                                 ett_tetra_T_short_data_type_identifier, T_short_data_type_identifier_choice,
3998
0
                                 NULL);
3999
4000
0
  return offset;
4001
0
}
4002
4003
4004
static const per_sequence_t U_SDS_DATA_sequence[] = {
4005
  { &hf_tetra_area_selection, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_15 },
4006
  { &hf_tetra_called_party_type_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_called_party_type_identifier },
4007
  { &hf_tetra_short_data_type_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_short_data_type_identifier },
4008
  { NULL, 0, 0, NULL }
4009
};
4010
4011
static unsigned
4012
0
dissect_tetra_U_SDS_DATA(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4013
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4014
0
                                   ett_tetra_U_SDS_DATA, U_SDS_DATA_sequence);
4015
4016
0
  col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-SDS-DATA");
4017
4018
0
  return offset;
4019
0
}
4020
4021
4022
static const value_string tetra_U_CMCE_PDU_vals[] = {
4023
  {   0, "u-Alert" },
4024
  {   1, "reserved1" },
4025
  {   2, "u-Connect" },
4026
  {   3, "reserved2" },
4027
  {   4, "u-Disconnect" },
4028
  {   5, "u-Info" },
4029
  {   6, "u-Release" },
4030
  {   7, "u-Setup" },
4031
  {   8, "u-Status" },
4032
  {   9, "u-Tx-Ceased" },
4033
  {  10, "u-Tx-Demand" },
4034
  {  11, "reserved3" },
4035
  {  12, "reserved4" },
4036
  {  13, "reserved5" },
4037
  {  14, "u-Call-Restore" },
4038
  {  15, "u-SDS-Data" },
4039
  {  16, "u-Facility" },
4040
  { 0, NULL }
4041
};
4042
4043
static const per_choice_t U_CMCE_PDU_choice[] = {
4044
  {   0, &hf_tetra_u_Alert       , ASN1_NO_EXTENSIONS     , dissect_tetra_U_ALERT },
4045
  {   1, &hf_tetra_reserved1     , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4046
  {   2, &hf_tetra_u_Connect     , ASN1_NO_EXTENSIONS     , dissect_tetra_U_CONNECT },
4047
  {   3, &hf_tetra_reserved2     , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4048
  {   4, &hf_tetra_u_Disconnect  , ASN1_NO_EXTENSIONS     , dissect_tetra_U_DISCONNECT },
4049
  {   5, &hf_tetra_u_Info        , ASN1_NO_EXTENSIONS     , dissect_tetra_U_INFO },
4050
  {   6, &hf_tetra_u_Release     , ASN1_NO_EXTENSIONS     , dissect_tetra_U_RELEASE },
4051
  {   7, &hf_tetra_u_Setup       , ASN1_NO_EXTENSIONS     , dissect_tetra_U_SETUP },
4052
  {   8, &hf_tetra_u_Status      , ASN1_NO_EXTENSIONS     , dissect_tetra_U_STATUS },
4053
  {   9, &hf_tetra_u_Tx_Ceased   , ASN1_NO_EXTENSIONS     , dissect_tetra_U_TX_CEASED },
4054
  {  10, &hf_tetra_u_Tx_Demand   , ASN1_NO_EXTENSIONS     , dissect_tetra_U_TX_DEMAND },
4055
  {  11, &hf_tetra_reserved3     , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4056
  {  12, &hf_tetra_reserved4     , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4057
  {  13, &hf_tetra_reserved5     , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4058
  {  14, &hf_tetra_u_Call_Restore, ASN1_NO_EXTENSIONS     , dissect_tetra_U_CALL_RESTORE },
4059
  {  15, &hf_tetra_u_SDS_Data    , ASN1_NO_EXTENSIONS     , dissect_tetra_U_SDS_DATA },
4060
  {  16, &hf_tetra_u_Facility    , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4061
  { 0, NULL, 0, NULL }
4062
};
4063
4064
static unsigned
4065
1
dissect_tetra_U_CMCE_PDU(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4066
1
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
4067
1
                                 ett_tetra_U_CMCE_PDU, U_CMCE_PDU_choice,
4068
1
                                 NULL);
4069
4070
1
  return offset;
4071
1
}
4072
4073
4074
static const value_string tetra_T_cell_number_vals[] = {
4075
  {   0, "none" },
4076
  {   1, "cell-number" },
4077
  { 0, NULL }
4078
};
4079
4080
static const per_choice_t T_cell_number_choice[] = {
4081
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4082
  {   1, &hf_tetra_cell_number_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_65535 },
4083
  { 0, NULL, 0, NULL }
4084
};
4085
4086
static unsigned
4087
0
dissect_tetra_T_cell_number(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4088
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
4089
0
                                 ett_tetra_T_cell_number, T_cell_number_choice,
4090
0
                                 NULL);
4091
4092
0
  return offset;
4093
0
}
4094
4095
4096
static const per_sequence_t T_type2_parameters_sequence[] = {
4097
  { &hf_tetra_cell_number   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_cell_number },
4098
  { &hf_tetra_sdu           , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BIT_STRING },
4099
  { NULL, 0, 0, NULL }
4100
};
4101
4102
static unsigned
4103
0
dissect_tetra_T_type2_parameters(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4104
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4105
0
                                   ett_tetra_T_type2_parameters, T_type2_parameters_sequence);
4106
4107
0
  return offset;
4108
0
}
4109
4110
4111
static const value_string tetra_T_optional_elements_vals[] = {
4112
  {   0, "no-type2" },
4113
  {   1, "type2-parameters" },
4114
  { 0, NULL }
4115
};
4116
4117
static const per_choice_t T_optional_elements_choice[] = {
4118
  {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4119
  {   1, &hf_tetra_type2_parameters, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_parameters },
4120
  { 0, NULL, 0, NULL }
4121
};
4122
4123
static unsigned
4124
0
dissect_tetra_T_optional_elements(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4125
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
4126
0
                                 ett_tetra_T_optional_elements, T_optional_elements_choice,
4127
0
                                 NULL);
4128
4129
0
  return offset;
4130
0
}
4131
4132
4133
static const per_sequence_t U_PREPARE_sequence[] = {
4134
  { &hf_tetra_pdu_type_02   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
4135
  { &hf_tetra_optional_elements, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements },
4136
  { NULL, 0, 0, NULL }
4137
};
4138
4139
static unsigned
4140
0
dissect_tetra_U_PREPARE(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4141
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4142
0
                                   ett_tetra_U_PREPARE, U_PREPARE_sequence);
4143
4144
0
  return offset;
4145
0
}
4146
4147
4148
static const value_string tetra_T_mcc_vals[] = {
4149
  {   0, "none" },
4150
  {   1, "mcc" },
4151
  { 0, NULL }
4152
};
4153
4154
static const per_choice_t T_mcc_choice[] = {
4155
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4156
  {   1, &hf_tetra_mcc           , ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_1023 },
4157
  { 0, NULL, 0, NULL }
4158
};
4159
4160
static unsigned
4161
0
dissect_tetra_T_mcc(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4162
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
4163
0
                                 ett_tetra_T_mcc, T_mcc_choice,
4164
0
                                 NULL);
4165
4166
0
  return offset;
4167
0
}
4168
4169
4170
static const value_string tetra_T_mnc_vals[] = {
4171
  {   0, "none" },
4172
  {   1, "mnc" },
4173
  { 0, NULL }
4174
};
4175
4176
static const per_choice_t T_mnc_choice[] = {
4177
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4178
  {   1, &hf_tetra_mnc           , ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_16383 },
4179
  { 0, NULL, 0, NULL }
4180
};
4181
4182
static unsigned
4183
0
dissect_tetra_T_mnc(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4184
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
4185
0
                                 ett_tetra_T_mnc, T_mnc_choice,
4186
0
                                 NULL);
4187
4188
0
  return offset;
4189
0
}
4190
4191
4192
static const value_string tetra_T_la_vals[] = {
4193
  {   0, "none" },
4194
  {   1, "la" },
4195
  { 0, NULL }
4196
};
4197
4198
static const per_choice_t T_la_choice[] = {
4199
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4200
  {   1, &hf_tetra_la            , ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_16383 },
4201
  { 0, NULL, 0, NULL }
4202
};
4203
4204
static unsigned
4205
0
dissect_tetra_T_la(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4206
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
4207
0
                                 ett_tetra_T_la, T_la_choice,
4208
0
                                 NULL);
4209
4210
0
  return offset;
4211
0
}
4212
4213
4214
static const per_sequence_t T_type2_parameters_01_sequence[] = {
4215
  { &hf_tetra_mcc_01        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_mcc },
4216
  { &hf_tetra_mnc_01        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_mnc },
4217
  { &hf_tetra_la_01         , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_la },
4218
  { &hf_tetra_sdu           , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BIT_STRING },
4219
  { NULL, 0, 0, NULL }
4220
};
4221
4222
static unsigned
4223
0
dissect_tetra_T_type2_parameters_01(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4224
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4225
0
                                   ett_tetra_T_type2_parameters_01, T_type2_parameters_01_sequence);
4226
4227
0
  return offset;
4228
0
}
4229
4230
4231
static const value_string tetra_T_optional_elements_01_vals[] = {
4232
  {   0, "no-type2" },
4233
  {   1, "type2-parameters" },
4234
  { 0, NULL }
4235
};
4236
4237
static const per_choice_t T_optional_elements_01_choice[] = {
4238
  {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4239
  {   1, &hf_tetra_type2_parameters_01, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_parameters_01 },
4240
  { 0, NULL, 0, NULL }
4241
};
4242
4243
static unsigned
4244
0
dissect_tetra_T_optional_elements_01(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4245
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
4246
0
                                 ett_tetra_T_optional_elements_01, T_optional_elements_01_choice,
4247
0
                                 NULL);
4248
4249
0
  return offset;
4250
0
}
4251
4252
4253
static const per_sequence_t U_RESTORE_sequence[] = {
4254
  { &hf_tetra_pdu_type_02   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
4255
  { &hf_tetra_optional_elements_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_01 },
4256
  { NULL, 0, 0, NULL }
4257
};
4258
4259
static unsigned
4260
0
dissect_tetra_U_RESTORE(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4261
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4262
0
                                   ett_tetra_U_RESTORE, U_RESTORE_sequence);
4263
4264
0
  return offset;
4265
0
}
4266
4267
4268
static const value_string tetra_UMLE_PDU_vals[] = {
4269
  {   0, "u-prepare" },
4270
  {   1, "umle-reserved1" },
4271
  {   2, "umle-reserved2" },
4272
  {   3, "umle-reserved3" },
4273
  {   4, "u-restore" },
4274
  {   5, "umle-reserved4" },
4275
  {   6, "umle-reserved5" },
4276
  {   7, "umle-reserved6" },
4277
  { 0, NULL }
4278
};
4279
4280
static const per_choice_t UMLE_PDU_choice[] = {
4281
  {   0, &hf_tetra_u_prepare     , ASN1_NO_EXTENSIONS     , dissect_tetra_U_PREPARE },
4282
  {   1, &hf_tetra_umle_reserved1, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4283
  {   2, &hf_tetra_umle_reserved2, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4284
  {   3, &hf_tetra_umle_reserved3, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4285
  {   4, &hf_tetra_u_restore     , ASN1_NO_EXTENSIONS     , dissect_tetra_U_RESTORE },
4286
  {   5, &hf_tetra_umle_reserved4, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4287
  {   6, &hf_tetra_umle_reserved5, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4288
  {   7, &hf_tetra_umle_reserved6, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4289
  { 0, NULL, 0, NULL }
4290
};
4291
4292
static unsigned
4293
0
dissect_tetra_UMLE_PDU(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4294
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
4295
0
                                 ett_tetra_UMLE_PDU, UMLE_PDU_choice,
4296
0
                                 NULL);
4297
4298
0
  return offset;
4299
0
}
4300
4301
4302
static const value_string tetra_U_MLE_PDU_vals[] = {
4303
  {   0, "u-mle-reserved1" },
4304
  {   1, "mm" },
4305
  {   2, "cmce" },
4306
  {   3, "u-mle-reserved2" },
4307
  {   4, "sndcp" },
4308
  {   5, "mle" },
4309
  {   6, "tetra-management-entity-protocol" },
4310
  {   7, "u-mle-reserved3" },
4311
  { 0, NULL }
4312
};
4313
4314
static const per_choice_t U_MLE_PDU_choice[] = {
4315
  {   0, &hf_tetra_u_mle_reserved1, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4316
  {   1, &hf_tetra_mm            , ASN1_NO_EXTENSIONS     , dissect_tetra_U_MM_PDU },
4317
  {   2, &hf_tetra_cmce          , ASN1_NO_EXTENSIONS     , dissect_tetra_U_CMCE_PDU },
4318
  {   3, &hf_tetra_u_mle_reserved2, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4319
  {   4, &hf_tetra_sndcp         , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4320
  {   5, &hf_tetra_mle           , ASN1_NO_EXTENSIONS     , dissect_tetra_UMLE_PDU },
4321
  {   6, &hf_tetra_tetra_management_entity_protocol, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4322
  {   7, &hf_tetra_u_mle_reserved3, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4323
  { 0, NULL, 0, NULL }
4324
};
4325
4326
static unsigned
4327
1
dissect_tetra_U_MLE_PDU(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4328
1
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
4329
1
                                 ett_tetra_U_MLE_PDU, U_MLE_PDU_choice,
4330
1
                                 NULL);
4331
4332
1
  return offset;
4333
1
}
4334
4335
4336
static const per_sequence_t U_BL_ADATA_sequence[] = {
4337
  { &hf_tetra_nr            , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4338
  { &hf_tetra_ns            , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4339
  { &hf_tetra_tl_sdu        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_U_MLE_PDU },
4340
  { NULL, 0, 0, NULL }
4341
};
4342
4343
static unsigned
4344
0
dissect_tetra_U_BL_ADATA(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4345
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4346
0
                                   ett_tetra_U_BL_ADATA, U_BL_ADATA_sequence);
4347
4348
0
  return offset;
4349
0
}
4350
4351
4352
static const per_sequence_t U_BL_DATA_sequence[] = {
4353
  { &hf_tetra_ns            , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4354
  { &hf_tetra_tl_sdu        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_U_MLE_PDU },
4355
  { NULL, 0, 0, NULL }
4356
};
4357
4358
static unsigned
4359
0
dissect_tetra_U_BL_DATA(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4360
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4361
0
                                   ett_tetra_U_BL_DATA, U_BL_DATA_sequence);
4362
4363
0
  return offset;
4364
0
}
4365
4366
4367
static const per_sequence_t U_BL_ACK_sequence[] = {
4368
  { &hf_tetra_nr            , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4369
  { &hf_tetra_tl_sdu        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_U_MLE_PDU },
4370
  { NULL, 0, 0, NULL }
4371
};
4372
4373
static unsigned
4374
0
dissect_tetra_U_BL_ACK(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4375
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4376
0
                                   ett_tetra_U_BL_ACK, U_BL_ACK_sequence);
4377
4378
0
  return offset;
4379
0
}
4380
4381
4382
static const per_sequence_t U_BL_ADATA_FCS_sequence[] = {
4383
  { &hf_tetra_nr            , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4384
  { &hf_tetra_ns            , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4385
  { &hf_tetra_tl_sdu        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_U_MLE_PDU },
4386
  { &hf_tetra_fcs           , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_OCTET_STRING_SIZE_4 },
4387
  { NULL, 0, 0, NULL }
4388
};
4389
4390
static unsigned
4391
0
dissect_tetra_U_BL_ADATA_FCS(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4392
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4393
0
                                   ett_tetra_U_BL_ADATA_FCS, U_BL_ADATA_FCS_sequence);
4394
4395
0
  return offset;
4396
0
}
4397
4398
4399
static const per_sequence_t U_BL_DATA_FCS_sequence[] = {
4400
  { &hf_tetra_ns            , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4401
  { &hf_tetra_tl_sdu        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_U_MLE_PDU },
4402
  { &hf_tetra_fcs           , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_OCTET_STRING_SIZE_4 },
4403
  { NULL, 0, 0, NULL }
4404
};
4405
4406
static unsigned
4407
0
dissect_tetra_U_BL_DATA_FCS(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4408
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4409
0
                                   ett_tetra_U_BL_DATA_FCS, U_BL_DATA_FCS_sequence);
4410
4411
0
  return offset;
4412
0
}
4413
4414
4415
static const per_sequence_t U_MLE_PDU_FCS_sequence[] = {
4416
  { &hf_tetra_u_mle_pdu     , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_U_MLE_PDU },
4417
  { &hf_tetra_fcs           , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_OCTET_STRING_SIZE_4 },
4418
  { NULL, 0, 0, NULL }
4419
};
4420
4421
static unsigned
4422
1
dissect_tetra_U_MLE_PDU_FCS(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4423
1
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4424
1
                                   ett_tetra_U_MLE_PDU_FCS, U_MLE_PDU_FCS_sequence);
4425
4426
1
  return offset;
4427
1
}
4428
4429
4430
static const per_sequence_t U_BL_ACK_FCS_sequence[] = {
4431
  { &hf_tetra_nr            , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4432
  { &hf_tetra_tl_sdu        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_U_MLE_PDU },
4433
  { &hf_tetra_fcs           , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_OCTET_STRING_SIZE_4 },
4434
  { NULL, 0, 0, NULL }
4435
};
4436
4437
static unsigned
4438
0
dissect_tetra_U_BL_ACK_FCS(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4439
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4440
0
                                   ett_tetra_U_BL_ACK_FCS, U_BL_ACK_FCS_sequence);
4441
4442
0
  return offset;
4443
0
}
4444
4445
4446
static const value_string tetra_U_LLC_PDU_vals[] = {
4447
  {   0, "bl-adata" },
4448
  {   1, "bl-data" },
4449
  {   2, "bl-udata" },
4450
  {   3, "bl-ack" },
4451
  {   4, "bl-adata-fcs" },
4452
  {   5, "bl-data-fcs" },
4453
  {   6, "bl-udata-fcs" },
4454
  {   7, "bl-ack-fcs" },
4455
  {   8, "al-setup" },
4456
  {   9, "al-data" },
4457
  {  10, "al-udata" },
4458
  {  11, "al-ack" },
4459
  {  12, "al-reconnect" },
4460
  {  13, "reserve1" },
4461
  {  14, "reserve2" },
4462
  {  15, "al-disc" },
4463
  { 0, NULL }
4464
};
4465
4466
static const per_choice_t U_LLC_PDU_choice[] = {
4467
  {   0, &hf_tetra_bl_adata      , ASN1_NO_EXTENSIONS     , dissect_tetra_U_BL_ADATA },
4468
  {   1, &hf_tetra_bl_data       , ASN1_NO_EXTENSIONS     , dissect_tetra_U_BL_DATA },
4469
  {   2, &hf_tetra_bl_udata      , ASN1_NO_EXTENSIONS     , dissect_tetra_U_MLE_PDU },
4470
  {   3, &hf_tetra_bl_ack        , ASN1_NO_EXTENSIONS     , dissect_tetra_U_BL_ACK },
4471
  {   4, &hf_tetra_bl_adata_fcs  , ASN1_NO_EXTENSIONS     , dissect_tetra_U_BL_ADATA_FCS },
4472
  {   5, &hf_tetra_bl_data_fcs   , ASN1_NO_EXTENSIONS     , dissect_tetra_U_BL_DATA_FCS },
4473
  {   6, &hf_tetra_bl_udata_fcs  , ASN1_NO_EXTENSIONS     , dissect_tetra_U_MLE_PDU_FCS },
4474
  {   7, &hf_tetra_bl_ack_fcs    , ASN1_NO_EXTENSIONS     , dissect_tetra_U_BL_ACK_FCS },
4475
  {   8, &hf_tetra_al_setup      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4476
  {   9, &hf_tetra_al_data       , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4477
  {  10, &hf_tetra_al_udata      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4478
  {  11, &hf_tetra_al_ack        , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4479
  {  12, &hf_tetra_al_reconnect  , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4480
  {  13, &hf_tetra_reserve1      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4481
  {  14, &hf_tetra_reserve2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4482
  {  15, &hf_tetra_al_disc       , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4483
  { 0, NULL, 0, NULL }
4484
};
4485
4486
static unsigned
4487
1
dissect_tetra_U_LLC_PDU(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4488
1
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
4489
1
                                 ett_tetra_U_LLC_PDU, U_LLC_PDU_choice,
4490
1
                                 NULL);
4491
4492
1
  return offset;
4493
1
}
4494
4495
4496
static const value_string tetra_LengthIndication_vals[] = {
4497
  {   0, "null" },
4498
  {   1, "reserved-1" },
4499
  {   2, "reserved-2" },
4500
  {   3, "bits-24" },
4501
  {   4, "bits-32" },
4502
  {   5, "bits-40" },
4503
  {   6, "bits-48" },
4504
  {   7, "bits-56" },
4505
  {   8, "bits-64" },
4506
  {   9, "bits-72" },
4507
  {  10, "bits-80" },
4508
  {  11, "bits-88" },
4509
  {  12, "bits-96" },
4510
  {  13, "reserved-13" },
4511
  {  14, "reserved-14" },
4512
  {  15, "reserved-15" },
4513
  {  16, "reserved-16" },
4514
  {  17, "reserved-17" },
4515
  {  18, "reserved-18" },
4516
  {  19, "reserved-19" },
4517
  {  20, "reserved-20" },
4518
  {  21, "reserved-21" },
4519
  {  22, "reserved-22" },
4520
  {  23, "reserved-23" },
4521
  {  24, "reserved-24" },
4522
  {  25, "reserved-25" },
4523
  {  26, "reserved-26" },
4524
  {  27, "reserved-27" },
4525
  {  28, "reserved-28" },
4526
  {  29, "reserved-29" },
4527
  {  30, "reserved-30" },
4528
  {  31, "reserved-31" },
4529
  { 0, NULL }
4530
};
4531
4532
4533
static unsigned
4534
0
dissect_tetra_LengthIndication(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4535
0
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
4536
0
                                     32, NULL, false, 0, NULL);
4537
4538
0
  return offset;
4539
0
}
4540
4541
4542
static const value_string tetra_Frag1_vals[] = {
4543
  {   0, "not-fragmented" },
4544
  {   1, "start-of-fragmentation" },
4545
  { 0, NULL }
4546
};
4547
4548
4549
static unsigned
4550
1
dissect_tetra_Frag1(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4551
1
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
4552
1
                                     2, NULL, false, 0, NULL);
4553
4554
1
  return offset;
4555
1
}
4556
4557
4558
static const value_string tetra_SLOT_APPLY_vals[] = {
4559
  {   0, "subslot" },
4560
  {   1, "slot-1" },
4561
  {   2, "slot-2" },
4562
  {   3, "slot-3" },
4563
  {   4, "slot-4" },
4564
  {   5, "slot-5" },
4565
  {   6, "slot-6" },
4566
  {   7, "slot-8" },
4567
  {   8, "slot-10" },
4568
  {   9, "slot-13" },
4569
  {  10, "slot-17" },
4570
  {  11, "slot-24" },
4571
  {  12, "slot-34" },
4572
  {  13, "slot-51" },
4573
  {  14, "slot-68" },
4574
  {  15, "more-than-68" },
4575
  { 0, NULL }
4576
};
4577
4578
4579
static unsigned
4580
1
dissect_tetra_SLOT_APPLY(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4581
1
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
4582
1
                                     16, NULL, false, 0, NULL);
4583
4584
1
  return offset;
4585
1
}
4586
4587
4588
static const per_sequence_t FRAG_sequence[] = {
4589
  { &hf_tetra_frag          , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Frag1 },
4590
  { &hf_tetra_reservation_requirement, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_SLOT_APPLY },
4591
  { NULL, 0, 0, NULL }
4592
};
4593
4594
static unsigned
4595
0
dissect_tetra_FRAG(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4596
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4597
0
                                   ett_tetra_FRAG, FRAG_sequence);
4598
4599
0
  return offset;
4600
0
}
4601
4602
4603
static const value_string tetra_T_lengthIndicationOrCapacityRequest_vals[] = {
4604
  {   0, "lengthIndication" },
4605
  {   1, "capacityRequest" },
4606
  { 0, NULL }
4607
};
4608
4609
static const per_choice_t T_lengthIndicationOrCapacityRequest_choice[] = {
4610
  {   0, &hf_tetra_lengthIndication, ASN1_NO_EXTENSIONS     , dissect_tetra_LengthIndication },
4611
  {   1, &hf_tetra_capacityRequest, ASN1_NO_EXTENSIONS     , dissect_tetra_FRAG },
4612
  { 0, NULL, 0, NULL }
4613
};
4614
4615
static unsigned
4616
0
dissect_tetra_T_lengthIndicationOrCapacityRequest(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4617
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
4618
0
                                 ett_tetra_T_lengthIndicationOrCapacityRequest, T_lengthIndicationOrCapacityRequest_choice,
4619
0
                                 NULL);
4620
4621
0
  return offset;
4622
0
}
4623
4624
4625
static const per_sequence_t ComplexSDU_sequence[] = {
4626
  { &hf_tetra_lengthIndicationOrCapacityRequest, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_lengthIndicationOrCapacityRequest },
4627
  { &hf_tetra_tm_sdu_01     , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_U_LLC_PDU },
4628
  { NULL, 0, 0, NULL }
4629
};
4630
4631
static unsigned
4632
0
dissect_tetra_ComplexSDU(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4633
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4634
0
                                   ett_tetra_ComplexSDU, ComplexSDU_sequence);
4635
4636
0
  return offset;
4637
0
}
4638
4639
4640
static const value_string tetra_T_data_vals[] = {
4641
  {   0, "sdu1" },
4642
  {   1, "sdu2" },
4643
  { 0, NULL }
4644
};
4645
4646
static const per_choice_t T_data_choice[] = {
4647
  {   0, &hf_tetra_sdu1          , ASN1_NO_EXTENSIONS     , dissect_tetra_U_LLC_PDU },
4648
  {   1, &hf_tetra_sdu2          , ASN1_NO_EXTENSIONS     , dissect_tetra_ComplexSDU },
4649
  { 0, NULL, 0, NULL }
4650
};
4651
4652
static unsigned
4653
0
dissect_tetra_T_data(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4654
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
4655
0
                                 ett_tetra_T_data, T_data_choice,
4656
0
                                 NULL);
4657
4658
0
  return offset;
4659
0
}
4660
4661
4662
static const per_sequence_t MAC_ACCESS_sequence[] = {
4663
  { &hf_tetra_pdu_type_01   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4664
  { &hf_tetra_fill_bit_indication, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Fill_Bit_Indication },
4665
  { &hf_tetra_encrypted_flag, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Encrypted_Flag },
4666
  { &hf_tetra_address       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Address },
4667
  { &hf_tetra_data          , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_data },
4668
  { NULL, 0, 0, NULL }
4669
};
4670
4671
static unsigned
4672
0
dissect_tetra_MAC_ACCESS(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4673
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4674
0
                                   ett_tetra_MAC_ACCESS, MAC_ACCESS_sequence);
4675
4676
0
  return offset;
4677
0
}
4678
4679
4680
static const value_string tetra_LengthIndicationMacData_vals[] = {
4681
  {   0, "null" },
4682
  {   1, "reserved-1" },
4683
  {   2, "reserved-2" },
4684
  {   3, "bits-24" },
4685
  {   4, "bits-32" },
4686
  {   5, "bits-40" },
4687
  {   6, "bits-48" },
4688
  {   7, "bits-56" },
4689
  {   8, "bits-64" },
4690
  {   9, "bits-72" },
4691
  {  10, "bits-80" },
4692
  {  11, "bits-88" },
4693
  {  12, "bits-96" },
4694
  {  13, "bits-104" },
4695
  {  14, "bits-112" },
4696
  {  15, "bits-120" },
4697
  {  16, "bits-128" },
4698
  {  17, "bits-136" },
4699
  {  18, "bits-144" },
4700
  {  19, "bits-152" },
4701
  {  20, "bits-160" },
4702
  {  21, "bits-168" },
4703
  {  22, "bits-176" },
4704
  {  23, "bits-184" },
4705
  {  24, "bits-192" },
4706
  {  25, "bits-200" },
4707
  {  26, "bits-208" },
4708
  {  27, "bits-216" },
4709
  {  28, "bits-224" },
4710
  {  29, "bits-232" },
4711
  {  30, "bits-240" },
4712
  {  31, "bits-248" },
4713
  {  32, "bits-256" },
4714
  {  33, "bits-264" },
4715
  {  34, "bits-272" },
4716
  {  35, "reserved-35" },
4717
  {  36, "reserved-36" },
4718
  {  37, "reserved-37" },
4719
  {  38, "reserved-38" },
4720
  {  39, "reserved-39" },
4721
  {  40, "reserved-40" },
4722
  {  41, "reserved-41" },
4723
  {  42, "reserved-42" },
4724
  {  43, "reserved-43" },
4725
  {  44, "reserved-44" },
4726
  {  45, "reserved-45" },
4727
  {  46, "reserved-46" },
4728
  {  47, "reserved-47" },
4729
  {  48, "reserved-48" },
4730
  {  49, "reserved-49" },
4731
  {  50, "reserved-50" },
4732
  {  51, "reserved-51" },
4733
  {  52, "reserved-52" },
4734
  {  53, "reserved-53" },
4735
  {  54, "reserved-54" },
4736
  {  55, "reserved-55" },
4737
  {  56, "reserved-56" },
4738
  {  57, "reserved-57" },
4739
  {  58, "reserved-58" },
4740
  {  59, "reserved-59" },
4741
  {  60, "reserved-60" },
4742
  {  61, "reserved-61" },
4743
  {  62, "second-halfslot-stolen" },
4744
  {  63, "start-frag" },
4745
  { 0, NULL }
4746
};
4747
4748
static value_string_ext tetra_LengthIndicationMacData_vals_ext = VALUE_STRING_EXT_INIT(tetra_LengthIndicationMacData_vals);
4749
4750
4751
static unsigned
4752
0
dissect_tetra_LengthIndicationMacData(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4753
0
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
4754
0
                                     64, NULL, false, 0, NULL);
4755
4756
0
  return offset;
4757
0
}
4758
4759
4760
static const per_sequence_t FRAG6_sequence[] = {
4761
  { &hf_tetra_frag          , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Frag1 },
4762
  { &hf_tetra_reservation_requirement, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_SLOT_APPLY },
4763
  { &hf_tetra_reserved_01   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4764
  { NULL, 0, 0, NULL }
4765
};
4766
4767
static unsigned
4768
1
dissect_tetra_FRAG6(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4769
1
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4770
1
                                   ett_tetra_FRAG6, FRAG6_sequence);
4771
4772
1
  return offset;
4773
1
}
4774
4775
4776
static const value_string tetra_T_lengthIndicationOrCapacityRequest_01_vals[] = {
4777
  {   0, "lengthIndication" },
4778
  {   1, "capacityRequest" },
4779
  { 0, NULL }
4780
};
4781
4782
static const per_choice_t T_lengthIndicationOrCapacityRequest_01_choice[] = {
4783
  {   0, &hf_tetra_lengthIndication_01, ASN1_NO_EXTENSIONS     , dissect_tetra_LengthIndicationMacData },
4784
  {   1, &hf_tetra_capacityRequest_01, ASN1_NO_EXTENSIONS     , dissect_tetra_FRAG6 },
4785
  { 0, NULL, 0, NULL }
4786
};
4787
4788
static unsigned
4789
1
dissect_tetra_T_lengthIndicationOrCapacityRequest_01(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4790
1
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
4791
1
                                 ett_tetra_T_lengthIndicationOrCapacityRequest_01, T_lengthIndicationOrCapacityRequest_01_choice,
4792
1
                                 NULL);
4793
4794
1
  return offset;
4795
1
}
4796
4797
4798
static const per_sequence_t MAC_DATA_sequence[] = {
4799
  { &hf_tetra_pdu_type      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
4800
  { &hf_tetra_fill_bit_indication, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Fill_Bit_Indication },
4801
  { &hf_tetra_encrypted_flag, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Encrypted_Flag },
4802
  { &hf_tetra_address       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Address },
4803
  { &hf_tetra_lengthIndicationOrCapacityRequest_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_lengthIndicationOrCapacityRequest_01 },
4804
  { &hf_tetra_tm_sdu_01     , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_U_LLC_PDU },
4805
  { NULL, 0, 0, NULL }
4806
};
4807
4808
static unsigned
4809
1
dissect_tetra_MAC_DATA(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4810
1
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4811
1
                                   ett_tetra_MAC_DATA, MAC_DATA_sequence);
4812
4813
1
  return offset;
4814
1
}
4815
4816
4817
4818
static unsigned
4819
0
dissect_tetra_BIT_STRING_SIZE_264(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4820
0
  offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
4821
0
                                     264, 264, false, NULL, 0, NULL, NULL);
4822
4823
0
  return offset;
4824
0
}
4825
4826
4827
static const per_sequence_t MAC_FRAG_sequence[] = {
4828
  { &hf_tetra_pdu_type      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
4829
  { &hf_tetra_sub_type      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4830
  { &hf_tetra_fill_bit_indication, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Fill_Bit_Indication },
4831
  { &hf_tetra_tm_sdu_bit_str, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BIT_STRING_SIZE_264 },
4832
  { NULL, 0, 0, NULL }
4833
};
4834
4835
static unsigned
4836
0
dissect_tetra_MAC_FRAG(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4837
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4838
0
                                   ett_tetra_MAC_FRAG, MAC_FRAG_sequence);
4839
4840
0
  return offset;
4841
0
}
4842
4843
4844
4845
static unsigned
4846
0
dissect_tetra_BIT_STRING_SIZE_120(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4847
0
  offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
4848
0
                                     120, 120, false, NULL, 0, NULL, NULL);
4849
4850
0
  return offset;
4851
0
}
4852
4853
4854
static const per_sequence_t MAC_FRAG120_sequence[] = {
4855
  { &hf_tetra_pdu_type      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
4856
  { &hf_tetra_sub_type      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4857
  { &hf_tetra_fill_bit_indication, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Fill_Bit_Indication },
4858
  { &hf_tetra_tm_sdu_bit_str_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BIT_STRING_SIZE_120 },
4859
  { NULL, 0, 0, NULL }
4860
};
4861
4862
static unsigned
4863
0
dissect_tetra_MAC_FRAG120(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4864
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4865
0
                                   ett_tetra_MAC_FRAG120, MAC_FRAG120_sequence);
4866
4867
0
  return offset;
4868
0
}
4869
4870
4871
static const value_string tetra_LengthIndOrReservationReq_vals[] = {
4872
  {   0, "reserved-0" },
4873
  {   1, "reserved-1" },
4874
  {   2, "bits-16" },
4875
  {   3, "bits-24" },
4876
  {   4, "bits-32" },
4877
  {   5, "bits-40" },
4878
  {   6, "bits-48" },
4879
  {   7, "bits-56" },
4880
  {   8, "bits-64" },
4881
  {   9, "bits-72" },
4882
  {  10, "bits-80" },
4883
  {  11, "bits-88" },
4884
  {  12, "bits-96" },
4885
  {  13, "bits-104" },
4886
  {  14, "bits-112" },
4887
  {  15, "bits-120" },
4888
  {  16, "bits-128" },
4889
  {  17, "bits-136" },
4890
  {  18, "bits-144" },
4891
  {  19, "bits-152" },
4892
  {  20, "bits-160" },
4893
  {  21, "bits-168" },
4894
  {  22, "bits-176" },
4895
  {  23, "bits-184" },
4896
  {  24, "bits-192" },
4897
  {  25, "bits-200" },
4898
  {  26, "bits-208" },
4899
  {  27, "bits-216" },
4900
  {  28, "bits-224" },
4901
  {  29, "bits-232" },
4902
  {  30, "bits-240" },
4903
  {  31, "bits-248" },
4904
  {  32, "bits-256" },
4905
  {  33, "bits-264" },
4906
  {  34, "bits-272" },
4907
  {  35, "reserved-35" },
4908
  {  36, "reserved-36" },
4909
  {  37, "reserved-37" },
4910
  {  38, "reserved-38" },
4911
  {  39, "reserved-39" },
4912
  {  40, "reserved-40" },
4913
  {  41, "reserved-41" },
4914
  {  42, "reserved-42" },
4915
  {  43, "reserved-43" },
4916
  {  44, "reserved-44" },
4917
  {  45, "reserved-45" },
4918
  {  46, "reserved-46" },
4919
  {  47, "reserved-47" },
4920
  {  48, "subslot" },
4921
  {  49, "slot-1" },
4922
  {  50, "slot-2" },
4923
  {  51, "slot-3" },
4924
  {  52, "slot-4" },
4925
  {  53, "slot-5" },
4926
  {  54, "slot-6" },
4927
  {  55, "slot-8" },
4928
  {  56, "slot-10" },
4929
  {  57, "slot-13" },
4930
  {  58, "slot-17" },
4931
  {  59, "slot-24" },
4932
  {  60, "slot-34" },
4933
  {  61, "slot-51" },
4934
  {  62, "slot-68" },
4935
  {  63, "more-than-68" },
4936
  { 0, NULL }
4937
};
4938
4939
static value_string_ext tetra_LengthIndOrReservationReq_vals_ext = VALUE_STRING_EXT_INIT(tetra_LengthIndOrReservationReq_vals);
4940
4941
4942
static unsigned
4943
0
dissect_tetra_LengthIndOrReservationReq(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4944
0
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
4945
0
                                     64, NULL, false, 0, NULL);
4946
4947
0
  return offset;
4948
0
}
4949
4950
4951
4952
static unsigned
4953
0
dissect_tetra_BIT_STRING_SIZE_258(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4954
0
  offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
4955
0
                                     258, 258, false, NULL, 0, NULL, NULL);
4956
4957
0
  return offset;
4958
0
}
4959
4960
4961
static const per_sequence_t MAC_END_UPLINK_sequence[] = {
4962
  { &hf_tetra_pdu_type      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
4963
  { &hf_tetra_sub_type      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4964
  { &hf_tetra_fill_bit_indication, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Fill_Bit_Indication },
4965
  { &hf_tetra_lengthInd_ReservationReq, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_LengthIndOrReservationReq },
4966
  { &hf_tetra_tm_sdu_bit_str_02, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BIT_STRING_SIZE_258 },
4967
  { NULL, 0, 0, NULL }
4968
};
4969
4970
static unsigned
4971
0
dissect_tetra_MAC_END_UPLINK(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4972
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4973
0
                                   ett_tetra_MAC_END_UPLINK, MAC_END_UPLINK_sequence);
4974
4975
0
  return offset;
4976
0
}
4977
4978
4979
4980
static unsigned
4981
0
dissect_tetra_BIT_STRING_SIZE_114(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4982
0
  offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
4983
0
                                     114, 114, false, NULL, 0, NULL, NULL);
4984
4985
0
  return offset;
4986
0
}
4987
4988
4989
static const per_sequence_t MAC_END_UP114_sequence[] = {
4990
  { &hf_tetra_pdu_type      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
4991
  { &hf_tetra_pdu_subtype   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4992
  { &hf_tetra_fill_bit_indication, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Fill_Bit_Indication },
4993
  { &hf_tetra_lengthInd_ReservationReq, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_LengthIndOrReservationReq },
4994
  { &hf_tetra_tm_sdu_bit_str_03, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BIT_STRING_SIZE_114 },
4995
  { NULL, 0, 0, NULL }
4996
};
4997
4998
static unsigned
4999
0
dissect_tetra_MAC_END_UP114(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5000
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
5001
0
                                   ett_tetra_MAC_END_UP114, MAC_END_UP114_sequence);
5002
5003
0
  return offset;
5004
0
}
5005
5006
5007
static const value_string tetra_LengthIndMacHu_vals[] = {
5008
  {   0, "reserved-0" },
5009
  {   1, "bits-8" },
5010
  {   2, "bits-16" },
5011
  {   3, "bits-24" },
5012
  {   4, "bits-32" },
5013
  {   5, "bits-40" },
5014
  {   6, "bits-48" },
5015
  {   7, "bits-56" },
5016
  {   8, "bits-64" },
5017
  {   9, "bits-72" },
5018
  {  10, "bits-80" },
5019
  {  11, "bits-88" },
5020
  {  12, "bits-96" },
5021
  {  13, "reserved-13" },
5022
  {  14, "reserved-14" },
5023
  {  15, "reserved-15" },
5024
  { 0, NULL }
5025
};
5026
5027
5028
static unsigned
5029
0
dissect_tetra_LengthIndMacHu(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5030
0
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5031
0
                                     16, NULL, false, 0, NULL);
5032
5033
0
  return offset;
5034
0
}
5035
5036
5037
static const value_string tetra_T_lengthInd_ReservationReq_vals[] = {
5038
  {   0, "lengthInd" },
5039
  {   1, "reservation-requirement" },
5040
  { 0, NULL }
5041
};
5042
5043
static const per_choice_t T_lengthInd_ReservationReq_choice[] = {
5044
  {   0, &hf_tetra_lengthInd     , ASN1_NO_EXTENSIONS     , dissect_tetra_LengthIndMacHu },
5045
  {   1, &hf_tetra_reservation_requirement, ASN1_NO_EXTENSIONS     , dissect_tetra_SLOT_APPLY },
5046
  { 0, NULL, 0, NULL }
5047
};
5048
5049
static unsigned
5050
0
dissect_tetra_T_lengthInd_ReservationReq(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5051
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5052
0
                                 ett_tetra_T_lengthInd_ReservationReq, T_lengthInd_ReservationReq_choice,
5053
0
                                 NULL);
5054
5055
0
  return offset;
5056
0
}
5057
5058
5059
5060
static unsigned
5061
0
dissect_tetra_BIT_STRING_SIZE_85(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5062
0
  offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
5063
0
                                     85, 85, false, NULL, 0, NULL, NULL);
5064
5065
0
  return offset;
5066
0
}
5067
5068
5069
static const per_sequence_t MAC_END_HU_sequence[] = {
5070
  { &hf_tetra_pdu_type_01   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
5071
  { &hf_tetra_fill_bit_indication, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Fill_Bit_Indication },
5072
  { &hf_tetra_lengthInd_ReservationReq_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_lengthInd_ReservationReq },
5073
  { &hf_tetra_tm_sdu_bit_str_04, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BIT_STRING_SIZE_85 },
5074
  { NULL, 0, 0, NULL }
5075
};
5076
5077
static unsigned
5078
0
dissect_tetra_MAC_END_HU(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5079
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
5080
0
                                   ett_tetra_MAC_END_HU, MAC_END_HU_sequence);
5081
5082
0
  return offset;
5083
0
}
5084
5085
5086
static const value_string tetra_Position_Of_Grant_vals[] = {
5087
  {   0, "on-current" },
5088
  {   1, "on-allocated" },
5089
  { 0, NULL }
5090
};
5091
5092
5093
static unsigned
5094
2
dissect_tetra_Position_Of_Grant(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5095
2
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5096
2
                                     2, NULL, false, 0, NULL);
5097
5098
2
  return offset;
5099
2
}
5100
5101
5102
static const value_string tetra_LengthIndicationMacEndDl_vals[] = {
5103
  {   0, "reserved-0" },
5104
  {   1, "reserved-1" },
5105
  {   2, "bits-16" },
5106
  {   3, "bits-24" },
5107
  {   4, "bits-32" },
5108
  {   5, "bits-40" },
5109
  {   6, "bits-48" },
5110
  {   7, "bits-56" },
5111
  {   8, "bits-64" },
5112
  {   9, "bits-72" },
5113
  {  10, "bits-80" },
5114
  {  11, "bits-88" },
5115
  {  12, "bits-96" },
5116
  {  13, "bits-104" },
5117
  {  14, "bits-112" },
5118
  {  15, "bits-120" },
5119
  {  16, "bits-128" },
5120
  {  17, "bits-136" },
5121
  {  18, "bits-144" },
5122
  {  19, "bits-152" },
5123
  {  20, "bits-160" },
5124
  {  21, "bits-168" },
5125
  {  22, "bits-176" },
5126
  {  23, "bits-184" },
5127
  {  24, "bits-192" },
5128
  {  25, "bits-200" },
5129
  {  26, "bits-208" },
5130
  {  27, "bits-216" },
5131
  {  28, "bits-224" },
5132
  {  29, "bits-232" },
5133
  {  30, "bits-240" },
5134
  {  31, "bits-248" },
5135
  {  32, "bits-256" },
5136
  {  33, "bits-264" },
5137
  {  34, "bits-272" },
5138
  {  35, "reserved-35" },
5139
  {  36, "reserved-36" },
5140
  {  37, "reserved-37" },
5141
  {  38, "reserved-38" },
5142
  {  39, "reserved-39" },
5143
  {  40, "reserved-40" },
5144
  {  41, "reserved-41" },
5145
  {  42, "reserved-42" },
5146
  {  43, "reserved-43" },
5147
  {  44, "reserved-44" },
5148
  {  45, "reserved-45" },
5149
  {  46, "reserved-46" },
5150
  {  47, "reserved-47" },
5151
  {  48, "reserved-48" },
5152
  {  49, "reserved-49" },
5153
  {  50, "reserved-50" },
5154
  {  51, "reserved-51" },
5155
  {  52, "reserved-52" },
5156
  {  53, "reserved-53" },
5157
  {  54, "reserved-54" },
5158
  {  55, "reserved-55" },
5159
  {  56, "reserved-56" },
5160
  {  57, "reserved-57" },
5161
  {  58, "reserved-58" },
5162
  {  59, "reserved-59" },
5163
  {  60, "reserved-60" },
5164
  {  61, "reserved-61" },
5165
  {  62, "reserved-62" },
5166
  {  63, "reserved-63" },
5167
  { 0, NULL }
5168
};
5169
5170
static value_string_ext tetra_LengthIndicationMacEndDl_vals_ext = VALUE_STRING_EXT_INIT(tetra_LengthIndicationMacEndDl_vals);
5171
5172
5173
static unsigned
5174
0
dissect_tetra_LengthIndicationMacEndDl(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5175
0
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5176
0
                                     64, NULL, false, 0, NULL);
5177
5178
0
  return offset;
5179
0
}
5180
5181
5182
static const value_string tetra_Capacity_Allocation_vals[] = {
5183
  {   0, "first-subslot" },
5184
  {   1, "slot-allocated-1" },
5185
  {   2, "slot-allocated-2" },
5186
  {   3, "slot-allocated-3" },
5187
  {   4, "slot-allocated-4" },
5188
  {   5, "slot-allocated-5" },
5189
  {   6, "slot-allocated-6" },
5190
  {   7, "slot-allocated-8" },
5191
  {   8, "slot-allocated-10" },
5192
  {   9, "slot-allocated-13" },
5193
  {  10, "slot-allocated-17" },
5194
  {  11, "slot-allocated-24" },
5195
  {  12, "slot-allocated-34" },
5196
  {  13, "lot-allocated-51" },
5197
  {  14, "slot-allocated-68" },
5198
  {  15, "second-subslot" },
5199
  { 0, NULL }
5200
};
5201
5202
5203
static unsigned
5204
1
dissect_tetra_Capacity_Allocation(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5205
1
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5206
1
                                     16, NULL, false, 0, NULL);
5207
5208
1
  return offset;
5209
1
}
5210
5211
5212
static const value_string tetra_Granting_delay_vals[] = {
5213
  {   0, "capacity-allocation-at-next-opportunity" },
5214
  {   1, "number-of-opportunities-delay" },
5215
  {   2, "number-of-opportunities-delay" },
5216
  {   3, "number-of-opportunities-delay" },
5217
  {   4, "number-of-opportunities-delay" },
5218
  {   5, "number-of-opportunities-delay" },
5219
  {   6, "number-of-opportunities-delay" },
5220
  {   7, "number-of-opportunities-delay" },
5221
  {   8, "number-of-opportunities-delay" },
5222
  {   9, "number-of-opportunities-delay" },
5223
  {  10, "number-of-opportunities-delay" },
5224
  {  11, "number-of-opportunities-delay" },
5225
  {  12, "number-of-opportunities-delay" },
5226
  {  13, "number-of-opportunities-delay" },
5227
  {  14, "allocation-starts-at-frame-18" },
5228
  {  15, "wait" },
5229
  { 0, NULL }
5230
};
5231
5232
5233
static unsigned
5234
1
dissect_tetra_Granting_delay(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5235
1
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5236
1
                                     16, NULL, false, 0, NULL);
5237
5238
1
  return offset;
5239
1
}
5240
5241
5242
static const per_sequence_t SlotGranting_sequence[] = {
5243
  { &hf_tetra_capacity_allocation, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Capacity_Allocation },
5244
  { &hf_tetra_granting_delay, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Granting_delay },
5245
  { NULL, 0, 0, NULL }
5246
};
5247
5248
static unsigned
5249
1
dissect_tetra_SlotGranting(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5250
1
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
5251
1
                                   ett_tetra_SlotGranting, SlotGranting_sequence);
5252
5253
1
  return offset;
5254
1
}
5255
5256
5257
static const value_string tetra_T_slot_granting_vals[] = {
5258
  {   0, "none" },
5259
  {   1, "slot-granting-param" },
5260
  { 0, NULL }
5261
};
5262
5263
static const per_choice_t T_slot_granting_choice[] = {
5264
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
5265
  {   1, &hf_tetra_slot_granting_param, ASN1_NO_EXTENSIONS     , dissect_tetra_SlotGranting },
5266
  { 0, NULL, 0, NULL }
5267
};
5268
5269
static unsigned
5270
0
dissect_tetra_T_slot_granting(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5271
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5272
0
                                 ett_tetra_T_slot_granting, T_slot_granting_choice,
5273
0
                                 NULL);
5274
5275
0
  return offset;
5276
0
}
5277
5278
5279
static const value_string tetra_T_allocation_type_vals[] = {
5280
  {   0, "replace" },
5281
  {   1, "add" },
5282
  {   2, "quit" },
5283
  {   3, "reserved" },
5284
  { 0, NULL }
5285
};
5286
5287
5288
static unsigned
5289
2
dissect_tetra_T_allocation_type(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5290
2
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5291
2
                                     4, NULL, false, 0, NULL);
5292
5293
2
  return offset;
5294
2
}
5295
5296
5297
static const value_string tetra_Timeslot_Assigned_vals[] = {
5298
  {   0, "go-to-control-channel" },
5299
  {   1, "timeslot-4" },
5300
  {   2, "timeslot-bit-map" },
5301
  {   3, "timeslot-bit-map" },
5302
  {   4, "timeslot-bit-map" },
5303
  {   5, "timeslot-bit-map" },
5304
  {   6, "timeslot-bit-map" },
5305
  {   7, "timeslot-bit-map" },
5306
  {   8, "timeslot-bit-map" },
5307
  {   9, "timeslot-bit-map" },
5308
  {  10, "timeslot-bit-map" },
5309
  {  11, "timeslot-bit-map" },
5310
  {  12, "timeslot-bit-map" },
5311
  {  13, "timeslot-bit-map" },
5312
  {  14, "timeslot-bit-map" },
5313
  {  15, "all-four-timeslots" },
5314
  { 0, NULL }
5315
};
5316
5317
5318
static unsigned
5319
2
dissect_tetra_Timeslot_Assigned(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5320
2
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5321
2
                                     16, NULL, false, 0, NULL);
5322
5323
2
  return offset;
5324
2
}
5325
5326
5327
static const value_string tetra_T_up_down_assigned_vals[] = {
5328
  {   0, "reserve" },
5329
  {   1, "downlink-only" },
5330
  {   2, "uplink-only" },
5331
  {   3, "uplink-downlink" },
5332
  { 0, NULL }
5333
};
5334
5335
5336
static unsigned
5337
2
dissect_tetra_T_up_down_assigned(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5338
2
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5339
2
                                     4, NULL, false, 0, NULL);
5340
5341
2
  return offset;
5342
2
}
5343
5344
5345
static const value_string tetra_CLCH_permission_vals[] = {
5346
  {   0, "no-permission" },
5347
  {   1, "permission" },
5348
  { 0, NULL }
5349
};
5350
5351
5352
static unsigned
5353
2
dissect_tetra_CLCH_permission(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5354
2
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5355
2
                                     2, NULL, false, 0, NULL);
5356
5357
2
  return offset;
5358
2
}
5359
5360
5361
static const value_string tetra_Cell_change_flag_vals[] = {
5362
  {   0, "no-change" },
5363
  {   1, "change" },
5364
  { 0, NULL }
5365
};
5366
5367
5368
static unsigned
5369
2
dissect_tetra_Cell_change_flag(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5370
2
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5371
2
                                     2, NULL, false, 0, NULL);
5372
5373
2
  return offset;
5374
2
}
5375
5376
5377
static const value_string tetra_T_reverse_operation_vals[] = {
5378
  {   0, "normal" },
5379
  {   1, "reverse" },
5380
  { 0, NULL }
5381
};
5382
5383
5384
static unsigned
5385
0
dissect_tetra_T_reverse_operation(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5386
0
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5387
0
                                     2, NULL, false, 0, NULL);
5388
5389
0
  return offset;
5390
0
}
5391
5392
5393
static const per_sequence_t Extended_carrier_flag_sequence[] = {
5394
  { &hf_tetra_frequency_band, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_15 },
5395
  { &hf_tetra_offset_01     , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
5396
  { &hf_tetra_duplex_spacing, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
5397
  { &hf_tetra_reverse_operation_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_reverse_operation },
5398
  { NULL, 0, 0, NULL }
5399
};
5400
5401
static unsigned
5402
0
dissect_tetra_Extended_carrier_flag(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5403
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
5404
0
                                   ett_tetra_Extended_carrier_flag, Extended_carrier_flag_sequence);
5405
5406
0
  return offset;
5407
0
}
5408
5409
5410
static const value_string tetra_T_extend_carrier_flag_vals[] = {
5411
  {   0, "none" },
5412
  {   1, "extended" },
5413
  { 0, NULL }
5414
};
5415
5416
static const per_choice_t T_extend_carrier_flag_choice[] = {
5417
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
5418
  {   1, &hf_tetra_extended      , ASN1_NO_EXTENSIONS     , dissect_tetra_Extended_carrier_flag },
5419
  { 0, NULL, 0, NULL }
5420
};
5421
5422
static unsigned
5423
2
dissect_tetra_T_extend_carrier_flag(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5424
2
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5425
2
                                 ett_tetra_T_extend_carrier_flag, T_extend_carrier_flag_choice,
5426
2
                                 NULL);
5427
5428
2
  return offset;
5429
2
}
5430
5431
5432
static const value_string tetra_Monitoring_pattern_vals[] = {
5433
  {   0, "no" },
5434
  {   1, "one" },
5435
  {   2, "two" },
5436
  {   3, "three" },
5437
  { 0, NULL }
5438
};
5439
5440
5441
static unsigned
5442
0
dissect_tetra_Monitoring_pattern(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5443
0
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5444
0
                                     4, NULL, false, 0, NULL);
5445
5446
0
  return offset;
5447
0
}
5448
5449
5450
static const value_string tetra_T_monitoring_pattern_vals[] = {
5451
  {   0, "one" },
5452
  {   1, "none1" },
5453
  {   2, "none2" },
5454
  {   3, "none3" },
5455
  { 0, NULL }
5456
};
5457
5458
static const per_choice_t T_monitoring_pattern_choice[] = {
5459
  {   0, &hf_tetra_one           , ASN1_NO_EXTENSIONS     , dissect_tetra_Monitoring_pattern },
5460
  {   1, &hf_tetra_none1         , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
5461
  {   2, &hf_tetra_none2         , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
5462
  {   3, &hf_tetra_none3         , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
5463
  { 0, NULL, 0, NULL }
5464
};
5465
5466
static unsigned
5467
2
dissect_tetra_T_monitoring_pattern(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5468
2
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5469
2
                                 ett_tetra_T_monitoring_pattern, T_monitoring_pattern_choice,
5470
2
                                 NULL);
5471
5472
2
  return offset;
5473
2
}
5474
5475
5476
static const per_sequence_t ChannelAllocation_sequence[] = {
5477
  { &hf_tetra_allocation_type, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_allocation_type },
5478
  { &hf_tetra_timeslot_assigned, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Timeslot_Assigned },
5479
  { &hf_tetra_up_down_assigned, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_up_down_assigned },
5480
  { &hf_tetra_clch_permission, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_CLCH_permission },
5481
  { &hf_tetra_cell_change   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Cell_change_flag },
5482
  { &hf_tetra_carrier_number, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_4095 },
5483
  { &hf_tetra_extend_carrier_flag, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_extend_carrier_flag },
5484
  { &hf_tetra_monitoring_pattern, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_monitoring_pattern },
5485
  { NULL, 0, 0, NULL }
5486
};
5487
5488
static unsigned
5489
2
dissect_tetra_ChannelAllocation(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5490
2
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
5491
2
                                   ett_tetra_ChannelAllocation, ChannelAllocation_sequence);
5492
5493
2
  return offset;
5494
2
}
5495
5496
5497
static const value_string tetra_T_channel_allocation_vals[] = {
5498
  {   0, "none" },
5499
  {   1, "channel-allocation-element" },
5500
  { 0, NULL }
5501
};
5502
5503
static const per_choice_t T_channel_allocation_choice[] = {
5504
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
5505
  {   1, &hf_tetra_channel_allocation_element, ASN1_NO_EXTENSIONS     , dissect_tetra_ChannelAllocation },
5506
  { 0, NULL, 0, NULL }
5507
};
5508
5509
static unsigned
5510
0
dissect_tetra_T_channel_allocation(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5511
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5512
0
                                 ett_tetra_T_channel_allocation, T_channel_allocation_choice,
5513
0
                                 NULL);
5514
5515
0
  return offset;
5516
0
}
5517
5518
5519
5520
static unsigned
5521
0
dissect_tetra_BIT_STRING_SIZE_255(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5522
0
  offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
5523
0
                                     255, 255, false, NULL, 0, NULL, NULL);
5524
5525
0
  return offset;
5526
0
}
5527
5528
5529
static const per_sequence_t MAC_END_DOWNLINK_sequence[] = {
5530
  { &hf_tetra_pdu_type      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
5531
  { &hf_tetra_sub_type      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
5532
  { &hf_tetra_fill_bit_indication, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Fill_Bit_Indication },
5533
  { &hf_tetra_position_of_grant, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Position_Of_Grant },
5534
  { &hf_tetra_lengthIndication_02, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_LengthIndicationMacEndDl },
5535
  { &hf_tetra_slot_granting , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_slot_granting },
5536
  { &hf_tetra_channel_allocation, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_channel_allocation },
5537
  { &hf_tetra_tm_sdu_bit_str_05, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BIT_STRING_SIZE_255 },
5538
  { NULL, 0, 0, NULL }
5539
};
5540
5541
static unsigned
5542
0
dissect_tetra_MAC_END_DOWNLINK(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5543
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
5544
0
                                   ett_tetra_MAC_END_DOWNLINK, MAC_END_DOWNLINK_sequence);
5545
5546
0
  return offset;
5547
0
}
5548
5549
5550
static const value_string tetra_T_slot_granting_01_vals[] = {
5551
  {   0, "none" },
5552
  {   1, "slot-granting-param" },
5553
  { 0, NULL }
5554
};
5555
5556
static const per_choice_t T_slot_granting_01_choice[] = {
5557
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
5558
  {   1, &hf_tetra_slot_granting_param, ASN1_NO_EXTENSIONS     , dissect_tetra_SlotGranting },
5559
  { 0, NULL, 0, NULL }
5560
};
5561
5562
static unsigned
5563
0
dissect_tetra_T_slot_granting_01(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5564
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5565
0
                                 ett_tetra_T_slot_granting_01, T_slot_granting_01_choice,
5566
0
                                 NULL);
5567
5568
0
  return offset;
5569
0
}
5570
5571
5572
static const value_string tetra_T_channel_allocation_01_vals[] = {
5573
  {   0, "none" },
5574
  {   1, "channel-allocation-element" },
5575
  { 0, NULL }
5576
};
5577
5578
static const per_choice_t T_channel_allocation_01_choice[] = {
5579
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
5580
  {   1, &hf_tetra_channel_allocation_element, ASN1_NO_EXTENSIONS     , dissect_tetra_ChannelAllocation },
5581
  { 0, NULL, 0, NULL }
5582
};
5583
5584
static unsigned
5585
0
dissect_tetra_T_channel_allocation_01(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5586
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5587
0
                                 ett_tetra_T_channel_allocation_01, T_channel_allocation_01_choice,
5588
0
                                 NULL);
5589
5590
0
  return offset;
5591
0
}
5592
5593
5594
5595
static unsigned
5596
0
dissect_tetra_BIT_STRING_SIZE_111(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5597
0
  offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
5598
0
                                     111, 111, false, NULL, 0, NULL, NULL);
5599
5600
0
  return offset;
5601
0
}
5602
5603
5604
static const per_sequence_t MAC_END_DOWN111_sequence[] = {
5605
  { &hf_tetra_pdu_type_02   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
5606
  { &hf_tetra_fill_bit_ind  , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
5607
  { &hf_tetra_position_of_grant_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
5608
  { &hf_tetra_lengthIndication_02, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_LengthIndicationMacEndDl },
5609
  { &hf_tetra_slot_granting_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_slot_granting_01 },
5610
  { &hf_tetra_channel_allocation_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_channel_allocation_01 },
5611
  { &hf_tetra_tm_sdu_bit_str_06, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BIT_STRING_SIZE_111 },
5612
  { NULL, 0, 0, NULL }
5613
};
5614
5615
static unsigned
5616
0
dissect_tetra_MAC_END_DOWN111(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5617
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
5618
0
                                   ett_tetra_MAC_END_DOWN111, MAC_END_DOWN111_sequence);
5619
5620
0
  return offset;
5621
0
}
5622
5623
5624
static const value_string tetra_T_access_ack_vals[] = {
5625
  {   0, "undefined" },
5626
  {   1, "random-access-acknowledged" },
5627
  { 0, NULL }
5628
};
5629
5630
5631
static unsigned
5632
2
dissect_tetra_T_access_ack(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5633
2
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5634
2
                                     2, NULL, false, 0, NULL);
5635
5636
2
  return offset;
5637
2
}
5638
5639
5640
static const value_string tetra_LengthIndicationMacResource_vals[] = {
5641
  {   0, "reserved-0" },
5642
  {   1, "reserved-1" },
5643
  {   2, "null-pdu" },
5644
  {   3, "reserved" },
5645
  {   4, "bits-32" },
5646
  {   5, "bits-40" },
5647
  {   6, "bits-48" },
5648
  {   7, "bits-56" },
5649
  {   8, "bits-64" },
5650
  {   9, "bits-72" },
5651
  {  10, "bits-80" },
5652
  {  11, "bits-88" },
5653
  {  12, "bits-96" },
5654
  {  13, "bits-104" },
5655
  {  14, "bits-112" },
5656
  {  15, "bits-120" },
5657
  {  16, "bits-128" },
5658
  {  17, "bits-136" },
5659
  {  18, "bits-144" },
5660
  {  19, "bits-152" },
5661
  {  20, "bits-160" },
5662
  {  21, "bits-168" },
5663
  {  22, "bits-176" },
5664
  {  23, "bits-184" },
5665
  {  24, "bits-192" },
5666
  {  25, "bits-200" },
5667
  {  26, "bits-208" },
5668
  {  27, "bits-216" },
5669
  {  28, "bits-224" },
5670
  {  29, "bits-232" },
5671
  {  30, "bits-240" },
5672
  {  31, "bits-248" },
5673
  {  32, "bits-256" },
5674
  {  33, "bits-264" },
5675
  {  34, "bits-272" },
5676
  {  35, "reserved-35" },
5677
  {  36, "reserved-36" },
5678
  {  37, "reserved-37" },
5679
  {  38, "reserved-38" },
5680
  {  39, "reserved-39" },
5681
  {  40, "reserved-40" },
5682
  {  41, "reserved-41" },
5683
  {  42, "reserved-42" },
5684
  {  43, "reserved-43" },
5685
  {  44, "reserved-44" },
5686
  {  45, "reserved-45" },
5687
  {  46, "reserved-46" },
5688
  {  47, "reserved-47" },
5689
  {  48, "reserved-48" },
5690
  {  49, "reserved-49" },
5691
  {  50, "reserved-50" },
5692
  {  51, "reserved-51" },
5693
  {  52, "reserved-52" },
5694
  {  53, "reserved-53" },
5695
  {  54, "reserved-54" },
5696
  {  55, "reserved-55" },
5697
  {  56, "reserved-56" },
5698
  {  57, "reserved-57" },
5699
  {  58, "reserved-58" },
5700
  {  59, "reserved-59" },
5701
  {  60, "reserved-60" },
5702
  {  61, "reserved-61" },
5703
  {  62, "second-halfslot-stolen" },
5704
  {  63, "start-frag" },
5705
  { 0, NULL }
5706
};
5707
5708
static value_string_ext tetra_LengthIndicationMacResource_vals_ext = VALUE_STRING_EXT_INIT(tetra_LengthIndicationMacResource_vals);
5709
5710
5711
static unsigned
5712
2
dissect_tetra_LengthIndicationMacResource(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5713
2
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5714
2
                                     64, NULL, false, 0, NULL);
5715
5716
2
  return offset;
5717
2
}
5718
5719
5720
static const value_string tetra_PowerControl_vals[] = {
5721
  {   0, "no-change" },
5722
  {   1, "increase-1" },
5723
  {   2, "increase-2" },
5724
  {   3, "increase-3" },
5725
  {   4, "increase-4" },
5726
  {   5, "increase-5" },
5727
  {   6, "increase-6" },
5728
  {   7, "maximum-xceeded" },
5729
  {   8, "revert-open-loop-control" },
5730
  {   9, "decrease-1" },
5731
  {  10, "decrease-2" },
5732
  {  11, "decrease-3" },
5733
  {  12, "decrease-4" },
5734
  {  13, "decrease-5" },
5735
  {  14, "decrease-6" },
5736
  {  15, "radio-uplink-failure" },
5737
  { 0, NULL }
5738
};
5739
5740
5741
static unsigned
5742
0
dissect_tetra_PowerControl(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5743
0
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5744
0
                                     16, NULL, false, 0, NULL);
5745
5746
0
  return offset;
5747
0
}
5748
5749
5750
static const value_string tetra_T_power_control_vals[] = {
5751
  {   0, "none" },
5752
  {   1, "powerParameters" },
5753
  { 0, NULL }
5754
};
5755
5756
static const per_choice_t T_power_control_choice[] = {
5757
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
5758
  {   1, &hf_tetra_powerParameters, ASN1_NO_EXTENSIONS     , dissect_tetra_PowerControl },
5759
  { 0, NULL, 0, NULL }
5760
};
5761
5762
static unsigned
5763
2
dissect_tetra_T_power_control(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5764
2
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5765
2
                                 ett_tetra_T_power_control, T_power_control_choice,
5766
2
                                 NULL);
5767
5768
2
  return offset;
5769
2
}
5770
5771
5772
static const value_string tetra_T_slot_granting_02_vals[] = {
5773
  {   0, "none" },
5774
  {   1, "slot-granting-param" },
5775
  { 0, NULL }
5776
};
5777
5778
static const per_choice_t T_slot_granting_02_choice[] = {
5779
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
5780
  {   1, &hf_tetra_slot_granting_param, ASN1_NO_EXTENSIONS     , dissect_tetra_SlotGranting },
5781
  { 0, NULL, 0, NULL }
5782
};
5783
5784
static unsigned
5785
2
dissect_tetra_T_slot_granting_02(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5786
2
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5787
2
                                 ett_tetra_T_slot_granting_02, T_slot_granting_02_choice,
5788
2
                                 NULL);
5789
5790
2
  return offset;
5791
2
}
5792
5793
5794
static const value_string tetra_T_channel_allocation_02_vals[] = {
5795
  {   0, "none" },
5796
  {   1, "channel-allocation-element" },
5797
  { 0, NULL }
5798
};
5799
5800
static const per_choice_t T_channel_allocation_02_choice[] = {
5801
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
5802
  {   1, &hf_tetra_channel_allocation_element, ASN1_NO_EXTENSIONS     , dissect_tetra_ChannelAllocation },
5803
  { 0, NULL, 0, NULL }
5804
};
5805
5806
static unsigned
5807
2
dissect_tetra_T_channel_allocation_02(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5808
2
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5809
2
                                 ett_tetra_T_channel_allocation_02, T_channel_allocation_02_choice,
5810
2
                                 NULL);
5811
5812
2
  return offset;
5813
2
}
5814
5815
5816
static const value_string tetra_T_ssi_choice_vals[] = {
5817
  {   0, "none" },
5818
  {   1, "ssi" },
5819
  { 0, NULL }
5820
};
5821
5822
static const per_choice_t T_ssi_choice_choice[] = {
5823
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
5824
  {   1, &hf_tetra_ssi_oct_str   , ASN1_NO_EXTENSIONS     , dissect_tetra_OCTET_STRING_SIZE_3 },
5825
  { 0, NULL, 0, NULL }
5826
};
5827
5828
static unsigned
5829
0
dissect_tetra_T_ssi_choice(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5830
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5831
0
                                 ett_tetra_T_ssi_choice, T_ssi_choice_choice,
5832
0
                                 NULL);
5833
5834
0
  return offset;
5835
0
}
5836
5837
5838
static const value_string tetra_T_address_extension_choice_vals[] = {
5839
  {   0, "none" },
5840
  {   1, "address-extension" },
5841
  { 0, NULL }
5842
};
5843
5844
static const per_choice_t T_address_extension_choice_choice[] = {
5845
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
5846
  {   1, &hf_tetra_address_extension, ASN1_NO_EXTENSIONS     , dissect_tetra_OCTET_STRING_SIZE_3 },
5847
  { 0, NULL, 0, NULL }
5848
};
5849
5850
static unsigned
5851
0
dissect_tetra_T_address_extension_choice(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5852
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5853
0
                                 ett_tetra_T_address_extension_choice, T_address_extension_choice_choice,
5854
0
                                 NULL);
5855
5856
0
  return offset;
5857
0
}
5858
5859
5860
static const value_string tetra_T_subscriber_class_choice_vals[] = {
5861
  {   0, "none" },
5862
  {   1, "subscriber-class" },
5863
  { 0, NULL }
5864
};
5865
5866
static const per_choice_t T_subscriber_class_choice_choice[] = {
5867
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
5868
  {   1, &hf_tetra_subscriber_class, ASN1_NO_EXTENSIONS     , dissect_tetra_Subscriber_class },
5869
  { 0, NULL, 0, NULL }
5870
};
5871
5872
static unsigned
5873
0
dissect_tetra_T_subscriber_class_choice(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5874
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5875
0
                                 ett_tetra_T_subscriber_class_choice, T_subscriber_class_choice_choice,
5876
0
                                 NULL);
5877
5878
0
  return offset;
5879
0
}
5880
5881
5882
static const value_string tetra_T_energy_saving_mode_vals[] = {
5883
  {   0, "none" },
5884
  {   1, "energy-saving-mode" },
5885
  { 0, NULL }
5886
};
5887
5888
static const per_choice_t T_energy_saving_mode_choice[] = {
5889
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
5890
  {   1, &hf_tetra_energy_saving_mode_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_7 },
5891
  { 0, NULL, 0, NULL }
5892
};
5893
5894
static unsigned
5895
0
dissect_tetra_T_energy_saving_mode(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5896
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5897
0
                                 ett_tetra_T_energy_saving_mode, T_energy_saving_mode_choice,
5898
0
                                 NULL);
5899
5900
0
  return offset;
5901
0
}
5902
5903
5904
static const value_string tetra_T_scch_info_vals[] = {
5905
  {   0, "none" },
5906
  {   1, "scch-info" },
5907
  { 0, NULL }
5908
};
5909
5910
static const per_choice_t T_scch_info_choice[] = {
5911
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
5912
  {   1, &hf_tetra_scch_info_01  , ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_16383 },
5913
  { 0, NULL, 0, NULL }
5914
};
5915
5916
static unsigned
5917
0
dissect_tetra_T_scch_info(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5918
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5919
0
                                 ett_tetra_T_scch_info, T_scch_info_choice,
5920
0
                                 NULL);
5921
5922
0
  return offset;
5923
0
}
5924
5925
5926
static const value_string tetra_T_new_ra_vals[] = {
5927
  {   0, "none" },
5928
  {   1, "new-ra" },
5929
  { 0, NULL }
5930
};
5931
5932
static const per_choice_t T_new_ra_choice[] = {
5933
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
5934
  {   1, &hf_tetra_new_ra_01     , ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_3 },
5935
  { 0, NULL, 0, NULL }
5936
};
5937
5938
static unsigned
5939
0
dissect_tetra_T_new_ra(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5940
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5941
0
                                 ett_tetra_T_new_ra, T_new_ra_choice,
5942
0
                                 NULL);
5943
5944
0
  return offset;
5945
0
}
5946
5947
5948
static const value_string tetra_T_group_identity_location_accept_vals[] = {
5949
  {   0, "none" },
5950
  {   1, "group-identity-location-accept" },
5951
  { 0, NULL }
5952
};
5953
5954
static const per_choice_t T_group_identity_location_accept_choice[] = {
5955
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
5956
  {   1, &hf_tetra_group_identity_location_accept_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_3 },
5957
  { 0, NULL, 0, NULL }
5958
};
5959
5960
static unsigned
5961
0
dissect_tetra_T_group_identity_location_accept(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5962
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5963
0
                                 ett_tetra_T_group_identity_location_accept, T_group_identity_location_accept_choice,
5964
0
                                 NULL);
5965
5966
0
  return offset;
5967
0
}
5968
5969
5970
static const value_string tetra_T_group_predefined_lifetime_vals[] = {
5971
  {   0, "none" },
5972
  {   1, "group-predefined-lifetime" },
5973
  { 0, NULL }
5974
};
5975
5976
static const per_choice_t T_group_predefined_lifetime_choice[] = {
5977
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
5978
  {   1, &hf_tetra_group_predefined_lifetime_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_3 },
5979
  { 0, NULL, 0, NULL }
5980
};
5981
5982
static unsigned
5983
0
dissect_tetra_T_group_predefined_lifetime(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5984
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5985
0
                                 ett_tetra_T_group_predefined_lifetime, T_group_predefined_lifetime_choice,
5986
0
                                 NULL);
5987
5988
0
  return offset;
5989
0
}
5990
5991
5992
static const value_string tetra_T_group_identity_downlink_vals[] = {
5993
  {   0, "none" },
5994
  {   1, "group-identity-downlink" },
5995
  { 0, NULL }
5996
};
5997
5998
static const per_choice_t T_group_identity_downlink_choice[] = {
5999
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6000
  {   1, &hf_tetra_group_identity_downlink_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_15 },
6001
  { 0, NULL, 0, NULL }
6002
};
6003
6004
static unsigned
6005
0
dissect_tetra_T_group_identity_downlink(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6006
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6007
0
                                 ett_tetra_T_group_identity_downlink, T_group_identity_downlink_choice,
6008
0
                                 NULL);
6009
6010
0
  return offset;
6011
0
}
6012
6013
6014
static const value_string tetra_T_proprietary_vals[] = {
6015
  {   0, "none" },
6016
  {   1, "proprietary" },
6017
  { 0, NULL }
6018
};
6019
6020
static const per_choice_t T_proprietary_choice[] = {
6021
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6022
  {   1, &hf_tetra_proprietary_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_7 },
6023
  { 0, NULL, 0, NULL }
6024
};
6025
6026
static unsigned
6027
0
dissect_tetra_T_proprietary(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6028
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6029
0
                                 ett_tetra_T_proprietary, T_proprietary_choice,
6030
0
                                 NULL);
6031
6032
0
  return offset;
6033
0
}
6034
6035
6036
static const per_sequence_t T_type3_elements_sequence[] = {
6037
  { &hf_tetra_type2_existance, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
6038
  { &hf_tetra_type3_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_TYPE3_IDENTIFIER },
6039
  { &hf_tetra_new_ra        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_new_ra },
6040
  { &hf_tetra_group_identity_location_accept, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_group_identity_location_accept },
6041
  { &hf_tetra_group_predefined_lifetime, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_group_predefined_lifetime },
6042
  { &hf_tetra_group_identity_downlink, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_group_identity_downlink },
6043
  { &hf_tetra_proprietary   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_proprietary },
6044
  { NULL, 0, 0, NULL }
6045
};
6046
6047
static unsigned
6048
0
dissect_tetra_T_type3_elements(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6049
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6050
0
                                   ett_tetra_T_type3_elements, T_type3_elements_sequence);
6051
6052
0
  return offset;
6053
0
}
6054
6055
6056
static const value_string tetra_T_type3_vals[] = {
6057
  {   0, "no-type3" },
6058
  {   1, "type3-elements" },
6059
  { 0, NULL }
6060
};
6061
6062
static const per_choice_t T_type3_choice[] = {
6063
  {   0, &hf_tetra_no_type3      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6064
  {   1, &hf_tetra_type3_elements, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type3_elements },
6065
  { 0, NULL, 0, NULL }
6066
};
6067
6068
static unsigned
6069
0
dissect_tetra_T_type3(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6070
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6071
0
                                 ett_tetra_T_type3, T_type3_choice,
6072
0
                                 NULL);
6073
6074
0
  return offset;
6075
0
}
6076
6077
6078
static const per_sequence_t T_type2_parameters_03_sequence[] = {
6079
  { &hf_tetra_ssi_choice    , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_ssi_choice },
6080
  { &hf_tetra_address_extension_choice, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_address_extension_choice },
6081
  { &hf_tetra_subscriber_class_choice, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_subscriber_class_choice },
6082
  { &hf_tetra_energy_saving_mode, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_energy_saving_mode },
6083
  { &hf_tetra_scch_info     , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_scch_info },
6084
  { &hf_tetra_type3         , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_type3 },
6085
  { NULL, 0, 0, NULL }
6086
};
6087
6088
static unsigned
6089
0
dissect_tetra_T_type2_parameters_03(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6090
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6091
0
                                   ett_tetra_T_type2_parameters_03, T_type2_parameters_03_sequence);
6092
6093
0
  return offset;
6094
0
}
6095
6096
6097
static const value_string tetra_T_optional_elements_05_vals[] = {
6098
  {   0, "no-type2" },
6099
  {   1, "type2-parameters" },
6100
  { 0, NULL }
6101
};
6102
6103
static const per_choice_t T_optional_elements_05_choice[] = {
6104
  {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6105
  {   1, &hf_tetra_type2_parameters_03, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_parameters_03 },
6106
  { 0, NULL, 0, NULL }
6107
};
6108
6109
static unsigned
6110
0
dissect_tetra_T_optional_elements_05(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6111
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6112
0
                                 ett_tetra_T_optional_elements_05, T_optional_elements_05_choice,
6113
0
                                 NULL);
6114
6115
0
  return offset;
6116
0
}
6117
6118
6119
static const per_sequence_t D_LOCATION_UPDATE_ACCEPT_sequence[] = {
6120
  { &hf_tetra_location_update_type, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_UPDATE_TYPE },
6121
  { &hf_tetra_optional_elements_05, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_05 },
6122
  { NULL, 0, 0, NULL }
6123
};
6124
6125
static unsigned
6126
0
dissect_tetra_D_LOCATION_UPDATE_ACCEPT(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6127
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6128
0
                                   ett_tetra_D_LOCATION_UPDATE_ACCEPT, D_LOCATION_UPDATE_ACCEPT_sequence);
6129
6130
0
  col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-LOCATION-UPDATE-ACCEPT");
6131
6132
0
  return offset;
6133
0
}
6134
6135
6136
static const per_sequence_t D_LOCATION_UPDATE_REJECT_sequence[] = {
6137
  { &hf_tetra_location_update_type, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_UPDATE_TYPE },
6138
  { &hf_tetra_reject_cause  , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_31 },
6139
  { &hf_tetra_cipher_control, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
6140
  { NULL, 0, 0, NULL }
6141
};
6142
6143
static unsigned
6144
0
dissect_tetra_D_LOCATION_UPDATE_REJECT(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6145
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6146
0
                                   ett_tetra_D_LOCATION_UPDATE_REJECT, D_LOCATION_UPDATE_REJECT_sequence);
6147
6148
0
    col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-LOCATION-UPDATE-REJECT");
6149
6150
0
  return offset;
6151
0
}
6152
6153
6154
static const per_sequence_t T_attach_sequence[] = {
6155
  { &hf_tetra_lifetime      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
6156
  { &hf_tetra_class_of_usage, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
6157
  { NULL, 0, 0, NULL }
6158
};
6159
6160
static unsigned
6161
0
dissect_tetra_T_attach(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6162
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6163
0
                                   ett_tetra_T_attach, T_attach_sequence);
6164
6165
0
  return offset;
6166
0
}
6167
6168
6169
static const value_string tetra_T_detach_downlike_vals[] = {
6170
  {   0, "unknow-gssi" },
6171
  {   1, "temporary-detachment1" },
6172
  {   2, "temporary-detachment2" },
6173
  {   3, "permanent-detachment" },
6174
  { 0, NULL }
6175
};
6176
6177
6178
static unsigned
6179
0
dissect_tetra_T_detach_downlike(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6180
0
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
6181
0
                                     4, NULL, false, 0, NULL);
6182
6183
0
  return offset;
6184
0
}
6185
6186
6187
static const per_sequence_t T_detach_sequence[] = {
6188
  { &hf_tetra_detach_downlike, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_detach_downlike },
6189
  { NULL, 0, 0, NULL }
6190
};
6191
6192
static unsigned
6193
0
dissect_tetra_T_detach(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6194
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6195
0
                                   ett_tetra_T_detach, T_detach_sequence);
6196
6197
0
  return offset;
6198
0
}
6199
6200
6201
static const value_string tetra_T_attach_detach_identifier_vals[] = {
6202
  {   0, "attach" },
6203
  {   1, "detach" },
6204
  { 0, NULL }
6205
};
6206
6207
static const per_choice_t T_attach_detach_identifier_choice[] = {
6208
  {   0, &hf_tetra_attach        , ASN1_NO_EXTENSIONS     , dissect_tetra_T_attach },
6209
  {   1, &hf_tetra_detach        , ASN1_NO_EXTENSIONS     , dissect_tetra_T_detach },
6210
  { 0, NULL, 0, NULL }
6211
};
6212
6213
static unsigned
6214
0
dissect_tetra_T_attach_detach_identifier(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6215
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6216
0
                                 ett_tetra_T_attach_detach_identifier, T_attach_detach_identifier_choice,
6217
0
                                 NULL);
6218
6219
0
  return offset;
6220
0
}
6221
6222
6223
static const per_sequence_t T_gssi_extension_sequence[] = {
6224
  { &hf_tetra_gssi_oct_str  , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_OCTET_STRING_SIZE_3 },
6225
  { &hf_tetra_extension     , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_OCTET_STRING_SIZE_3 },
6226
  { NULL, 0, 0, NULL }
6227
};
6228
6229
static unsigned
6230
0
dissect_tetra_T_gssi_extension(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6231
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6232
0
                                   ett_tetra_T_gssi_extension, T_gssi_extension_sequence);
6233
6234
0
  return offset;
6235
0
}
6236
6237
6238
static const value_string tetra_T_address_type_vals[] = {
6239
  {   0, "gssi" },
6240
  {   1, "gssi-extension" },
6241
  {   2, "vgssi" },
6242
  { 0, NULL }
6243
};
6244
6245
static const per_choice_t T_address_type_choice[] = {
6246
  {   0, &hf_tetra_gssi_oct_str  , ASN1_NO_EXTENSIONS     , dissect_tetra_OCTET_STRING_SIZE_3 },
6247
  {   1, &hf_tetra_gssi_extension, ASN1_NO_EXTENSIONS     , dissect_tetra_T_gssi_extension },
6248
  {   2, &hf_tetra_vgssi         , ASN1_NO_EXTENSIONS     , dissect_tetra_OCTET_STRING_SIZE_3 },
6249
  { 0, NULL, 0, NULL }
6250
};
6251
6252
static unsigned
6253
0
dissect_tetra_T_address_type(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6254
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6255
0
                                 ett_tetra_T_address_type, T_address_type_choice,
6256
0
                                 NULL);
6257
6258
0
  return offset;
6259
0
}
6260
6261
6262
static const per_sequence_t GROUP_IDENTITY_DOWNLINK_sequence[] = {
6263
  { &hf_tetra_attach_detach_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_attach_detach_identifier },
6264
  { &hf_tetra_address_type  , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_address_type },
6265
  { NULL, 0, 0, NULL }
6266
};
6267
6268
static unsigned
6269
0
dissect_tetra_GROUP_IDENTITY_DOWNLINK(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6270
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6271
0
                                   ett_tetra_GROUP_IDENTITY_DOWNLINK, GROUP_IDENTITY_DOWNLINK_sequence);
6272
6273
0
  return offset;
6274
0
}
6275
6276
6277
static const per_sequence_t T_type3_elements_04_sequence[] = {
6278
  { &hf_tetra_type3_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_TYPE3_IDENTIFIER },
6279
  { &hf_tetra_length        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_2047 },
6280
  { &hf_tetra_repeat_num    , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_63 },
6281
  { &hf_tetra_group_identity_downlink_02, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_GROUP_IDENTITY_DOWNLINK },
6282
  { NULL, 0, 0, NULL }
6283
};
6284
6285
static unsigned
6286
0
dissect_tetra_T_type3_elements_04(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6287
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6288
0
                                   ett_tetra_T_type3_elements_04, T_type3_elements_04_sequence);
6289
6290
0
  return offset;
6291
0
}
6292
6293
6294
static const value_string tetra_T_type3_04_vals[] = {
6295
  {   0, "no-type3" },
6296
  {   1, "type3-elements" },
6297
  { 0, NULL }
6298
};
6299
6300
static const per_choice_t T_type3_04_choice[] = {
6301
  {   0, &hf_tetra_no_type3      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6302
  {   1, &hf_tetra_type3_elements_04, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type3_elements_04 },
6303
  { 0, NULL, 0, NULL }
6304
};
6305
6306
static unsigned
6307
0
dissect_tetra_T_type3_04(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6308
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6309
0
                                 ett_tetra_T_type3_04, T_type3_04_choice,
6310
0
                                 NULL);
6311
6312
0
  return offset;
6313
0
}
6314
6315
6316
static const per_sequence_t T_type2_element_09_sequence[] = {
6317
  { &hf_tetra_type3_04      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_type3_04 },
6318
  { NULL, 0, 0, NULL }
6319
};
6320
6321
static unsigned
6322
0
dissect_tetra_T_type2_element_09(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6323
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6324
0
                                   ett_tetra_T_type2_element_09, T_type2_element_09_sequence);
6325
6326
0
  return offset;
6327
0
}
6328
6329
6330
static const value_string tetra_T_optional_elements_30_vals[] = {
6331
  {   0, "no-type2" },
6332
  {   1, "type2-element" },
6333
  { 0, NULL }
6334
};
6335
6336
static const per_choice_t T_optional_elements_30_choice[] = {
6337
  {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6338
  {   1, &hf_tetra_type2_element_09, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_element_09 },
6339
  { 0, NULL, 0, NULL }
6340
};
6341
6342
static unsigned
6343
0
dissect_tetra_T_optional_elements_30(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6344
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6345
0
                                 ett_tetra_T_optional_elements_30, T_optional_elements_30_choice,
6346
0
                                 NULL);
6347
6348
0
  return offset;
6349
0
}
6350
6351
6352
static const per_sequence_t D_ATTACH_DETACH_GROUP_IDENTITY_sequence[] = {
6353
  { &hf_tetra_group_identity_report, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
6354
  { &hf_tetra_group_identity_ack_request, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
6355
  { &hf_tetra_group_identity_attach_detach_mode, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
6356
  { &hf_tetra_optional_elements_30, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_30 },
6357
  { NULL, 0, 0, NULL }
6358
};
6359
6360
static unsigned
6361
0
dissect_tetra_D_ATTACH_DETACH_GROUP_IDENTITY(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6362
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6363
0
                                   ett_tetra_D_ATTACH_DETACH_GROUP_IDENTITY, D_ATTACH_DETACH_GROUP_IDENTITY_sequence);
6364
6365
0
  col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-ATTACH-DETACH-GROUP-IDENTITY");
6366
6367
0
  return offset;
6368
0
}
6369
6370
6371
static const per_sequence_t T_type3_elements_05_sequence[] = {
6372
  { &hf_tetra_type3_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_TYPE3_IDENTIFIER },
6373
  { &hf_tetra_length        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_2047 },
6374
  { &hf_tetra_repeat_num    , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_63 },
6375
  { &hf_tetra_group_identity_downlink_02, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_GROUP_IDENTITY_DOWNLINK },
6376
  { NULL, 0, 0, NULL }
6377
};
6378
6379
static unsigned
6380
0
dissect_tetra_T_type3_elements_05(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6381
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6382
0
                                   ett_tetra_T_type3_elements_05, T_type3_elements_05_sequence);
6383
6384
0
  return offset;
6385
0
}
6386
6387
6388
static const value_string tetra_T_type3_05_vals[] = {
6389
  {   0, "no-type3" },
6390
  {   1, "type3-elements" },
6391
  { 0, NULL }
6392
};
6393
6394
static const per_choice_t T_type3_05_choice[] = {
6395
  {   0, &hf_tetra_no_type3      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6396
  {   1, &hf_tetra_type3_elements_05, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type3_elements_05 },
6397
  { 0, NULL, 0, NULL }
6398
};
6399
6400
static unsigned
6401
0
dissect_tetra_T_type3_05(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6402
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6403
0
                                 ett_tetra_T_type3_05, T_type3_05_choice,
6404
0
                                 NULL);
6405
6406
0
  return offset;
6407
0
}
6408
6409
6410
static const per_sequence_t T_type2_element_10_sequence[] = {
6411
  { &hf_tetra_type3_05      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_type3_05 },
6412
  { NULL, 0, 0, NULL }
6413
};
6414
6415
static unsigned
6416
0
dissect_tetra_T_type2_element_10(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6417
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6418
0
                                   ett_tetra_T_type2_element_10, T_type2_element_10_sequence);
6419
6420
0
  return offset;
6421
0
}
6422
6423
6424
static const value_string tetra_T_optional_elements_31_vals[] = {
6425
  {   0, "no-type2" },
6426
  {   1, "type2-element" },
6427
  { 0, NULL }
6428
};
6429
6430
static const per_choice_t T_optional_elements_31_choice[] = {
6431
  {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6432
  {   1, &hf_tetra_type2_element_10, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_element_10 },
6433
  { 0, NULL, 0, NULL }
6434
};
6435
6436
static unsigned
6437
0
dissect_tetra_T_optional_elements_31(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6438
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6439
0
                                 ett_tetra_T_optional_elements_31, T_optional_elements_31_choice,
6440
0
                                 NULL);
6441
6442
0
  return offset;
6443
0
}
6444
6445
6446
static const per_sequence_t D_ATTACH_DETACH_GROUP_IDENTITY_ACK_sequence[] = {
6447
  { &hf_tetra_group_identity_attach_detach_accept, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
6448
  { &hf_tetra_reserved_01   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
6449
  { &hf_tetra_optional_elements_31, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_31 },
6450
  { NULL, 0, 0, NULL }
6451
};
6452
6453
static unsigned
6454
0
dissect_tetra_D_ATTACH_DETACH_GROUP_IDENTITY_ACK(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6455
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6456
0
                                   ett_tetra_D_ATTACH_DETACH_GROUP_IDENTITY_ACK, D_ATTACH_DETACH_GROUP_IDENTITY_ACK_sequence);
6457
6458
0
  col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-ATTACH-DETACH-GROUP-IDENTITY-ACK");
6459
6460
0
  return offset;
6461
0
}
6462
6463
6464
static const per_sequence_t D_MM_STATUS_sequence[] = {
6465
  { &hf_tetra_status_downlink, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_63 },
6466
  { NULL, 0, 0, NULL }
6467
};
6468
6469
static unsigned
6470
0
dissect_tetra_D_MM_STATUS(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6471
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6472
0
                                   ett_tetra_D_MM_STATUS, D_MM_STATUS_sequence);
6473
6474
0
  col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-MM-STATUS");
6475
6476
0
  return offset;
6477
0
}
6478
6479
6480
static const value_string tetra_D_MM_PDU_vals[] = {
6481
  {   0, "d-Otar" },
6482
  {   1, "d-Authentication" },
6483
  {   2, "d-Authentication-Reject" },
6484
  {   3, "d-Disable" },
6485
  {   4, "d-Enable" },
6486
  {   5, "d-Location-Update-Accept" },
6487
  {   6, "d-Location-Update-Command" },
6488
  {   7, "d-Location-Update-Reject" },
6489
  {   8, "d-MM-reserved2" },
6490
  {   9, "d-Location-Update-Proceeding" },
6491
  {  10, "d-Attach-Detach-Group-Identity" },
6492
  {  11, "d-Attach-Detach-Group-Identity-Ack" },
6493
  {  12, "d-MM-Status" },
6494
  {  13, "d-MM-reserved5" },
6495
  {  14, "d-MM-reserved6" },
6496
  {  15, "d-MM-Function-Not-Support" },
6497
  { 0, NULL }
6498
};
6499
6500
static const per_choice_t D_MM_PDU_choice[] = {
6501
  {   0, &hf_tetra_d_Otar        , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6502
  {   1, &hf_tetra_d_Authentication, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6503
  {   2, &hf_tetra_d_Authentication_Reject, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6504
  {   3, &hf_tetra_d_Disable     , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6505
  {   4, &hf_tetra_d_Enable      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6506
  {   5, &hf_tetra_d_Location_Update_Accept, ASN1_NO_EXTENSIONS     , dissect_tetra_D_LOCATION_UPDATE_ACCEPT },
6507
  {   6, &hf_tetra_d_Location_Update_Command, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6508
  {   7, &hf_tetra_d_Location_Update_Reject, ASN1_NO_EXTENSIONS     , dissect_tetra_D_LOCATION_UPDATE_REJECT },
6509
  {   8, &hf_tetra_d_MM_reserved2, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6510
  {   9, &hf_tetra_d_Location_Update_Proceeding, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6511
  {  10, &hf_tetra_d_Attach_Detach_Group_Identity, ASN1_NO_EXTENSIONS     , dissect_tetra_D_ATTACH_DETACH_GROUP_IDENTITY },
6512
  {  11, &hf_tetra_d_Attach_Detach_Group_Identity_Ack, ASN1_NO_EXTENSIONS     , dissect_tetra_D_ATTACH_DETACH_GROUP_IDENTITY_ACK },
6513
  {  12, &hf_tetra_d_MM_Status   , ASN1_NO_EXTENSIONS     , dissect_tetra_D_MM_STATUS },
6514
  {  13, &hf_tetra_d_MM_reserved5, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6515
  {  14, &hf_tetra_d_MM_reserved6, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6516
  {  15, &hf_tetra_d_MM_Function_Not_Support, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6517
  { 0, NULL, 0, NULL }
6518
};
6519
6520
static unsigned
6521
0
dissect_tetra_D_MM_PDU(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6522
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6523
0
                                 ett_tetra_D_MM_PDU, D_MM_PDU_choice,
6524
0
                                 NULL);
6525
6526
0
  return offset;
6527
0
}
6528
6529
6530
static const value_string tetra_T_simplex_duplex_selection_03_vals[] = {
6531
  {   0, "simplex" },
6532
  {   1, "duplex" },
6533
  { 0, NULL }
6534
};
6535
6536
6537
static unsigned
6538
0
dissect_tetra_T_simplex_duplex_selection_03(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6539
0
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
6540
0
                                     2, NULL, false, 0, NULL);
6541
6542
0
  return offset;
6543
0
}
6544
6545
6546
static const value_string tetra_T_basic_service_infomation_vals[] = {
6547
  {   0, "none" },
6548
  {   1, "basic-service-infomation" },
6549
  { 0, NULL }
6550
};
6551
6552
static const per_choice_t T_basic_service_infomation_choice[] = {
6553
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6554
  {   1, &hf_tetra_basic_service_infomation_01, ASN1_NO_EXTENSIONS     , dissect_tetra_Basic_service_information },
6555
  { 0, NULL, 0, NULL }
6556
};
6557
6558
static unsigned
6559
0
dissect_tetra_T_basic_service_infomation(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6560
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6561
0
                                 ett_tetra_T_basic_service_infomation, T_basic_service_infomation_choice,
6562
0
                                 NULL);
6563
6564
0
  return offset;
6565
0
}
6566
6567
6568
static const value_string tetra_T_notification_indicator_06_vals[] = {
6569
  {   0, "none" },
6570
  {   1, "notification-indicator" },
6571
  { 0, NULL }
6572
};
6573
6574
static const per_choice_t T_notification_indicator_06_choice[] = {
6575
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6576
  {   1, &hf_tetra_notification_indicator_06, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_63 },
6577
  { 0, NULL, 0, NULL }
6578
};
6579
6580
static unsigned
6581
0
dissect_tetra_T_notification_indicator_06(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6582
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6583
0
                                 ett_tetra_T_notification_indicator_06, T_notification_indicator_06_choice,
6584
0
                                 NULL);
6585
6586
0
  return offset;
6587
0
}
6588
6589
6590
static const value_string tetra_T_prop_09_vals[] = {
6591
  {   0, "none" },
6592
  {   1, "prop" },
6593
  { 0, NULL }
6594
};
6595
6596
static const per_choice_t T_prop_09_choice[] = {
6597
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6598
  {   1, &hf_tetra_prop_01       , ASN1_NO_EXTENSIONS     , dissect_tetra_Proprietary },
6599
  { 0, NULL, 0, NULL }
6600
};
6601
6602
static unsigned
6603
0
dissect_tetra_T_prop_09(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6604
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6605
0
                                 ett_tetra_T_prop_09, T_prop_09_choice,
6606
0
                                 NULL);
6607
6608
0
  return offset;
6609
0
}
6610
6611
6612
static const per_sequence_t T_type2_parameters_13_sequence[] = {
6613
  { &hf_tetra_basic_service_infomation, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_basic_service_infomation },
6614
  { &hf_tetra_notification_indicator_07, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_notification_indicator_06 },
6615
  { &hf_tetra_prop_10       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop_09 },
6616
  { NULL, 0, 0, NULL }
6617
};
6618
6619
static unsigned
6620
0
dissect_tetra_T_type2_parameters_13(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6621
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6622
0
                                   ett_tetra_T_type2_parameters_13, T_type2_parameters_13_sequence);
6623
6624
0
  return offset;
6625
0
}
6626
6627
6628
static const value_string tetra_T_optional_elements_22_vals[] = {
6629
  {   0, "no-type2" },
6630
  {   1, "type2-parameters" },
6631
  { 0, NULL }
6632
};
6633
6634
static const per_choice_t T_optional_elements_22_choice[] = {
6635
  {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6636
  {   1, &hf_tetra_type2_parameters_13, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_parameters_13 },
6637
  { 0, NULL, 0, NULL }
6638
};
6639
6640
static unsigned
6641
0
dissect_tetra_T_optional_elements_22(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6642
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6643
0
                                 ett_tetra_T_optional_elements_22, T_optional_elements_22_choice,
6644
0
                                 NULL);
6645
6646
0
  return offset;
6647
0
}
6648
6649
6650
static const per_sequence_t D_ALERT_sequence[] = {
6651
  { &hf_tetra_call_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
6652
  { &hf_tetra_call_time_out_setup_phase, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
6653
  { &hf_tetra_reserved_01   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
6654
  { &hf_tetra_simplex_duplex_selection_04, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_simplex_duplex_selection_03 },
6655
  { &hf_tetra_call_queued   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
6656
  { &hf_tetra_optional_elements_22, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_22 },
6657
  { NULL, 0, 0, NULL }
6658
};
6659
6660
static unsigned
6661
0
dissect_tetra_D_ALERT(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6662
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6663
0
                                   ett_tetra_D_ALERT, D_ALERT_sequence);
6664
6665
0
  col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-ALERT");
6666
6667
0
  return offset;
6668
0
}
6669
6670
6671
static const value_string tetra_T_basic_service_information_02_vals[] = {
6672
  {   0, "none" },
6673
  {   1, "basic-service-information" },
6674
  { 0, NULL }
6675
};
6676
6677
static const per_choice_t T_basic_service_information_02_choice[] = {
6678
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6679
  {   1, &hf_tetra_basic_service_information, ASN1_NO_EXTENSIONS     , dissect_tetra_Basic_service_information },
6680
  { 0, NULL, 0, NULL }
6681
};
6682
6683
static unsigned
6684
0
dissect_tetra_T_basic_service_information_02(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6685
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6686
0
                                 ett_tetra_T_basic_service_information_02, T_basic_service_information_02_choice,
6687
0
                                 NULL);
6688
6689
0
  return offset;
6690
0
}
6691
6692
6693
static const value_string tetra_T_call_status_01_vals[] = {
6694
  {   0, "none" },
6695
  {   1, "call-status" },
6696
  { 0, NULL }
6697
};
6698
6699
static const per_choice_t T_call_status_01_choice[] = {
6700
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6701
  {   1, &hf_tetra_call_status_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_7 },
6702
  { 0, NULL, 0, NULL }
6703
};
6704
6705
static unsigned
6706
0
dissect_tetra_T_call_status_01(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6707
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6708
0
                                 ett_tetra_T_call_status_01, T_call_status_01_choice,
6709
0
                                 NULL);
6710
6711
0
  return offset;
6712
0
}
6713
6714
6715
static const value_string tetra_T_notification_indicator_05_vals[] = {
6716
  {   0, "none" },
6717
  {   1, "notification-indicator" },
6718
  { 0, NULL }
6719
};
6720
6721
static const per_choice_t T_notification_indicator_05_choice[] = {
6722
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6723
  {   1, &hf_tetra_notification_indicator_06, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_63 },
6724
  { 0, NULL, 0, NULL }
6725
};
6726
6727
static unsigned
6728
0
dissect_tetra_T_notification_indicator_05(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6729
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6730
0
                                 ett_tetra_T_notification_indicator_05, T_notification_indicator_05_choice,
6731
0
                                 NULL);
6732
6733
0
  return offset;
6734
0
}
6735
6736
6737
static const value_string tetra_T_prop_08_vals[] = {
6738
  {   0, "none" },
6739
  {   1, "prop" },
6740
  { 0, NULL }
6741
};
6742
6743
static const per_choice_t T_prop_08_choice[] = {
6744
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6745
  {   1, &hf_tetra_prop_01       , ASN1_NO_EXTENSIONS     , dissect_tetra_Proprietary },
6746
  { 0, NULL, 0, NULL }
6747
};
6748
6749
static unsigned
6750
0
dissect_tetra_T_prop_08(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6751
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6752
0
                                 ett_tetra_T_prop_08, T_prop_08_choice,
6753
0
                                 NULL);
6754
6755
0
  return offset;
6756
0
}
6757
6758
6759
static const per_sequence_t T_type2_parameters_12_sequence[] = {
6760
  { &hf_tetra_basic_service_information_03, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_basic_service_information_02 },
6761
  { &hf_tetra_call_status_02, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_call_status_01 },
6762
  { &hf_tetra_notification_indicator_05, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_notification_indicator_05 },
6763
  { &hf_tetra_prop_09       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop_08 },
6764
  { NULL, 0, 0, NULL }
6765
};
6766
6767
static unsigned
6768
0
dissect_tetra_T_type2_parameters_12(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6769
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6770
0
                                   ett_tetra_T_type2_parameters_12, T_type2_parameters_12_sequence);
6771
6772
0
  return offset;
6773
0
}
6774
6775
6776
static const value_string tetra_T_optional_elements_21_vals[] = {
6777
  {   0, "no-type2" },
6778
  {   1, "type2-parameters" },
6779
  { 0, NULL }
6780
};
6781
6782
static const per_choice_t T_optional_elements_21_choice[] = {
6783
  {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6784
  {   1, &hf_tetra_type2_parameters_12, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_parameters_12 },
6785
  { 0, NULL, 0, NULL }
6786
};
6787
6788
static unsigned
6789
0
dissect_tetra_T_optional_elements_21(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6790
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6791
0
                                 ett_tetra_T_optional_elements_21, T_optional_elements_21_choice,
6792
0
                                 NULL);
6793
6794
0
  return offset;
6795
0
}
6796
6797
6798
static const per_sequence_t D_CALL_PROCEEDING_sequence[] = {
6799
  { &hf_tetra_call_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
6800
  { &hf_tetra_call_time_out_setup_phase, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
6801
  { &hf_tetra_hook_method_selection, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
6802
  { &hf_tetra_simplex_duplex_selection_03, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
6803
  { &hf_tetra_optional_elements_21, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_21 },
6804
  { NULL, 0, 0, NULL }
6805
};
6806
6807
static unsigned
6808
0
dissect_tetra_D_CALL_PROCEEDING(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6809
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6810
0
                                   ett_tetra_D_CALL_PROCEEDING, D_CALL_PROCEEDING_sequence);
6811
6812
0
  col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-CALL-PROCEEDING");
6813
6814
0
  return offset;
6815
0
}
6816
6817
6818
static const value_string tetra_T_simplex_duplex_selection_04_vals[] = {
6819
  {   0, "simplex" },
6820
  {   1, "duplex" },
6821
  { 0, NULL }
6822
};
6823
6824
6825
static unsigned
6826
0
dissect_tetra_T_simplex_duplex_selection_04(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6827
0
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
6828
0
                                     2, NULL, false, 0, NULL);
6829
6830
0
  return offset;
6831
0
}
6832
6833
6834
static const value_string tetra_T_call_priority_vals[] = {
6835
  {   0, "none" },
6836
  {   1, "call-priority" },
6837
  { 0, NULL }
6838
};
6839
6840
static const per_choice_t T_call_priority_choice[] = {
6841
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6842
  {   1, &hf_tetra_call_priority , ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_15 },
6843
  { 0, NULL, 0, NULL }
6844
};
6845
6846
static unsigned
6847
0
dissect_tetra_T_call_priority(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6848
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6849
0
                                 ett_tetra_T_call_priority, T_call_priority_choice,
6850
0
                                 NULL);
6851
6852
0
  return offset;
6853
0
}
6854
6855
6856
static const value_string tetra_T_basic_service_information_03_vals[] = {
6857
  {   0, "none" },
6858
  {   1, "basic-service-information" },
6859
  { 0, NULL }
6860
};
6861
6862
static const per_choice_t T_basic_service_information_03_choice[] = {
6863
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6864
  {   1, &hf_tetra_basic_service_information, ASN1_NO_EXTENSIONS     , dissect_tetra_Basic_service_information },
6865
  { 0, NULL, 0, NULL }
6866
};
6867
6868
static unsigned
6869
0
dissect_tetra_T_basic_service_information_03(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6870
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6871
0
                                 ett_tetra_T_basic_service_information_03, T_basic_service_information_03_choice,
6872
0
                                 NULL);
6873
6874
0
  return offset;
6875
0
}
6876
6877
6878
static const value_string tetra_T_temporary_address_02_vals[] = {
6879
  {   0, "none" },
6880
  {   1, "temporary-address" },
6881
  { 0, NULL }
6882
};
6883
6884
static const per_choice_t T_temporary_address_02_choice[] = {
6885
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6886
  {   1, &hf_tetra_temporary_address_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_16777215 },
6887
  { 0, NULL, 0, NULL }
6888
};
6889
6890
static unsigned
6891
0
dissect_tetra_T_temporary_address_02(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6892
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6893
0
                                 ett_tetra_T_temporary_address_02, T_temporary_address_02_choice,
6894
0
                                 NULL);
6895
6896
0
  return offset;
6897
0
}
6898
6899
6900
static const value_string tetra_T_notification_indicator_07_vals[] = {
6901
  {   0, "none" },
6902
  {   1, "notification-indicator" },
6903
  { 0, NULL }
6904
};
6905
6906
static const per_choice_t T_notification_indicator_07_choice[] = {
6907
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6908
  {   1, &hf_tetra_notification_indicator_06, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_63 },
6909
  { 0, NULL, 0, NULL }
6910
};
6911
6912
static unsigned
6913
0
dissect_tetra_T_notification_indicator_07(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6914
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6915
0
                                 ett_tetra_T_notification_indicator_07, T_notification_indicator_07_choice,
6916
0
                                 NULL);
6917
6918
0
  return offset;
6919
0
}
6920
6921
6922
static const value_string tetra_T_prop_10_vals[] = {
6923
  {   0, "none" },
6924
  {   1, "prop" },
6925
  { 0, NULL }
6926
};
6927
6928
static const per_choice_t T_prop_10_choice[] = {
6929
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6930
  {   1, &hf_tetra_prop_01       , ASN1_NO_EXTENSIONS     , dissect_tetra_Proprietary },
6931
  { 0, NULL, 0, NULL }
6932
};
6933
6934
static unsigned
6935
0
dissect_tetra_T_prop_10(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6936
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6937
0
                                 ett_tetra_T_prop_10, T_prop_10_choice,
6938
0
                                 NULL);
6939
6940
0
  return offset;
6941
0
}
6942
6943
6944
static const per_sequence_t T_type2_parameters_14_sequence[] = {
6945
  { &hf_tetra_call_priority_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_call_priority },
6946
  { &hf_tetra_basic_service_information_04, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_basic_service_information_03 },
6947
  { &hf_tetra_temporary_address_03, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_temporary_address_02 },
6948
  { &hf_tetra_notification_indicator_08, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_notification_indicator_07 },
6949
  { &hf_tetra_prop_11       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop_10 },
6950
  { NULL, 0, 0, NULL }
6951
};
6952
6953
static unsigned
6954
0
dissect_tetra_T_type2_parameters_14(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6955
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6956
0
                                   ett_tetra_T_type2_parameters_14, T_type2_parameters_14_sequence);
6957
6958
0
  return offset;
6959
0
}
6960
6961
6962
static const value_string tetra_T_optional_elements_23_vals[] = {
6963
  {   0, "no-type2" },
6964
  {   1, "type2-parameters" },
6965
  { 0, NULL }
6966
};
6967
6968
static const per_choice_t T_optional_elements_23_choice[] = {
6969
  {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6970
  {   1, &hf_tetra_type2_parameters_14, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_parameters_14 },
6971
  { 0, NULL, 0, NULL }
6972
};
6973
6974
static unsigned
6975
0
dissect_tetra_T_optional_elements_23(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6976
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6977
0
                                 ett_tetra_T_optional_elements_23, T_optional_elements_23_choice,
6978
0
                                 NULL);
6979
6980
0
  return offset;
6981
0
}
6982
6983
6984
static const per_sequence_t D_CONNECT_sequence[] = {
6985
  { &hf_tetra_call_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
6986
  { &hf_tetra_call_time_out_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_15 },
6987
  { &hf_tetra_hook_method_selection, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
6988
  { &hf_tetra_simplex_duplex_selection_05, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_simplex_duplex_selection_04 },
6989
  { &hf_tetra_transmission_grant, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
6990
  { &hf_tetra_transmission_request_permission, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
6991
  { &hf_tetra_call_ownership_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
6992
  { &hf_tetra_optional_elements_23, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_23 },
6993
  { NULL, 0, 0, NULL }
6994
};
6995
6996
static unsigned
6997
0
dissect_tetra_D_CONNECT(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6998
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6999
0
                                   ett_tetra_D_CONNECT, D_CONNECT_sequence);
7000
7001
0
  col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-CONNECT");
7002
7003
0
  return offset;
7004
0
}
7005
7006
7007
static const value_string tetra_T_notification_indicator_08_vals[] = {
7008
  {   0, "none" },
7009
  {   1, "notification-indicator" },
7010
  { 0, NULL }
7011
};
7012
7013
static const per_choice_t T_notification_indicator_08_choice[] = {
7014
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7015
  {   1, &hf_tetra_notification_indicator_06, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_63 },
7016
  { 0, NULL, 0, NULL }
7017
};
7018
7019
static unsigned
7020
0
dissect_tetra_T_notification_indicator_08(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7021
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7022
0
                                 ett_tetra_T_notification_indicator_08, T_notification_indicator_08_choice,
7023
0
                                 NULL);
7024
7025
0
  return offset;
7026
0
}
7027
7028
7029
static const value_string tetra_T_prop_11_vals[] = {
7030
  {   0, "none" },
7031
  {   1, "prop" },
7032
  { 0, NULL }
7033
};
7034
7035
static const per_choice_t T_prop_11_choice[] = {
7036
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7037
  {   1, &hf_tetra_prop_01       , ASN1_NO_EXTENSIONS     , dissect_tetra_Proprietary },
7038
  { 0, NULL, 0, NULL }
7039
};
7040
7041
static unsigned
7042
0
dissect_tetra_T_prop_11(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7043
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7044
0
                                 ett_tetra_T_prop_11, T_prop_11_choice,
7045
0
                                 NULL);
7046
7047
0
  return offset;
7048
0
}
7049
7050
7051
static const per_sequence_t T_type2_parameters_15_sequence[] = {
7052
  { &hf_tetra_notification_indicator_09, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_notification_indicator_08 },
7053
  { &hf_tetra_prop_12       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop_11 },
7054
  { NULL, 0, 0, NULL }
7055
};
7056
7057
static unsigned
7058
0
dissect_tetra_T_type2_parameters_15(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7059
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7060
0
                                   ett_tetra_T_type2_parameters_15, T_type2_parameters_15_sequence);
7061
7062
0
  return offset;
7063
0
}
7064
7065
7066
static const value_string tetra_T_optional_elements_24_vals[] = {
7067
  {   0, "no-type2" },
7068
  {   1, "type2-parameters" },
7069
  { 0, NULL }
7070
};
7071
7072
static const per_choice_t T_optional_elements_24_choice[] = {
7073
  {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7074
  {   1, &hf_tetra_type2_parameters_15, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_parameters_15 },
7075
  { 0, NULL, 0, NULL }
7076
};
7077
7078
static unsigned
7079
0
dissect_tetra_T_optional_elements_24(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7080
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7081
0
                                 ett_tetra_T_optional_elements_24, T_optional_elements_24_choice,
7082
0
                                 NULL);
7083
7084
0
  return offset;
7085
0
}
7086
7087
7088
static const per_sequence_t D_CONNECT_ACK_sequence[] = {
7089
  { &hf_tetra_call_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
7090
  { &hf_tetra_call_time_out_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_15 },
7091
  { &hf_tetra_transmission_grant, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
7092
  { &hf_tetra_transmission_request_permission, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
7093
  { &hf_tetra_optional_elements_24, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_24 },
7094
  { NULL, 0, 0, NULL }
7095
};
7096
7097
static unsigned
7098
0
dissect_tetra_D_CONNECT_ACK(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7099
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7100
0
                                   ett_tetra_D_CONNECT_ACK, D_CONNECT_ACK_sequence);
7101
7102
0
  col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-CONNECT-ACK");
7103
7104
0
  return offset;
7105
0
}
7106
7107
7108
static const value_string tetra_T_notification_indicator_vals[] = {
7109
  {   0, "none" },
7110
  {   1, "notification-indicator-element" },
7111
  { 0, NULL }
7112
};
7113
7114
static const per_choice_t T_notification_indicator_choice[] = {
7115
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7116
  {   1, &hf_tetra_notification_indicator_element, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_63 },
7117
  { 0, NULL, 0, NULL }
7118
};
7119
7120
static unsigned
7121
0
dissect_tetra_T_notification_indicator(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7122
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7123
0
                                 ett_tetra_T_notification_indicator, T_notification_indicator_choice,
7124
0
                                 NULL);
7125
7126
0
  return offset;
7127
0
}
7128
7129
7130
static const per_sequence_t T_type2_element_sequence[] = {
7131
  { &hf_tetra_notification_indicator, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_notification_indicator },
7132
  { NULL, 0, 0, NULL }
7133
};
7134
7135
static unsigned
7136
0
dissect_tetra_T_type2_element(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7137
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7138
0
                                   ett_tetra_T_type2_element, T_type2_element_sequence);
7139
7140
0
  return offset;
7141
0
}
7142
7143
7144
static const value_string tetra_T_optional_elements_06_vals[] = {
7145
  {   0, "no-type2" },
7146
  {   1, "type2-element" },
7147
  { 0, NULL }
7148
};
7149
7150
static const per_choice_t T_optional_elements_06_choice[] = {
7151
  {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7152
  {   1, &hf_tetra_type2_element , ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_element },
7153
  { 0, NULL, 0, NULL }
7154
};
7155
7156
static unsigned
7157
0
dissect_tetra_T_optional_elements_06(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7158
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7159
0
                                 ett_tetra_T_optional_elements_06, T_optional_elements_06_choice,
7160
0
                                 NULL);
7161
7162
0
  return offset;
7163
0
}
7164
7165
7166
static const per_sequence_t D_DISCONNECT_sequence[] = {
7167
  { &hf_tetra_call_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
7168
  { &hf_tetra_disconnect_cause, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_31 },
7169
  { &hf_tetra_optional_elements_06, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_06 },
7170
  { NULL, 0, 0, NULL }
7171
};
7172
7173
static unsigned
7174
0
dissect_tetra_D_DISCONNECT(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7175
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7176
0
                                   ett_tetra_D_DISCONNECT, D_DISCONNECT_sequence);
7177
7178
0
  col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-DISCONNECT");
7179
7180
0
  return offset;
7181
0
}
7182
7183
7184
static const value_string tetra_T_new_call_identifier_vals[] = {
7185
  {   0, "none" },
7186
  {   1, "new-call-identifier-element" },
7187
  { 0, NULL }
7188
};
7189
7190
static const per_choice_t T_new_call_identifier_choice[] = {
7191
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7192
  {   1, &hf_tetra_new_call_identifier_element, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_16383 },
7193
  { 0, NULL, 0, NULL }
7194
};
7195
7196
static unsigned
7197
0
dissect_tetra_T_new_call_identifier(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7198
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7199
0
                                 ett_tetra_T_new_call_identifier, T_new_call_identifier_choice,
7200
0
                                 NULL);
7201
7202
0
  return offset;
7203
0
}
7204
7205
7206
static const value_string tetra_T_call_time_out_vals[] = {
7207
  {   0, "none" },
7208
  {   1, "call-time-out" },
7209
  { 0, NULL }
7210
};
7211
7212
static const per_choice_t T_call_time_out_choice[] = {
7213
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7214
  {   1, &hf_tetra_call_time_out_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_15 },
7215
  { 0, NULL, 0, NULL }
7216
};
7217
7218
static unsigned
7219
0
dissect_tetra_T_call_time_out(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7220
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7221
0
                                 ett_tetra_T_call_time_out, T_call_time_out_choice,
7222
0
                                 NULL);
7223
7224
0
  return offset;
7225
0
}
7226
7227
7228
static const value_string tetra_T_call_time_out_set_up_phase_vals[] = {
7229
  {   0, "none" },
7230
  {   1, "call-time-out-set-up-phase" },
7231
  { 0, NULL }
7232
};
7233
7234
static const per_choice_t T_call_time_out_set_up_phase_choice[] = {
7235
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7236
  {   1, &hf_tetra_call_time_out_set_up_phase_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_7 },
7237
  { 0, NULL, 0, NULL }
7238
};
7239
7240
static unsigned
7241
0
dissect_tetra_T_call_time_out_set_up_phase(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7242
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7243
0
                                 ett_tetra_T_call_time_out_set_up_phase, T_call_time_out_set_up_phase_choice,
7244
0
                                 NULL);
7245
7246
0
  return offset;
7247
0
}
7248
7249
7250
static const value_string tetra_T_call_ownership_vals[] = {
7251
  {   0, "none" },
7252
  {   1, "call-ownership" },
7253
  { 0, NULL }
7254
};
7255
7256
static const per_choice_t T_call_ownership_choice[] = {
7257
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7258
  {   1, &hf_tetra_call_ownership_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_1 },
7259
  { 0, NULL, 0, NULL }
7260
};
7261
7262
static unsigned
7263
0
dissect_tetra_T_call_ownership(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7264
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7265
0
                                 ett_tetra_T_call_ownership, T_call_ownership_choice,
7266
0
                                 NULL);
7267
7268
0
  return offset;
7269
0
}
7270
7271
7272
static const value_string tetra_T_simplex_duplex_selection_05_vals[] = {
7273
  {   0, "simplex" },
7274
  {   1, "duplex" },
7275
  { 0, NULL }
7276
};
7277
7278
7279
static unsigned
7280
0
dissect_tetra_T_simplex_duplex_selection_05(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7281
0
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
7282
0
                                     2, NULL, false, 0, NULL);
7283
7284
0
  return offset;
7285
0
}
7286
7287
7288
static const per_sequence_t Modify_type_sequence[] = {
7289
  { &hf_tetra_simplex_duplex_selection_06, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_simplex_duplex_selection_05 },
7290
  { &hf_tetra_basic_service_information, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Basic_service_information },
7291
  { NULL, 0, 0, NULL }
7292
};
7293
7294
static unsigned
7295
0
dissect_tetra_Modify_type(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7296
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7297
0
                                   ett_tetra_Modify_type, Modify_type_sequence);
7298
7299
0
  return offset;
7300
0
}
7301
7302
7303
static const value_string tetra_T_modify_vals[] = {
7304
  {   0, "none" },
7305
  {   1, "modify" },
7306
  { 0, NULL }
7307
};
7308
7309
static const per_choice_t T_modify_choice[] = {
7310
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7311
  {   1, &hf_tetra_modify_01     , ASN1_NO_EXTENSIONS     , dissect_tetra_Modify_type },
7312
  { 0, NULL, 0, NULL }
7313
};
7314
7315
static unsigned
7316
0
dissect_tetra_T_modify(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7317
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7318
0
                                 ett_tetra_T_modify, T_modify_choice,
7319
0
                                 NULL);
7320
7321
0
  return offset;
7322
0
}
7323
7324
7325
static const value_string tetra_T_call_status_vals[] = {
7326
  {   0, "none" },
7327
  {   1, "call-status" },
7328
  { 0, NULL }
7329
};
7330
7331
static const per_choice_t T_call_status_choice[] = {
7332
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7333
  {   1, &hf_tetra_call_status_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_7 },
7334
  { 0, NULL, 0, NULL }
7335
};
7336
7337
static unsigned
7338
0
dissect_tetra_T_call_status(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7339
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7340
0
                                 ett_tetra_T_call_status, T_call_status_choice,
7341
0
                                 NULL);
7342
7343
0
  return offset;
7344
0
}
7345
7346
7347
static const value_string tetra_T_temporary_address_vals[] = {
7348
  {   0, "none" },
7349
  {   1, "temporary-address" },
7350
  { 0, NULL }
7351
};
7352
7353
static const per_choice_t T_temporary_address_choice[] = {
7354
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7355
  {   1, &hf_tetra_temporary_address_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_16777215 },
7356
  { 0, NULL, 0, NULL }
7357
};
7358
7359
static unsigned
7360
0
dissect_tetra_T_temporary_address(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7361
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7362
0
                                 ett_tetra_T_temporary_address, T_temporary_address_choice,
7363
0
                                 NULL);
7364
7365
0
  return offset;
7366
0
}
7367
7368
7369
static const value_string tetra_T_notification_indicator_01_vals[] = {
7370
  {   0, "none" },
7371
  {   1, "notification-indicator-element" },
7372
  { 0, NULL }
7373
};
7374
7375
static const per_choice_t T_notification_indicator_01_choice[] = {
7376
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7377
  {   1, &hf_tetra_notification_indicator_element, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_63 },
7378
  { 0, NULL, 0, NULL }
7379
};
7380
7381
static unsigned
7382
0
dissect_tetra_T_notification_indicator_01(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7383
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7384
0
                                 ett_tetra_T_notification_indicator_01, T_notification_indicator_01_choice,
7385
0
                                 NULL);
7386
7387
0
  return offset;
7388
0
}
7389
7390
7391
static const value_string tetra_T_poll_response_percentage_vals[] = {
7392
  {   0, "none" },
7393
  {   1, "poll-response-percentage" },
7394
  { 0, NULL }
7395
};
7396
7397
static const per_choice_t T_poll_response_percentage_choice[] = {
7398
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7399
  {   1, &hf_tetra_poll_response_percentage_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_63 },
7400
  { 0, NULL, 0, NULL }
7401
};
7402
7403
static unsigned
7404
0
dissect_tetra_T_poll_response_percentage(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7405
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7406
0
                                 ett_tetra_T_poll_response_percentage, T_poll_response_percentage_choice,
7407
0
                                 NULL);
7408
7409
0
  return offset;
7410
0
}
7411
7412
7413
static const value_string tetra_T_poll_response_number_vals[] = {
7414
  {   0, "none" },
7415
  {   1, "poll-response-number" },
7416
  { 0, NULL }
7417
};
7418
7419
static const per_choice_t T_poll_response_number_choice[] = {
7420
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7421
  {   1, &hf_tetra_poll_response_number_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_63 },
7422
  { 0, NULL, 0, NULL }
7423
};
7424
7425
static unsigned
7426
0
dissect_tetra_T_poll_response_number(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7427
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7428
0
                                 ett_tetra_T_poll_response_number, T_poll_response_number_choice,
7429
0
                                 NULL);
7430
7431
0
  return offset;
7432
0
}
7433
7434
7435
static const per_sequence_t T_type2_element_01_sequence[] = {
7436
  { &hf_tetra_new_call_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_new_call_identifier },
7437
  { &hf_tetra_call_time_out , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_call_time_out },
7438
  { &hf_tetra_call_time_out_set_up_phase, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_call_time_out_set_up_phase },
7439
  { &hf_tetra_call_ownership, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_call_ownership },
7440
  { &hf_tetra_modify        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_modify },
7441
  { &hf_tetra_call_status   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_call_status },
7442
  { &hf_tetra_temporary_address, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_temporary_address },
7443
  { &hf_tetra_notification_indicator_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_notification_indicator_01 },
7444
  { &hf_tetra_poll_response_percentage, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_poll_response_percentage },
7445
  { &hf_tetra_poll_response_number, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_poll_response_number },
7446
  { NULL, 0, 0, NULL }
7447
};
7448
7449
static unsigned
7450
0
dissect_tetra_T_type2_element_01(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7451
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7452
0
                                   ett_tetra_T_type2_element_01, T_type2_element_01_sequence);
7453
7454
0
  return offset;
7455
0
}
7456
7457
7458
static const value_string tetra_T_optional_elements_07_vals[] = {
7459
  {   0, "no-type2" },
7460
  {   1, "type2-element" },
7461
  { 0, NULL }
7462
};
7463
7464
static const per_choice_t T_optional_elements_07_choice[] = {
7465
  {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7466
  {   1, &hf_tetra_type2_element_01, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_element_01 },
7467
  { 0, NULL, 0, NULL }
7468
};
7469
7470
static unsigned
7471
0
dissect_tetra_T_optional_elements_07(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7472
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7473
0
                                 ett_tetra_T_optional_elements_07, T_optional_elements_07_choice,
7474
0
                                 NULL);
7475
7476
0
  return offset;
7477
0
}
7478
7479
7480
static const per_sequence_t D_INFO_sequence[] = {
7481
  { &hf_tetra_call_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
7482
  { &hf_tetra_reset_call_time_out_timer, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
7483
  { &hf_tetra_poll_request  , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
7484
  { &hf_tetra_optional_elements_07, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_07 },
7485
  { NULL, 0, 0, NULL }
7486
};
7487
7488
static unsigned
7489
0
dissect_tetra_D_INFO(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7490
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7491
0
                                   ett_tetra_D_INFO, D_INFO_sequence);
7492
7493
0
  col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-INFO");
7494
7495
0
  return offset;
7496
0
}
7497
7498
7499
static const value_string tetra_T_notification_indicator_09_vals[] = {
7500
  {   0, "none" },
7501
  {   1, "notification-indicator" },
7502
  { 0, NULL }
7503
};
7504
7505
static const per_choice_t T_notification_indicator_09_choice[] = {
7506
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7507
  {   1, &hf_tetra_notification_indicator_06, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_63 },
7508
  { 0, NULL, 0, NULL }
7509
};
7510
7511
static unsigned
7512
0
dissect_tetra_T_notification_indicator_09(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7513
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7514
0
                                 ett_tetra_T_notification_indicator_09, T_notification_indicator_09_choice,
7515
0
                                 NULL);
7516
7517
0
  return offset;
7518
0
}
7519
7520
7521
static const value_string tetra_T_prop_12_vals[] = {
7522
  {   0, "none" },
7523
  {   1, "prop" },
7524
  { 0, NULL }
7525
};
7526
7527
static const per_choice_t T_prop_12_choice[] = {
7528
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7529
  {   1, &hf_tetra_prop_01       , ASN1_NO_EXTENSIONS     , dissect_tetra_Proprietary },
7530
  { 0, NULL, 0, NULL }
7531
};
7532
7533
static unsigned
7534
0
dissect_tetra_T_prop_12(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7535
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7536
0
                                 ett_tetra_T_prop_12, T_prop_12_choice,
7537
0
                                 NULL);
7538
7539
0
  return offset;
7540
0
}
7541
7542
7543
static const per_sequence_t T_type2_parameters_16_sequence[] = {
7544
  { &hf_tetra_notification_indicator_10, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_notification_indicator_09 },
7545
  { &hf_tetra_prop_13       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop_12 },
7546
  { NULL, 0, 0, NULL }
7547
};
7548
7549
static unsigned
7550
0
dissect_tetra_T_type2_parameters_16(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7551
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7552
0
                                   ett_tetra_T_type2_parameters_16, T_type2_parameters_16_sequence);
7553
7554
0
  return offset;
7555
0
}
7556
7557
7558
static const value_string tetra_T_optional_elements_25_vals[] = {
7559
  {   0, "no-type2" },
7560
  {   1, "type2-parameters" },
7561
  { 0, NULL }
7562
};
7563
7564
static const per_choice_t T_optional_elements_25_choice[] = {
7565
  {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7566
  {   1, &hf_tetra_type2_parameters_16, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_parameters_16 },
7567
  { 0, NULL, 0, NULL }
7568
};
7569
7570
static unsigned
7571
2
dissect_tetra_T_optional_elements_25(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7572
2
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7573
2
                                 ett_tetra_T_optional_elements_25, T_optional_elements_25_choice,
7574
2
                                 NULL);
7575
7576
2
  return offset;
7577
2
}
7578
7579
7580
static const per_sequence_t D_RELEASE_sequence[] = {
7581
  { &hf_tetra_call_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
7582
  { &hf_tetra_disconnect_cause, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_31 },
7583
  { &hf_tetra_optional_elements_25, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_25 },
7584
  { NULL, 0, 0, NULL }
7585
};
7586
7587
static unsigned
7588
2
dissect_tetra_D_RELEASE(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7589
2
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7590
2
                                   ett_tetra_D_RELEASE, D_RELEASE_sequence);
7591
7592
2
  col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-RELEASE");
7593
7594
2
  return offset;
7595
2
}
7596
7597
7598
static const value_string tetra_T_simplex_duplex_selection_02_vals[] = {
7599
  {   0, "simplex" },
7600
  {   1, "duplex" },
7601
  { 0, NULL }
7602
};
7603
7604
7605
static unsigned
7606
0
dissect_tetra_T_simplex_duplex_selection_02(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7607
0
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
7608
0
                                     2, NULL, false, 0, NULL);
7609
7610
0
  return offset;
7611
0
}
7612
7613
7614
static const value_string tetra_T_notification_indicator_04_vals[] = {
7615
  {   0, "none" },
7616
  {   1, "notification-indicator-element" },
7617
  { 0, NULL }
7618
};
7619
7620
static const per_choice_t T_notification_indicator_04_choice[] = {
7621
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7622
  {   1, &hf_tetra_notification_indicator_element, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_63 },
7623
  { 0, NULL, 0, NULL }
7624
};
7625
7626
static unsigned
7627
0
dissect_tetra_T_notification_indicator_04(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7628
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7629
0
                                 ett_tetra_T_notification_indicator_04, T_notification_indicator_04_choice,
7630
0
                                 NULL);
7631
7632
0
  return offset;
7633
0
}
7634
7635
7636
static const value_string tetra_T_temporary_address_01_vals[] = {
7637
  {   0, "none" },
7638
  {   1, "temporary-address-element" },
7639
  { 0, NULL }
7640
};
7641
7642
static const per_choice_t T_temporary_address_01_choice[] = {
7643
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7644
  {   1, &hf_tetra_temporary_address_element, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_16777215 },
7645
  { 0, NULL, 0, NULL }
7646
};
7647
7648
static unsigned
7649
0
dissect_tetra_T_temporary_address_01(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7650
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7651
0
                                 ett_tetra_T_temporary_address_01, T_temporary_address_01_choice,
7652
0
                                 NULL);
7653
7654
0
  return offset;
7655
0
}
7656
7657
7658
static const value_string tetra_T_calling_party_type_identifier_vals[] = {
7659
  {   0, "none" },
7660
  {   1, "calling-party-type-identifier-element" },
7661
  { 0, NULL }
7662
};
7663
7664
static const per_choice_t T_calling_party_type_identifier_choice[] = {
7665
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7666
  {   1, &hf_tetra_calling_party_type_identifier_element, ASN1_NO_EXTENSIONS     , dissect_tetra_Calling_party_address_type },
7667
  { 0, NULL, 0, NULL }
7668
};
7669
7670
static unsigned
7671
0
dissect_tetra_T_calling_party_type_identifier(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7672
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7673
0
                                 ett_tetra_T_calling_party_type_identifier, T_calling_party_type_identifier_choice,
7674
0
                                 NULL);
7675
7676
0
  return offset;
7677
0
}
7678
7679
7680
static const value_string tetra_T_external_subscriber_number_01_vals[] = {
7681
  {   0, "none" },
7682
  {   1, "external-subscriber-number" },
7683
  { 0, NULL }
7684
};
7685
7686
static const per_choice_t T_external_subscriber_number_01_choice[] = {
7687
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7688
  {   1, &hf_tetra_external_subscriber_number_03, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_15 },
7689
  { 0, NULL, 0, NULL }
7690
};
7691
7692
static unsigned
7693
0
dissect_tetra_T_external_subscriber_number_01(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7694
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7695
0
                                 ett_tetra_T_external_subscriber_number_01, T_external_subscriber_number_01_choice,
7696
0
                                 NULL);
7697
7698
0
  return offset;
7699
0
}
7700
7701
7702
static const value_string tetra_T_prop_07_vals[] = {
7703
  {   0, "none" },
7704
  {   1, "prop" },
7705
  { 0, NULL }
7706
};
7707
7708
static const per_choice_t T_prop_07_choice[] = {
7709
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7710
  {   1, &hf_tetra_prop_01       , ASN1_NO_EXTENSIONS     , dissect_tetra_Proprietary },
7711
  { 0, NULL, 0, NULL }
7712
};
7713
7714
static unsigned
7715
0
dissect_tetra_T_prop_07(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7716
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7717
0
                                 ett_tetra_T_prop_07, T_prop_07_choice,
7718
0
                                 NULL);
7719
7720
0
  return offset;
7721
0
}
7722
7723
7724
static const per_sequence_t T_type2_element_06_sequence[] = {
7725
  { &hf_tetra_notification_indicator_04, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_notification_indicator_04 },
7726
  { &hf_tetra_temporary_address_02, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_temporary_address_01 },
7727
  { &hf_tetra_calling_party_type_identifier_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_calling_party_type_identifier },
7728
  { &hf_tetra_external_subscriber_number_02, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_external_subscriber_number_01 },
7729
  { &hf_tetra_prop_08       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop_07 },
7730
  { NULL, 0, 0, NULL }
7731
};
7732
7733
static unsigned
7734
0
dissect_tetra_T_type2_element_06(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7735
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7736
0
                                   ett_tetra_T_type2_element_06, T_type2_element_06_sequence);
7737
7738
0
  return offset;
7739
0
}
7740
7741
7742
static const value_string tetra_T_optional_elements_20_vals[] = {
7743
  {   0, "no-type2" },
7744
  {   1, "type2-element" },
7745
  { 0, NULL }
7746
};
7747
7748
static const per_choice_t T_optional_elements_20_choice[] = {
7749
  {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7750
  {   1, &hf_tetra_type2_element_06, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_element_06 },
7751
  { 0, NULL, 0, NULL }
7752
};
7753
7754
static unsigned
7755
0
dissect_tetra_T_optional_elements_20(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7756
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7757
0
                                 ett_tetra_T_optional_elements_20, T_optional_elements_20_choice,
7758
0
                                 NULL);
7759
7760
0
  return offset;
7761
0
}
7762
7763
7764
static const per_sequence_t D_SETUP_sequence[] = {
7765
  { &hf_tetra_call_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
7766
  { &hf_tetra_call_time_out_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_15 },
7767
  { &hf_tetra_hook_method_selection_integer, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
7768
  { &hf_tetra_simplex_duplex_selection_02, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_simplex_duplex_selection_02 },
7769
  { &hf_tetra_basic_service_information, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Basic_service_information },
7770
  { &hf_tetra_transmission_grant, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
7771
  { &hf_tetra_transmission_request_permission, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
7772
  { &hf_tetra_call_priority , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_15 },
7773
  { &hf_tetra_optional_elements_20, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_20 },
7774
  { NULL, 0, 0, NULL }
7775
};
7776
7777
static unsigned
7778
0
dissect_tetra_D_SETUP(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7779
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7780
0
                                   ett_tetra_D_SETUP, D_SETUP_sequence);
7781
7782
0
  col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-SETUP");
7783
7784
0
  return offset;
7785
0
}
7786
7787
7788
static const per_sequence_t D_STATUS_sequence[] = {
7789
  { &hf_tetra_calling_party_type_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Calling_party_address_type },
7790
  { &hf_tetra_pre_coded_status, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_65535 },
7791
  { NULL, 0, 0, NULL }
7792
};
7793
7794
static unsigned
7795
0
dissect_tetra_D_STATUS(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7796
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7797
0
                                   ett_tetra_D_STATUS, D_STATUS_sequence);
7798
7799
0
  col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-STATUS");
7800
7801
0
  return offset;
7802
0
}
7803
7804
7805
static const value_string tetra_T_notification_indicator_11_vals[] = {
7806
  {   0, "none" },
7807
  {   1, "notification-indicator" },
7808
  { 0, NULL }
7809
};
7810
7811
static const per_choice_t T_notification_indicator_11_choice[] = {
7812
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7813
  {   1, &hf_tetra_notification_indicator_06, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_63 },
7814
  { 0, NULL, 0, NULL }
7815
};
7816
7817
static unsigned
7818
0
dissect_tetra_T_notification_indicator_11(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7819
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7820
0
                                 ett_tetra_T_notification_indicator_11, T_notification_indicator_11_choice,
7821
0
                                 NULL);
7822
7823
0
  return offset;
7824
0
}
7825
7826
7827
static const value_string tetra_T_prop_14_vals[] = {
7828
  {   0, "none" },
7829
  {   1, "prop" },
7830
  { 0, NULL }
7831
};
7832
7833
static const per_choice_t T_prop_14_choice[] = {
7834
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7835
  {   1, &hf_tetra_prop_01       , ASN1_NO_EXTENSIONS     , dissect_tetra_Proprietary },
7836
  { 0, NULL, 0, NULL }
7837
};
7838
7839
static unsigned
7840
0
dissect_tetra_T_prop_14(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7841
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7842
0
                                 ett_tetra_T_prop_14, T_prop_14_choice,
7843
0
                                 NULL);
7844
7845
0
  return offset;
7846
0
}
7847
7848
7849
static const per_sequence_t T_type2_parameters_18_sequence[] = {
7850
  { &hf_tetra_notification_indicator_12, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_notification_indicator_11 },
7851
  { &hf_tetra_prop_15       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop_14 },
7852
  { NULL, 0, 0, NULL }
7853
};
7854
7855
static unsigned
7856
0
dissect_tetra_T_type2_parameters_18(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7857
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7858
0
                                   ett_tetra_T_type2_parameters_18, T_type2_parameters_18_sequence);
7859
7860
0
  return offset;
7861
0
}
7862
7863
7864
static const value_string tetra_T_optional_elements_27_vals[] = {
7865
  {   0, "no-type2" },
7866
  {   1, "type2-parameters" },
7867
  { 0, NULL }
7868
};
7869
7870
static const per_choice_t T_optional_elements_27_choice[] = {
7871
  {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7872
  {   1, &hf_tetra_type2_parameters_18, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_parameters_18 },
7873
  { 0, NULL, 0, NULL }
7874
};
7875
7876
static unsigned
7877
0
dissect_tetra_T_optional_elements_27(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7878
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7879
0
                                 ett_tetra_T_optional_elements_27, T_optional_elements_27_choice,
7880
0
                                 NULL);
7881
7882
0
  return offset;
7883
0
}
7884
7885
7886
static const per_sequence_t D_TX_CEASED_sequence[] = {
7887
  { &hf_tetra_call_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
7888
  { &hf_tetra_transmission_request_permission, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
7889
  { &hf_tetra_optional_elements_27, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_27 },
7890
  { NULL, 0, 0, NULL }
7891
};
7892
7893
static unsigned
7894
0
dissect_tetra_D_TX_CEASED(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7895
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7896
0
                                   ett_tetra_D_TX_CEASED, D_TX_CEASED_sequence);
7897
7898
0
  col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-TX-CEASED");
7899
7900
0
  return offset;
7901
0
}
7902
7903
7904
static const value_string tetra_T_notification_indicator_03_vals[] = {
7905
  {   0, "none" },
7906
  {   1, "notification-indicator-element" },
7907
  { 0, NULL }
7908
};
7909
7910
static const per_choice_t T_notification_indicator_03_choice[] = {
7911
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7912
  {   1, &hf_tetra_notification_indicator_element, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_63 },
7913
  { 0, NULL, 0, NULL }
7914
};
7915
7916
static unsigned
7917
0
dissect_tetra_T_notification_indicator_03(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7918
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7919
0
                                 ett_tetra_T_notification_indicator_03, T_notification_indicator_03_choice,
7920
0
                                 NULL);
7921
7922
0
  return offset;
7923
0
}
7924
7925
7926
static const per_sequence_t T_type2_element_03_sequence[] = {
7927
  { &hf_tetra_notification_indicator_03, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_notification_indicator_03 },
7928
  { NULL, 0, 0, NULL }
7929
};
7930
7931
static unsigned
7932
0
dissect_tetra_T_type2_element_03(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7933
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7934
0
                                   ett_tetra_T_type2_element_03, T_type2_element_03_sequence);
7935
7936
0
  return offset;
7937
0
}
7938
7939
7940
static const value_string tetra_T_optional_elements_09_vals[] = {
7941
  {   0, "no-type2" },
7942
  {   1, "type2-element" },
7943
  { 0, NULL }
7944
};
7945
7946
static const per_choice_t T_optional_elements_09_choice[] = {
7947
  {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7948
  {   1, &hf_tetra_type2_element_03, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_element_03 },
7949
  { 0, NULL, 0, NULL }
7950
};
7951
7952
static unsigned
7953
0
dissect_tetra_T_optional_elements_09(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7954
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7955
0
                                 ett_tetra_T_optional_elements_09, T_optional_elements_09_choice,
7956
0
                                 NULL);
7957
7958
0
  return offset;
7959
0
}
7960
7961
7962
static const per_sequence_t D_TX_CONTINUE_sequence[] = {
7963
  { &hf_tetra_call_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
7964
  { &hf_tetra_continue      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
7965
  { &hf_tetra_transmission_request_permission, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
7966
  { &hf_tetra_optional_elements_09, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_09 },
7967
  { NULL, 0, 0, NULL }
7968
};
7969
7970
static unsigned
7971
0
dissect_tetra_D_TX_CONTINUE(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7972
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7973
0
                                   ett_tetra_D_TX_CONTINUE, D_TX_CONTINUE_sequence);
7974
7975
0
  col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-TX-CONTINUE");
7976
7977
0
  return offset;
7978
0
}
7979
7980
7981
static const value_string tetra_T_notification_indicator_12_vals[] = {
7982
  {   0, "none" },
7983
  {   1, "notification-indicator-element" },
7984
  { 0, NULL }
7985
};
7986
7987
static const per_choice_t T_notification_indicator_12_choice[] = {
7988
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7989
  {   1, &hf_tetra_notification_indicator_element, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_63 },
7990
  { 0, NULL, 0, NULL }
7991
};
7992
7993
static unsigned
7994
0
dissect_tetra_T_notification_indicator_12(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
7995
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7996
0
                                 ett_tetra_T_notification_indicator_12, T_notification_indicator_12_choice,
7997
0
                                 NULL);
7998
7999
0
  return offset;
8000
0
}
8001
8002
8003
8004
static unsigned
8005
0
dissect_tetra_Transmitting_party_address_type(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8006
0
  offset = dissect_tetra_Calling_party_address_type(tvb, offset, actx, tree, hf_index);
8007
8008
0
  return offset;
8009
0
}
8010
8011
8012
static const value_string tetra_T_transmitting_party_type_identifier_vals[] = {
8013
  {   0, "none" },
8014
  {   1, "tpti-element" },
8015
  { 0, NULL }
8016
};
8017
8018
static const per_choice_t T_transmitting_party_type_identifier_choice[] = {
8019
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8020
  {   1, &hf_tetra_tpti_element  , ASN1_NO_EXTENSIONS     , dissect_tetra_Transmitting_party_address_type },
8021
  { 0, NULL, 0, NULL }
8022
};
8023
8024
static unsigned
8025
0
dissect_tetra_T_transmitting_party_type_identifier(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8026
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8027
0
                                 ett_tetra_T_transmitting_party_type_identifier, T_transmitting_party_type_identifier_choice,
8028
0
                                 NULL);
8029
8030
0
  return offset;
8031
0
}
8032
8033
8034
static const per_sequence_t T_type2_element_07_sequence[] = {
8035
  { &hf_tetra_notification_indicator_13, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_notification_indicator_12 },
8036
  { &hf_tetra_transmitting_party_type_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_transmitting_party_type_identifier },
8037
  { NULL, 0, 0, NULL }
8038
};
8039
8040
static unsigned
8041
0
dissect_tetra_T_type2_element_07(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8042
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8043
0
                                   ett_tetra_T_type2_element_07, T_type2_element_07_sequence);
8044
8045
0
  return offset;
8046
0
}
8047
8048
8049
static const value_string tetra_T_optional_elements_28_vals[] = {
8050
  {   0, "no-type2" },
8051
  {   1, "type2-element" },
8052
  { 0, NULL }
8053
};
8054
8055
static const per_choice_t T_optional_elements_28_choice[] = {
8056
  {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8057
  {   1, &hf_tetra_type2_element_07, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_element_07 },
8058
  { 0, NULL, 0, NULL }
8059
};
8060
8061
static unsigned
8062
0
dissect_tetra_T_optional_elements_28(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8063
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8064
0
                                 ett_tetra_T_optional_elements_28, T_optional_elements_28_choice,
8065
0
                                 NULL);
8066
8067
0
  return offset;
8068
0
}
8069
8070
8071
static const per_sequence_t D_TX_GRANTED_sequence[] = {
8072
  { &hf_tetra_call_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
8073
  { &hf_tetra_transmission_grant, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
8074
  { &hf_tetra_transmission_request_permission, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
8075
  { &hf_tetra_encryption_control, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
8076
  { &hf_tetra_reserved_01   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
8077
  { &hf_tetra_optional_elements_28, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_28 },
8078
  { NULL, 0, 0, NULL }
8079
};
8080
8081
static unsigned
8082
0
dissect_tetra_D_TX_GRANTED(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8083
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8084
0
                                   ett_tetra_D_TX_GRANTED, D_TX_GRANTED_sequence);
8085
8086
0
  col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-TX-GRANTED");
8087
8088
8089
0
  return offset;
8090
0
}
8091
8092
8093
static const value_string tetra_T_notification_indicator_02_vals[] = {
8094
  {   0, "none" },
8095
  {   1, "notification-indicator-element" },
8096
  { 0, NULL }
8097
};
8098
8099
static const per_choice_t T_notification_indicator_02_choice[] = {
8100
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8101
  {   1, &hf_tetra_notification_indicator_element, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_63 },
8102
  { 0, NULL, 0, NULL }
8103
};
8104
8105
static unsigned
8106
0
dissect_tetra_T_notification_indicator_02(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8107
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8108
0
                                 ett_tetra_T_notification_indicator_02, T_notification_indicator_02_choice,
8109
0
                                 NULL);
8110
8111
0
  return offset;
8112
0
}
8113
8114
8115
static const per_sequence_t T_type2_element_02_sequence[] = {
8116
  { &hf_tetra_notification_indicator_02, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_notification_indicator_02 },
8117
  { NULL, 0, 0, NULL }
8118
};
8119
8120
static unsigned
8121
0
dissect_tetra_T_type2_element_02(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8122
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8123
0
                                   ett_tetra_T_type2_element_02, T_type2_element_02_sequence);
8124
8125
0
  return offset;
8126
0
}
8127
8128
8129
static const value_string tetra_T_optional_elements_08_vals[] = {
8130
  {   0, "no-type2" },
8131
  {   1, "type2-element" },
8132
  { 0, NULL }
8133
};
8134
8135
static const per_choice_t T_optional_elements_08_choice[] = {
8136
  {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8137
  {   1, &hf_tetra_type2_element_02, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_element_02 },
8138
  { 0, NULL, 0, NULL }
8139
};
8140
8141
static unsigned
8142
0
dissect_tetra_T_optional_elements_08(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8143
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8144
0
                                 ett_tetra_T_optional_elements_08, T_optional_elements_08_choice,
8145
0
                                 NULL);
8146
8147
0
  return offset;
8148
0
}
8149
8150
8151
static const per_sequence_t D_TX_WAIT_sequence[] = {
8152
  { &hf_tetra_call_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
8153
  { &hf_tetra_transmission_request_permission, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
8154
  { &hf_tetra_optional_elements_08, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_08 },
8155
  { NULL, 0, 0, NULL }
8156
};
8157
8158
static unsigned
8159
0
dissect_tetra_D_TX_WAIT(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8160
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8161
0
                                   ett_tetra_D_TX_WAIT, D_TX_WAIT_sequence);
8162
8163
0
  col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-TX-WAIT");
8164
8165
0
  return offset;
8166
0
}
8167
8168
8169
static const value_string tetra_T_notification_indicator_13_vals[] = {
8170
  {   0, "none" },
8171
  {   1, "notification-indicator-element" },
8172
  { 0, NULL }
8173
};
8174
8175
static const per_choice_t T_notification_indicator_13_choice[] = {
8176
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8177
  {   1, &hf_tetra_notification_indicator_element, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_63 },
8178
  { 0, NULL, 0, NULL }
8179
};
8180
8181
static unsigned
8182
0
dissect_tetra_T_notification_indicator_13(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8183
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8184
0
                                 ett_tetra_T_notification_indicator_13, T_notification_indicator_13_choice,
8185
0
                                 NULL);
8186
8187
0
  return offset;
8188
0
}
8189
8190
8191
static const value_string tetra_T_transmitting_party_type_identifier_01_vals[] = {
8192
  {   0, "none" },
8193
  {   1, "tpti-element" },
8194
  { 0, NULL }
8195
};
8196
8197
static const per_choice_t T_transmitting_party_type_identifier_01_choice[] = {
8198
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8199
  {   1, &hf_tetra_tpti_element  , ASN1_NO_EXTENSIONS     , dissect_tetra_Transmitting_party_address_type },
8200
  { 0, NULL, 0, NULL }
8201
};
8202
8203
static unsigned
8204
0
dissect_tetra_T_transmitting_party_type_identifier_01(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8205
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8206
0
                                 ett_tetra_T_transmitting_party_type_identifier_01, T_transmitting_party_type_identifier_01_choice,
8207
0
                                 NULL);
8208
8209
0
  return offset;
8210
0
}
8211
8212
8213
static const per_sequence_t T_type2_element_08_sequence[] = {
8214
  { &hf_tetra_notification_indicator_14, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_notification_indicator_13 },
8215
  { &hf_tetra_transmitting_party_type_identifier_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_transmitting_party_type_identifier_01 },
8216
  { NULL, 0, 0, NULL }
8217
};
8218
8219
static unsigned
8220
0
dissect_tetra_T_type2_element_08(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8221
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8222
0
                                   ett_tetra_T_type2_element_08, T_type2_element_08_sequence);
8223
8224
0
  return offset;
8225
0
}
8226
8227
8228
static const value_string tetra_T_optional_elements_29_vals[] = {
8229
  {   0, "no-type2" },
8230
  {   1, "type2-element" },
8231
  { 0, NULL }
8232
};
8233
8234
static const per_choice_t T_optional_elements_29_choice[] = {
8235
  {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8236
  {   1, &hf_tetra_type2_element_08, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_element_08 },
8237
  { 0, NULL, 0, NULL }
8238
};
8239
8240
static unsigned
8241
0
dissect_tetra_T_optional_elements_29(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8242
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8243
0
                                 ett_tetra_T_optional_elements_29, T_optional_elements_29_choice,
8244
0
                                 NULL);
8245
8246
0
  return offset;
8247
0
}
8248
8249
8250
static const per_sequence_t D_TX_INTERRUPT_sequence[] = {
8251
  { &hf_tetra_call_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
8252
  { &hf_tetra_transmission_grant, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
8253
  { &hf_tetra_transmission_request_permission, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
8254
  { &hf_tetra_encryption_control, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
8255
  { &hf_tetra_reserved_01   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
8256
  { &hf_tetra_optional_elements_29, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_29 },
8257
  { NULL, 0, 0, NULL }
8258
};
8259
8260
static unsigned
8261
0
dissect_tetra_D_TX_INTERRUPT(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8262
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8263
0
                                   ett_tetra_D_TX_INTERRUPT, D_TX_INTERRUPT_sequence);
8264
8265
0
  col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-TX-INTERRUPT");
8266
8267
0
  return offset;
8268
0
}
8269
8270
8271
static const value_string tetra_T_new_call_identifier_01_vals[] = {
8272
  {   0, "none" },
8273
  {   1, "new-call-identifier" },
8274
  { 0, NULL }
8275
};
8276
8277
static const per_choice_t T_new_call_identifier_01_choice[] = {
8278
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8279
  {   1, &hf_tetra_new_call_identifier_02, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_16383 },
8280
  { 0, NULL, 0, NULL }
8281
};
8282
8283
static unsigned
8284
0
dissect_tetra_T_new_call_identifier_01(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8285
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8286
0
                                 ett_tetra_T_new_call_identifier_01, T_new_call_identifier_01_choice,
8287
0
                                 NULL);
8288
8289
0
  return offset;
8290
0
}
8291
8292
8293
static const value_string tetra_T_call_time_out_01_vals[] = {
8294
  {   0, "none" },
8295
  {   1, "call-time-out" },
8296
  { 0, NULL }
8297
};
8298
8299
static const per_choice_t T_call_time_out_01_choice[] = {
8300
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8301
  {   1, &hf_tetra_call_time_out_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_15 },
8302
  { 0, NULL, 0, NULL }
8303
};
8304
8305
static unsigned
8306
0
dissect_tetra_T_call_time_out_01(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8307
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8308
0
                                 ett_tetra_T_call_time_out_01, T_call_time_out_01_choice,
8309
0
                                 NULL);
8310
8311
0
  return offset;
8312
0
}
8313
8314
8315
static const value_string tetra_T_call_status_02_vals[] = {
8316
  {   0, "none" },
8317
  {   1, "call-status" },
8318
  { 0, NULL }
8319
};
8320
8321
static const per_choice_t T_call_status_02_choice[] = {
8322
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8323
  {   1, &hf_tetra_call_status_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_7 },
8324
  { 0, NULL, 0, NULL }
8325
};
8326
8327
static unsigned
8328
0
dissect_tetra_T_call_status_02(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8329
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8330
0
                                 ett_tetra_T_call_status_02, T_call_status_02_choice,
8331
0
                                 NULL);
8332
8333
0
  return offset;
8334
0
}
8335
8336
8337
static const value_string tetra_T_modify_01_vals[] = {
8338
  {   0, "none" },
8339
  {   1, "modify" },
8340
  { 0, NULL }
8341
};
8342
8343
static const per_choice_t T_modify_01_choice[] = {
8344
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8345
  {   1, &hf_tetra_modify_01     , ASN1_NO_EXTENSIONS     , dissect_tetra_Modify_type },
8346
  { 0, NULL, 0, NULL }
8347
};
8348
8349
static unsigned
8350
0
dissect_tetra_T_modify_01(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8351
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8352
0
                                 ett_tetra_T_modify_01, T_modify_01_choice,
8353
0
                                 NULL);
8354
8355
0
  return offset;
8356
0
}
8357
8358
8359
static const value_string tetra_T_notification_indicator_10_vals[] = {
8360
  {   0, "none" },
8361
  {   1, "notification-indicator" },
8362
  { 0, NULL }
8363
};
8364
8365
static const per_choice_t T_notification_indicator_10_choice[] = {
8366
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8367
  {   1, &hf_tetra_notification_indicator_06, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_63 },
8368
  { 0, NULL, 0, NULL }
8369
};
8370
8371
static unsigned
8372
0
dissect_tetra_T_notification_indicator_10(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8373
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8374
0
                                 ett_tetra_T_notification_indicator_10, T_notification_indicator_10_choice,
8375
0
                                 NULL);
8376
8377
0
  return offset;
8378
0
}
8379
8380
8381
static const value_string tetra_T_prop_13_vals[] = {
8382
  {   0, "none" },
8383
  {   1, "prop" },
8384
  { 0, NULL }
8385
};
8386
8387
static const per_choice_t T_prop_13_choice[] = {
8388
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8389
  {   1, &hf_tetra_prop_01       , ASN1_NO_EXTENSIONS     , dissect_tetra_Proprietary },
8390
  { 0, NULL, 0, NULL }
8391
};
8392
8393
static unsigned
8394
0
dissect_tetra_T_prop_13(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8395
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8396
0
                                 ett_tetra_T_prop_13, T_prop_13_choice,
8397
0
                                 NULL);
8398
8399
0
  return offset;
8400
0
}
8401
8402
8403
static const per_sequence_t T_type2_parameters_17_sequence[] = {
8404
  { &hf_tetra_new_call_identifier_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_new_call_identifier_01 },
8405
  { &hf_tetra_call_time_out_02, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_call_time_out_01 },
8406
  { &hf_tetra_call_status_03, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_call_status_02 },
8407
  { &hf_tetra_modify_02     , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_modify_01 },
8408
  { &hf_tetra_notification_indicator_11, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_notification_indicator_10 },
8409
  { &hf_tetra_prop_14       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop_13 },
8410
  { NULL, 0, 0, NULL }
8411
};
8412
8413
static unsigned
8414
0
dissect_tetra_T_type2_parameters_17(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8415
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8416
0
                                   ett_tetra_T_type2_parameters_17, T_type2_parameters_17_sequence);
8417
8418
0
  return offset;
8419
0
}
8420
8421
8422
static const value_string tetra_T_optional_elements_26_vals[] = {
8423
  {   0, "no-type2" },
8424
  {   1, "type2-parameters" },
8425
  { 0, NULL }
8426
};
8427
8428
static const per_choice_t T_optional_elements_26_choice[] = {
8429
  {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8430
  {   1, &hf_tetra_type2_parameters_17, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_parameters_17 },
8431
  { 0, NULL, 0, NULL }
8432
};
8433
8434
static unsigned
8435
0
dissect_tetra_T_optional_elements_26(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8436
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8437
0
                                 ett_tetra_T_optional_elements_26, T_optional_elements_26_choice,
8438
0
                                 NULL);
8439
8440
0
  return offset;
8441
0
}
8442
8443
8444
static const per_sequence_t D_CALL_RESTORE_sequence[] = {
8445
  { &hf_tetra_call_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
8446
  { &hf_tetra_transmission_grant, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
8447
  { &hf_tetra_transmission_request_permission, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
8448
  { &hf_tetra_reset_call_time_out, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
8449
  { &hf_tetra_optional_elements_26, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_26 },
8450
  { NULL, 0, 0, NULL }
8451
};
8452
8453
static unsigned
8454
0
dissect_tetra_D_CALL_RESTORE(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8455
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8456
0
                                   ett_tetra_D_CALL_RESTORE, D_CALL_RESTORE_sequence);
8457
8458
0
  col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-CALL-RESTORE");
8459
8460
0
  return offset;
8461
0
}
8462
8463
8464
8465
static unsigned
8466
0
dissect_tetra_OCTET_STRING_SIZE_8(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8467
0
  offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
8468
0
                                       8, 8, false, NULL);
8469
8470
0
  return offset;
8471
0
}
8472
8473
8474
static const value_string tetra_T_short_data_type_identifier_01_vals[] = {
8475
  {   0, "data-1" },
8476
  {   1, "data-2" },
8477
  {   2, "data-3" },
8478
  {   3, "length-indicator-data-4" },
8479
  { 0, NULL }
8480
};
8481
8482
static const per_choice_t T_short_data_type_identifier_01_choice[] = {
8483
  {   0, &hf_tetra_data_1        , ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_65535 },
8484
  {   1, &hf_tetra_data_2        , ASN1_NO_EXTENSIONS     , dissect_tetra_OCTET_STRING_SIZE_4 },
8485
  {   2, &hf_tetra_data_3_01     , ASN1_NO_EXTENSIONS     , dissect_tetra_OCTET_STRING_SIZE_8 },
8486
  {   3, &hf_tetra_length_indicator_data_4, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_4194304 },
8487
  { 0, NULL, 0, NULL }
8488
};
8489
8490
static unsigned
8491
0
dissect_tetra_T_short_data_type_identifier_01(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8492
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8493
0
                                 ett_tetra_T_short_data_type_identifier_01, T_short_data_type_identifier_01_choice,
8494
0
                                 NULL);
8495
8496
0
  return offset;
8497
0
}
8498
8499
8500
static const per_sequence_t D_SDS_DATA_sequence[] = {
8501
  { &hf_tetra_calling_party_type_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Calling_party_address_type },
8502
  { &hf_tetra_short_data_type_identifier_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_short_data_type_identifier_01 },
8503
  { NULL, 0, 0, NULL }
8504
};
8505
8506
static unsigned
8507
0
dissect_tetra_D_SDS_DATA(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8508
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8509
0
                                   ett_tetra_D_SDS_DATA, D_SDS_DATA_sequence);
8510
8511
0
  col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-SDS-DATA");
8512
8513
0
  return offset;
8514
0
}
8515
8516
8517
static const value_string tetra_D_CMCE_PDU_vals[] = {
8518
  {   0, "d-Alert" },
8519
  {   1, "d-Call-Proceeding" },
8520
  {   2, "d-Connect" },
8521
  {   3, "d-Connect-Ack" },
8522
  {   4, "d-Disconnect" },
8523
  {   5, "d-Info" },
8524
  {   6, "d-Release" },
8525
  {   7, "d-Setup" },
8526
  {   8, "d-Status" },
8527
  {   9, "d-Tx-Ceased" },
8528
  {  10, "d-Tx-Continue" },
8529
  {  11, "d-Tx-Granted" },
8530
  {  12, "d-Tx-Wait" },
8531
  {  13, "d-Tx-Interrupt" },
8532
  {  14, "d-Call-Restore" },
8533
  {  15, "d-SDS-Data" },
8534
  {  16, "d-Facility" },
8535
  { 0, NULL }
8536
};
8537
8538
static const per_choice_t D_CMCE_PDU_choice[] = {
8539
  {   0, &hf_tetra_d_Alert       , ASN1_NO_EXTENSIONS     , dissect_tetra_D_ALERT },
8540
  {   1, &hf_tetra_d_Call_Proceeding, ASN1_NO_EXTENSIONS     , dissect_tetra_D_CALL_PROCEEDING },
8541
  {   2, &hf_tetra_d_Connect     , ASN1_NO_EXTENSIONS     , dissect_tetra_D_CONNECT },
8542
  {   3, &hf_tetra_d_Connect_Ack , ASN1_NO_EXTENSIONS     , dissect_tetra_D_CONNECT_ACK },
8543
  {   4, &hf_tetra_d_Disconnect  , ASN1_NO_EXTENSIONS     , dissect_tetra_D_DISCONNECT },
8544
  {   5, &hf_tetra_d_Info        , ASN1_NO_EXTENSIONS     , dissect_tetra_D_INFO },
8545
  {   6, &hf_tetra_d_Release     , ASN1_NO_EXTENSIONS     , dissect_tetra_D_RELEASE },
8546
  {   7, &hf_tetra_d_Setup       , ASN1_NO_EXTENSIONS     , dissect_tetra_D_SETUP },
8547
  {   8, &hf_tetra_d_Status      , ASN1_NO_EXTENSIONS     , dissect_tetra_D_STATUS },
8548
  {   9, &hf_tetra_d_Tx_Ceased   , ASN1_NO_EXTENSIONS     , dissect_tetra_D_TX_CEASED },
8549
  {  10, &hf_tetra_d_Tx_Continue , ASN1_NO_EXTENSIONS     , dissect_tetra_D_TX_CONTINUE },
8550
  {  11, &hf_tetra_d_Tx_Granted  , ASN1_NO_EXTENSIONS     , dissect_tetra_D_TX_GRANTED },
8551
  {  12, &hf_tetra_d_Tx_Wait     , ASN1_NO_EXTENSIONS     , dissect_tetra_D_TX_WAIT },
8552
  {  13, &hf_tetra_d_Tx_Interrupt, ASN1_NO_EXTENSIONS     , dissect_tetra_D_TX_INTERRUPT },
8553
  {  14, &hf_tetra_d_Call_Restore, ASN1_NO_EXTENSIONS     , dissect_tetra_D_CALL_RESTORE },
8554
  {  15, &hf_tetra_d_SDS_Data    , ASN1_NO_EXTENSIONS     , dissect_tetra_D_SDS_DATA },
8555
  {  16, &hf_tetra_d_Facility    , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8556
  { 0, NULL, 0, NULL }
8557
};
8558
8559
static unsigned
8560
2
dissect_tetra_D_CMCE_PDU(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8561
2
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8562
2
                                 ett_tetra_D_CMCE_PDU, D_CMCE_PDU_choice,
8563
2
                                 NULL);
8564
8565
2
  return offset;
8566
2
}
8567
8568
8569
static const value_string tetra_T_optional_elements_02_vals[] = {
8570
  {   0, "no-type2" },
8571
  {   1, "sdu" },
8572
  { 0, NULL }
8573
};
8574
8575
static const per_choice_t T_optional_elements_02_choice[] = {
8576
  {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8577
  {   1, &hf_tetra_sdu           , ASN1_NO_EXTENSIONS     , dissect_tetra_BIT_STRING },
8578
  { 0, NULL, 0, NULL }
8579
};
8580
8581
static unsigned
8582
0
dissect_tetra_T_optional_elements_02(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8583
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8584
0
                                 ett_tetra_T_optional_elements_02, T_optional_elements_02_choice,
8585
0
                                 NULL);
8586
8587
0
  return offset;
8588
0
}
8589
8590
8591
static const per_sequence_t D_NEW_CELL_sequence[] = {
8592
  { &hf_tetra_pdu_type_02   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
8593
  { &hf_tetra_channel_command_valid, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
8594
  { &hf_tetra_optional_elements_02, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_02 },
8595
  { NULL, 0, 0, NULL }
8596
};
8597
8598
static unsigned
8599
0
dissect_tetra_D_NEW_CELL(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8600
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8601
0
                                   ett_tetra_D_NEW_CELL, D_NEW_CELL_sequence);
8602
8603
0
  return offset;
8604
0
}
8605
8606
8607
static const value_string tetra_T_optional_elements_03_vals[] = {
8608
  {   0, "no-type2" },
8609
  {   1, "sdu" },
8610
  { 0, NULL }
8611
};
8612
8613
static const per_choice_t T_optional_elements_03_choice[] = {
8614
  {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8615
  {   1, &hf_tetra_sdu           , ASN1_NO_EXTENSIONS     , dissect_tetra_BIT_STRING },
8616
  { 0, NULL, 0, NULL }
8617
};
8618
8619
static unsigned
8620
0
dissect_tetra_T_optional_elements_03(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8621
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8622
0
                                 ett_tetra_T_optional_elements_03, T_optional_elements_03_choice,
8623
0
                                 NULL);
8624
8625
0
  return offset;
8626
0
}
8627
8628
8629
static const per_sequence_t D_PREPARE_FAIL_sequence[] = {
8630
  { &hf_tetra_pdu_type_02   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
8631
  { &hf_tetra_fail_cause    , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
8632
  { &hf_tetra_optional_elements_03, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_03 },
8633
  { NULL, 0, 0, NULL }
8634
};
8635
8636
static unsigned
8637
0
dissect_tetra_D_PREPARE_FAIL(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8638
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8639
0
                                   ett_tetra_D_PREPARE_FAIL, D_PREPARE_FAIL_sequence);
8640
8641
0
  return offset;
8642
0
}
8643
8644
8645
8646
static unsigned
8647
0
dissect_tetra_T_network_time(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8648
0
  offset = dissect_per_integer(tvb, offset, actx, tree, hf_index, NULL);
8649
8650
0
  return offset;
8651
0
}
8652
8653
8654
8655
static unsigned
8656
0
dissect_tetra_T_reserved(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8657
0
  offset = dissect_per_integer(tvb, offset, actx, tree, hf_index, NULL);
8658
8659
0
  return offset;
8660
0
}
8661
8662
8663
static const per_sequence_t TETRA_NETWORK_TIME_sequence[] = {
8664
  { &hf_tetra_network_time  , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_network_time },
8665
  { &hf_tetra_local_time_offset_sign, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
8666
  { &hf_tetra_local_time_offset, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_63 },
8667
  { &hf_tetra_year          , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_63 },
8668
  { &hf_tetra_reserved_04   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_reserved },
8669
  { NULL, 0, 0, NULL }
8670
};
8671
8672
static unsigned
8673
0
dissect_tetra_TETRA_NETWORK_TIME(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8674
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8675
0
                                   ett_tetra_TETRA_NETWORK_TIME, TETRA_NETWORK_TIME_sequence);
8676
8677
0
  return offset;
8678
0
}
8679
8680
8681
static const value_string tetra_T_tetra_network_time_vals[] = {
8682
  {   0, "none" },
8683
  {   1, "tetra-network-time" },
8684
  { 0, NULL }
8685
};
8686
8687
static const per_choice_t T_tetra_network_time_choice[] = {
8688
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8689
  {   1, &hf_tetra_tetra_network_time_01, ASN1_NO_EXTENSIONS     , dissect_tetra_TETRA_NETWORK_TIME },
8690
  { 0, NULL, 0, NULL }
8691
};
8692
8693
static unsigned
8694
0
dissect_tetra_T_tetra_network_time(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8695
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8696
0
                                 ett_tetra_T_tetra_network_time, T_tetra_network_time_choice,
8697
0
                                 NULL);
8698
8699
0
  return offset;
8700
0
}
8701
8702
8703
static const value_string tetra_T_number_of_neighbour_cells_vals[] = {
8704
  {   0, "none" },
8705
  {   1, "number-of-neighbour-cells" },
8706
  { 0, NULL }
8707
};
8708
8709
static const per_choice_t T_number_of_neighbour_cells_choice[] = {
8710
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8711
  {   1, &hf_tetra_number_of_neighbour_cells_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_7 },
8712
  { 0, NULL, 0, NULL }
8713
};
8714
8715
static unsigned
8716
0
dissect_tetra_T_number_of_neighbour_cells(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8717
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8718
0
                                 ett_tetra_T_number_of_neighbour_cells, T_number_of_neighbour_cells_choice,
8719
0
                                 NULL);
8720
8721
0
  return offset;
8722
0
}
8723
8724
8725
static const per_sequence_t T_type2_parameters_02_sequence[] = {
8726
  { &hf_tetra_tetra_network_time, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_tetra_network_time },
8727
  { &hf_tetra_number_of_neighbour_cells, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_number_of_neighbour_cells },
8728
  { NULL, 0, 0, NULL }
8729
};
8730
8731
static unsigned
8732
0
dissect_tetra_T_type2_parameters_02(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8733
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8734
0
                                   ett_tetra_T_type2_parameters_02, T_type2_parameters_02_sequence);
8735
8736
0
  return offset;
8737
0
}
8738
8739
8740
static const value_string tetra_T_optional_elements_04_vals[] = {
8741
  {   0, "no-type2" },
8742
  {   1, "type2-parameters" },
8743
  { 0, NULL }
8744
};
8745
8746
static const per_choice_t T_optional_elements_04_choice[] = {
8747
  {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8748
  {   1, &hf_tetra_type2_parameters_02, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_parameters_02 },
8749
  { 0, NULL, 0, NULL }
8750
};
8751
8752
static unsigned
8753
0
dissect_tetra_T_optional_elements_04(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8754
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8755
0
                                 ett_tetra_T_optional_elements_04, T_optional_elements_04_choice,
8756
0
                                 NULL);
8757
8758
0
  return offset;
8759
0
}
8760
8761
8762
static const per_sequence_t D_NWRK_BRDADCAST_sequence[] = {
8763
  { &hf_tetra_pdu_type_02   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
8764
  { &hf_tetra_cell_re_select_parameters, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_65535 },
8765
  { &hf_tetra_cell_service_level, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
8766
  { &hf_tetra_optional_elements_04, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_04 },
8767
  { NULL, 0, 0, NULL }
8768
};
8769
8770
static unsigned
8771
0
dissect_tetra_D_NWRK_BRDADCAST(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8772
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8773
0
                                   ett_tetra_D_NWRK_BRDADCAST, D_NWRK_BRDADCAST_sequence);
8774
8775
0
  return offset;
8776
0
}
8777
8778
8779
static const per_sequence_t D_RESTORE_ACK_sequence[] = {
8780
  { &hf_tetra_pdu_type_02   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
8781
  { &hf_tetra_sdu           , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BIT_STRING },
8782
  { NULL, 0, 0, NULL }
8783
};
8784
8785
static unsigned
8786
0
dissect_tetra_D_RESTORE_ACK(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8787
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8788
0
                                   ett_tetra_D_RESTORE_ACK, D_RESTORE_ACK_sequence);
8789
8790
0
  return offset;
8791
0
}
8792
8793
8794
static const per_sequence_t D_RESTORE_FAIL_sequence[] = {
8795
  { &hf_tetra_pdu_type_02   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
8796
  { &hf_tetra_fail_cause    , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
8797
  { NULL, 0, 0, NULL }
8798
};
8799
8800
static unsigned
8801
0
dissect_tetra_D_RESTORE_FAIL(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8802
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8803
0
                                   ett_tetra_D_RESTORE_FAIL, D_RESTORE_FAIL_sequence);
8804
8805
0
  return offset;
8806
0
}
8807
8808
8809
static const value_string tetra_DMLE_PDU_vals[] = {
8810
  {   0, "d-new-cell" },
8811
  {   1, "d-prepare-fail" },
8812
  {   2, "d-nwrk-broadcast" },
8813
  {   3, "dmle-reserved1" },
8814
  {   4, "d-restore-ack" },
8815
  {   5, "d-restore-fail" },
8816
  {   6, "dmle-reserved2" },
8817
  {   7, "dmle-reserved3" },
8818
  { 0, NULL }
8819
};
8820
8821
static const per_choice_t DMLE_PDU_choice[] = {
8822
  {   0, &hf_tetra_d_new_cell    , ASN1_NO_EXTENSIONS     , dissect_tetra_D_NEW_CELL },
8823
  {   1, &hf_tetra_d_prepare_fail, ASN1_NO_EXTENSIONS     , dissect_tetra_D_PREPARE_FAIL },
8824
  {   2, &hf_tetra_d_nwrk_broadcast, ASN1_NO_EXTENSIONS     , dissect_tetra_D_NWRK_BRDADCAST },
8825
  {   3, &hf_tetra_dmle_reserved1, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8826
  {   4, &hf_tetra_d_restore_ack , ASN1_NO_EXTENSIONS     , dissect_tetra_D_RESTORE_ACK },
8827
  {   5, &hf_tetra_d_restore_fail, ASN1_NO_EXTENSIONS     , dissect_tetra_D_RESTORE_FAIL },
8828
  {   6, &hf_tetra_dmle_reserved2, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8829
  {   7, &hf_tetra_dmle_reserved3, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8830
  { 0, NULL, 0, NULL }
8831
};
8832
8833
static unsigned
8834
0
dissect_tetra_DMLE_PDU(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8835
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8836
0
                                 ett_tetra_DMLE_PDU, DMLE_PDU_choice,
8837
0
                                 NULL);
8838
8839
0
  return offset;
8840
0
}
8841
8842
8843
static const value_string tetra_D_MLE_PDU_vals[] = {
8844
  {   0, "u-mle-reserved1" },
8845
  {   1, "mm" },
8846
  {   2, "cmce" },
8847
  {   3, "u-mle-reserved2" },
8848
  {   4, "sndcp" },
8849
  {   5, "mle" },
8850
  {   6, "tetra-management-entity-protocol" },
8851
  {   7, "u-mle-reserved3" },
8852
  { 0, NULL }
8853
};
8854
8855
static const per_choice_t D_MLE_PDU_choice[] = {
8856
  {   0, &hf_tetra_u_mle_reserved1, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8857
  {   1, &hf_tetra_mm_01         , ASN1_NO_EXTENSIONS     , dissect_tetra_D_MM_PDU },
8858
  {   2, &hf_tetra_cmce_01       , ASN1_NO_EXTENSIONS     , dissect_tetra_D_CMCE_PDU },
8859
  {   3, &hf_tetra_u_mle_reserved2, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8860
  {   4, &hf_tetra_sndcp         , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8861
  {   5, &hf_tetra_mle_01        , ASN1_NO_EXTENSIONS     , dissect_tetra_DMLE_PDU },
8862
  {   6, &hf_tetra_tetra_management_entity_protocol, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8863
  {   7, &hf_tetra_u_mle_reserved3, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8864
  { 0, NULL, 0, NULL }
8865
};
8866
8867
static unsigned
8868
2
dissect_tetra_D_MLE_PDU(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8869
2
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8870
2
                                 ett_tetra_D_MLE_PDU, D_MLE_PDU_choice,
8871
2
                                 NULL);
8872
8873
2
  return offset;
8874
2
}
8875
8876
8877
static const per_sequence_t D_BL_ADATA_sequence[] = {
8878
  { &hf_tetra_nr            , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
8879
  { &hf_tetra_ns            , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
8880
  { &hf_tetra_tl_sdu_01     , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_D_MLE_PDU },
8881
  { NULL, 0, 0, NULL }
8882
};
8883
8884
static unsigned
8885
0
dissect_tetra_D_BL_ADATA(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8886
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8887
0
                                   ett_tetra_D_BL_ADATA, D_BL_ADATA_sequence);
8888
8889
0
  return offset;
8890
0
}
8891
8892
8893
static const per_sequence_t D_BL_DATA_sequence[] = {
8894
  { &hf_tetra_ns            , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
8895
  { &hf_tetra_tl_sdu_01     , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_D_MLE_PDU },
8896
  { NULL, 0, 0, NULL }
8897
};
8898
8899
static unsigned
8900
0
dissect_tetra_D_BL_DATA(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8901
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8902
0
                                   ett_tetra_D_BL_DATA, D_BL_DATA_sequence);
8903
8904
0
  return offset;
8905
0
}
8906
8907
8908
static const per_sequence_t D_BL_ACK_sequence[] = {
8909
  { &hf_tetra_nr            , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
8910
  { &hf_tetra_tl_sdu_01     , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_D_MLE_PDU },
8911
  { NULL, 0, 0, NULL }
8912
};
8913
8914
static unsigned
8915
2
dissect_tetra_D_BL_ACK(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8916
2
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8917
2
                                   ett_tetra_D_BL_ACK, D_BL_ACK_sequence);
8918
8919
2
  return offset;
8920
2
}
8921
8922
8923
static const per_sequence_t D_BL_ADATA_FCS_sequence[] = {
8924
  { &hf_tetra_nr            , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
8925
  { &hf_tetra_ns            , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
8926
  { &hf_tetra_tl_sdu_01     , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_D_MLE_PDU },
8927
  { &hf_tetra_fcs           , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_OCTET_STRING_SIZE_4 },
8928
  { NULL, 0, 0, NULL }
8929
};
8930
8931
static unsigned
8932
0
dissect_tetra_D_BL_ADATA_FCS(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8933
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8934
0
                                   ett_tetra_D_BL_ADATA_FCS, D_BL_ADATA_FCS_sequence);
8935
8936
0
  return offset;
8937
0
}
8938
8939
8940
static const per_sequence_t D_BL_DATA_FCS_sequence[] = {
8941
  { &hf_tetra_ns            , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
8942
  { &hf_tetra_tl_sdu_01     , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_D_MLE_PDU },
8943
  { &hf_tetra_fcs           , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_OCTET_STRING_SIZE_4 },
8944
  { NULL, 0, 0, NULL }
8945
};
8946
8947
static unsigned
8948
0
dissect_tetra_D_BL_DATA_FCS(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8949
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8950
0
                                   ett_tetra_D_BL_DATA_FCS, D_BL_DATA_FCS_sequence);
8951
8952
0
  return offset;
8953
0
}
8954
8955
8956
static const per_sequence_t D_MLE_PDU_FCS_sequence[] = {
8957
  { &hf_tetra_d_mle_pdu     , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_D_MLE_PDU },
8958
  { &hf_tetra_fcs           , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_OCTET_STRING_SIZE_4 },
8959
  { NULL, 0, 0, NULL }
8960
};
8961
8962
static unsigned
8963
0
dissect_tetra_D_MLE_PDU_FCS(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8964
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8965
0
                                   ett_tetra_D_MLE_PDU_FCS, D_MLE_PDU_FCS_sequence);
8966
8967
0
  return offset;
8968
0
}
8969
8970
8971
static const per_sequence_t D_BL_ACK_FCS_sequence[] = {
8972
  { &hf_tetra_nr            , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
8973
  { &hf_tetra_tl_sdu_01     , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_D_MLE_PDU },
8974
  { &hf_tetra_fcs           , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_OCTET_STRING_SIZE_4 },
8975
  { NULL, 0, 0, NULL }
8976
};
8977
8978
static unsigned
8979
0
dissect_tetra_D_BL_ACK_FCS(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
8980
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8981
0
                                   ett_tetra_D_BL_ACK_FCS, D_BL_ACK_FCS_sequence);
8982
8983
0
  return offset;
8984
0
}
8985
8986
8987
static const value_string tetra_D_LLC_PDU_vals[] = {
8988
  {   0, "bl-adata" },
8989
  {   1, "bl-data" },
8990
  {   2, "bl-udata" },
8991
  {   3, "bl-ack" },
8992
  {   4, "bl-adata-fcs" },
8993
  {   5, "bl-data-fcs" },
8994
  {   6, "bl-udata-fcs" },
8995
  {   7, "bl-ack-fcs" },
8996
  {   8, "al-setup" },
8997
  {   9, "al-data" },
8998
  {  10, "al-udata" },
8999
  {  11, "al-ack" },
9000
  {  12, "al-reconnect" },
9001
  {  13, "reserve1" },
9002
  {  14, "reserve2" },
9003
  {  15, "al-disc" },
9004
  { 0, NULL }
9005
};
9006
9007
static const per_choice_t D_LLC_PDU_choice[] = {
9008
  {   0, &hf_tetra_bl_adata_01   , ASN1_NO_EXTENSIONS     , dissect_tetra_D_BL_ADATA },
9009
  {   1, &hf_tetra_bl_data_01    , ASN1_NO_EXTENSIONS     , dissect_tetra_D_BL_DATA },
9010
  {   2, &hf_tetra_bl_udata_01   , ASN1_NO_EXTENSIONS     , dissect_tetra_D_MLE_PDU },
9011
  {   3, &hf_tetra_bl_ack_01     , ASN1_NO_EXTENSIONS     , dissect_tetra_D_BL_ACK },
9012
  {   4, &hf_tetra_bl_adata_fcs_01, ASN1_NO_EXTENSIONS     , dissect_tetra_D_BL_ADATA_FCS },
9013
  {   5, &hf_tetra_bl_data_fcs_01, ASN1_NO_EXTENSIONS     , dissect_tetra_D_BL_DATA_FCS },
9014
  {   6, &hf_tetra_bl_udata_fcs_01, ASN1_NO_EXTENSIONS     , dissect_tetra_D_MLE_PDU_FCS },
9015
  {   7, &hf_tetra_bl_ack_fcs_01 , ASN1_NO_EXTENSIONS     , dissect_tetra_D_BL_ACK_FCS },
9016
  {   8, &hf_tetra_al_setup      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
9017
  {   9, &hf_tetra_al_data       , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
9018
  {  10, &hf_tetra_al_udata      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
9019
  {  11, &hf_tetra_al_ack        , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
9020
  {  12, &hf_tetra_al_reconnect  , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
9021
  {  13, &hf_tetra_reserve1      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
9022
  {  14, &hf_tetra_reserve2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
9023
  {  15, &hf_tetra_al_disc       , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
9024
  { 0, NULL, 0, NULL }
9025
};
9026
9027
static unsigned
9028
2
dissect_tetra_D_LLC_PDU(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
9029
2
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
9030
2
                                 ett_tetra_D_LLC_PDU, D_LLC_PDU_choice,
9031
2
                                 NULL);
9032
9033
2
  return offset;
9034
2
}
9035
9036
9037
static const per_sequence_t OTHER_DATA_sequence[] = {
9038
  { &hf_tetra_power_control , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_power_control },
9039
  { &hf_tetra_slot_granting_02, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_slot_granting_02 },
9040
  { &hf_tetra_channel_allocation_02, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_channel_allocation_02 },
9041
  { &hf_tetra_tm_sdu_02     , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_D_LLC_PDU },
9042
  { NULL, 0, 0, NULL }
9043
};
9044
9045
static unsigned
9046
2
dissect_tetra_OTHER_DATA(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
9047
2
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
9048
2
                                   ett_tetra_OTHER_DATA, OTHER_DATA_sequence);
9049
9050
2
  return offset;
9051
2
}
9052
9053
9054
static const per_sequence_t SSI_NEED_sequence[] = {
9055
  { &hf_tetra_ssi           , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16777215 },
9056
  { &hf_tetra_other         , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_OTHER_DATA },
9057
  { NULL, 0, 0, NULL }
9058
};
9059
9060
static unsigned
9061
0
dissect_tetra_SSI_NEED(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
9062
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
9063
0
                                   ett_tetra_SSI_NEED, SSI_NEED_sequence);
9064
9065
0
  return offset;
9066
0
}
9067
9068
9069
static const per_sequence_t EVENT_NEED_sequence[] = {
9070
  { &hf_tetra_eventlabel    , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1023 },
9071
  { &hf_tetra_other         , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_OTHER_DATA },
9072
  { NULL, 0, 0, NULL }
9073
};
9074
9075
static unsigned
9076
0
dissect_tetra_EVENT_NEED(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
9077
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
9078
0
                                   ett_tetra_EVENT_NEED, EVENT_NEED_sequence);
9079
9080
0
  return offset;
9081
0
}
9082
9083
9084
static const per_sequence_t USSI_NEED_sequence[] = {
9085
  { &hf_tetra_ussi          , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16777215 },
9086
  { &hf_tetra_other         , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_OTHER_DATA },
9087
  { NULL, 0, 0, NULL }
9088
};
9089
9090
static unsigned
9091
2
dissect_tetra_USSI_NEED(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
9092
2
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
9093
2
                                   ett_tetra_USSI_NEED, USSI_NEED_sequence);
9094
9095
2
  return offset;
9096
2
}
9097
9098
9099
static const per_sequence_t SMI_NEED_sequence[] = {
9100
  { &hf_tetra_smi           , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16777215 },
9101
  { &hf_tetra_other         , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_OTHER_DATA },
9102
  { NULL, 0, 0, NULL }
9103
};
9104
9105
static unsigned
9106
0
dissect_tetra_SMI_NEED(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
9107
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
9108
0
                                   ett_tetra_SMI_NEED, SMI_NEED_sequence);
9109
9110
0
  return offset;
9111
0
}
9112
9113
9114
static const per_sequence_t SSI_EVENT_NEED_sequence[] = {
9115
  { &hf_tetra_ssi           , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16777215 },
9116
  { &hf_tetra_ventlabel     , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1023 },
9117
  { &hf_tetra_other         , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_OTHER_DATA },
9118
  { NULL, 0, 0, NULL }
9119
};
9120
9121
static unsigned
9122
0
dissect_tetra_SSI_EVENT_NEED(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
9123
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
9124
0
                                   ett_tetra_SSI_EVENT_NEED, SSI_EVENT_NEED_sequence);
9125
9126
0
  return offset;
9127
0
}
9128
9129
9130
static const per_sequence_t SSI_USAGE_NEED_sequence[] = {
9131
  { &hf_tetra_ssi           , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16777215 },
9132
  { &hf_tetra_usage_maker   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_63 },
9133
  { &hf_tetra_other         , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_OTHER_DATA },
9134
  { NULL, 0, 0, NULL }
9135
};
9136
9137
static unsigned
9138
0
dissect_tetra_SSI_USAGE_NEED(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
9139
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
9140
0
                                   ett_tetra_SSI_USAGE_NEED, SSI_USAGE_NEED_sequence);
9141
9142
0
  return offset;
9143
0
}
9144
9145
9146
9147
static unsigned
9148
0
dissect_tetra_BIT_STRING_SIZE_34(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
9149
0
  offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
9150
0
                                     34, 34, false, NULL, 0, NULL, NULL);
9151
9152
0
  return offset;
9153
0
}
9154
9155
9156
static const per_sequence_t SMI_EVENT_NEED_sequence[] = {
9157
  { &hf_tetra_smi_eventlabel, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BIT_STRING_SIZE_34 },
9158
  { &hf_tetra_other         , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_OTHER_DATA },
9159
  { NULL, 0, 0, NULL }
9160
};
9161
9162
static unsigned
9163
0
dissect_tetra_SMI_EVENT_NEED(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
9164
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
9165
0
                                   ett_tetra_SMI_EVENT_NEED, SMI_EVENT_NEED_sequence);
9166
9167
0
  return offset;
9168
0
}
9169
9170
9171
static const value_string tetra_AddressMacResource_vals[] = {
9172
  {   0, "null-pdu" },
9173
  {   1, "ssi" },
9174
  {   2, "eventLabel" },
9175
  {   3, "ussi" },
9176
  {   4, "smi" },
9177
  {   5, "ssi-eventLabel" },
9178
  {   6, "ssi-usage-maker" },
9179
  {   7, "smi-eventLabel" },
9180
  { 0, NULL }
9181
};
9182
9183
static const per_choice_t AddressMacResource_choice[] = {
9184
  {   0, &hf_tetra_null_pdu      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
9185
  {   1, &hf_tetra_ssi_need      , ASN1_NO_EXTENSIONS     , dissect_tetra_SSI_NEED },
9186
  {   2, &hf_tetra_eventLabel_01 , ASN1_NO_EXTENSIONS     , dissect_tetra_EVENT_NEED },
9187
  {   3, &hf_tetra_ussi_01       , ASN1_NO_EXTENSIONS     , dissect_tetra_USSI_NEED },
9188
  {   4, &hf_tetra_smi_01        , ASN1_NO_EXTENSIONS     , dissect_tetra_SMI_NEED },
9189
  {   5, &hf_tetra_ssi_eventLabel, ASN1_NO_EXTENSIONS     , dissect_tetra_SSI_EVENT_NEED },
9190
  {   6, &hf_tetra_ssi_usage_maker, ASN1_NO_EXTENSIONS     , dissect_tetra_SSI_USAGE_NEED },
9191
  {   7, &hf_tetra_smi_eventLabel, ASN1_NO_EXTENSIONS     , dissect_tetra_SMI_EVENT_NEED },
9192
  { 0, NULL, 0, NULL }
9193
};
9194
9195
static unsigned
9196
2
dissect_tetra_AddressMacResource(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
9197
2
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
9198
2
                                 ett_tetra_AddressMacResource, AddressMacResource_choice,
9199
2
                                 NULL);
9200
9201
2
  return offset;
9202
2
}
9203
9204
9205
static const per_sequence_t MAC_RESOURCE_sequence[] = {
9206
  { &hf_tetra_pdu_type      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
9207
  { &hf_tetra_fill_bit_indication, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Fill_Bit_Indication },
9208
  { &hf_tetra_position_of_grant, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Position_Of_Grant },
9209
  { &hf_tetra_encryption_mode, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
9210
  { &hf_tetra_access_ack    , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_access_ack },
9211
  { &hf_tetra_lengthIndication_03, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_LengthIndicationMacResource },
9212
  { &hf_tetra_address_01    , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_AddressMacResource },
9213
  { NULL, 0, 0, NULL }
9214
};
9215
9216
static unsigned
9217
2
dissect_tetra_MAC_RESOURCE(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
9218
2
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
9219
2
                                   ett_tetra_MAC_RESOURCE, MAC_RESOURCE_sequence);
9220
9221
2
  return offset;
9222
2
}
9223
9224
9225
9226
static unsigned
9227
0
dissect_tetra_INTEGER_0_33554431(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
9228
0
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
9229
0
                                                            0U, 33554431U, NULL, false);
9230
9231
0
  return offset;
9232
0
}
9233
9234
9235
static const value_string tetra_T_optional_field_vals[] = {
9236
  {   0, "none" },
9237
  {   1, "class-bitmap" },
9238
  {   2, "gssi" },
9239
  {   3, "reserved" },
9240
  { 0, NULL }
9241
};
9242
9243
static const per_choice_t T_optional_field_choice[] = {
9244
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
9245
  {   1, &hf_tetra_class_bitmap  , ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_65535 },
9246
  {   2, &hf_tetra_gssi          , ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_33554431 },
9247
  {   3, &hf_tetra_reserved_03   , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
9248
  { 0, NULL, 0, NULL }
9249
};
9250
9251
static unsigned
9252
0
dissect_tetra_T_optional_field(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
9253
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
9254
0
                                 ett_tetra_T_optional_field, T_optional_field_choice,
9255
0
                                 NULL);
9256
9257
0
  return offset;
9258
0
}
9259
9260
9261
static const per_sequence_t MAC_ACCESS_DEFINE_sequence[] = {
9262
  { &hf_tetra_pdu_type      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
9263
  { &hf_tetra_broadcast_type, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
9264
  { &hf_tetra_broadcast_channel, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
9265
  { &hf_tetra_access_code   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
9266
  { &hf_tetra_imm_01        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_15 },
9267
  { &hf_tetra_wt_01         , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_15 },
9268
  { &hf_tetra_nu_01         , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_15 },
9269
  { &hf_tetra_frame_len_factor_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
9270
  { &hf_tetra_timeslot_pointer_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_15 },
9271
  { &hf_tetra_min_priority  , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
9272
  { &hf_tetra_optional_field, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_field },
9273
  { &hf_tetra_filler_bits   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
9274
  { NULL, 0, 0, NULL }
9275
};
9276
9277
static unsigned
9278
0
dissect_tetra_MAC_ACCESS_DEFINE(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
9279
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
9280
0
                                   ett_tetra_MAC_ACCESS_DEFINE, MAC_ACCESS_DEFINE_sequence);
9281
9282
0
  return offset;
9283
0
}
9284
9285
/*--- PDUs ---*/
9286
9287
0
static int dissect_AACH_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
9288
0
  unsigned offset = 0;
9289
0
  asn1_ctx_t asn1_ctx;
9290
0
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, false, pinfo);
9291
0
  offset = dissect_tetra_AACH(tvb, offset, &asn1_ctx, tree, hf_tetra_AACH_PDU);
9292
0
  offset += 7; offset >>= 3;
9293
0
  return offset;
9294
0
}
9295
0
static int dissect_BSCH_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
9296
0
  unsigned offset = 0;
9297
0
  asn1_ctx_t asn1_ctx;
9298
0
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, false, pinfo);
9299
0
  offset = dissect_tetra_BSCH(tvb, offset, &asn1_ctx, tree, hf_tetra_BSCH_PDU);
9300
0
  offset += 7; offset >>= 3;
9301
0
  return offset;
9302
0
}
9303
0
static int dissect_BNCH_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
9304
0
  unsigned offset = 0;
9305
0
  asn1_ctx_t asn1_ctx;
9306
0
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, false, pinfo);
9307
0
  offset = dissect_tetra_BNCH(tvb, offset, &asn1_ctx, tree, hf_tetra_BNCH_PDU);
9308
0
  offset += 7; offset >>= 3;
9309
0
  return offset;
9310
0
}
9311
0
static int dissect_MAC_ACCESS_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
9312
0
  unsigned offset = 0;
9313
0
  asn1_ctx_t asn1_ctx;
9314
0
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, false, pinfo);
9315
0
  offset = dissect_tetra_MAC_ACCESS(tvb, offset, &asn1_ctx, tree, hf_tetra_MAC_ACCESS_PDU);
9316
0
  offset += 7; offset >>= 3;
9317
0
  return offset;
9318
0
}
9319
1
static int dissect_MAC_DATA_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
9320
1
  unsigned offset = 0;
9321
1
  asn1_ctx_t asn1_ctx;
9322
1
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, false, pinfo);
9323
1
  offset = dissect_tetra_MAC_DATA(tvb, offset, &asn1_ctx, tree, hf_tetra_MAC_DATA_PDU);
9324
1
  offset += 7; offset >>= 3;
9325
1
  return offset;
9326
1
}
9327
0
static int dissect_MAC_FRAG_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
9328
0
  unsigned offset = 0;
9329
0
  asn1_ctx_t asn1_ctx;
9330
0
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, false, pinfo);
9331
0
  offset = dissect_tetra_MAC_FRAG(tvb, offset, &asn1_ctx, tree, hf_tetra_MAC_FRAG_PDU);
9332
0
  offset += 7; offset >>= 3;
9333
0
  return offset;
9334
0
}
9335
0
static int dissect_MAC_FRAG120_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
9336
0
  unsigned offset = 0;
9337
0
  asn1_ctx_t asn1_ctx;
9338
0
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, false, pinfo);
9339
0
  offset = dissect_tetra_MAC_FRAG120(tvb, offset, &asn1_ctx, tree, hf_tetra_MAC_FRAG120_PDU);
9340
0
  offset += 7; offset >>= 3;
9341
0
  return offset;
9342
0
}
9343
0
static int dissect_MAC_END_UPLINK_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
9344
0
  unsigned offset = 0;
9345
0
  asn1_ctx_t asn1_ctx;
9346
0
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, false, pinfo);
9347
0
  offset = dissect_tetra_MAC_END_UPLINK(tvb, offset, &asn1_ctx, tree, hf_tetra_MAC_END_UPLINK_PDU);
9348
0
  offset += 7; offset >>= 3;
9349
0
  return offset;
9350
0
}
9351
0
static int dissect_MAC_END_UP114_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
9352
0
  unsigned offset = 0;
9353
0
  asn1_ctx_t asn1_ctx;
9354
0
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, false, pinfo);
9355
0
  offset = dissect_tetra_MAC_END_UP114(tvb, offset, &asn1_ctx, tree, hf_tetra_MAC_END_UP114_PDU);
9356
0
  offset += 7; offset >>= 3;
9357
0
  return offset;
9358
0
}
9359
0
static int dissect_MAC_END_HU_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
9360
0
  unsigned offset = 0;
9361
0
  asn1_ctx_t asn1_ctx;
9362
0
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, false, pinfo);
9363
0
  offset = dissect_tetra_MAC_END_HU(tvb, offset, &asn1_ctx, tree, hf_tetra_MAC_END_HU_PDU);
9364
0
  offset += 7; offset >>= 3;
9365
0
  return offset;
9366
0
}
9367
0
static int dissect_MAC_END_DOWNLINK_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
9368
0
  unsigned offset = 0;
9369
0
  asn1_ctx_t asn1_ctx;
9370
0
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, false, pinfo);
9371
0
  offset = dissect_tetra_MAC_END_DOWNLINK(tvb, offset, &asn1_ctx, tree, hf_tetra_MAC_END_DOWNLINK_PDU);
9372
0
  offset += 7; offset >>= 3;
9373
0
  return offset;
9374
0
}
9375
0
static int dissect_MAC_END_DOWN111_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
9376
0
  unsigned offset = 0;
9377
0
  asn1_ctx_t asn1_ctx;
9378
0
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, false, pinfo);
9379
0
  offset = dissect_tetra_MAC_END_DOWN111(tvb, offset, &asn1_ctx, tree, hf_tetra_MAC_END_DOWN111_PDU);
9380
0
  offset += 7; offset >>= 3;
9381
0
  return offset;
9382
0
}
9383
2
static int dissect_MAC_RESOURCE_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
9384
2
  unsigned offset = 0;
9385
2
  asn1_ctx_t asn1_ctx;
9386
2
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, false, pinfo);
9387
2
  offset = dissect_tetra_MAC_RESOURCE(tvb, offset, &asn1_ctx, tree, hf_tetra_MAC_RESOURCE_PDU);
9388
2
  offset += 7; offset >>= 3;
9389
2
  return offset;
9390
2
}
9391
0
static int dissect_MAC_ACCESS_DEFINE_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
9392
0
  unsigned offset = 0;
9393
0
  asn1_ctx_t asn1_ctx;
9394
0
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, false, pinfo);
9395
0
  offset = dissect_tetra_MAC_ACCESS_DEFINE(tvb, offset, &asn1_ctx, tree, hf_tetra_MAC_ACCESS_DEFINE_PDU);
9396
0
  offset += 7; offset >>= 3;
9397
0
  return offset;
9398
0
}
9399
9400
9401
static const value_string channeltypenames[] = {
9402
  { 0, "Reserved" },
9403
  { 1, "AACH" },
9404
  { 2, "SCH/F" },
9405
  { 3, "SCH/HD" },
9406
  { 4, "Unknown" },
9407
  { 5, "BSCH" },
9408
  { 6, "BNCH" },
9409
  { 7, "TCH/F" },
9410
  { 8, "TCH/H" },
9411
  { 9, "TCH4.8"},
9412
  { 10, "TCH7.2"},
9413
  { 11, "STCH"},
9414
  { 0, NULL }
9415
};
9416
9417
static const value_string recvchanneltypenames[] = {
9418
  { 0, "Reserved" },
9419
  { 1, "AACH" },
9420
  { 2, "SCH/F" },
9421
  { 3, "SCH/HD" },
9422
  { 4, "Unknown" },
9423
  { 5, "BSCH" },
9424
  { 6, "BNCH" },
9425
  { 7, "TCH/F" },
9426
  { 8, "TCH/H" },
9427
  { 9, "TCH4.8"},
9428
  { 10, "TCH7.2"},
9429
  { 11, "STCH"},
9430
  { 15, "SCH/HU"},
9431
  { 0, NULL }
9432
};
9433
9434
/* Get the length of received pdu */
9435
static int get_rx_pdu_length(uint32_t channel_type)
9436
3
{
9437
3
  int len = 0;
9438
9439
3
  switch(channel_type) {
9440
0
  case TETRA_CHAN_AACH:
9441
0
    len = 14;
9442
0
    break;
9443
1
  case TETRA_CHAN_SCH_F:
9444
1
    len = 268;
9445
1
    break;
9446
2
  case TETRA_CHAN_SCH_D:
9447
2
    len = 124; ;
9448
2
    break;
9449
0
  case TETRA_CHAN_BSCH:
9450
0
    len = 60;
9451
0
    break;
9452
0
  case TETRA_CHAN_BNCH:
9453
0
    len = 124;
9454
0
    break;
9455
0
  case TETRA_CHAN_TCH_F:
9456
0
    len = 274;
9457
0
    break;
9458
0
  case TETRA_CHAN_TCH_H:
9459
0
    len = 137;
9460
0
    break;
9461
0
  case TETRA_CHAN_TCH_2_4:
9462
0
    len = 144;
9463
0
    break;
9464
0
  case TETRA_CHAN_TCH_4_8:
9465
0
    len = 288;
9466
0
    break;
9467
0
  case TETRA_CHAN_STCH:
9468
0
    len = 124;
9469
0
    break;
9470
0
  case TETRA_CHAN_SCH_HU:
9471
0
    len = 92;
9472
0
    break;
9473
0
  default:
9474
0
    len = 0;
9475
0
    break;
9476
3
  }
9477
9478
3
  return len;
9479
3
}
9480
9481
/* Get the length of transmitted pdu */
9482
static int get_tx_pdu_length(uint32_t channel_type)
9483
0
{
9484
0
  int len = 0;
9485
9486
0
  switch(channel_type) {
9487
0
  case TETRA_CHAN_AACH:
9488
0
    len = 14;
9489
0
    break;
9490
0
  case TETRA_CHAN_SCH_F:
9491
0
    len = 268;
9492
0
    break;
9493
0
  case TETRA_CHAN_SCH_D:
9494
0
    len = 124;
9495
0
    break;
9496
0
  case TETRA_CHAN_BSCH:
9497
0
    len = 60;
9498
0
    break;
9499
0
  case TETRA_CHAN_BNCH:
9500
0
    len = 124;
9501
0
    break;
9502
0
  case TETRA_CHAN_TCH_F:
9503
0
    len = 274;
9504
0
    break;
9505
0
  case TETRA_CHAN_TCH_H:
9506
0
    len = 137;
9507
0
    break;
9508
0
  case TETRA_CHAN_TCH_2_4:
9509
0
    len = 144;
9510
0
    break;
9511
0
  case TETRA_CHAN_TCH_4_8:
9512
0
    len = 288;
9513
0
    break;
9514
0
  case TETRA_CHAN_STCH:
9515
0
    len = 124;
9516
0
    break;
9517
0
  }
9518
9519
0
  return len;
9520
0
}
9521
9522
void tetra_dissect_pdu(int channel_type, int dir, tvbuff_t *pdu, proto_tree *tree, packet_info *pinfo)
9523
3
{
9524
3
  proto_item *tetra_sub_item;
9525
3
  proto_tree *tetra_sub_tree;
9526
3
  uint8_t p;
9527
9528
3
  tetra_sub_item = proto_tree_add_item(tree, hf_tetra_pdu,
9529
3
               pdu, 0, tvb_captured_length(pdu), ENC_NA);
9530
9531
3
  tetra_sub_tree = proto_item_add_subtree(tetra_sub_item, ett_tetra);
9532
9533
3
  switch(channel_type) {
9534
0
  case TETRA_CHAN_AACH:
9535
0
    dissect_AACH_PDU(pdu, pinfo, tetra_sub_tree, NULL);
9536
0
    break;
9537
1
  case TETRA_CHAN_SCH_F:
9538
1
    p = tvb_get_uint8(pdu, 0);
9539
1
    switch(p >> 6) {
9540
1
    case 0:
9541
1
      if (dir == TETRA_DOWNLINK)
9542
0
        dissect_MAC_RESOURCE_PDU(pdu, pinfo, tetra_sub_tree, NULL);
9543
1
      else
9544
1
        dissect_MAC_DATA_PDU(pdu, pinfo, tetra_sub_tree, NULL);
9545
1
      break;
9546
0
    case 1: /* MAC-FRAG or MAC-END */
9547
0
      if((p >> 5) == 3) {
9548
0
        if (dir == TETRA_DOWNLINK)
9549
0
          dissect_MAC_END_DOWNLINK_PDU(pdu, pinfo, tetra_sub_tree, NULL);
9550
0
        else
9551
0
          dissect_MAC_END_UPLINK_PDU(pdu, pinfo, tetra_sub_tree, NULL);
9552
9553
0
      } else
9554
0
        dissect_MAC_FRAG_PDU(pdu, pinfo, tetra_sub_tree, NULL);
9555
0
      break;
9556
0
    case 2:
9557
0
      dissect_MAC_ACCESS_DEFINE_PDU(pdu, pinfo, tetra_sub_tree, NULL);
9558
0
      break;
9559
1
    }
9560
1
    break;
9561
2
  case TETRA_CHAN_SCH_D:
9562
2
    p = tvb_get_uint8(pdu, 0);
9563
2
    switch(p >> 6) {
9564
2
    case 0:
9565
2
      dissect_MAC_RESOURCE_PDU(pdu, pinfo, tetra_sub_tree, NULL);
9566
2
      break;
9567
0
    case 1: /* MAC-FRAG or MAC-END */
9568
0
      if((p >> 5) == 3)
9569
0
        dissect_MAC_END_DOWN111_PDU(pdu, pinfo, tetra_sub_tree, NULL);
9570
0
      else
9571
0
        dissect_MAC_FRAG120_PDU(pdu, pinfo, tetra_sub_tree, NULL);
9572
0
    break;
9573
0
    case 2:
9574
0
      dissect_MAC_ACCESS_DEFINE_PDU(pdu, pinfo, tetra_sub_tree, NULL);
9575
0
      break;
9576
2
    }
9577
2
    break;
9578
2
  case TETRA_CHAN_SCH_HU:
9579
0
    p = tvb_get_uint8(pdu, 0);
9580
0
    switch(p >> 7) {
9581
0
    case 0: /* MAC-ACCESS */
9582
0
      dissect_MAC_ACCESS_PDU(pdu, pinfo, tetra_sub_tree, NULL);
9583
0
      break;
9584
0
    case 1: /* MAC-END-HU */
9585
0
      dissect_MAC_END_HU_PDU(pdu, pinfo, tetra_sub_tree, NULL);
9586
0
      break;
9587
0
    }
9588
0
    break;
9589
0
  case TETRA_CHAN_BSCH:
9590
0
    col_append_sep_str(pinfo->cinfo, COL_INFO, NULL, "BSCH");
9591
0
    dissect_BSCH_PDU(pdu, pinfo, tetra_sub_tree, NULL);
9592
0
    break;
9593
0
  case TETRA_CHAN_BNCH:
9594
0
    col_append_sep_str(pinfo->cinfo, COL_INFO, NULL, "BNCH");
9595
0
    dissect_BNCH_PDU(pdu, pinfo, tetra_sub_tree, NULL);
9596
0
    break;
9597
0
  case TETRA_CHAN_STCH:
9598
0
    p = tvb_get_uint8(pdu, 0);
9599
0
    switch(p >> 6) {
9600
0
    case 0:
9601
0
      dissect_MAC_RESOURCE_PDU(pdu, pinfo, tetra_sub_tree, NULL);
9602
0
      break;
9603
0
    case 1: /* MAC-FRAG or MAC-END */
9604
0
      if((p >> 5) == 3) {
9605
0
        if (dir == TETRA_DOWNLINK)
9606
0
          dissect_MAC_END_DOWN111_PDU(pdu, pinfo, tetra_sub_tree, NULL);
9607
0
        else
9608
0
          dissect_MAC_END_UP114_PDU(pdu, pinfo, tetra_sub_tree, NULL);
9609
0
      } else
9610
0
        dissect_MAC_FRAG120_PDU(pdu, pinfo, tetra_sub_tree, NULL);
9611
0
      break;
9612
0
    case 2:
9613
0
      dissect_MAC_ACCESS_DEFINE_PDU(pdu, pinfo, tetra_sub_tree, NULL);
9614
0
      break;
9615
0
    }
9616
0
    break;
9617
0
  case TETRA_CHAN_TCH_F:
9618
0
    col_append_sep_str(pinfo->cinfo, COL_INFO, NULL, "Voice");
9619
0
    break;
9620
3
  }
9621
3
}
9622
9623
static void dissect_tetra_UNITDATA_IND(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tetra_tree, int offset)
9624
1
{
9625
1
  uint32_t rxreg = 0;
9626
1
  uint32_t channels = 0, i;
9627
1
  uint32_t channel_type;
9628
1
  int pdu_offset = 0;
9629
1
  proto_item *tetra_sub_item;
9630
1
  proto_tree *tetra_header_tree = NULL;
9631
1
  tvbuff_t *payload_tvb;
9632
9633
  /* Length */
9634
1
  rxreg = tvb_get_letohl(tvb, offset);
9635
1
  proto_tree_add_uint(tetra_tree, hf_tetra_len0, tvb, offset, 4, rxreg);
9636
9637
  /* RvSteR */
9638
1
  offset += 4;
9639
1
  rxreg = tvb_get_letohl(tvb, offset);
9640
1
  proto_tree_add_uint(tetra_tree, hf_tetra_rvstr, tvb, offset, 4, rxreg);
9641
9642
  /* Logical channels */
9643
1
  channels = rxreg & 0x3;
9644
1
  tetra_sub_item = proto_tree_add_uint( tetra_tree, hf_tetra_channels, tvb, offset, 4, channels );
9645
1
  tetra_header_tree = proto_item_add_subtree(tetra_sub_item, ett_tetra);
9646
1
  if (channels > 3) {
9647
0
    expert_add_info(pinfo, tetra_sub_item, &ei_tetra_channels_incorrect);
9648
0
    channels = 3;
9649
0
  }
9650
9651
1
  pdu_offset = offset + 4;
9652
4
  for(i = 0; i < channels; i++) {
9653
3
    int byte_len, bits_len, remaining_bits;
9654
3
    int hf_channel[3];
9655
9656
3
    hf_channel[0] = hf_tetra_rxchannel1;
9657
3
    hf_channel[1] = hf_tetra_rxchannel2;
9658
3
    hf_channel[2] = hf_tetra_rxchannel3;
9659
9660
    /* Channel type */
9661
3
    channel_type = (rxreg >> ((i + 1) * 4) ) & 0xf;
9662
3
    proto_tree_add_uint( tetra_header_tree, hf_channel[i], tvb, offset, 4, channel_type);
9663
9664
    /* CRC */
9665
3
    proto_tree_add_boolean( tetra_header_tree, hf_tetra_crc, tvb, offset, 4, !(rxreg >> (i + 2) & 0x01));
9666
9667
    /* PDU */
9668
3
    bits_len = get_rx_pdu_length(channel_type);
9669
3
    byte_len = bits_len >> 3;
9670
3
    remaining_bits = bits_len % 8;
9671
3
    if ((remaining_bits)!=0)
9672
3
      byte_len++;
9673
9674
3
    payload_tvb = tvb_new_subset_length(tvb, pdu_offset, byte_len);
9675
3
    tetra_dissect_pdu(channel_type, TETRA_UPLINK, payload_tvb, tetra_header_tree, pinfo);
9676
9677
3
    if ((remaining_bits)!=0)
9678
3
      byte_len--;
9679
3
    pdu_offset += byte_len;
9680
3
  }
9681
1
}
9682
9683
static void dissect_tetra_UNITDATA_REQ(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tetra_tree, int offset)
9684
0
{
9685
0
  uint32_t txreg = 0;
9686
0
  uint32_t channels = 0, i;
9687
0
  uint32_t channel_type;
9688
0
  int pdu_offset = 0;
9689
0
  proto_item *tetra_sub_item = NULL;
9690
0
  proto_tree *tetra_header_tree = NULL;
9691
0
  tvbuff_t *payload_tvb;
9692
9693
  /* TxR */
9694
0
  txreg = tvb_get_letohl(tvb, offset);
9695
0
  proto_tree_add_uint(tetra_tree, hf_tetra_txreg, tvb, offset, 4, txreg);
9696
9697
  /* Logical channels */
9698
0
  channels = (txreg & 0x3) + 1;
9699
0
  tetra_sub_item = proto_tree_add_uint( tetra_tree, hf_tetra_channels, tvb, offset, 4, channels );
9700
0
  tetra_header_tree = proto_item_add_subtree(tetra_sub_item, ett_tetra);
9701
0
  txreg >>= 2;
9702
  /* Skip 0000B */
9703
0
  if(channels == 2)
9704
0
    txreg >>= 4;
9705
9706
0
  if (channels > 3) {
9707
0
    expert_add_info(pinfo, tetra_sub_item, &ei_tetra_channels_incorrect);
9708
0
    channels = 3;
9709
0
  }
9710
9711
0
  pdu_offset = offset + 4;
9712
0
  for(i = 0; i < channels; i++) {
9713
0
    int byte_len, bits_len, remaining_bits;
9714
0
    int hf_channel[3];
9715
9716
0
    hf_channel[0] = hf_tetra_channel1;
9717
0
    hf_channel[1] = hf_tetra_channel2;
9718
0
    hf_channel[2] = hf_tetra_channel3;
9719
9720
0
    channel_type = txreg & 0xf;
9721
0
    proto_tree_add_uint( tetra_header_tree, hf_channel[i], tvb, offset, 4, channel_type);
9722
0
    txreg >>= 4;
9723
    /* PDU */
9724
0
    bits_len = get_tx_pdu_length(channel_type);
9725
0
    byte_len = bits_len >> 3;
9726
0
    remaining_bits = bits_len % 8;
9727
0
    if ((remaining_bits)!=0)
9728
0
        byte_len++;
9729
9730
0
    payload_tvb = tvb_new_subset_length(tvb, pdu_offset, byte_len);
9731
0
    tetra_dissect_pdu(channel_type, TETRA_DOWNLINK, payload_tvb, tetra_header_tree, pinfo);
9732
0
    pdu_offset += byte_len;
9733
0
  }
9734
0
}
9735
9736
static int
9737
dissect_tetra(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
9738
1
{
9739
1
  proto_item *tetra_item = NULL;
9740
1
  proto_item *tetra_sub_item = NULL;
9741
1
  proto_tree *tetra_tree = NULL;
9742
1
  proto_tree *tetra_header_tree = NULL;
9743
1
  uint16_t type = 0;
9744
1
  uint8_t carriernumber = -1;
9745
9746
1
  col_set_str(pinfo->cinfo, COL_PROTOCOL, "TETRA");
9747
  /* Clear out stuff in the info column */
9748
1
  col_clear(pinfo->cinfo,COL_INFO);
9749
9750
  /*
9751
   * This is not a good way of dissecting packets.  The tvb length should
9752
   * be sanity checked so we aren't going past the actual size of the buffer.
9753
   */
9754
1
  type = tvb_get_uint8(tvb, 0);
9755
9756
1
  if(include_carrier_number) {
9757
1
    carriernumber = tvb_get_uint8(tvb, 1);
9758
1
  }
9759
9760
9761
1
  switch(type) {
9762
0
  case 1:
9763
0
    if(include_carrier_number)
9764
0
      col_add_fstr(pinfo->cinfo, COL_INFO, "Tetra-UNITDATA-REQ, Carrier: %d",
9765
0
          carriernumber);
9766
0
    else
9767
0
      col_set_str(pinfo->cinfo, COL_INFO, "Tetra-UNITDATA-REQ");
9768
0
    break;
9769
1
  case 2:
9770
1
    if(include_carrier_number)
9771
1
      col_add_fstr(pinfo->cinfo, COL_INFO, "Tetra-UNITDATA-IND, Carrier: %d",
9772
1
          carriernumber);
9773
0
    else
9774
0
      col_set_str(pinfo->cinfo, COL_INFO, "Tetra-UNITDATA-IND");
9775
1
    break;
9776
0
  case 3:
9777
0
    if(include_carrier_number)
9778
0
      col_add_fstr(pinfo->cinfo, COL_INFO, "MAC-Timer, Carrier: %d",
9779
0
          carriernumber);
9780
0
    else
9781
0
      col_set_str(pinfo->cinfo, COL_INFO, "MAC-Timer");
9782
0
    break;
9783
0
  case 127:
9784
0
    if(include_carrier_number)
9785
0
      col_add_fstr(pinfo->cinfo, COL_INFO, "Tetra-UNITDATA-IND Done, Carrier: %d",
9786
0
          carriernumber);
9787
0
    else
9788
0
      col_set_str(pinfo->cinfo, COL_INFO, "Tetra-UNITDATA-IND Done");
9789
0
    break;
9790
0
  case 128:
9791
0
    if(include_carrier_number)
9792
0
      col_add_fstr(pinfo->cinfo, COL_INFO, "Tetra-UNITDATA-REQ Done, Carrier: %d",
9793
0
          carriernumber);
9794
0
    else
9795
0
      col_set_str(pinfo->cinfo, COL_INFO, "Tetra-UNITDATA-REQ Done");
9796
0
    break;
9797
0
  default:
9798
0
    col_add_fstr(pinfo->cinfo, COL_INFO, "Unknown command: %d", type);
9799
0
    break;
9800
1
  }
9801
9802
1
  /* if (tree) */ { /* we are being asked for details */
9803
1
    uint32_t offset = 0;
9804
1
    uint32_t txtimer = 0;
9805
1
    uint32_t tslot = 0;
9806
9807
1
    tetra_item = proto_tree_add_item(tree, proto_tetra, tvb, 0, -1, ENC_NA);
9808
1
    tetra_tree = proto_item_add_subtree(tetra_item, ett_tetra);
9809
9810
1
    offset ++;
9811
9812
    /* Carrier number */
9813
1
    if(include_carrier_number) {
9814
1
      proto_tree_add_uint(tetra_tree, hf_tetra_carriernumber, tvb, offset, 1, carriernumber);
9815
1
      offset ++;
9816
1
    }
9817
9818
    /* Registers */
9819
1
    tetra_sub_item = proto_tree_add_item( tetra_tree, hf_tetra_header, tvb, offset, -1, ENC_NA );
9820
1
    tetra_header_tree = proto_item_add_subtree(tetra_sub_item, ett_tetra);
9821
9822
    /* Timer */
9823
1
    txtimer = tvb_get_letohl(tvb, offset);
9824
1
    tetra_sub_item = proto_tree_add_item(tetra_header_tree, hf_tetra_timer, tvb, offset, 4, ENC_LITTLE_ENDIAN);
9825
1
    tslot = ((txtimer & 0x7800) >> 11);
9826
1
    if(tslot==4)
9827
0
      tslot = 3;
9828
1
    if(tslot==8)
9829
0
      tslot = 4;
9830
1
    proto_item_append_text(tetra_sub_item, " (Multiple frame: %d, Frame: %d, Slot: %d)",
9831
1
                          txtimer & 0x3F, (txtimer & 0x7c0) >> 6,
9832
1
                          tslot);
9833
9834
1
    offset += 4;
9835
9836
1
    switch(type) {
9837
0
    case 1: /* tetra-UNITDATA-REQ */
9838
0
    case 128: /* tetra-UNITDATA-REQ Done */
9839
0
      dissect_tetra_UNITDATA_REQ(tvb, pinfo, tetra_header_tree, offset);
9840
0
      break;
9841
1
    case 2: /* tetra-UNITDATA-IND */
9842
1
    case 127: /* tetra-UNITDATA-IND Done */
9843
1
      dissect_tetra_UNITDATA_IND(tvb, pinfo, tetra_header_tree, offset);
9844
1
      break;
9845
0
    case 3: /* MAC-Timer */
9846
0
      break;
9847
0
    default:
9848
0
      break;
9849
1
    }
9850
1
  }
9851
1
  return tvb_captured_length(tvb);
9852
1
}
9853
9854
void proto_reg_handoff_tetra(void)
9855
16
{
9856
16
  dissector_add_uint_with_preference("udp.port", TETRA_UDP_PORT, tetra_handle);
9857
16
}
9858
9859
9860
void proto_register_tetra (void)
9861
16
{
9862
16
  module_t *tetra_module;
9863
16
  expert_module_t* expert_tetra;
9864
9865
  /*
9866
   * A header field is something you can search/filter on.
9867
   *
9868
   * We create a structure to register our fields. It consists of an
9869
   * array of hf_register_info structures, each of which are of the format
9870
   * {&(field id), {name, abbrev, type, display, strings, bitmask, blurb, HFILL}}.
9871
   */
9872
16
  static hf_register_info hf[] = {
9873
16
    { &hf_tetra_header,
9874
16
    { "Registers", "tetra.header", FT_NONE, BASE_NONE, NULL, 0x0,
9875
16
     "TETRA Registers", HFILL }},
9876
16
    { &hf_tetra_channels,
9877
16
    { "Logical Channels", "tetra.channels", FT_UINT8, BASE_DEC, NULL, 0x0,
9878
16
    "The amount of logical channels", HFILL }},
9879
16
    { &hf_tetra_channel1,
9880
16
    { "Channel 1", "tetra.txchannel1", FT_UINT8, BASE_DEC, VALS(channeltypenames), 0x0,
9881
16
    "Logical channels type", HFILL }},
9882
16
    { &hf_tetra_channel2,
9883
16
    { "Channel 2", "tetra.txchannel2", FT_UINT8, BASE_DEC, VALS(channeltypenames), 0x0,
9884
16
    "Logical channels type", HFILL }},
9885
16
    { &hf_tetra_channel3,
9886
16
    { "Channel 3", "tetra.txchannel3", FT_UINT8, BASE_DEC, VALS(channeltypenames), 0x0,
9887
16
    "Logical channels type", HFILL }},
9888
16
    { &hf_tetra_txreg,
9889
16
    { "TxR", "tetra.txreg", FT_UINT32, BASE_HEX, NULL, 0x0,
9890
16
     "TX Register", HFILL }},
9891
16
    { &hf_tetra_rvstr,
9892
16
    { "RvSteR", "tetra.rvster", FT_UINT32, BASE_HEX, NULL, 0x0,
9893
16
     "Receive Status Register", HFILL }},
9894
16
    { &hf_tetra_carriernumber,
9895
16
    { "Carrier Number", "tetra.carrier", FT_UINT8, BASE_DEC, NULL, 0x0,
9896
16
     NULL, HFILL }},
9897
16
    { &hf_tetra_rxchannel1,
9898
16
    { "Channel 1", "tetra.rxchannel1", FT_UINT8, BASE_DEC, VALS(recvchanneltypenames), 0x0,
9899
16
    "Logical channels type", HFILL }},
9900
16
    { &hf_tetra_rxchannel2,
9901
16
    { "Channel 2", "tetra.rxchannel2", FT_UINT8, BASE_DEC, VALS(recvchanneltypenames), 0x0,
9902
16
    "Logical channels type", HFILL }},
9903
16
    { &hf_tetra_rxchannel3,
9904
16
    { "Channel 3", "tetra.rxchannel3", FT_UINT8, BASE_DEC, VALS(recvchanneltypenames), 0x0,
9905
16
    "Logical channels type", HFILL }},
9906
16
    { &hf_tetra_timer,
9907
16
    { "Timer", "tetra.timer", FT_UINT32, BASE_HEX, NULL, 0x0,
9908
16
     "Timer Register", HFILL }},
9909
16
    { &hf_tetra_crc,
9910
16
    { "CRC", "tetra.crc", FT_BOOLEAN, BASE_NONE, NULL, 0x0,
9911
16
     "CRC result", HFILL }},
9912
16
    { &hf_tetra_len0,
9913
16
    { "Length", "tetra.len0", FT_UINT32, BASE_DEC, NULL, 0x0,
9914
16
     "Length of the PDU", HFILL }},
9915
16
    { &hf_tetra_pdu,
9916
16
    { "PDU", "tetra.pdu", FT_BYTES, BASE_NONE, NULL, 0x0,
9917
16
     NULL, HFILL }} ,
9918
9919
16
    { &hf_tetra_AACH_PDU,
9920
16
      { "AACH", "tetra.AACH_element",
9921
16
        FT_NONE, BASE_NONE, NULL, 0,
9922
16
        NULL, HFILL }},
9923
16
    { &hf_tetra_BSCH_PDU,
9924
16
      { "BSCH", "tetra.BSCH_element",
9925
16
        FT_NONE, BASE_NONE, NULL, 0,
9926
16
        NULL, HFILL }},
9927
16
    { &hf_tetra_BNCH_PDU,
9928
16
      { "BNCH", "tetra.BNCH_element",
9929
16
        FT_NONE, BASE_NONE, NULL, 0,
9930
16
        NULL, HFILL }},
9931
16
    { &hf_tetra_MAC_ACCESS_PDU,
9932
16
      { "MAC-ACCESS", "tetra.MAC_ACCESS_element",
9933
16
        FT_NONE, BASE_NONE, NULL, 0,
9934
16
        NULL, HFILL }},
9935
16
    { &hf_tetra_MAC_DATA_PDU,
9936
16
      { "MAC-DATA", "tetra.MAC_DATA_element",
9937
16
        FT_NONE, BASE_NONE, NULL, 0,
9938
16
        NULL, HFILL }},
9939
16
    { &hf_tetra_MAC_FRAG_PDU,
9940
16
      { "MAC-FRAG", "tetra.MAC_FRAG_element",
9941
16
        FT_NONE, BASE_NONE, NULL, 0,
9942
16
        NULL, HFILL }},
9943
16
    { &hf_tetra_MAC_FRAG120_PDU,
9944
16
      { "MAC-FRAG120", "tetra.MAC_FRAG120_element",
9945
16
        FT_NONE, BASE_NONE, NULL, 0,
9946
16
        NULL, HFILL }},
9947
16
    { &hf_tetra_MAC_END_UPLINK_PDU,
9948
16
      { "MAC-END-UPLINK", "tetra.MAC_END_UPLINK_element",
9949
16
        FT_NONE, BASE_NONE, NULL, 0,
9950
16
        NULL, HFILL }},
9951
16
    { &hf_tetra_MAC_END_UP114_PDU,
9952
16
      { "MAC-END-UP114", "tetra.MAC_END_UP114_element",
9953
16
        FT_NONE, BASE_NONE, NULL, 0,
9954
16
        NULL, HFILL }},
9955
16
    { &hf_tetra_MAC_END_HU_PDU,
9956
16
      { "MAC-END-HU", "tetra.MAC_END_HU_element",
9957
16
        FT_NONE, BASE_NONE, NULL, 0,
9958
16
        NULL, HFILL }},
9959
16
    { &hf_tetra_MAC_END_DOWNLINK_PDU,
9960
16
      { "MAC-END-DOWNLINK", "tetra.MAC_END_DOWNLINK_element",
9961
16
        FT_NONE, BASE_NONE, NULL, 0,
9962
16
        NULL, HFILL }},
9963
16
    { &hf_tetra_MAC_END_DOWN111_PDU,
9964
16
      { "MAC-END-DOWN111", "tetra.MAC_END_DOWN111_element",
9965
16
        FT_NONE, BASE_NONE, NULL, 0,
9966
16
        NULL, HFILL }},
9967
16
    { &hf_tetra_MAC_RESOURCE_PDU,
9968
16
      { "MAC-RESOURCE", "tetra.MAC_RESOURCE_element",
9969
16
        FT_NONE, BASE_NONE, NULL, 0,
9970
16
        NULL, HFILL }},
9971
16
    { &hf_tetra_MAC_ACCESS_DEFINE_PDU,
9972
16
      { "MAC-ACCESS-DEFINE", "tetra.MAC_ACCESS_DEFINE_element",
9973
16
        FT_NONE, BASE_NONE, NULL, 0,
9974
16
        NULL, HFILL }},
9975
16
    { &hf_tetra_function,
9976
16
      { "function", "tetra.function",
9977
16
        FT_UINT32, BASE_DEC, NULL, 0,
9978
16
        "INTEGER_0_3", HFILL }},
9979
16
    { &hf_tetra_field1,
9980
16
      { "field1", "tetra.field1",
9981
16
        FT_UINT32, BASE_DEC, NULL, 0,
9982
16
        "INTEGER_0_63", HFILL }},
9983
16
    { &hf_tetra_field2,
9984
16
      { "field2", "tetra.field2",
9985
16
        FT_UINT32, BASE_DEC, NULL, 0,
9986
16
        "INTEGER_0_63", HFILL }},
9987
16
    { &hf_tetra_system_code,
9988
16
      { "system-code", "tetra.system_code",
9989
16
        FT_UINT32, BASE_DEC, VALS(tetra_System_Code_vals), 0,
9990
16
        NULL, HFILL }},
9991
16
    { &hf_tetra_colour_code,
9992
16
      { "colour-code", "tetra.colour_code",
9993
16
        FT_UINT32, BASE_DEC|BASE_EXT_STRING, &tetra_Colour_Code_vals_ext, 0,
9994
16
        NULL, HFILL }},
9995
16
    { &hf_tetra_timeslot_number,
9996
16
      { "timeslot-number", "tetra.timeslot_number",
9997
16
        FT_UINT32, BASE_DEC, VALS(tetra_Timeslot_Number_vals), 0,
9998
16
        NULL, HFILL }},
9999
16
    { &hf_tetra_frame_number,
10000
16
      { "frame-number", "tetra.frame_number",
10001
16
        FT_UINT32, BASE_DEC, VALS(tetra_Frame_Number_vals), 0,
10002
16
        NULL, HFILL }},
10003
16
    { &hf_tetra_multiple_frame_number,
10004
16
      { "multiple-frame-number", "tetra.multiple_frame_number",
10005
16
        FT_UINT32, BASE_DEC|BASE_EXT_STRING, &tetra_Multiple_Frame_Number_vals_ext, 0,
10006
16
        NULL, HFILL }},
10007
16
    { &hf_tetra_sharing_mod,
10008
16
      { "sharing-mod", "tetra.sharing_mod",
10009
16
        FT_UINT32, BASE_DEC, VALS(tetra_Sharing_Mod_vals), 0,
10010
16
        NULL, HFILL }},
10011
16
    { &hf_tetra_ts_reserved_frames,
10012
16
      { "ts-reserved-frames", "tetra.ts_reserved_frames",
10013
16
        FT_UINT32, BASE_DEC, VALS(tetra_TS_Reserved_Frames_vals), 0,
10014
16
        NULL, HFILL }},
10015
16
    { &hf_tetra_u_plane_dtx,
10016
16
      { "u-plane-dtx", "tetra.u_plane_dtx",
10017
16
        FT_UINT32, BASE_DEC, VALS(tetra_U_Plane_DTX_vals), 0,
10018
16
        NULL, HFILL }},
10019
16
    { &hf_tetra_frame_18_extension,
10020
16
      { "frame-18-extension", "tetra.frame_18_extension",
10021
16
        FT_UINT32, BASE_DEC, VALS(tetra_Frame_18_Extension_vals), 0,
10022
16
        NULL, HFILL }},
10023
16
    { &hf_tetra_reserved,
10024
16
      { "reserved", "tetra.reserved",
10025
16
        FT_UINT32, BASE_DEC, VALS(tetra_Reserved_vals), 0,
10026
16
        NULL, HFILL }},
10027
16
    { &hf_tetra_tm_sdu,
10028
16
      { "tm-sdu", "tetra.tm_sdu_element",
10029
16
        FT_NONE, BASE_NONE, NULL, 0,
10030
16
        "MLE_Sync", HFILL }},
10031
16
    { &hf_tetra_mcc,
10032
16
      { "mcc", "tetra.mcc",
10033
16
        FT_UINT32, BASE_DEC, NULL, 0,
10034
16
        "INTEGER_0_1023", HFILL }},
10035
16
    { &hf_tetra_mnc,
10036
16
      { "mnc", "tetra.mnc",
10037
16
        FT_UINT32, BASE_DEC, NULL, 0,
10038
16
        "INTEGER_0_16383", HFILL }},
10039
16
    { &hf_tetra_neighbour_cell_broadcast,
10040
16
      { "neighbour-cell-broadcast", "tetra.neighbour_cell_broadcast",
10041
16
        FT_UINT32, BASE_DEC, NULL, 0,
10042
16
        "INTEGER_0_3", HFILL }},
10043
16
    { &hf_tetra_cell_service_level,
10044
16
      { "cell-service-level", "tetra.cell_service_level",
10045
16
        FT_UINT32, BASE_DEC, NULL, 0,
10046
16
        "INTEGER_0_3", HFILL }},
10047
16
    { &hf_tetra_late_entry_information,
10048
16
      { "late-entry-information", "tetra.late_entry_information",
10049
16
        FT_UINT32, BASE_DEC, NULL, 0,
10050
16
        "INTEGER_0_1", HFILL }},
10051
16
    { &hf_tetra_pdu_type,
10052
16
      { "pdu-type", "tetra.pdu_type",
10053
16
        FT_UINT32, BASE_DEC, NULL, 0,
10054
16
        "INTEGER_0_3", HFILL }},
10055
16
    { &hf_tetra_broadcast_type,
10056
16
      { "broadcast-type", "tetra.broadcast_type",
10057
16
        FT_UINT32, BASE_DEC, NULL, 0,
10058
16
        "INTEGER_0_3", HFILL }},
10059
16
    { &hf_tetra_main_carrier,
10060
16
      { "main-carrier", "tetra.main_carrier",
10061
16
        FT_UINT32, BASE_DEC, NULL, 0,
10062
16
        "INTEGER_0_4095", HFILL }},
10063
16
    { &hf_tetra_frequency_band,
10064
16
      { "frequency-band", "tetra.frequency_band",
10065
16
        FT_UINT32, BASE_DEC, NULL, 0,
10066
16
        "INTEGER_0_15", HFILL }},
10067
16
    { &hf_tetra_offset,
10068
16
      { "offset", "tetra.offset",
10069
16
        FT_UINT32, BASE_DEC, VALS(tetra_Offset_vals), 0,
10070
16
        NULL, HFILL }},
10071
16
    { &hf_tetra_duplex_spacing,
10072
16
      { "duplex-spacing", "tetra.duplex_spacing",
10073
16
        FT_UINT32, BASE_DEC, NULL, 0,
10074
16
        "INTEGER_0_7", HFILL }},
10075
16
    { &hf_tetra_reverse_operation,
10076
16
      { "reverse-operation", "tetra.reverse_operation",
10077
16
        FT_UINT32, BASE_DEC, VALS(tetra_Reverse_Operation_vals), 0,
10078
16
        NULL, HFILL }},
10079
16
    { &hf_tetra_sencond_ctl_carrier,
10080
16
      { "sencond-ctl-carrier", "tetra.sencond_ctl_carrier",
10081
16
        FT_UINT32, BASE_DEC, VALS(tetra_Sencond_Ctl_Carrier_vals), 0,
10082
16
        NULL, HFILL }},
10083
16
    { &hf_tetra_ms_txpwr_max_cell,
10084
16
      { "ms-txpwr-max-cell", "tetra.ms_txpwr_max_cell",
10085
16
        FT_UINT32, BASE_DEC, VALS(tetra_MS_TXPWR_MAX_CELL_vals), 0,
10086
16
        NULL, HFILL }},
10087
16
    { &hf_tetra_rxlev_access_min,
10088
16
      { "rxlev-access-min", "tetra.rxlev_access_min",
10089
16
        FT_UINT32, BASE_DEC, VALS(tetra_RXLEV_ACCESS_MIN_vals), 0,
10090
16
        NULL, HFILL }},
10091
16
    { &hf_tetra_access_parameter,
10092
16
      { "access-parameter", "tetra.access_parameter",
10093
16
        FT_UINT32, BASE_DEC, VALS(tetra_ACCESS_PARAMETER_vals), 0,
10094
16
        NULL, HFILL }},
10095
16
    { &hf_tetra_radio_downlink_timeout,
10096
16
      { "radio-downlink-timeout", "tetra.radio_downlink_timeout",
10097
16
        FT_UINT32, BASE_DEC, VALS(tetra_RADIO_DOWNLINK_TIMEOUT_vals), 0,
10098
16
        NULL, HFILL }},
10099
16
    { &hf_tetra_hyperframe_or_cck,
10100
16
      { "hyperframe-or-cck", "tetra.hyperframe_or_cck",
10101
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_hyperframe_or_cck_vals), 0,
10102
16
        NULL, HFILL }},
10103
16
    { &hf_tetra_hyperframe,
10104
16
      { "hyperframe", "tetra.hyperframe",
10105
16
        FT_UINT32, BASE_DEC, NULL, 0,
10106
16
        "INTEGER_0_65535", HFILL }},
10107
16
    { &hf_tetra_cckid,
10108
16
      { "cckid", "tetra.cckid",
10109
16
        FT_UINT32, BASE_DEC, NULL, 0,
10110
16
        "INTEGER_0_65535", HFILL }},
10111
16
    { &hf_tetra_optional_params,
10112
16
      { "optional-params", "tetra.optional_params",
10113
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_optional_params_vals), 0,
10114
16
        NULL, HFILL }},
10115
16
    { &hf_tetra_even_multiframe,
10116
16
      { "even-multiframe", "tetra.even_multiframe_element",
10117
16
        FT_NONE, BASE_NONE, NULL, 0,
10118
16
        "TS_COMMON_FRAMES", HFILL }},
10119
16
    { &hf_tetra_odd_multiframe,
10120
16
      { "odd-multiframe", "tetra.odd_multiframe_element",
10121
16
        FT_NONE, BASE_NONE, NULL, 0,
10122
16
        "TS_COMMON_FRAMES", HFILL }},
10123
16
    { &hf_tetra_access_a_code,
10124
16
      { "access-a-code", "tetra.access_a_code_element",
10125
16
        FT_NONE, BASE_NONE, NULL, 0,
10126
16
        "Default_Code_A", HFILL }},
10127
16
    { &hf_tetra_extend_service,
10128
16
      { "extend-service", "tetra.extend_service_element",
10129
16
        FT_NONE, BASE_NONE, NULL, 0,
10130
16
        "Extended_Services_Broadcast", HFILL }},
10131
16
    { &hf_tetra_la,
10132
16
      { "la", "tetra.la",
10133
16
        FT_UINT32, BASE_DEC, NULL, 0,
10134
16
        "INTEGER_0_16383", HFILL }},
10135
16
    { &hf_tetra_subscriber_class,
10136
16
      { "subscriber-class", "tetra.subscriber_class",
10137
16
        FT_BYTES, BASE_NONE, NULL, 0,
10138
16
        NULL, HFILL }},
10139
16
    { &hf_tetra_registriation,
10140
16
      { "registriation", "tetra.registriation",
10141
16
        FT_UINT32, BASE_DEC, NULL, 0,
10142
16
        "INTEGER_0_1", HFILL }},
10143
16
    { &hf_tetra_de_registration,
10144
16
      { "de-registration", "tetra.de_registration",
10145
16
        FT_UINT32, BASE_DEC, NULL, 0,
10146
16
        "INTEGER_0_1", HFILL }},
10147
16
    { &hf_tetra_priority_cell,
10148
16
      { "priority-cell", "tetra.priority_cell",
10149
16
        FT_UINT32, BASE_DEC, NULL, 0,
10150
16
        "INTEGER_0_1", HFILL }},
10151
16
    { &hf_tetra_minimum_mode_service,
10152
16
      { "minimum-mode-service", "tetra.minimum_mode_service",
10153
16
        FT_UINT32, BASE_DEC, NULL, 0,
10154
16
        "INTEGER_0_1", HFILL }},
10155
16
    { &hf_tetra_migration,
10156
16
      { "migration", "tetra.migration",
10157
16
        FT_UINT32, BASE_DEC, NULL, 0,
10158
16
        "INTEGER_0_1", HFILL }},
10159
16
    { &hf_tetra_system_wide_service,
10160
16
      { "system-wide-service", "tetra.system_wide_service",
10161
16
        FT_UINT32, BASE_DEC, NULL, 0,
10162
16
        "INTEGER_0_1", HFILL }},
10163
16
    { &hf_tetra_tetra_voice_service,
10164
16
      { "tetra-voice-service", "tetra.tetra_voice_service",
10165
16
        FT_UINT32, BASE_DEC, NULL, 0,
10166
16
        "INTEGER_0_1", HFILL }},
10167
16
    { &hf_tetra_circuit_mode_data_service,
10168
16
      { "circuit-mode-data-service", "tetra.circuit_mode_data_service",
10169
16
        FT_UINT32, BASE_DEC, NULL, 0,
10170
16
        "INTEGER_0_1", HFILL }},
10171
16
    { &hf_tetra_reserved_01,
10172
16
      { "reserved", "tetra.reserved",
10173
16
        FT_UINT32, BASE_DEC, NULL, 0,
10174
16
        "INTEGER_0_1", HFILL }},
10175
16
    { &hf_tetra_sndcp_service,
10176
16
      { "sndcp-service", "tetra.sndcp_service",
10177
16
        FT_UINT32, BASE_DEC, NULL, 0,
10178
16
        "INTEGER_0_1", HFILL }},
10179
16
    { &hf_tetra_air_interface_encryption,
10180
16
      { "air-interface-encryption", "tetra.air_interface_encryption",
10181
16
        FT_UINT32, BASE_DEC, NULL, 0,
10182
16
        "INTEGER_0_1", HFILL }},
10183
16
    { &hf_tetra_advanced_link_support,
10184
16
      { "advanced-link-support", "tetra.advanced_link_support",
10185
16
        FT_UINT32, BASE_DEC, NULL, 0,
10186
16
        "INTEGER_0_1", HFILL }},
10187
16
    { &hf_tetra_frame1,
10188
16
      { "frame1", "tetra.frame1",
10189
16
        FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
10190
16
        "FRAME", HFILL }},
10191
16
    { &hf_tetra_frame2,
10192
16
      { "frame2", "tetra.frame2",
10193
16
        FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
10194
16
        "FRAME", HFILL }},
10195
16
    { &hf_tetra_frame3,
10196
16
      { "frame3", "tetra.frame3",
10197
16
        FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
10198
16
        "FRAME", HFILL }},
10199
16
    { &hf_tetra_frame4,
10200
16
      { "frame4", "tetra.frame4",
10201
16
        FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
10202
16
        "FRAME", HFILL }},
10203
16
    { &hf_tetra_frame5,
10204
16
      { "frame5", "tetra.frame5",
10205
16
        FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
10206
16
        "FRAME", HFILL }},
10207
16
    { &hf_tetra_frame6,
10208
16
      { "frame6", "tetra.frame6",
10209
16
        FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
10210
16
        "FRAME", HFILL }},
10211
16
    { &hf_tetra_frame7,
10212
16
      { "frame7", "tetra.frame7",
10213
16
        FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
10214
16
        "FRAME", HFILL }},
10215
16
    { &hf_tetra_frame8,
10216
16
      { "frame8", "tetra.frame8",
10217
16
        FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
10218
16
        "FRAME", HFILL }},
10219
16
    { &hf_tetra_frame9,
10220
16
      { "frame9", "tetra.frame9",
10221
16
        FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
10222
16
        "FRAME", HFILL }},
10223
16
    { &hf_tetra_frame10,
10224
16
      { "frame10", "tetra.frame10",
10225
16
        FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
10226
16
        "FRAME", HFILL }},
10227
16
    { &hf_tetra_frame11,
10228
16
      { "frame11", "tetra.frame11",
10229
16
        FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
10230
16
        "FRAME", HFILL }},
10231
16
    { &hf_tetra_frame12,
10232
16
      { "frame12", "tetra.frame12",
10233
16
        FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
10234
16
        "FRAME", HFILL }},
10235
16
    { &hf_tetra_frame13,
10236
16
      { "frame13", "tetra.frame13",
10237
16
        FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
10238
16
        "FRAME", HFILL }},
10239
16
    { &hf_tetra_frame14,
10240
16
      { "frame14", "tetra.frame14",
10241
16
        FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
10242
16
        "FRAME", HFILL }},
10243
16
    { &hf_tetra_frame15,
10244
16
      { "frame15", "tetra.frame15",
10245
16
        FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
10246
16
        "FRAME", HFILL }},
10247
16
    { &hf_tetra_frame16,
10248
16
      { "frame16", "tetra.frame16",
10249
16
        FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
10250
16
        "FRAME", HFILL }},
10251
16
    { &hf_tetra_frame17,
10252
16
      { "frame17", "tetra.frame17",
10253
16
        FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
10254
16
        "FRAME", HFILL }},
10255
16
    { &hf_tetra_frame18,
10256
16
      { "frame18", "tetra.frame18",
10257
16
        FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
10258
16
        "FRAME", HFILL }},
10259
16
    { &hf_tetra_imm,
10260
16
      { "imm", "tetra.imm",
10261
16
        FT_UINT32, BASE_DEC, VALS(tetra_IMM_vals), 0,
10262
16
        NULL, HFILL }},
10263
16
    { &hf_tetra_wt,
10264
16
      { "wt", "tetra.wt",
10265
16
        FT_UINT32, BASE_DEC, VALS(tetra_WT_vals), 0,
10266
16
        NULL, HFILL }},
10267
16
    { &hf_tetra_nu,
10268
16
      { "nu", "tetra.nu",
10269
16
        FT_UINT32, BASE_DEC, VALS(tetra_NU_vals), 0,
10270
16
        NULL, HFILL }},
10271
16
    { &hf_tetra_frame_len_factor,
10272
16
      { "frame-len-factor", "tetra.frame_len_factor",
10273
16
        FT_UINT32, BASE_DEC, VALS(tetra_Frame_Len_Factor_vals), 0,
10274
16
        NULL, HFILL }},
10275
16
    { &hf_tetra_timeslot_pointer,
10276
16
      { "timeslot-pointer", "tetra.timeslot_pointer",
10277
16
        FT_UINT32, BASE_DEC, VALS(tetra_Timeslot_Pointer_vals), 0,
10278
16
        NULL, HFILL }},
10279
16
    { &hf_tetra_min_pdu_priority,
10280
16
      { "min-pdu-priority", "tetra.min_pdu_priority",
10281
16
        FT_UINT32, BASE_DEC, VALS(tetra_Min_Pdu_Priority_vals), 0,
10282
16
        NULL, HFILL }},
10283
16
    { &hf_tetra_security_information,
10284
16
      { "security-information", "tetra.security_information",
10285
16
        FT_UINT32, BASE_DEC, NULL, 0,
10286
16
        "INTEGER_0_255", HFILL }},
10287
16
    { &hf_tetra_sds_tl_addressing_method,
10288
16
      { "sds-tl-addressing-method", "tetra.sds_tl_addressing_method",
10289
16
        FT_UINT32, BASE_DEC, VALS(tetra_SDS_TL_Addressing_Method_vals), 0,
10290
16
        NULL, HFILL }},
10291
16
    { &hf_tetra_gck_supported,
10292
16
      { "gck-supported", "tetra.gck_supported",
10293
16
        FT_UINT32, BASE_DEC, NULL, 0,
10294
16
        "INTEGER_0_1", HFILL }},
10295
16
    { &hf_tetra_section,
10296
16
      { "section", "tetra.section",
10297
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_section_vals), 0,
10298
16
        NULL, HFILL }},
10299
16
    { &hf_tetra_present_1,
10300
16
      { "present-1", "tetra.present_1_element",
10301
16
        FT_NONE, BASE_NONE, NULL, 0,
10302
16
        "PRESENT1", HFILL }},
10303
16
    { &hf_tetra_present_2,
10304
16
      { "present-2", "tetra.present_2",
10305
16
        FT_UINT32, BASE_DEC, NULL, 0,
10306
16
        "INTEGER_0_127", HFILL }},
10307
16
    { &hf_tetra_present_3,
10308
16
      { "present-3", "tetra.present_3",
10309
16
        FT_UINT32, BASE_DEC, NULL, 0,
10310
16
        "INTEGER_0_127", HFILL }},
10311
16
    { &hf_tetra_present_4,
10312
16
      { "present-4", "tetra.present_4",
10313
16
        FT_UINT32, BASE_DEC, NULL, 0,
10314
16
        "INTEGER_0_127", HFILL }},
10315
16
    { &hf_tetra_data_priority_supported,
10316
16
      { "data-priority-supported", "tetra.data_priority_supported",
10317
16
        FT_UINT32, BASE_DEC, VALS(tetra_Data_Priority_Supported_vals), 0,
10318
16
        NULL, HFILL }},
10319
16
    { &hf_tetra_reserved_02,
10320
16
      { "reserved", "tetra.reserved",
10321
16
        FT_UINT32, BASE_DEC, NULL, 0,
10322
16
        "INTEGER_0_7", HFILL }},
10323
16
    { &hf_tetra_section_2_information,
10324
16
      { "section-2-information", "tetra.section_2_information",
10325
16
        FT_UINT32, BASE_DEC, VALS(tetra_Section_Information_vals), 0,
10326
16
        "Section_Information", HFILL }},
10327
16
    { &hf_tetra_section_3_information,
10328
16
      { "section-3-information", "tetra.section_3_information",
10329
16
        FT_UINT32, BASE_DEC, VALS(tetra_Section_Information_vals), 0,
10330
16
        "Section_Information", HFILL }},
10331
16
    { &hf_tetra_section_4_information,
10332
16
      { "section-4-information", "tetra.section_4_information",
10333
16
        FT_UINT32, BASE_DEC, VALS(tetra_Section_Information_vals), 0,
10334
16
        "Section_Information", HFILL }},
10335
16
    { &hf_tetra_pdu_type_01,
10336
16
      { "pdu-type", "tetra.pdu_type",
10337
16
        FT_UINT32, BASE_DEC, NULL, 0,
10338
16
        "INTEGER_0_1", HFILL }},
10339
16
    { &hf_tetra_fill_bit_indication,
10340
16
      { "fill-bit-indication", "tetra.fill_bit_indication",
10341
16
        FT_UINT32, BASE_DEC, VALS(tetra_Fill_Bit_Indication_vals), 0,
10342
16
        NULL, HFILL }},
10343
16
    { &hf_tetra_encrypted_flag,
10344
16
      { "encrypted-flag", "tetra.encrypted_flag",
10345
16
        FT_UINT32, BASE_DEC, VALS(tetra_Encrypted_Flag_vals), 0,
10346
16
        NULL, HFILL }},
10347
16
    { &hf_tetra_address,
10348
16
      { "address", "tetra.address",
10349
16
        FT_UINT32, BASE_DEC, VALS(tetra_Address_vals), 0,
10350
16
        NULL, HFILL }},
10351
16
    { &hf_tetra_data,
10352
16
      { "data", "tetra.data",
10353
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_data_vals), 0,
10354
16
        NULL, HFILL }},
10355
16
    { &hf_tetra_sdu1,
10356
16
      { "sdu1", "tetra.sdu1",
10357
16
        FT_UINT32, BASE_DEC, VALS(tetra_U_LLC_PDU_vals), 0,
10358
16
        "U_LLC_PDU", HFILL }},
10359
16
    { &hf_tetra_sdu2,
10360
16
      { "sdu2", "tetra.sdu2_element",
10361
16
        FT_NONE, BASE_NONE, NULL, 0,
10362
16
        "ComplexSDU", HFILL }},
10363
16
    { &hf_tetra_ssi,
10364
16
      { "ssi", "tetra.ssi",
10365
16
        FT_UINT32, BASE_DEC, NULL, 0,
10366
16
        "INTEGER_0_16777215", HFILL }},
10367
16
    { &hf_tetra_eventLabel,
10368
16
      { "eventLabel", "tetra.eventLabel",
10369
16
        FT_UINT32, BASE_DEC, NULL, 0,
10370
16
        "INTEGER_0_1023", HFILL }},
10371
16
    { &hf_tetra_ussi,
10372
16
      { "ussi", "tetra.ussi",
10373
16
        FT_UINT32, BASE_DEC, NULL, 0,
10374
16
        "INTEGER_0_16777215", HFILL }},
10375
16
    { &hf_tetra_smi,
10376
16
      { "smi", "tetra.smi",
10377
16
        FT_UINT32, BASE_DEC, NULL, 0,
10378
16
        "INTEGER_0_16777215", HFILL }},
10379
16
    { &hf_tetra_bl_adata,
10380
16
      { "bl-adata", "tetra.bl_adata_element",
10381
16
        FT_NONE, BASE_NONE, NULL, 0,
10382
16
        "U_BL_ADATA", HFILL }},
10383
16
    { &hf_tetra_bl_data,
10384
16
      { "bl-data", "tetra.bl_data_element",
10385
16
        FT_NONE, BASE_NONE, NULL, 0,
10386
16
        "U_BL_DATA", HFILL }},
10387
16
    { &hf_tetra_bl_udata,
10388
16
      { "bl-udata", "tetra.bl_udata",
10389
16
        FT_UINT32, BASE_DEC, VALS(tetra_U_MLE_PDU_vals), 0,
10390
16
        "U_MLE_PDU", HFILL }},
10391
16
    { &hf_tetra_bl_ack,
10392
16
      { "bl-ack", "tetra.bl_ack_element",
10393
16
        FT_NONE, BASE_NONE, NULL, 0,
10394
16
        "U_BL_ACK", HFILL }},
10395
16
    { &hf_tetra_bl_adata_fcs,
10396
16
      { "bl-adata-fcs", "tetra.bl_adata_fcs_element",
10397
16
        FT_NONE, BASE_NONE, NULL, 0,
10398
16
        "U_BL_ADATA_FCS", HFILL }},
10399
16
    { &hf_tetra_bl_data_fcs,
10400
16
      { "bl-data-fcs", "tetra.bl_data_fcs_element",
10401
16
        FT_NONE, BASE_NONE, NULL, 0,
10402
16
        "U_BL_DATA_FCS", HFILL }},
10403
16
    { &hf_tetra_bl_udata_fcs,
10404
16
      { "bl-udata-fcs", "tetra.bl_udata_fcs_element",
10405
16
        FT_NONE, BASE_NONE, NULL, 0,
10406
16
        "U_MLE_PDU_FCS", HFILL }},
10407
16
    { &hf_tetra_bl_ack_fcs,
10408
16
      { "bl-ack-fcs", "tetra.bl_ack_fcs_element",
10409
16
        FT_NONE, BASE_NONE, NULL, 0,
10410
16
        "U_BL_ACK_FCS", HFILL }},
10411
16
    { &hf_tetra_al_setup,
10412
16
      { "al-setup", "tetra.al_setup_element",
10413
16
        FT_NONE, BASE_NONE, NULL, 0,
10414
16
        NULL, HFILL }},
10415
16
    { &hf_tetra_al_data,
10416
16
      { "al-data", "tetra.al_data_element",
10417
16
        FT_NONE, BASE_NONE, NULL, 0,
10418
16
        NULL, HFILL }},
10419
16
    { &hf_tetra_al_udata,
10420
16
      { "al-udata", "tetra.al_udata_element",
10421
16
        FT_NONE, BASE_NONE, NULL, 0,
10422
16
        NULL, HFILL }},
10423
16
    { &hf_tetra_al_ack,
10424
16
      { "al-ack", "tetra.al_ack_element",
10425
16
        FT_NONE, BASE_NONE, NULL, 0,
10426
16
        NULL, HFILL }},
10427
16
    { &hf_tetra_al_reconnect,
10428
16
      { "al-reconnect", "tetra.al_reconnect_element",
10429
16
        FT_NONE, BASE_NONE, NULL, 0,
10430
16
        NULL, HFILL }},
10431
16
    { &hf_tetra_reserve1,
10432
16
      { "reserve1", "tetra.reserve1_element",
10433
16
        FT_NONE, BASE_NONE, NULL, 0,
10434
16
        NULL, HFILL }},
10435
16
    { &hf_tetra_reserve2,
10436
16
      { "reserve2", "tetra.reserve2_element",
10437
16
        FT_NONE, BASE_NONE, NULL, 0,
10438
16
        NULL, HFILL }},
10439
16
    { &hf_tetra_al_disc,
10440
16
      { "al-disc", "tetra.al_disc_element",
10441
16
        FT_NONE, BASE_NONE, NULL, 0,
10442
16
        NULL, HFILL }},
10443
16
    { &hf_tetra_nr,
10444
16
      { "nr", "tetra.nr",
10445
16
        FT_UINT32, BASE_DEC, NULL, 0,
10446
16
        "INTEGER_0_1", HFILL }},
10447
16
    { &hf_tetra_tl_sdu,
10448
16
      { "tl-sdu", "tetra.tl_sdu",
10449
16
        FT_UINT32, BASE_DEC, VALS(tetra_U_MLE_PDU_vals), 0,
10450
16
        "U_MLE_PDU", HFILL }},
10451
16
    { &hf_tetra_fcs,
10452
16
      { "fcs", "tetra.fcs",
10453
16
        FT_BYTES, BASE_NONE, NULL, 0,
10454
16
        "OCTET_STRING_SIZE_4", HFILL }},
10455
16
    { &hf_tetra_u_mle_pdu,
10456
16
      { "u-mle-pdu", "tetra.u_mle_pdu",
10457
16
        FT_UINT32, BASE_DEC, VALS(tetra_U_MLE_PDU_vals), 0,
10458
16
        NULL, HFILL }},
10459
16
    { &hf_tetra_ns,
10460
16
      { "ns", "tetra.ns",
10461
16
        FT_UINT32, BASE_DEC, NULL, 0,
10462
16
        "INTEGER_0_1", HFILL }},
10463
16
    { &hf_tetra_u_mle_reserved1,
10464
16
      { "u-mle-reserved1", "tetra.u_mle_reserved1_element",
10465
16
        FT_NONE, BASE_NONE, NULL, 0,
10466
16
        NULL, HFILL }},
10467
16
    { &hf_tetra_mm,
10468
16
      { "mm", "tetra.mm",
10469
16
        FT_UINT32, BASE_DEC, VALS(tetra_U_MM_PDU_vals), 0,
10470
16
        "U_MM_PDU", HFILL }},
10471
16
    { &hf_tetra_cmce,
10472
16
      { "cmce", "tetra.cmce",
10473
16
        FT_UINT32, BASE_DEC, VALS(tetra_U_CMCE_PDU_vals), 0,
10474
16
        "U_CMCE_PDU", HFILL }},
10475
16
    { &hf_tetra_u_mle_reserved2,
10476
16
      { "u-mle-reserved2", "tetra.u_mle_reserved2_element",
10477
16
        FT_NONE, BASE_NONE, NULL, 0,
10478
16
        NULL, HFILL }},
10479
16
    { &hf_tetra_sndcp,
10480
16
      { "sndcp", "tetra.sndcp_element",
10481
16
        FT_NONE, BASE_NONE, NULL, 0,
10482
16
        NULL, HFILL }},
10483
16
    { &hf_tetra_mle,
10484
16
      { "mle", "tetra.mle",
10485
16
        FT_UINT32, BASE_DEC, VALS(tetra_UMLE_PDU_vals), 0,
10486
16
        "UMLE_PDU", HFILL }},
10487
16
    { &hf_tetra_tetra_management_entity_protocol,
10488
16
      { "tetra-management-entity-protocol", "tetra.tetra_management_entity_protocol_element",
10489
16
        FT_NONE, BASE_NONE, NULL, 0,
10490
16
        NULL, HFILL }},
10491
16
    { &hf_tetra_u_mle_reserved3,
10492
16
      { "u-mle-reserved3", "tetra.u_mle_reserved3_element",
10493
16
        FT_NONE, BASE_NONE, NULL, 0,
10494
16
        NULL, HFILL }},
10495
16
    { &hf_tetra_lengthIndicationOrCapacityRequest,
10496
16
      { "lengthIndicationOrCapacityRequest", "tetra.lengthIndicationOrCapacityRequest",
10497
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_lengthIndicationOrCapacityRequest_vals), 0,
10498
16
        NULL, HFILL }},
10499
16
    { &hf_tetra_lengthIndication,
10500
16
      { "lengthIndication", "tetra.lengthIndication",
10501
16
        FT_UINT32, BASE_DEC, VALS(tetra_LengthIndication_vals), 0,
10502
16
        NULL, HFILL }},
10503
16
    { &hf_tetra_capacityRequest,
10504
16
      { "capacityRequest", "tetra.capacityRequest_element",
10505
16
        FT_NONE, BASE_NONE, NULL, 0,
10506
16
        "FRAG", HFILL }},
10507
16
    { &hf_tetra_tm_sdu_01,
10508
16
      { "tm-sdu", "tetra.tm_sdu",
10509
16
        FT_UINT32, BASE_DEC, VALS(tetra_U_LLC_PDU_vals), 0,
10510
16
        "U_LLC_PDU", HFILL }},
10511
16
    { &hf_tetra_frag,
10512
16
      { "frag", "tetra.frag",
10513
16
        FT_UINT32, BASE_DEC, VALS(tetra_Frag1_vals), 0,
10514
16
        "Frag1", HFILL }},
10515
16
    { &hf_tetra_reservation_requirement,
10516
16
      { "reservation-requirement", "tetra.reservation_requirement",
10517
16
        FT_UINT32, BASE_DEC, VALS(tetra_SLOT_APPLY_vals), 0,
10518
16
        "SLOT_APPLY", HFILL }},
10519
16
    { &hf_tetra_lengthIndicationOrCapacityRequest_01,
10520
16
      { "lengthIndicationOrCapacityRequest", "tetra.lengthIndicationOrCapacityRequest",
10521
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_lengthIndicationOrCapacityRequest_01_vals), 0,
10522
16
        "T_lengthIndicationOrCapacityRequest_01", HFILL }},
10523
16
    { &hf_tetra_lengthIndication_01,
10524
16
      { "lengthIndication", "tetra.lengthIndication",
10525
16
        FT_UINT32, BASE_DEC|BASE_EXT_STRING, &tetra_LengthIndicationMacData_vals_ext, 0,
10526
16
        "LengthIndicationMacData", HFILL }},
10527
16
    { &hf_tetra_capacityRequest_01,
10528
16
      { "capacityRequest", "tetra.capacityRequest_element",
10529
16
        FT_NONE, BASE_NONE, NULL, 0,
10530
16
        "FRAG6", HFILL }},
10531
16
    { &hf_tetra_sub_type,
10532
16
      { "sub-type", "tetra.sub_type",
10533
16
        FT_UINT32, BASE_DEC, NULL, 0,
10534
16
        "INTEGER_0_1", HFILL }},
10535
16
    { &hf_tetra_tm_sdu_bit_str,
10536
16
      { "tm-sdu", "tetra.tm_sdu_bit_str",
10537
16
        FT_BYTES, BASE_NONE, NULL, 0,
10538
16
        "BIT_STRING_SIZE_264", HFILL }},
10539
16
    { &hf_tetra_tm_sdu_bit_str_01,
10540
16
      { "tm-sdu", "tetra.tm_sdu_bit_str",
10541
16
        FT_BYTES, BASE_NONE, NULL, 0,
10542
16
        "BIT_STRING_SIZE_120", HFILL }},
10543
16
    { &hf_tetra_lengthInd_ReservationReq,
10544
16
      { "lengthInd-ReservationReq", "tetra.lengthInd_ReservationReq",
10545
16
        FT_UINT32, BASE_DEC|BASE_EXT_STRING, &tetra_LengthIndOrReservationReq_vals_ext, 0,
10546
16
        "LengthIndOrReservationReq", HFILL }},
10547
16
    { &hf_tetra_tm_sdu_bit_str_02,
10548
16
      { "tm-sdu", "tetra.tm_sdu_bit_str",
10549
16
        FT_BYTES, BASE_NONE, NULL, 0,
10550
16
        "BIT_STRING_SIZE_258", HFILL }},
10551
16
    { &hf_tetra_pdu_subtype,
10552
16
      { "pdu-subtype", "tetra.pdu_subtype",
10553
16
        FT_UINT32, BASE_DEC, NULL, 0,
10554
16
        "INTEGER_0_1", HFILL }},
10555
16
    { &hf_tetra_tm_sdu_bit_str_03,
10556
16
      { "tm-sdu", "tetra.tm_sdu_bit_str",
10557
16
        FT_BYTES, BASE_NONE, NULL, 0,
10558
16
        "BIT_STRING_SIZE_114", HFILL }},
10559
16
    { &hf_tetra_lengthInd_ReservationReq_01,
10560
16
      { "lengthInd-ReservationReq", "tetra.lengthInd_ReservationReq",
10561
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_lengthInd_ReservationReq_vals), 0,
10562
16
        NULL, HFILL }},
10563
16
    { &hf_tetra_lengthInd,
10564
16
      { "lengthInd", "tetra.lengthInd",
10565
16
        FT_UINT32, BASE_DEC, VALS(tetra_LengthIndMacHu_vals), 0,
10566
16
        "LengthIndMacHu", HFILL }},
10567
16
    { &hf_tetra_tm_sdu_bit_str_04,
10568
16
      { "tm-sdu", "tetra.tm_sdu_bit_str",
10569
16
        FT_BYTES, BASE_NONE, NULL, 0,
10570
16
        "BIT_STRING_SIZE_85", HFILL }},
10571
16
    { &hf_tetra_position_of_grant,
10572
16
      { "position-of-grant", "tetra.position_of_grant",
10573
16
        FT_UINT32, BASE_DEC, VALS(tetra_Position_Of_Grant_vals), 0,
10574
16
        NULL, HFILL }},
10575
16
    { &hf_tetra_lengthIndication_02,
10576
16
      { "lengthIndication", "tetra.lengthIndication",
10577
16
        FT_UINT32, BASE_DEC|BASE_EXT_STRING, &tetra_LengthIndicationMacEndDl_vals_ext, 0,
10578
16
        "LengthIndicationMacEndDl", HFILL }},
10579
16
    { &hf_tetra_slot_granting,
10580
16
      { "slot-granting", "tetra.slot_granting",
10581
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_slot_granting_vals), 0,
10582
16
        "T_slot_granting", HFILL }},
10583
16
    { &hf_tetra_none,
10584
16
      { "none", "tetra.none_element",
10585
16
        FT_NONE, BASE_NONE, NULL, 0,
10586
16
        NULL, HFILL }},
10587
16
    { &hf_tetra_slot_granting_param,
10588
16
      { "slot-granting-param", "tetra.slot_granting_param_element",
10589
16
        FT_NONE, BASE_NONE, NULL, 0,
10590
16
        "SlotGranting", HFILL }},
10591
16
    { &hf_tetra_channel_allocation,
10592
16
      { "channel-allocation", "tetra.channel_allocation",
10593
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_channel_allocation_vals), 0,
10594
16
        NULL, HFILL }},
10595
16
    { &hf_tetra_channel_allocation_element,
10596
16
      { "channel-allocation-element", "tetra.channel_allocation_element_element",
10597
16
        FT_NONE, BASE_NONE, NULL, 0,
10598
16
        "ChannelAllocation", HFILL }},
10599
16
    { &hf_tetra_tm_sdu_bit_str_05,
10600
16
      { "tm-sdu", "tetra.tm_sdu_bit_str",
10601
16
        FT_BYTES, BASE_NONE, NULL, 0,
10602
16
        "BIT_STRING_SIZE_255", HFILL }},
10603
16
    { &hf_tetra_capacity_allocation,
10604
16
      { "capacity-allocation", "tetra.capacity_allocation",
10605
16
        FT_UINT32, BASE_DEC, VALS(tetra_Capacity_Allocation_vals), 0,
10606
16
        NULL, HFILL }},
10607
16
    { &hf_tetra_granting_delay,
10608
16
      { "granting-delay", "tetra.granting_delay",
10609
16
        FT_UINT32, BASE_DEC, VALS(tetra_Granting_delay_vals), 0,
10610
16
        NULL, HFILL }},
10611
16
    { &hf_tetra_allocation_type,
10612
16
      { "allocation-type", "tetra.allocation_type",
10613
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_allocation_type_vals), 0,
10614
16
        NULL, HFILL }},
10615
16
    { &hf_tetra_timeslot_assigned,
10616
16
      { "timeslot-assigned", "tetra.timeslot_assigned",
10617
16
        FT_UINT32, BASE_DEC, VALS(tetra_Timeslot_Assigned_vals), 0,
10618
16
        NULL, HFILL }},
10619
16
    { &hf_tetra_up_down_assigned,
10620
16
      { "up-down-assigned", "tetra.up_down_assigned",
10621
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_up_down_assigned_vals), 0,
10622
16
        NULL, HFILL }},
10623
16
    { &hf_tetra_clch_permission,
10624
16
      { "clch-permission", "tetra.clch_permission",
10625
16
        FT_UINT32, BASE_DEC, VALS(tetra_CLCH_permission_vals), 0,
10626
16
        NULL, HFILL }},
10627
16
    { &hf_tetra_cell_change,
10628
16
      { "cell-change", "tetra.cell_change",
10629
16
        FT_UINT32, BASE_DEC, VALS(tetra_Cell_change_flag_vals), 0,
10630
16
        "Cell_change_flag", HFILL }},
10631
16
    { &hf_tetra_carrier_number,
10632
16
      { "carrier-number", "tetra.carrier_number",
10633
16
        FT_UINT32, BASE_DEC, NULL, 0,
10634
16
        "INTEGER_0_4095", HFILL }},
10635
16
    { &hf_tetra_extend_carrier_flag,
10636
16
      { "extend-carrier-flag", "tetra.extend_carrier_flag",
10637
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_extend_carrier_flag_vals), 0,
10638
16
        NULL, HFILL }},
10639
16
    { &hf_tetra_extended,
10640
16
      { "extended", "tetra.extended_element",
10641
16
        FT_NONE, BASE_NONE, NULL, 0,
10642
16
        "Extended_carrier_flag", HFILL }},
10643
16
    { &hf_tetra_monitoring_pattern,
10644
16
      { "monitoring-pattern", "tetra.monitoring_pattern",
10645
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_monitoring_pattern_vals), 0,
10646
16
        NULL, HFILL }},
10647
16
    { &hf_tetra_one,
10648
16
      { "one", "tetra.one",
10649
16
        FT_UINT32, BASE_DEC, VALS(tetra_Monitoring_pattern_vals), 0,
10650
16
        "Monitoring_pattern", HFILL }},
10651
16
    { &hf_tetra_none1,
10652
16
      { "none1", "tetra.none1_element",
10653
16
        FT_NONE, BASE_NONE, NULL, 0,
10654
16
        NULL, HFILL }},
10655
16
    { &hf_tetra_none2,
10656
16
      { "none2", "tetra.none2_element",
10657
16
        FT_NONE, BASE_NONE, NULL, 0,
10658
16
        NULL, HFILL }},
10659
16
    { &hf_tetra_none3,
10660
16
      { "none3", "tetra.none3_element",
10661
16
        FT_NONE, BASE_NONE, NULL, 0,
10662
16
        NULL, HFILL }},
10663
16
    { &hf_tetra_offset_01,
10664
16
      { "offset", "tetra.offset",
10665
16
        FT_UINT32, BASE_DEC, NULL, 0,
10666
16
        "INTEGER_0_3", HFILL }},
10667
16
    { &hf_tetra_reverse_operation_01,
10668
16
      { "reverse-operation", "tetra.reverse_operation",
10669
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_reverse_operation_vals), 0,
10670
16
        NULL, HFILL }},
10671
16
    { &hf_tetra_pdu_type_02,
10672
16
      { "pdu-type", "tetra.pdu_type",
10673
16
        FT_UINT32, BASE_DEC, NULL, 0,
10674
16
        "INTEGER_0_7", HFILL }},
10675
16
    { &hf_tetra_fill_bit_ind,
10676
16
      { "fill-bit-ind", "tetra.fill_bit_ind",
10677
16
        FT_BOOLEAN, BASE_NONE, NULL, 0,
10678
16
        "BOOLEAN", HFILL }},
10679
16
    { &hf_tetra_position_of_grant_01,
10680
16
      { "position-of-grant", "tetra.position_of_grant",
10681
16
        FT_UINT32, BASE_DEC, NULL, 0,
10682
16
        "INTEGER_0_1", HFILL }},
10683
16
    { &hf_tetra_slot_granting_01,
10684
16
      { "slot-granting", "tetra.slot_granting",
10685
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_slot_granting_01_vals), 0,
10686
16
        "T_slot_granting_01", HFILL }},
10687
16
    { &hf_tetra_channel_allocation_01,
10688
16
      { "channel-allocation", "tetra.channel_allocation",
10689
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_channel_allocation_01_vals), 0,
10690
16
        "T_channel_allocation_01", HFILL }},
10691
16
    { &hf_tetra_tm_sdu_bit_str_06,
10692
16
      { "tm-sdu", "tetra.tm_sdu_bit_str",
10693
16
        FT_BYTES, BASE_NONE, NULL, 0,
10694
16
        "BIT_STRING_SIZE_111", HFILL }},
10695
16
    { &hf_tetra_encryption_mode,
10696
16
      { "encryption-mode", "tetra.encryption_mode",
10697
16
        FT_UINT32, BASE_DEC, NULL, 0,
10698
16
        "INTEGER_0_3", HFILL }},
10699
16
    { &hf_tetra_access_ack,
10700
16
      { "access-ack", "tetra.access_ack",
10701
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_access_ack_vals), 0,
10702
16
        NULL, HFILL }},
10703
16
    { &hf_tetra_lengthIndication_03,
10704
16
      { "lengthIndication", "tetra.lengthIndication",
10705
16
        FT_UINT32, BASE_DEC|BASE_EXT_STRING, &tetra_LengthIndicationMacResource_vals_ext, 0,
10706
16
        "LengthIndicationMacResource", HFILL }},
10707
16
    { &hf_tetra_address_01,
10708
16
      { "address", "tetra.address",
10709
16
        FT_UINT32, BASE_DEC, VALS(tetra_AddressMacResource_vals), 0,
10710
16
        "AddressMacResource", HFILL }},
10711
16
    { &hf_tetra_power_control,
10712
16
      { "power-control", "tetra.power_control",
10713
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_power_control_vals), 0,
10714
16
        NULL, HFILL }},
10715
16
    { &hf_tetra_powerParameters,
10716
16
      { "powerParameters", "tetra.powerParameters",
10717
16
        FT_UINT32, BASE_DEC, VALS(tetra_PowerControl_vals), 0,
10718
16
        "PowerControl", HFILL }},
10719
16
    { &hf_tetra_slot_granting_02,
10720
16
      { "slot-granting", "tetra.slot_granting",
10721
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_slot_granting_02_vals), 0,
10722
16
        "T_slot_granting_02", HFILL }},
10723
16
    { &hf_tetra_channel_allocation_02,
10724
16
      { "channel-allocation", "tetra.channel_allocation",
10725
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_channel_allocation_02_vals), 0,
10726
16
        "T_channel_allocation_02", HFILL }},
10727
16
    { &hf_tetra_tm_sdu_02,
10728
16
      { "tm-sdu", "tetra.tm_sdu",
10729
16
        FT_UINT32, BASE_DEC, VALS(tetra_D_LLC_PDU_vals), 0,
10730
16
        "D_LLC_PDU", HFILL }},
10731
16
    { &hf_tetra_null_pdu,
10732
16
      { "null-pdu", "tetra.null_pdu_element",
10733
16
        FT_NONE, BASE_NONE, NULL, 0,
10734
16
        NULL, HFILL }},
10735
16
    { &hf_tetra_ssi_need,
10736
16
      { "ssi", "tetra.ssi_need_element",
10737
16
        FT_NONE, BASE_NONE, NULL, 0,
10738
16
        "SSI_NEED", HFILL }},
10739
16
    { &hf_tetra_eventLabel_01,
10740
16
      { "eventLabel", "tetra.eventLabel_element",
10741
16
        FT_NONE, BASE_NONE, NULL, 0,
10742
16
        "EVENT_NEED", HFILL }},
10743
16
    { &hf_tetra_ussi_01,
10744
16
      { "ussi", "tetra.ussi_element",
10745
16
        FT_NONE, BASE_NONE, NULL, 0,
10746
16
        "USSI_NEED", HFILL }},
10747
16
    { &hf_tetra_smi_01,
10748
16
      { "smi", "tetra.smi_element",
10749
16
        FT_NONE, BASE_NONE, NULL, 0,
10750
16
        "SMI_NEED", HFILL }},
10751
16
    { &hf_tetra_ssi_eventLabel,
10752
16
      { "ssi-eventLabel", "tetra.ssi_eventLabel_element",
10753
16
        FT_NONE, BASE_NONE, NULL, 0,
10754
16
        "SSI_EVENT_NEED", HFILL }},
10755
16
    { &hf_tetra_ssi_usage_maker,
10756
16
      { "ssi-usage-maker", "tetra.ssi_usage_maker_element",
10757
16
        FT_NONE, BASE_NONE, NULL, 0,
10758
16
        "SSI_USAGE_NEED", HFILL }},
10759
16
    { &hf_tetra_smi_eventLabel,
10760
16
      { "smi-eventLabel", "tetra.smi_eventLabel_element",
10761
16
        FT_NONE, BASE_NONE, NULL, 0,
10762
16
        "SMI_EVENT_NEED", HFILL }},
10763
16
    { &hf_tetra_other,
10764
16
      { "other", "tetra.other_element",
10765
16
        FT_NONE, BASE_NONE, NULL, 0,
10766
16
        "OTHER_DATA", HFILL }},
10767
16
    { &hf_tetra_eventlabel,
10768
16
      { "eventlabel", "tetra.eventlabel",
10769
16
        FT_UINT32, BASE_DEC, NULL, 0,
10770
16
        "INTEGER_0_1023", HFILL }},
10771
16
    { &hf_tetra_ventlabel,
10772
16
      { "ventlabel", "tetra.ventlabel",
10773
16
        FT_UINT32, BASE_DEC, NULL, 0,
10774
16
        "INTEGER_0_1023", HFILL }},
10775
16
    { &hf_tetra_usage_maker,
10776
16
      { "usage-maker", "tetra.usage_maker",
10777
16
        FT_UINT32, BASE_DEC, NULL, 0,
10778
16
        "INTEGER_0_63", HFILL }},
10779
16
    { &hf_tetra_smi_eventlabel,
10780
16
      { "smi-eventlabel", "tetra.smi_eventlabel",
10781
16
        FT_BYTES, BASE_NONE, NULL, 0,
10782
16
        "BIT_STRING_SIZE_34", HFILL }},
10783
16
    { &hf_tetra_broadcast_channel,
10784
16
      { "broadcast-channel", "tetra.broadcast_channel",
10785
16
        FT_UINT32, BASE_DEC, NULL, 0,
10786
16
        "INTEGER_0_1", HFILL }},
10787
16
    { &hf_tetra_access_code,
10788
16
      { "access-code", "tetra.access_code",
10789
16
        FT_UINT32, BASE_DEC, NULL, 0,
10790
16
        "INTEGER_0_3", HFILL }},
10791
16
    { &hf_tetra_imm_01,
10792
16
      { "imm", "tetra.imm",
10793
16
        FT_UINT32, BASE_DEC, NULL, 0,
10794
16
        "INTEGER_0_15", HFILL }},
10795
16
    { &hf_tetra_wt_01,
10796
16
      { "wt", "tetra.wt",
10797
16
        FT_UINT32, BASE_DEC, NULL, 0,
10798
16
        "INTEGER_0_15", HFILL }},
10799
16
    { &hf_tetra_nu_01,
10800
16
      { "nu", "tetra.nu",
10801
16
        FT_UINT32, BASE_DEC, NULL, 0,
10802
16
        "INTEGER_0_15", HFILL }},
10803
16
    { &hf_tetra_frame_len_factor_01,
10804
16
      { "frame-len-factor", "tetra.frame_len_factor",
10805
16
        FT_UINT32, BASE_DEC, NULL, 0,
10806
16
        "INTEGER_0_1", HFILL }},
10807
16
    { &hf_tetra_timeslot_pointer_01,
10808
16
      { "timeslot-pointer", "tetra.timeslot_pointer",
10809
16
        FT_UINT32, BASE_DEC, NULL, 0,
10810
16
        "INTEGER_0_15", HFILL }},
10811
16
    { &hf_tetra_min_priority,
10812
16
      { "min-priority", "tetra.min_priority",
10813
16
        FT_UINT32, BASE_DEC, NULL, 0,
10814
16
        "INTEGER_0_7", HFILL }},
10815
16
    { &hf_tetra_optional_field,
10816
16
      { "optional-field", "tetra.optional_field",
10817
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_optional_field_vals), 0,
10818
16
        NULL, HFILL }},
10819
16
    { &hf_tetra_class_bitmap,
10820
16
      { "class-bitmap", "tetra.class_bitmap",
10821
16
        FT_UINT32, BASE_DEC, NULL, 0,
10822
16
        "INTEGER_0_65535", HFILL }},
10823
16
    { &hf_tetra_gssi,
10824
16
      { "gssi", "tetra.gssi",
10825
16
        FT_UINT32, BASE_DEC, NULL, 0,
10826
16
        "INTEGER_0_33554431", HFILL }},
10827
16
    { &hf_tetra_reserved_03,
10828
16
      { "reserved", "tetra.reserved_element",
10829
16
        FT_NONE, BASE_NONE, NULL, 0,
10830
16
        NULL, HFILL }},
10831
16
    { &hf_tetra_filler_bits,
10832
16
      { "filler-bits", "tetra.filler_bits",
10833
16
        FT_UINT32, BASE_DEC, NULL, 0,
10834
16
        "INTEGER_0_7", HFILL }},
10835
16
    { &hf_tetra_bl_adata_01,
10836
16
      { "bl-adata", "tetra.bl_adata_element",
10837
16
        FT_NONE, BASE_NONE, NULL, 0,
10838
16
        "D_BL_ADATA", HFILL }},
10839
16
    { &hf_tetra_bl_data_01,
10840
16
      { "bl-data", "tetra.bl_data_element",
10841
16
        FT_NONE, BASE_NONE, NULL, 0,
10842
16
        "D_BL_DATA", HFILL }},
10843
16
    { &hf_tetra_bl_udata_01,
10844
16
      { "bl-udata", "tetra.bl_udata",
10845
16
        FT_UINT32, BASE_DEC, VALS(tetra_D_MLE_PDU_vals), 0,
10846
16
        "D_MLE_PDU", HFILL }},
10847
16
    { &hf_tetra_bl_ack_01,
10848
16
      { "bl-ack", "tetra.bl_ack_element",
10849
16
        FT_NONE, BASE_NONE, NULL, 0,
10850
16
        "D_BL_ACK", HFILL }},
10851
16
    { &hf_tetra_bl_adata_fcs_01,
10852
16
      { "bl-adata-fcs", "tetra.bl_adata_fcs_element",
10853
16
        FT_NONE, BASE_NONE, NULL, 0,
10854
16
        "D_BL_ADATA_FCS", HFILL }},
10855
16
    { &hf_tetra_bl_data_fcs_01,
10856
16
      { "bl-data-fcs", "tetra.bl_data_fcs_element",
10857
16
        FT_NONE, BASE_NONE, NULL, 0,
10858
16
        "D_BL_DATA_FCS", HFILL }},
10859
16
    { &hf_tetra_bl_udata_fcs_01,
10860
16
      { "bl-udata-fcs", "tetra.bl_udata_fcs_element",
10861
16
        FT_NONE, BASE_NONE, NULL, 0,
10862
16
        "D_MLE_PDU_FCS", HFILL }},
10863
16
    { &hf_tetra_bl_ack_fcs_01,
10864
16
      { "bl-ack-fcs", "tetra.bl_ack_fcs_element",
10865
16
        FT_NONE, BASE_NONE, NULL, 0,
10866
16
        "D_BL_ACK_FCS", HFILL }},
10867
16
    { &hf_tetra_tl_sdu_01,
10868
16
      { "tl-sdu", "tetra.tl_sdu",
10869
16
        FT_UINT32, BASE_DEC, VALS(tetra_D_MLE_PDU_vals), 0,
10870
16
        "D_MLE_PDU", HFILL }},
10871
16
    { &hf_tetra_d_mle_pdu,
10872
16
      { "d-mle-pdu", "tetra.d_mle_pdu",
10873
16
        FT_UINT32, BASE_DEC, VALS(tetra_D_MLE_PDU_vals), 0,
10874
16
        NULL, HFILL }},
10875
16
    { &hf_tetra_mm_01,
10876
16
      { "mm", "tetra.mm",
10877
16
        FT_UINT32, BASE_DEC, VALS(tetra_D_MM_PDU_vals), 0,
10878
16
        "D_MM_PDU", HFILL }},
10879
16
    { &hf_tetra_cmce_01,
10880
16
      { "cmce", "tetra.cmce",
10881
16
        FT_UINT32, BASE_DEC, VALS(tetra_D_CMCE_PDU_vals), 0,
10882
16
        "D_CMCE_PDU", HFILL }},
10883
16
    { &hf_tetra_mle_01,
10884
16
      { "mle", "tetra.mle",
10885
16
        FT_UINT32, BASE_DEC, VALS(tetra_DMLE_PDU_vals), 0,
10886
16
        "DMLE_PDU", HFILL }},
10887
16
    { &hf_tetra_u_prepare,
10888
16
      { "u-prepare", "tetra.u_prepare_element",
10889
16
        FT_NONE, BASE_NONE, NULL, 0,
10890
16
        NULL, HFILL }},
10891
16
    { &hf_tetra_umle_reserved1,
10892
16
      { "umle-reserved1", "tetra.umle_reserved1_element",
10893
16
        FT_NONE, BASE_NONE, NULL, 0,
10894
16
        NULL, HFILL }},
10895
16
    { &hf_tetra_umle_reserved2,
10896
16
      { "umle-reserved2", "tetra.umle_reserved2_element",
10897
16
        FT_NONE, BASE_NONE, NULL, 0,
10898
16
        NULL, HFILL }},
10899
16
    { &hf_tetra_umle_reserved3,
10900
16
      { "umle-reserved3", "tetra.umle_reserved3_element",
10901
16
        FT_NONE, BASE_NONE, NULL, 0,
10902
16
        NULL, HFILL }},
10903
16
    { &hf_tetra_u_restore,
10904
16
      { "u-restore", "tetra.u_restore_element",
10905
16
        FT_NONE, BASE_NONE, NULL, 0,
10906
16
        NULL, HFILL }},
10907
16
    { &hf_tetra_umle_reserved4,
10908
16
      { "umle-reserved4", "tetra.umle_reserved4_element",
10909
16
        FT_NONE, BASE_NONE, NULL, 0,
10910
16
        NULL, HFILL }},
10911
16
    { &hf_tetra_umle_reserved5,
10912
16
      { "umle-reserved5", "tetra.umle_reserved5_element",
10913
16
        FT_NONE, BASE_NONE, NULL, 0,
10914
16
        NULL, HFILL }},
10915
16
    { &hf_tetra_umle_reserved6,
10916
16
      { "umle-reserved6", "tetra.umle_reserved6_element",
10917
16
        FT_NONE, BASE_NONE, NULL, 0,
10918
16
        NULL, HFILL }},
10919
16
    { &hf_tetra_d_new_cell,
10920
16
      { "d-new-cell", "tetra.d_new_cell_element",
10921
16
        FT_NONE, BASE_NONE, NULL, 0,
10922
16
        NULL, HFILL }},
10923
16
    { &hf_tetra_d_prepare_fail,
10924
16
      { "d-prepare-fail", "tetra.d_prepare_fail_element",
10925
16
        FT_NONE, BASE_NONE, NULL, 0,
10926
16
        NULL, HFILL }},
10927
16
    { &hf_tetra_d_nwrk_broadcast,
10928
16
      { "d-nwrk-broadcast", "tetra.d_nwrk_broadcast_element",
10929
16
        FT_NONE, BASE_NONE, NULL, 0,
10930
16
        "D_NWRK_BRDADCAST", HFILL }},
10931
16
    { &hf_tetra_dmle_reserved1,
10932
16
      { "dmle-reserved1", "tetra.dmle_reserved1_element",
10933
16
        FT_NONE, BASE_NONE, NULL, 0,
10934
16
        NULL, HFILL }},
10935
16
    { &hf_tetra_d_restore_ack,
10936
16
      { "d-restore-ack", "tetra.d_restore_ack_element",
10937
16
        FT_NONE, BASE_NONE, NULL, 0,
10938
16
        NULL, HFILL }},
10939
16
    { &hf_tetra_d_restore_fail,
10940
16
      { "d-restore-fail", "tetra.d_restore_fail_element",
10941
16
        FT_NONE, BASE_NONE, NULL, 0,
10942
16
        NULL, HFILL }},
10943
16
    { &hf_tetra_dmle_reserved2,
10944
16
      { "dmle-reserved2", "tetra.dmle_reserved2_element",
10945
16
        FT_NONE, BASE_NONE, NULL, 0,
10946
16
        NULL, HFILL }},
10947
16
    { &hf_tetra_dmle_reserved3,
10948
16
      { "dmle-reserved3", "tetra.dmle_reserved3_element",
10949
16
        FT_NONE, BASE_NONE, NULL, 0,
10950
16
        NULL, HFILL }},
10951
16
    { &hf_tetra_optional_elements,
10952
16
      { "optional-elements", "tetra.optional_elements",
10953
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_vals), 0,
10954
16
        NULL, HFILL }},
10955
16
    { &hf_tetra_no_type2,
10956
16
      { "no-type2", "tetra.no_type2_element",
10957
16
        FT_NONE, BASE_NONE, NULL, 0,
10958
16
        NULL, HFILL }},
10959
16
    { &hf_tetra_type2_parameters,
10960
16
      { "type2-parameters", "tetra.type2_parameters_element",
10961
16
        FT_NONE, BASE_NONE, NULL, 0,
10962
16
        NULL, HFILL }},
10963
16
    { &hf_tetra_cell_number,
10964
16
      { "cell-number", "tetra.cell_number",
10965
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_cell_number_vals), 0,
10966
16
        NULL, HFILL }},
10967
16
    { &hf_tetra_cell_number_01,
10968
16
      { "cell-number", "tetra.cell_number",
10969
16
        FT_UINT32, BASE_DEC, NULL, 0,
10970
16
        "INTEGER_0_65535", HFILL }},
10971
16
    { &hf_tetra_sdu,
10972
16
      { "sdu", "tetra.sdu",
10973
16
        FT_BYTES, BASE_NONE, NULL, 0,
10974
16
        "BIT_STRING", HFILL }},
10975
16
    { &hf_tetra_optional_elements_01,
10976
16
      { "optional-elements", "tetra.optional_elements",
10977
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_01_vals), 0,
10978
16
        "T_optional_elements_01", HFILL }},
10979
16
    { &hf_tetra_type2_parameters_01,
10980
16
      { "type2-parameters", "tetra.type2_parameters_element",
10981
16
        FT_NONE, BASE_NONE, NULL, 0,
10982
16
        "T_type2_parameters_01", HFILL }},
10983
16
    { &hf_tetra_mcc_01,
10984
16
      { "mcc", "tetra.mcc",
10985
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_mcc_vals), 0,
10986
16
        NULL, HFILL }},
10987
16
    { &hf_tetra_mnc_01,
10988
16
      { "mnc", "tetra.mnc",
10989
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_mnc_vals), 0,
10990
16
        NULL, HFILL }},
10991
16
    { &hf_tetra_la_01,
10992
16
      { "la", "tetra.la",
10993
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_la_vals), 0,
10994
16
        NULL, HFILL }},
10995
16
    { &hf_tetra_channel_command_valid,
10996
16
      { "channel-command-valid", "tetra.channel_command_valid",
10997
16
        FT_UINT32, BASE_DEC, NULL, 0,
10998
16
        "INTEGER_0_3", HFILL }},
10999
16
    { &hf_tetra_optional_elements_02,
11000
16
      { "optional-elements", "tetra.optional_elements",
11001
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_02_vals), 0,
11002
16
        "T_optional_elements_02", HFILL }},
11003
16
    { &hf_tetra_fail_cause,
11004
16
      { "fail-cause", "tetra.fail_cause",
11005
16
        FT_UINT32, BASE_DEC, NULL, 0,
11006
16
        "INTEGER_0_3", HFILL }},
11007
16
    { &hf_tetra_optional_elements_03,
11008
16
      { "optional-elements", "tetra.optional_elements",
11009
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_03_vals), 0,
11010
16
        "T_optional_elements_03", HFILL }},
11011
16
    { &hf_tetra_cell_re_select_parameters,
11012
16
      { "cell-re-select-parameters", "tetra.cell_re_select_parameters",
11013
16
        FT_UINT32, BASE_DEC, NULL, 0,
11014
16
        "INTEGER_0_65535", HFILL }},
11015
16
    { &hf_tetra_optional_elements_04,
11016
16
      { "optional-elements", "tetra.optional_elements",
11017
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_04_vals), 0,
11018
16
        "T_optional_elements_04", HFILL }},
11019
16
    { &hf_tetra_type2_parameters_02,
11020
16
      { "type2-parameters", "tetra.type2_parameters_element",
11021
16
        FT_NONE, BASE_NONE, NULL, 0,
11022
16
        "T_type2_parameters_02", HFILL }},
11023
16
    { &hf_tetra_tetra_network_time,
11024
16
      { "tetra-network-time", "tetra.tetra_network_time",
11025
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_tetra_network_time_vals), 0,
11026
16
        NULL, HFILL }},
11027
16
    { &hf_tetra_tetra_network_time_01,
11028
16
      { "tetra-network-time", "tetra.tetra_network_time_element",
11029
16
        FT_NONE, BASE_NONE, NULL, 0,
11030
16
        NULL, HFILL }},
11031
16
    { &hf_tetra_number_of_neighbour_cells,
11032
16
      { "number-of-neighbour-cells", "tetra.number_of_neighbour_cells",
11033
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_number_of_neighbour_cells_vals), 0,
11034
16
        NULL, HFILL }},
11035
16
    { &hf_tetra_number_of_neighbour_cells_01,
11036
16
      { "number-of-neighbour-cells", "tetra.number_of_neighbour_cells",
11037
16
        FT_UINT32, BASE_DEC, NULL, 0,
11038
16
        "INTEGER_0_7", HFILL }},
11039
16
    { &hf_tetra_network_time,
11040
16
      { "network-time", "tetra.network_time",
11041
16
        FT_UINT64, BASE_DEC, NULL, 0,
11042
16
        NULL, HFILL }},
11043
16
    { &hf_tetra_local_time_offset_sign,
11044
16
      { "local-time-offset-sign", "tetra.local_time_offset_sign",
11045
16
        FT_UINT32, BASE_DEC, NULL, 0,
11046
16
        "INTEGER_0_1", HFILL }},
11047
16
    { &hf_tetra_local_time_offset,
11048
16
      { "local-time-offset", "tetra.local_time_offset",
11049
16
        FT_UINT32, BASE_DEC, NULL, 0,
11050
16
        "INTEGER_0_63", HFILL }},
11051
16
    { &hf_tetra_year,
11052
16
      { "year", "tetra.year",
11053
16
        FT_UINT32, BASE_DEC, NULL, 0,
11054
16
        "INTEGER_0_63", HFILL }},
11055
16
    { &hf_tetra_reserved_04,
11056
16
      { "reserved", "tetra.reserved",
11057
16
        FT_UINT64, BASE_DEC, NULL, 0,
11058
16
        NULL, HFILL }},
11059
16
    { &hf_tetra_u_Authentication,
11060
16
      { "u-Authentication", "tetra.u_Authentication_element",
11061
16
        FT_NONE, BASE_NONE, NULL, 0,
11062
16
        NULL, HFILL }},
11063
16
    { &hf_tetra_u_Itsi_Detach,
11064
16
      { "u-Itsi-Detach", "tetra.u_Itsi_Detach_element",
11065
16
        FT_NONE, BASE_NONE, NULL, 0,
11066
16
        NULL, HFILL }},
11067
16
    { &hf_tetra_u_Location_Update_Demand,
11068
16
      { "u-Location-Update-Demand", "tetra.u_Location_Update_Demand_element",
11069
16
        FT_NONE, BASE_NONE, NULL, 0,
11070
16
        NULL, HFILL }},
11071
16
    { &hf_tetra_u_MM_Status,
11072
16
      { "u-MM-Status", "tetra.u_MM_Status_element",
11073
16
        FT_NONE, BASE_NONE, NULL, 0,
11074
16
        NULL, HFILL }},
11075
16
    { &hf_tetra_u_MM_reserved1,
11076
16
      { "u-MM-reserved1", "tetra.u_MM_reserved1_element",
11077
16
        FT_NONE, BASE_NONE, NULL, 0,
11078
16
        NULL, HFILL }},
11079
16
    { &hf_tetra_u_WK,
11080
16
      { "u-WK", "tetra.u_WK_element",
11081
16
        FT_NONE, BASE_NONE, NULL, 0,
11082
16
        NULL, HFILL }},
11083
16
    { &hf_tetra_u_MM_reserved3,
11084
16
      { "u-MM-reserved3", "tetra.u_MM_reserved3_element",
11085
16
        FT_NONE, BASE_NONE, NULL, 0,
11086
16
        NULL, HFILL }},
11087
16
    { &hf_tetra_u_Attach_Detach_Group_Identity,
11088
16
      { "u-Attach-Detach-Group-Identity", "tetra.u_Attach_Detach_Group_Identity_element",
11089
16
        FT_NONE, BASE_NONE, NULL, 0,
11090
16
        NULL, HFILL }},
11091
16
    { &hf_tetra_u_Attach_Detach_Group_Identity_Ack,
11092
16
      { "u-Attach-Detach-Group-Identity-Ack", "tetra.u_Attach_Detach_Group_Identity_Ack_element",
11093
16
        FT_NONE, BASE_NONE, NULL, 0,
11094
16
        NULL, HFILL }},
11095
16
    { &hf_tetra_u_TEI_Provide,
11096
16
      { "u-TEI-Provide", "tetra.u_TEI_Provide_element",
11097
16
        FT_NONE, BASE_NONE, NULL, 0,
11098
16
        NULL, HFILL }},
11099
16
    { &hf_tetra_u_MM_reserved6,
11100
16
      { "u-MM-reserved6", "tetra.u_MM_reserved6_element",
11101
16
        FT_NONE, BASE_NONE, NULL, 0,
11102
16
        NULL, HFILL }},
11103
16
    { &hf_tetra_u_Disabled_Status,
11104
16
      { "u-Disabled-Status", "tetra.u_Disabled_Status_element",
11105
16
        FT_NONE, BASE_NONE, NULL, 0,
11106
16
        NULL, HFILL }},
11107
16
    { &hf_tetra_u_MM_reserved7,
11108
16
      { "u-MM-reserved7", "tetra.u_MM_reserved7_element",
11109
16
        FT_NONE, BASE_NONE, NULL, 0,
11110
16
        NULL, HFILL }},
11111
16
    { &hf_tetra_u_MM_reserved8,
11112
16
      { "u-MM-reserved8", "tetra.u_MM_reserved8_element",
11113
16
        FT_NONE, BASE_NONE, NULL, 0,
11114
16
        NULL, HFILL }},
11115
16
    { &hf_tetra_u_MM_reserved9,
11116
16
      { "u-MM-reserved9", "tetra.u_MM_reserved9_element",
11117
16
        FT_NONE, BASE_NONE, NULL, 0,
11118
16
        NULL, HFILL }},
11119
16
    { &hf_tetra_u_MM_Function_Not_Support,
11120
16
      { "u-MM-Function-Not-Support", "tetra.u_MM_Function_Not_Support_element",
11121
16
        FT_NONE, BASE_NONE, NULL, 0,
11122
16
        NULL, HFILL }},
11123
16
    { &hf_tetra_d_Otar,
11124
16
      { "d-Otar", "tetra.d_Otar_element",
11125
16
        FT_NONE, BASE_NONE, NULL, 0,
11126
16
        NULL, HFILL }},
11127
16
    { &hf_tetra_d_Authentication,
11128
16
      { "d-Authentication", "tetra.d_Authentication_element",
11129
16
        FT_NONE, BASE_NONE, NULL, 0,
11130
16
        NULL, HFILL }},
11131
16
    { &hf_tetra_d_Authentication_Reject,
11132
16
      { "d-Authentication-Reject", "tetra.d_Authentication_Reject_element",
11133
16
        FT_NONE, BASE_NONE, NULL, 0,
11134
16
        NULL, HFILL }},
11135
16
    { &hf_tetra_d_Disable,
11136
16
      { "d-Disable", "tetra.d_Disable_element",
11137
16
        FT_NONE, BASE_NONE, NULL, 0,
11138
16
        NULL, HFILL }},
11139
16
    { &hf_tetra_d_Enable,
11140
16
      { "d-Enable", "tetra.d_Enable_element",
11141
16
        FT_NONE, BASE_NONE, NULL, 0,
11142
16
        NULL, HFILL }},
11143
16
    { &hf_tetra_d_Location_Update_Accept,
11144
16
      { "d-Location-Update-Accept", "tetra.d_Location_Update_Accept_element",
11145
16
        FT_NONE, BASE_NONE, NULL, 0,
11146
16
        NULL, HFILL }},
11147
16
    { &hf_tetra_d_Location_Update_Command,
11148
16
      { "d-Location-Update-Command", "tetra.d_Location_Update_Command_element",
11149
16
        FT_NONE, BASE_NONE, NULL, 0,
11150
16
        NULL, HFILL }},
11151
16
    { &hf_tetra_d_Location_Update_Reject,
11152
16
      { "d-Location-Update-Reject", "tetra.d_Location_Update_Reject_element",
11153
16
        FT_NONE, BASE_NONE, NULL, 0,
11154
16
        NULL, HFILL }},
11155
16
    { &hf_tetra_d_MM_reserved2,
11156
16
      { "d-MM-reserved2", "tetra.d_MM_reserved2_element",
11157
16
        FT_NONE, BASE_NONE, NULL, 0,
11158
16
        NULL, HFILL }},
11159
16
    { &hf_tetra_d_Location_Update_Proceeding,
11160
16
      { "d-Location-Update-Proceeding", "tetra.d_Location_Update_Proceeding_element",
11161
16
        FT_NONE, BASE_NONE, NULL, 0,
11162
16
        NULL, HFILL }},
11163
16
    { &hf_tetra_d_Attach_Detach_Group_Identity,
11164
16
      { "d-Attach-Detach-Group-Identity", "tetra.d_Attach_Detach_Group_Identity_element",
11165
16
        FT_NONE, BASE_NONE, NULL, 0,
11166
16
        NULL, HFILL }},
11167
16
    { &hf_tetra_d_Attach_Detach_Group_Identity_Ack,
11168
16
      { "d-Attach-Detach-Group-Identity-Ack", "tetra.d_Attach_Detach_Group_Identity_Ack_element",
11169
16
        FT_NONE, BASE_NONE, NULL, 0,
11170
16
        NULL, HFILL }},
11171
16
    { &hf_tetra_d_MM_Status,
11172
16
      { "d-MM-Status", "tetra.d_MM_Status_element",
11173
16
        FT_NONE, BASE_NONE, NULL, 0,
11174
16
        NULL, HFILL }},
11175
16
    { &hf_tetra_d_MM_reserved5,
11176
16
      { "d-MM-reserved5", "tetra.d_MM_reserved5_element",
11177
16
        FT_NONE, BASE_NONE, NULL, 0,
11178
16
        NULL, HFILL }},
11179
16
    { &hf_tetra_d_MM_reserved6,
11180
16
      { "d-MM-reserved6", "tetra.d_MM_reserved6_element",
11181
16
        FT_NONE, BASE_NONE, NULL, 0,
11182
16
        NULL, HFILL }},
11183
16
    { &hf_tetra_d_MM_Function_Not_Support,
11184
16
      { "d-MM-Function-Not-Support", "tetra.d_MM_Function_Not_Support_element",
11185
16
        FT_NONE, BASE_NONE, NULL, 0,
11186
16
        NULL, HFILL }},
11187
16
    { &hf_tetra_attach_detach_identifier,
11188
16
      { "attach-detach-identifier", "tetra.attach_detach_identifier",
11189
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_attach_detach_identifier_vals), 0,
11190
16
        NULL, HFILL }},
11191
16
    { &hf_tetra_attach,
11192
16
      { "attach", "tetra.attach_element",
11193
16
        FT_NONE, BASE_NONE, NULL, 0,
11194
16
        NULL, HFILL }},
11195
16
    { &hf_tetra_lifetime,
11196
16
      { "lifetime", "tetra.lifetime",
11197
16
        FT_UINT32, BASE_DEC, NULL, 0,
11198
16
        "INTEGER_0_3", HFILL }},
11199
16
    { &hf_tetra_class_of_usage,
11200
16
      { "class-of-usage", "tetra.class_of_usage",
11201
16
        FT_UINT32, BASE_DEC, NULL, 0,
11202
16
        "INTEGER_0_7", HFILL }},
11203
16
    { &hf_tetra_detach,
11204
16
      { "detach", "tetra.detach_element",
11205
16
        FT_NONE, BASE_NONE, NULL, 0,
11206
16
        NULL, HFILL }},
11207
16
    { &hf_tetra_detach_downlike,
11208
16
      { "detach-downlike", "tetra.detach_downlike",
11209
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_detach_downlike_vals), 0,
11210
16
        NULL, HFILL }},
11211
16
    { &hf_tetra_address_type,
11212
16
      { "address-type", "tetra.address_type",
11213
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_address_type_vals), 0,
11214
16
        NULL, HFILL }},
11215
16
    { &hf_tetra_gssi_oct_str,
11216
16
      { "gssi", "tetra.gssi_oct_str",
11217
16
        FT_BYTES, BASE_NONE, NULL, 0,
11218
16
        "OCTET_STRING_SIZE_3", HFILL }},
11219
16
    { &hf_tetra_gssi_extension,
11220
16
      { "gssi-extension", "tetra.gssi_extension_element",
11221
16
        FT_NONE, BASE_NONE, NULL, 0,
11222
16
        NULL, HFILL }},
11223
16
    { &hf_tetra_extension,
11224
16
      { "extension", "tetra.extension",
11225
16
        FT_BYTES, BASE_NONE, NULL, 0,
11226
16
        "OCTET_STRING_SIZE_3", HFILL }},
11227
16
    { &hf_tetra_vgssi,
11228
16
      { "vgssi", "tetra.vgssi",
11229
16
        FT_BYTES, BASE_NONE, NULL, 0,
11230
16
        "OCTET_STRING_SIZE_3", HFILL }},
11231
16
    { &hf_tetra_attach_detach_identifier_01,
11232
16
      { "attach-detach-identifier", "tetra.attach_detach_identifier",
11233
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_attach_detach_identifier_01_vals), 0,
11234
16
        "T_attach_detach_identifier_01", HFILL }},
11235
16
    { &hf_tetra_attach_01,
11236
16
      { "attach", "tetra.attach_element",
11237
16
        FT_NONE, BASE_NONE, NULL, 0,
11238
16
        "T_attach_01", HFILL }},
11239
16
    { &hf_tetra_detach_01,
11240
16
      { "detach", "tetra.detach_element",
11241
16
        FT_NONE, BASE_NONE, NULL, 0,
11242
16
        "T_detach_01", HFILL }},
11243
16
    { &hf_tetra_detach_uplike,
11244
16
      { "detach-uplike", "tetra.detach_uplike",
11245
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_detach_uplike_vals), 0,
11246
16
        NULL, HFILL }},
11247
16
    { &hf_tetra_address_type_01,
11248
16
      { "address-type", "tetra.address_type",
11249
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_address_type_01_vals), 0,
11250
16
        "T_address_type_01", HFILL }},
11251
16
    { &hf_tetra_gssi_extension_01,
11252
16
      { "gssi-extension", "tetra.gssi_extension_element",
11253
16
        FT_NONE, BASE_NONE, NULL, 0,
11254
16
        "T_gssi_extension_01", HFILL }},
11255
16
    { &hf_tetra_location_update_type,
11256
16
      { "location-update-type", "tetra.location_update_type",
11257
16
        FT_UINT32, BASE_DEC, VALS(tetra_UPDATE_TYPE_vals), 0,
11258
16
        "UPDATE_TYPE", HFILL }},
11259
16
    { &hf_tetra_optional_elements_05,
11260
16
      { "optional-elements", "tetra.optional_elements",
11261
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_05_vals), 0,
11262
16
        "T_optional_elements_05", HFILL }},
11263
16
    { &hf_tetra_type2_parameters_03,
11264
16
      { "type2-parameters", "tetra.type2_parameters_element",
11265
16
        FT_NONE, BASE_NONE, NULL, 0,
11266
16
        "T_type2_parameters_03", HFILL }},
11267
16
    { &hf_tetra_ssi_choice,
11268
16
      { "ssi", "tetra.ssi_choice",
11269
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_ssi_choice_vals), 0,
11270
16
        "T_ssi_choice", HFILL }},
11271
16
    { &hf_tetra_ssi_oct_str,
11272
16
      { "ssi", "tetra.ssi_oct_str",
11273
16
        FT_BYTES, BASE_NONE, NULL, 0,
11274
16
        "OCTET_STRING_SIZE_3", HFILL }},
11275
16
    { &hf_tetra_address_extension_choice,
11276
16
      { "address-extension", "tetra.address_extension_choice",
11277
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_address_extension_choice_vals), 0,
11278
16
        "T_address_extension_choice", HFILL }},
11279
16
    { &hf_tetra_address_extension,
11280
16
      { "address-extension", "tetra.address_extension",
11281
16
        FT_BYTES, BASE_NONE, NULL, 0,
11282
16
        "OCTET_STRING_SIZE_3", HFILL }},
11283
16
    { &hf_tetra_subscriber_class_choice,
11284
16
      { "subscriber-class", "tetra.subscriber_class_choice",
11285
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_subscriber_class_choice_vals), 0,
11286
16
        "T_subscriber_class_choice", HFILL }},
11287
16
    { &hf_tetra_energy_saving_mode,
11288
16
      { "energy-saving-mode", "tetra.energy_saving_mode",
11289
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_energy_saving_mode_vals), 0,
11290
16
        NULL, HFILL }},
11291
16
    { &hf_tetra_energy_saving_mode_01,
11292
16
      { "energy-saving-mode", "tetra.energy_saving_mode",
11293
16
        FT_UINT32, BASE_DEC, NULL, 0,
11294
16
        "INTEGER_0_7", HFILL }},
11295
16
    { &hf_tetra_scch_info,
11296
16
      { "scch-info", "tetra.scch_info",
11297
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_scch_info_vals), 0,
11298
16
        NULL, HFILL }},
11299
16
    { &hf_tetra_scch_info_01,
11300
16
      { "scch-info", "tetra.scch_info",
11301
16
        FT_UINT32, BASE_DEC, NULL, 0,
11302
16
        "INTEGER_0_16383", HFILL }},
11303
16
    { &hf_tetra_type3,
11304
16
      { "type3", "tetra.type3",
11305
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_type3_vals), 0,
11306
16
        NULL, HFILL }},
11307
16
    { &hf_tetra_no_type3,
11308
16
      { "no-type3", "tetra.no_type3_element",
11309
16
        FT_NONE, BASE_NONE, NULL, 0,
11310
16
        NULL, HFILL }},
11311
16
    { &hf_tetra_type3_elements,
11312
16
      { "type3-elements", "tetra.type3_elements_element",
11313
16
        FT_NONE, BASE_NONE, NULL, 0,
11314
16
        NULL, HFILL }},
11315
16
    { &hf_tetra_type2_existance,
11316
16
      { "type2-existance", "tetra.type2_existance",
11317
16
        FT_BOOLEAN, BASE_NONE, NULL, 0,
11318
16
        "BOOLEAN", HFILL }},
11319
16
    { &hf_tetra_type3_identifier,
11320
16
      { "type3-identifier", "tetra.type3_identifier",
11321
16
        FT_UINT32, BASE_DEC, VALS(tetra_TYPE3_IDENTIFIER_vals), 0,
11322
16
        NULL, HFILL }},
11323
16
    { &hf_tetra_new_ra,
11324
16
      { "new-ra", "tetra.new_ra",
11325
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_new_ra_vals), 0,
11326
16
        NULL, HFILL }},
11327
16
    { &hf_tetra_new_ra_01,
11328
16
      { "new-ra", "tetra.new_ra",
11329
16
        FT_UINT32, BASE_DEC, NULL, 0,
11330
16
        "INTEGER_0_3", HFILL }},
11331
16
    { &hf_tetra_group_identity_location_accept,
11332
16
      { "group-identity-location-accept", "tetra.group_identity_location_accept",
11333
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_group_identity_location_accept_vals), 0,
11334
16
        NULL, HFILL }},
11335
16
    { &hf_tetra_group_identity_location_accept_01,
11336
16
      { "group-identity-location-accept", "tetra.group_identity_location_accept",
11337
16
        FT_UINT32, BASE_DEC, NULL, 0,
11338
16
        "INTEGER_0_3", HFILL }},
11339
16
    { &hf_tetra_group_predefined_lifetime,
11340
16
      { "group-predefined-lifetime", "tetra.group_predefined_lifetime",
11341
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_group_predefined_lifetime_vals), 0,
11342
16
        NULL, HFILL }},
11343
16
    { &hf_tetra_group_predefined_lifetime_01,
11344
16
      { "group-predefined-lifetime", "tetra.group_predefined_lifetime",
11345
16
        FT_UINT32, BASE_DEC, NULL, 0,
11346
16
        "INTEGER_0_3", HFILL }},
11347
16
    { &hf_tetra_group_identity_downlink,
11348
16
      { "group-identity-downlink", "tetra.group_identity_downlink",
11349
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_group_identity_downlink_vals), 0,
11350
16
        NULL, HFILL }},
11351
16
    { &hf_tetra_group_identity_downlink_01,
11352
16
      { "group-identity-downlink", "tetra.group_identity_downlink",
11353
16
        FT_UINT32, BASE_DEC, NULL, 0,
11354
16
        "INTEGER_0_15", HFILL }},
11355
16
    { &hf_tetra_proprietary,
11356
16
      { "proprietary", "tetra.proprietary",
11357
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_proprietary_vals), 0,
11358
16
        NULL, HFILL }},
11359
16
    { &hf_tetra_proprietary_01,
11360
16
      { "proprietary", "tetra.proprietary",
11361
16
        FT_UINT32, BASE_DEC, NULL, 0,
11362
16
        "INTEGER_0_7", HFILL }},
11363
16
    { &hf_tetra_reject_cause,
11364
16
      { "reject-cause", "tetra.reject_cause",
11365
16
        FT_UINT32, BASE_DEC, NULL, 0,
11366
16
        "INTEGER_0_31", HFILL }},
11367
16
    { &hf_tetra_cipher_control,
11368
16
      { "cipher-control", "tetra.cipher_control",
11369
16
        FT_BOOLEAN, BASE_NONE, NULL, 0,
11370
16
        "BOOLEAN", HFILL }},
11371
16
    { &hf_tetra_status_uplink,
11372
16
      { "status-uplink", "tetra.status_uplink",
11373
16
        FT_UINT32, BASE_DEC, NULL, 0,
11374
16
        "INTEGER_0_63", HFILL }},
11375
16
    { &hf_tetra_scanning_on_off,
11376
16
      { "scanning-on-off", "tetra.scanning_on_off",
11377
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_scanning_on_off_vals), 0,
11378
16
        NULL, HFILL }},
11379
16
    { &hf_tetra_status_downlink,
11380
16
      { "status-downlink", "tetra.status_downlink",
11381
16
        FT_UINT32, BASE_DEC, NULL, 0,
11382
16
        "INTEGER_0_63", HFILL }},
11383
16
    { &hf_tetra_u_Alert,
11384
16
      { "u-Alert", "tetra.u_Alert_element",
11385
16
        FT_NONE, BASE_NONE, NULL, 0,
11386
16
        NULL, HFILL }},
11387
16
    { &hf_tetra_reserved1,
11388
16
      { "reserved1", "tetra.reserved1_element",
11389
16
        FT_NONE, BASE_NONE, NULL, 0,
11390
16
        NULL, HFILL }},
11391
16
    { &hf_tetra_u_Connect,
11392
16
      { "u-Connect", "tetra.u_Connect_element",
11393
16
        FT_NONE, BASE_NONE, NULL, 0,
11394
16
        NULL, HFILL }},
11395
16
    { &hf_tetra_reserved2,
11396
16
      { "reserved2", "tetra.reserved2_element",
11397
16
        FT_NONE, BASE_NONE, NULL, 0,
11398
16
        NULL, HFILL }},
11399
16
    { &hf_tetra_u_Disconnect,
11400
16
      { "u-Disconnect", "tetra.u_Disconnect_element",
11401
16
        FT_NONE, BASE_NONE, NULL, 0,
11402
16
        NULL, HFILL }},
11403
16
    { &hf_tetra_u_Info,
11404
16
      { "u-Info", "tetra.u_Info_element",
11405
16
        FT_NONE, BASE_NONE, NULL, 0,
11406
16
        NULL, HFILL }},
11407
16
    { &hf_tetra_u_Release,
11408
16
      { "u-Release", "tetra.u_Release_element",
11409
16
        FT_NONE, BASE_NONE, NULL, 0,
11410
16
        NULL, HFILL }},
11411
16
    { &hf_tetra_u_Setup,
11412
16
      { "u-Setup", "tetra.u_Setup_element",
11413
16
        FT_NONE, BASE_NONE, NULL, 0,
11414
16
        NULL, HFILL }},
11415
16
    { &hf_tetra_u_Status,
11416
16
      { "u-Status", "tetra.u_Status_element",
11417
16
        FT_NONE, BASE_NONE, NULL, 0,
11418
16
        NULL, HFILL }},
11419
16
    { &hf_tetra_u_Tx_Ceased,
11420
16
      { "u-Tx-Ceased", "tetra.u_Tx_Ceased_element",
11421
16
        FT_NONE, BASE_NONE, NULL, 0,
11422
16
        NULL, HFILL }},
11423
16
    { &hf_tetra_u_Tx_Demand,
11424
16
      { "u-Tx-Demand", "tetra.u_Tx_Demand_element",
11425
16
        FT_NONE, BASE_NONE, NULL, 0,
11426
16
        NULL, HFILL }},
11427
16
    { &hf_tetra_reserved3,
11428
16
      { "reserved3", "tetra.reserved3_element",
11429
16
        FT_NONE, BASE_NONE, NULL, 0,
11430
16
        NULL, HFILL }},
11431
16
    { &hf_tetra_reserved4,
11432
16
      { "reserved4", "tetra.reserved4_element",
11433
16
        FT_NONE, BASE_NONE, NULL, 0,
11434
16
        NULL, HFILL }},
11435
16
    { &hf_tetra_reserved5,
11436
16
      { "reserved5", "tetra.reserved5_element",
11437
16
        FT_NONE, BASE_NONE, NULL, 0,
11438
16
        NULL, HFILL }},
11439
16
    { &hf_tetra_u_Call_Restore,
11440
16
      { "u-Call-Restore", "tetra.u_Call_Restore_element",
11441
16
        FT_NONE, BASE_NONE, NULL, 0,
11442
16
        NULL, HFILL }},
11443
16
    { &hf_tetra_u_SDS_Data,
11444
16
      { "u-SDS-Data", "tetra.u_SDS_Data_element",
11445
16
        FT_NONE, BASE_NONE, NULL, 0,
11446
16
        NULL, HFILL }},
11447
16
    { &hf_tetra_u_Facility,
11448
16
      { "u-Facility", "tetra.u_Facility_element",
11449
16
        FT_NONE, BASE_NONE, NULL, 0,
11450
16
        NULL, HFILL }},
11451
16
    { &hf_tetra_call_identifier,
11452
16
      { "call-identifier", "tetra.call_identifier",
11453
16
        FT_UINT32, BASE_DEC, NULL, 0,
11454
16
        "INTEGER_0_16383", HFILL }},
11455
16
    { &hf_tetra_disconnect_cause,
11456
16
      { "disconnect-cause", "tetra.disconnect_cause",
11457
16
        FT_UINT32, BASE_DEC, NULL, 0,
11458
16
        "INTEGER_0_31", HFILL }},
11459
16
    { &hf_tetra_area_selection,
11460
16
      { "area-selection", "tetra.area_selection",
11461
16
        FT_UINT32, BASE_DEC, NULL, 0,
11462
16
        "INTEGER_0_15", HFILL }},
11463
16
    { &hf_tetra_called_party_type_identifier,
11464
16
      { "called-party-type-identifier", "tetra.called_party_type_identifier",
11465
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_called_party_type_identifier_vals), 0,
11466
16
        NULL, HFILL }},
11467
16
    { &hf_tetra_sna,
11468
16
      { "sna", "tetra.sna",
11469
16
        FT_UINT32, BASE_DEC, NULL, 0,
11470
16
        "INTEGER_0_255", HFILL }},
11471
16
    { &hf_tetra_ssi_extension,
11472
16
      { "ssi-extension", "tetra.ssi_extension",
11473
16
        FT_BYTES, BASE_NONE, NULL, 0,
11474
16
        "BIT_STRING_SIZE_48", HFILL }},
11475
16
    { &hf_tetra_short_data_type_identifier,
11476
16
      { "short-data-type-identifier", "tetra.short_data_type_identifier",
11477
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_short_data_type_identifier_vals), 0,
11478
16
        "T_short_data_type_identifier", HFILL }},
11479
16
    { &hf_tetra_data_1,
11480
16
      { "data-1", "tetra.data_1",
11481
16
        FT_UINT32, BASE_DEC, NULL, 0,
11482
16
        "INTEGER_0_65535", HFILL }},
11483
16
    { &hf_tetra_data_2,
11484
16
      { "data-2", "tetra.data_2",
11485
16
        FT_BYTES, BASE_NONE, NULL, 0,
11486
16
        "OCTET_STRING_SIZE_4", HFILL }},
11487
16
    { &hf_tetra_data_3,
11488
16
      { "data-3", "tetra.data_3",
11489
16
        FT_BYTES, BASE_NONE, NULL, 0,
11490
16
        "BIT_STRING_SIZE_64", HFILL }},
11491
16
    { &hf_tetra_length_indicator_data_4,
11492
16
      { "length-indicator-data-4", "tetra.length_indicator_data_4",
11493
16
        FT_UINT32, BASE_DEC, NULL, 0,
11494
16
        "INTEGER_0_4194304", HFILL }},
11495
16
    { &hf_tetra_called_party_type_identifier_01,
11496
16
      { "called-party-type-identifier", "tetra.called_party_type_identifier",
11497
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_called_party_type_identifier_01_vals), 0,
11498
16
        "T_called_party_type_identifier_01", HFILL }},
11499
16
    { &hf_tetra_short_number_address,
11500
16
      { "short-number-address", "tetra.short_number_address",
11501
16
        FT_UINT32, BASE_DEC, NULL, 0,
11502
16
        "INTEGER_0_255", HFILL }},
11503
16
    { &hf_tetra_called_ssi_called_extension,
11504
16
      { "called-ssi-called-extension", "tetra.called_ssi_called_extension",
11505
16
        FT_BYTES, BASE_NONE, NULL, 0,
11506
16
        "BIT_STRING_SIZE_48", HFILL }},
11507
16
    { &hf_tetra_pre_coded_status,
11508
16
      { "pre-coded-status", "tetra.pre_coded_status",
11509
16
        FT_UINT32, BASE_DEC, NULL, 0,
11510
16
        "INTEGER_0_65535", HFILL }},
11511
16
    { &hf_tetra_call_id,
11512
16
      { "call-id", "tetra.call_id",
11513
16
        FT_UINT32, BASE_DEC, NULL, 0,
11514
16
        "INTEGER_0_16383", HFILL }},
11515
16
    { &hf_tetra_poll_response,
11516
16
      { "poll-response", "tetra.poll_response",
11517
16
        FT_UINT32, BASE_DEC, NULL, 0,
11518
16
        "INTEGER_0_1", HFILL }},
11519
16
    { &hf_tetra_d_Alert,
11520
16
      { "d-Alert", "tetra.d_Alert_element",
11521
16
        FT_NONE, BASE_NONE, NULL, 0,
11522
16
        NULL, HFILL }},
11523
16
    { &hf_tetra_d_Call_Proceeding,
11524
16
      { "d-Call-Proceeding", "tetra.d_Call_Proceeding_element",
11525
16
        FT_NONE, BASE_NONE, NULL, 0,
11526
16
        NULL, HFILL }},
11527
16
    { &hf_tetra_d_Connect,
11528
16
      { "d-Connect", "tetra.d_Connect_element",
11529
16
        FT_NONE, BASE_NONE, NULL, 0,
11530
16
        NULL, HFILL }},
11531
16
    { &hf_tetra_d_Connect_Ack,
11532
16
      { "d-Connect-Ack", "tetra.d_Connect_Ack_element",
11533
16
        FT_NONE, BASE_NONE, NULL, 0,
11534
16
        NULL, HFILL }},
11535
16
    { &hf_tetra_d_Disconnect,
11536
16
      { "d-Disconnect", "tetra.d_Disconnect_element",
11537
16
        FT_NONE, BASE_NONE, NULL, 0,
11538
16
        NULL, HFILL }},
11539
16
    { &hf_tetra_d_Info,
11540
16
      { "d-Info", "tetra.d_Info_element",
11541
16
        FT_NONE, BASE_NONE, NULL, 0,
11542
16
        NULL, HFILL }},
11543
16
    { &hf_tetra_d_Release,
11544
16
      { "d-Release", "tetra.d_Release_element",
11545
16
        FT_NONE, BASE_NONE, NULL, 0,
11546
16
        NULL, HFILL }},
11547
16
    { &hf_tetra_d_Setup,
11548
16
      { "d-Setup", "tetra.d_Setup_element",
11549
16
        FT_NONE, BASE_NONE, NULL, 0,
11550
16
        NULL, HFILL }},
11551
16
    { &hf_tetra_d_Status,
11552
16
      { "d-Status", "tetra.d_Status_element",
11553
16
        FT_NONE, BASE_NONE, NULL, 0,
11554
16
        NULL, HFILL }},
11555
16
    { &hf_tetra_d_Tx_Ceased,
11556
16
      { "d-Tx-Ceased", "tetra.d_Tx_Ceased_element",
11557
16
        FT_NONE, BASE_NONE, NULL, 0,
11558
16
        NULL, HFILL }},
11559
16
    { &hf_tetra_d_Tx_Continue,
11560
16
      { "d-Tx-Continue", "tetra.d_Tx_Continue_element",
11561
16
        FT_NONE, BASE_NONE, NULL, 0,
11562
16
        NULL, HFILL }},
11563
16
    { &hf_tetra_d_Tx_Granted,
11564
16
      { "d-Tx-Granted", "tetra.d_Tx_Granted_element",
11565
16
        FT_NONE, BASE_NONE, NULL, 0,
11566
16
        NULL, HFILL }},
11567
16
    { &hf_tetra_d_Tx_Wait,
11568
16
      { "d-Tx-Wait", "tetra.d_Tx_Wait_element",
11569
16
        FT_NONE, BASE_NONE, NULL, 0,
11570
16
        NULL, HFILL }},
11571
16
    { &hf_tetra_d_Tx_Interrupt,
11572
16
      { "d-Tx-Interrupt", "tetra.d_Tx_Interrupt_element",
11573
16
        FT_NONE, BASE_NONE, NULL, 0,
11574
16
        NULL, HFILL }},
11575
16
    { &hf_tetra_d_Call_Restore,
11576
16
      { "d-Call-Restore", "tetra.d_Call_Restore_element",
11577
16
        FT_NONE, BASE_NONE, NULL, 0,
11578
16
        NULL, HFILL }},
11579
16
    { &hf_tetra_d_SDS_Data,
11580
16
      { "d-SDS-Data", "tetra.d_SDS_Data_element",
11581
16
        FT_NONE, BASE_NONE, NULL, 0,
11582
16
        NULL, HFILL }},
11583
16
    { &hf_tetra_d_Facility,
11584
16
      { "d-Facility", "tetra.d_Facility_element",
11585
16
        FT_NONE, BASE_NONE, NULL, 0,
11586
16
        NULL, HFILL }},
11587
16
    { &hf_tetra_calling_party_type_identifier,
11588
16
      { "calling-party-type-identifier", "tetra.calling_party_type_identifier",
11589
16
        FT_UINT32, BASE_DEC, VALS(tetra_Calling_party_address_type_vals), 0,
11590
16
        "Calling_party_address_type", HFILL }},
11591
16
    { &hf_tetra_short_data_type_identifier_01,
11592
16
      { "short-data-type-identifier", "tetra.short_data_type_identifier",
11593
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_short_data_type_identifier_01_vals), 0,
11594
16
        "T_short_data_type_identifier_01", HFILL }},
11595
16
    { &hf_tetra_data_3_01,
11596
16
      { "data-3", "tetra.data_3",
11597
16
        FT_BYTES, BASE_NONE, NULL, 0,
11598
16
        "OCTET_STRING_SIZE_8", HFILL }},
11599
16
    { &hf_tetra_optional_elements_06,
11600
16
      { "optional-elements", "tetra.optional_elements",
11601
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_06_vals), 0,
11602
16
        "T_optional_elements_06", HFILL }},
11603
16
    { &hf_tetra_type2_element,
11604
16
      { "type2-element", "tetra.type2_element_element",
11605
16
        FT_NONE, BASE_NONE, NULL, 0,
11606
16
        NULL, HFILL }},
11607
16
    { &hf_tetra_notification_indicator,
11608
16
      { "notification-indicator", "tetra.notification_indicator",
11609
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_notification_indicator_vals), 0,
11610
16
        NULL, HFILL }},
11611
16
    { &hf_tetra_notification_indicator_element,
11612
16
      { "notification-indicator-element", "tetra.notification_indicator_element",
11613
16
        FT_UINT32, BASE_DEC, NULL, 0,
11614
16
        "INTEGER_0_63", HFILL }},
11615
16
    { &hf_tetra_reset_call_time_out_timer,
11616
16
      { "reset-call-time-out-timer", "tetra.reset_call_time_out_timer",
11617
16
        FT_UINT32, BASE_DEC, NULL, 0,
11618
16
        "INTEGER_0_1", HFILL }},
11619
16
    { &hf_tetra_poll_request,
11620
16
      { "poll-request", "tetra.poll_request",
11621
16
        FT_UINT32, BASE_DEC, NULL, 0,
11622
16
        "INTEGER_0_1", HFILL }},
11623
16
    { &hf_tetra_optional_elements_07,
11624
16
      { "optional-elements", "tetra.optional_elements",
11625
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_07_vals), 0,
11626
16
        "T_optional_elements_07", HFILL }},
11627
16
    { &hf_tetra_type2_element_01,
11628
16
      { "type2-element", "tetra.type2_element_element",
11629
16
        FT_NONE, BASE_NONE, NULL, 0,
11630
16
        "T_type2_element_01", HFILL }},
11631
16
    { &hf_tetra_new_call_identifier,
11632
16
      { "new-call-identifier", "tetra.new_call_identifier",
11633
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_new_call_identifier_vals), 0,
11634
16
        NULL, HFILL }},
11635
16
    { &hf_tetra_new_call_identifier_element,
11636
16
      { "new-call-identifier-element", "tetra.new_call_identifier_element",
11637
16
        FT_UINT32, BASE_DEC, NULL, 0,
11638
16
        "INTEGER_0_16383", HFILL }},
11639
16
    { &hf_tetra_call_time_out,
11640
16
      { "call-time-out", "tetra.call_time_out",
11641
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_call_time_out_vals), 0,
11642
16
        NULL, HFILL }},
11643
16
    { &hf_tetra_call_time_out_01,
11644
16
      { "call-time-out", "tetra.call_time_out",
11645
16
        FT_UINT32, BASE_DEC, NULL, 0,
11646
16
        "INTEGER_0_15", HFILL }},
11647
16
    { &hf_tetra_call_time_out_set_up_phase,
11648
16
      { "call-time-out-set-up-phase", "tetra.call_time_out_set_up_phase",
11649
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_call_time_out_set_up_phase_vals), 0,
11650
16
        "T_call_time_out_set_up_phase", HFILL }},
11651
16
    { &hf_tetra_call_time_out_set_up_phase_01,
11652
16
      { "call-time-out-set-up-phase", "tetra.call_time_out_set_up_phase",
11653
16
        FT_UINT32, BASE_DEC, NULL, 0,
11654
16
        "INTEGER_0_7", HFILL }},
11655
16
    { &hf_tetra_call_ownership,
11656
16
      { "call-ownership", "tetra.call_ownership",
11657
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_call_ownership_vals), 0,
11658
16
        NULL, HFILL }},
11659
16
    { &hf_tetra_call_ownership_01,
11660
16
      { "call-ownership", "tetra.call_ownership",
11661
16
        FT_UINT32, BASE_DEC, NULL, 0,
11662
16
        "INTEGER_0_1", HFILL }},
11663
16
    { &hf_tetra_modify,
11664
16
      { "modify", "tetra.modify",
11665
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_modify_vals), 0,
11666
16
        NULL, HFILL }},
11667
16
    { &hf_tetra_modify_01,
11668
16
      { "modify", "tetra.modify_element",
11669
16
        FT_NONE, BASE_NONE, NULL, 0,
11670
16
        "Modify_type", HFILL }},
11671
16
    { &hf_tetra_call_status,
11672
16
      { "call-status", "tetra.call_status",
11673
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_call_status_vals), 0,
11674
16
        NULL, HFILL }},
11675
16
    { &hf_tetra_call_status_01,
11676
16
      { "call-status", "tetra.call_status",
11677
16
        FT_UINT32, BASE_DEC, NULL, 0,
11678
16
        "INTEGER_0_7", HFILL }},
11679
16
    { &hf_tetra_temporary_address,
11680
16
      { "temporary-address", "tetra.temporary_address",
11681
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_temporary_address_vals), 0,
11682
16
        NULL, HFILL }},
11683
16
    { &hf_tetra_temporary_address_01,
11684
16
      { "temporary-address", "tetra.temporary_address",
11685
16
        FT_UINT32, BASE_DEC, NULL, 0,
11686
16
        "INTEGER_0_16777215", HFILL }},
11687
16
    { &hf_tetra_notification_indicator_01,
11688
16
      { "notification-indicator", "tetra.notification_indicator",
11689
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_notification_indicator_01_vals), 0,
11690
16
        "T_notification_indicator_01", HFILL }},
11691
16
    { &hf_tetra_poll_response_percentage,
11692
16
      { "poll-response-percentage", "tetra.poll_response_percentage",
11693
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_poll_response_percentage_vals), 0,
11694
16
        NULL, HFILL }},
11695
16
    { &hf_tetra_poll_response_percentage_01,
11696
16
      { "poll-response-percentage", "tetra.poll_response_percentage",
11697
16
        FT_UINT32, BASE_DEC, NULL, 0,
11698
16
        "INTEGER_0_63", HFILL }},
11699
16
    { &hf_tetra_poll_response_number,
11700
16
      { "poll-response-number", "tetra.poll_response_number",
11701
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_poll_response_number_vals), 0,
11702
16
        NULL, HFILL }},
11703
16
    { &hf_tetra_poll_response_number_01,
11704
16
      { "poll-response-number", "tetra.poll_response_number",
11705
16
        FT_UINT32, BASE_DEC, NULL, 0,
11706
16
        "INTEGER_0_63", HFILL }},
11707
16
    { &hf_tetra_transmission_request_permission,
11708
16
      { "transmission-request-permission", "tetra.transmission_request_permission",
11709
16
        FT_UINT32, BASE_DEC, NULL, 0,
11710
16
        "INTEGER_0_1", HFILL }},
11711
16
    { &hf_tetra_optional_elements_08,
11712
16
      { "optional-elements", "tetra.optional_elements",
11713
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_08_vals), 0,
11714
16
        "T_optional_elements_08", HFILL }},
11715
16
    { &hf_tetra_type2_element_02,
11716
16
      { "type2-element", "tetra.type2_element_element",
11717
16
        FT_NONE, BASE_NONE, NULL, 0,
11718
16
        "T_type2_element_02", HFILL }},
11719
16
    { &hf_tetra_notification_indicator_02,
11720
16
      { "notification-indicator", "tetra.notification_indicator",
11721
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_notification_indicator_02_vals), 0,
11722
16
        "T_notification_indicator_02", HFILL }},
11723
16
    { &hf_tetra_continue,
11724
16
      { "continue", "tetra.continue",
11725
16
        FT_UINT32, BASE_DEC, NULL, 0,
11726
16
        "INTEGER_0_1", HFILL }},
11727
16
    { &hf_tetra_optional_elements_09,
11728
16
      { "optional-elements", "tetra.optional_elements",
11729
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_09_vals), 0,
11730
16
        "T_optional_elements_09", HFILL }},
11731
16
    { &hf_tetra_type2_element_03,
11732
16
      { "type2-element", "tetra.type2_element_element",
11733
16
        FT_NONE, BASE_NONE, NULL, 0,
11734
16
        "T_type2_element_03", HFILL }},
11735
16
    { &hf_tetra_notification_indicator_03,
11736
16
      { "notification-indicator", "tetra.notification_indicator",
11737
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_notification_indicator_03_vals), 0,
11738
16
        "T_notification_indicator_03", HFILL }},
11739
16
    { &hf_tetra_request_to_append_LA,
11740
16
      { "request-to-append-LA", "tetra.request_to_append_LA",
11741
16
        FT_BOOLEAN, BASE_NONE, NULL, 0,
11742
16
        "BOOLEAN", HFILL }},
11743
16
    { &hf_tetra_cipher_control_choice,
11744
16
      { "cipher-control", "tetra.cipher_control_choice",
11745
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_cipher_control_choice_vals), 0,
11746
16
        "T_cipher_control_choice", HFILL }},
11747
16
    { &hf_tetra_no_cipher,
11748
16
      { "no-cipher", "tetra.no_cipher_element",
11749
16
        FT_NONE, BASE_NONE, NULL, 0,
11750
16
        NULL, HFILL }},
11751
16
    { &hf_tetra_ciphering_parameters,
11752
16
      { "ciphering-parameters", "tetra.ciphering_parameters",
11753
16
        FT_UINT32, BASE_DEC, NULL, 0,
11754
16
        "INTEGER_0_1023", HFILL }},
11755
16
    { &hf_tetra_optional_elements_10,
11756
16
      { "optional-elements", "tetra.optional_elements",
11757
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_10_vals), 0,
11758
16
        "T_optional_elements_10", HFILL }},
11759
16
    { &hf_tetra_type2_parameters_04,
11760
16
      { "type2-parameters", "tetra.type2_parameters_element",
11761
16
        FT_NONE, BASE_NONE, NULL, 0,
11762
16
        "T_type2_parameters_04", HFILL }},
11763
16
    { &hf_tetra_class_of_MS,
11764
16
      { "class-of-MS", "tetra.class_of_MS",
11765
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_class_of_MS_vals), 0,
11766
16
        NULL, HFILL }},
11767
16
    { &hf_tetra_class_of_MS_01,
11768
16
      { "class-of-MS", "tetra.class_of_MS",
11769
16
        FT_UINT32, BASE_DEC, NULL, 0,
11770
16
        "INTEGER_0_16777215", HFILL }},
11771
16
    { &hf_tetra_energy_saving_mode_02,
11772
16
      { "energy-saving-mode", "tetra.energy_saving_mode",
11773
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_energy_saving_mode_01_vals), 0,
11774
16
        "T_energy_saving_mode_01", HFILL }},
11775
16
    { &hf_tetra_la_information,
11776
16
      { "la-information", "tetra.la_information",
11777
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_la_information_vals), 0,
11778
16
        NULL, HFILL }},
11779
16
    { &hf_tetra_la_information_01,
11780
16
      { "la-information", "tetra.la_information",
11781
16
        FT_UINT32, BASE_DEC, NULL, 0,
11782
16
        "INTEGER_0_16383", HFILL }},
11783
16
    { &hf_tetra_ssi_choice_01,
11784
16
      { "ssi", "tetra.ssi_choice",
11785
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_ssi_choice_01_vals), 0,
11786
16
        "T_ssi_choice_01", HFILL }},
11787
16
    { &hf_tetra_address_extension_choice_01,
11788
16
      { "address-extension", "tetra.address_extension_choice",
11789
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_address_extension_choice_01_vals), 0,
11790
16
        "T_address_extension_choice_01", HFILL }},
11791
16
    { &hf_tetra_type3_01,
11792
16
      { "type3", "tetra.type3",
11793
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_type3_01_vals), 0,
11794
16
        "T_type3_01", HFILL }},
11795
16
    { &hf_tetra_type3_elements_01,
11796
16
      { "type3-elements", "tetra.type3_elements_element",
11797
16
        FT_NONE, BASE_NONE, NULL, 0,
11798
16
        "T_type3_elements_01", HFILL }},
11799
16
    { &hf_tetra_group_identity_location_demand,
11800
16
      { "group-identity-location-demand", "tetra.group_identity_location_demand",
11801
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_group_identity_location_demand_vals), 0,
11802
16
        NULL, HFILL }},
11803
16
    { &hf_tetra_group_identity_location_demand_01,
11804
16
      { "group-identity-location-demand", "tetra.group_identity_location_demand",
11805
16
        FT_UINT32, BASE_DEC, NULL, 0,
11806
16
        "INTEGER_0_3", HFILL }},
11807
16
    { &hf_tetra_group_report_response_choice,
11808
16
      { "group-report-response", "tetra.group_report_response_choice",
11809
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_group_report_response_choice_vals), 0,
11810
16
        "T_group_report_response_choice", HFILL }},
11811
16
    { &hf_tetra_group_report_response,
11812
16
      { "group-report-response", "tetra.group_report_response",
11813
16
        FT_BOOLEAN, BASE_NONE, NULL, 0,
11814
16
        "BOOLEAN", HFILL }},
11815
16
    { &hf_tetra_group_identity_uplink,
11816
16
      { "group-identity-uplink", "tetra.group_identity_uplink",
11817
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_group_identity_uplink_vals), 0,
11818
16
        NULL, HFILL }},
11819
16
    { &hf_tetra_group_identity_uplink_01,
11820
16
      { "group-identity-uplink", "tetra.group_identity_uplink",
11821
16
        FT_UINT32, BASE_DEC, NULL, 0,
11822
16
        "INTEGER_0_15", HFILL }},
11823
16
    { &hf_tetra_proprietary_02,
11824
16
      { "proprietary", "tetra.proprietary",
11825
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_proprietary_01_vals), 0,
11826
16
        "T_proprietary_01", HFILL }},
11827
16
    { &hf_tetra_group_identity_report,
11828
16
      { "group-identity-report", "tetra.group_identity_report",
11829
16
        FT_BOOLEAN, BASE_NONE, NULL, 0,
11830
16
        "BOOLEAN", HFILL }},
11831
16
    { &hf_tetra_group_identity_attach_detach_mode,
11832
16
      { "group-identity-attach-detach-mode", "tetra.group_identity_attach_detach_mode",
11833
16
        FT_BOOLEAN, BASE_NONE, NULL, 0,
11834
16
        "BOOLEAN", HFILL }},
11835
16
    { &hf_tetra_optional_elements_11,
11836
16
      { "optional-elements", "tetra.optional_elements",
11837
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_11_vals), 0,
11838
16
        "T_optional_elements_11", HFILL }},
11839
16
    { &hf_tetra_type2_element_04,
11840
16
      { "type2-element", "tetra.type2_element_element",
11841
16
        FT_NONE, BASE_NONE, NULL, 0,
11842
16
        "T_type2_element_04", HFILL }},
11843
16
    { &hf_tetra_type3_02,
11844
16
      { "type3", "tetra.type3",
11845
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_type3_02_vals), 0,
11846
16
        "T_type3_02", HFILL }},
11847
16
    { &hf_tetra_type3_elements_02,
11848
16
      { "type3-elements", "tetra.type3_elements_element",
11849
16
        FT_NONE, BASE_NONE, NULL, 0,
11850
16
        "T_type3_elements_02", HFILL }},
11851
16
    { &hf_tetra_length,
11852
16
      { "length", "tetra.length",
11853
16
        FT_UINT32, BASE_DEC, NULL, 0,
11854
16
        "INTEGER_0_2047", HFILL }},
11855
16
    { &hf_tetra_repeat_num,
11856
16
      { "repeat-num", "tetra.repeat_num",
11857
16
        FT_UINT32, BASE_DEC, NULL, 0,
11858
16
        "INTEGER_0_63", HFILL }},
11859
16
    { &hf_tetra_group_identity_uplink_02,
11860
16
      { "group-identity-uplink", "tetra.group_identity_uplink_element",
11861
16
        FT_NONE, BASE_NONE, NULL, 0,
11862
16
        NULL, HFILL }},
11863
16
    { &hf_tetra_group_identity_ack_type,
11864
16
      { "group-identity-ack-type", "tetra.group_identity_ack_type",
11865
16
        FT_BOOLEAN, BASE_NONE, NULL, 0,
11866
16
        "BOOLEAN", HFILL }},
11867
16
    { &hf_tetra_optional_elements_12,
11868
16
      { "optional-elements", "tetra.optional_elements",
11869
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_12_vals), 0,
11870
16
        "T_optional_elements_12", HFILL }},
11871
16
    { &hf_tetra_type2_element_05,
11872
16
      { "type2-element", "tetra.type2_element_element",
11873
16
        FT_NONE, BASE_NONE, NULL, 0,
11874
16
        "T_type2_element_05", HFILL }},
11875
16
    { &hf_tetra_type3_03,
11876
16
      { "type3", "tetra.type3",
11877
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_type3_03_vals), 0,
11878
16
        "T_type3_03", HFILL }},
11879
16
    { &hf_tetra_type3_elements_03,
11880
16
      { "type3-elements", "tetra.type3_elements_element",
11881
16
        FT_NONE, BASE_NONE, NULL, 0,
11882
16
        "T_type3_elements_03", HFILL }},
11883
16
    { &hf_tetra_hook_method_selection,
11884
16
      { "hook-method-selection", "tetra.hook_method_selection",
11885
16
        FT_BOOLEAN, BASE_NONE, NULL, 0,
11886
16
        "BOOLEAN", HFILL }},
11887
16
    { &hf_tetra_simple_duplex_selection,
11888
16
      { "simple-duplex-selection", "tetra.simple_duplex_selection",
11889
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_simple_duplex_selection_vals), 0,
11890
16
        NULL, HFILL }},
11891
16
    { &hf_tetra_basic_service_information,
11892
16
      { "basic-service-information", "tetra.basic_service_information_element",
11893
16
        FT_NONE, BASE_NONE, NULL, 0,
11894
16
        NULL, HFILL }},
11895
16
    { &hf_tetra_request_transmit_send_data,
11896
16
      { "request-transmit-send-data", "tetra.request_transmit_send_data",
11897
16
        FT_UINT32, BASE_DEC, NULL, 0,
11898
16
        "INTEGER_0_1", HFILL }},
11899
16
    { &hf_tetra_call_priority,
11900
16
      { "call-priority", "tetra.call_priority",
11901
16
        FT_UINT32, BASE_DEC, NULL, 0,
11902
16
        "INTEGER_0_15", HFILL }},
11903
16
    { &hf_tetra_clir_control,
11904
16
      { "clir-control", "tetra.clir_control",
11905
16
        FT_UINT32, BASE_DEC, NULL, 0,
11906
16
        "INTEGER_0_3", HFILL }},
11907
16
    { &hf_tetra_called_party_address,
11908
16
      { "called-party-address", "tetra.called_party_address",
11909
16
        FT_UINT32, BASE_DEC, VALS(tetra_Calling_party_address_type_vals), 0,
11910
16
        "Called_party_address_type", HFILL }},
11911
16
    { &hf_tetra_optional_elements_13,
11912
16
      { "optional-elements", "tetra.optional_elements",
11913
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_13_vals), 0,
11914
16
        "T_optional_elements_13", HFILL }},
11915
16
    { &hf_tetra_type2_parameters_05,
11916
16
      { "type2-parameters", "tetra.type2_parameters_element",
11917
16
        FT_NONE, BASE_NONE, NULL, 0,
11918
16
        "T_type2_parameters_05", HFILL }},
11919
16
    { &hf_tetra_external_subscriber_number,
11920
16
      { "external-subscriber-number", "tetra.external_subscriber_number",
11921
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_external_subscriber_number_vals), 0,
11922
16
        NULL, HFILL }},
11923
16
    { &hf_tetra_external_subscriber_number_01,
11924
16
      { "external-subscriber-number", "tetra.external_subscriber_number",
11925
16
        FT_UINT32, BASE_DEC, NULL, 0,
11926
16
        "INTEGER_0_31", HFILL }},
11927
16
    { &hf_tetra_prop,
11928
16
      { "prop", "tetra.prop",
11929
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_prop_vals), 0,
11930
16
        NULL, HFILL }},
11931
16
    { &hf_tetra_prop_01,
11932
16
      { "prop", "tetra.prop_element",
11933
16
        FT_NONE, BASE_NONE, NULL, 0,
11934
16
        "Proprietary", HFILL }},
11935
16
    { &hf_tetra_circuit_mode,
11936
16
      { "circuit-mode", "tetra.circuit_mode",
11937
16
        FT_UINT32, BASE_DEC, VALS(tetra_CIRCUIT_vals), 0,
11938
16
        "CIRCUIT", HFILL }},
11939
16
    { &hf_tetra_encryption,
11940
16
      { "encryption", "tetra.encryption",
11941
16
        FT_UINT32, BASE_DEC, NULL, 0,
11942
16
        "INTEGER_0_1", HFILL }},
11943
16
    { &hf_tetra_communication,
11944
16
      { "communication", "tetra.communication",
11945
16
        FT_UINT32, BASE_DEC, NULL, 0,
11946
16
        "INTEGER_0_3", HFILL }},
11947
16
    { &hf_tetra_slots_or_speech,
11948
16
      { "slots-or-speech", "tetra.slots_or_speech",
11949
16
        FT_UINT32, BASE_DEC, NULL, 0,
11950
16
        "INTEGER_0_3", HFILL }},
11951
16
    { &hf_tetra_simplex_duplex_selection,
11952
16
      { "simplex-duplex-selection", "tetra.simplex_duplex_selection",
11953
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_simplex_duplex_selection_vals), 0,
11954
16
        NULL, HFILL }},
11955
16
    { &hf_tetra_optional_elements_14,
11956
16
      { "optional-elements", "tetra.optional_elements",
11957
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_14_vals), 0,
11958
16
        "T_optional_elements_14", HFILL }},
11959
16
    { &hf_tetra_type2_parameters_06,
11960
16
      { "type2-parameters", "tetra.type2_parameters_element",
11961
16
        FT_NONE, BASE_NONE, NULL, 0,
11962
16
        "T_type2_parameters_06", HFILL }},
11963
16
    { &hf_tetra_basic_service_information_01,
11964
16
      { "basic-service-information", "tetra.basic_service_information",
11965
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_basic_service_information_vals), 0,
11966
16
        NULL, HFILL }},
11967
16
    { &hf_tetra_prop_02,
11968
16
      { "prop", "tetra.prop",
11969
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_prop_01_vals), 0,
11970
16
        "T_prop_01", HFILL }},
11971
16
    { &hf_tetra_simplex_duplex_selection_01,
11972
16
      { "simplex-duplex-selection", "tetra.simplex_duplex_selection",
11973
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_simplex_duplex_selection_01_vals), 0,
11974
16
        "T_simplex_duplex_selection_01", HFILL }},
11975
16
    { &hf_tetra_optional_elements_15,
11976
16
      { "optional-elements", "tetra.optional_elements",
11977
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_15_vals), 0,
11978
16
        "T_optional_elements_15", HFILL }},
11979
16
    { &hf_tetra_type2_parameters_07,
11980
16
      { "type2-parameters", "tetra.type2_parameters_element",
11981
16
        FT_NONE, BASE_NONE, NULL, 0,
11982
16
        "T_type2_parameters_07", HFILL }},
11983
16
    { &hf_tetra_basic_service_information_02,
11984
16
      { "basic-service-information", "tetra.basic_service_information",
11985
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_basic_service_information_01_vals), 0,
11986
16
        "T_basic_service_information_01", HFILL }},
11987
16
    { &hf_tetra_prop_03,
11988
16
      { "prop", "tetra.prop",
11989
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_prop_02_vals), 0,
11990
16
        "T_prop_02", HFILL }},
11991
16
    { &hf_tetra_optional_elements_16,
11992
16
      { "optional-elements", "tetra.optional_elements",
11993
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_16_vals), 0,
11994
16
        "T_optional_elements_16", HFILL }},
11995
16
    { &hf_tetra_type2_parameters_08,
11996
16
      { "type2-parameters", "tetra.type2_parameters_element",
11997
16
        FT_NONE, BASE_NONE, NULL, 0,
11998
16
        "T_type2_parameters_08", HFILL }},
11999
16
    { &hf_tetra_prop_04,
12000
16
      { "prop", "tetra.prop",
12001
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_prop_03_vals), 0,
12002
16
        "T_prop_03", HFILL }},
12003
16
    { &hf_tetra_tx_demand_priority,
12004
16
      { "tx-demand-priority", "tetra.tx_demand_priority",
12005
16
        FT_UINT32, BASE_DEC, NULL, 0,
12006
16
        "INTEGER_0_3", HFILL }},
12007
16
    { &hf_tetra_encryption_control,
12008
16
      { "encryption-control", "tetra.encryption_control",
12009
16
        FT_UINT32, BASE_DEC, NULL, 0,
12010
16
        "INTEGER_0_1", HFILL }},
12011
16
    { &hf_tetra_optional_elements_17,
12012
16
      { "optional-elements", "tetra.optional_elements",
12013
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_17_vals), 0,
12014
16
        "T_optional_elements_17", HFILL }},
12015
16
    { &hf_tetra_type2_parameters_09,
12016
16
      { "type2-parameters", "tetra.type2_parameters_element",
12017
16
        FT_NONE, BASE_NONE, NULL, 0,
12018
16
        "T_type2_parameters_09", HFILL }},
12019
16
    { &hf_tetra_prop_05,
12020
16
      { "prop", "tetra.prop",
12021
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_prop_04_vals), 0,
12022
16
        "T_prop_04", HFILL }},
12023
16
    { &hf_tetra_optional_elements_18,
12024
16
      { "optional-elements", "tetra.optional_elements",
12025
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_18_vals), 0,
12026
16
        "T_optional_elements_18", HFILL }},
12027
16
    { &hf_tetra_type2_parameters_10,
12028
16
      { "type2-parameters", "tetra.type2_parameters_element",
12029
16
        FT_NONE, BASE_NONE, NULL, 0,
12030
16
        "T_type2_parameters_10", HFILL }},
12031
16
    { &hf_tetra_prop_06,
12032
16
      { "prop", "tetra.prop",
12033
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_prop_05_vals), 0,
12034
16
        "T_prop_05", HFILL }},
12035
16
    { &hf_tetra_request_to_transmit_send_data,
12036
16
      { "request-to-transmit-send-data", "tetra.request_to_transmit_send_data",
12037
16
        FT_UINT32, BASE_DEC, NULL, 0,
12038
16
        "INTEGER_0_1", HFILL }},
12039
16
    { &hf_tetra_other_party_address,
12040
16
      { "other-party-address", "tetra.other_party_address",
12041
16
        FT_UINT32, BASE_DEC, VALS(tetra_Calling_party_address_type_vals), 0,
12042
16
        "Other_party_address_type", HFILL }},
12043
16
    { &hf_tetra_optional_elements_19,
12044
16
      { "optional-elements", "tetra.optional_elements",
12045
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_19_vals), 0,
12046
16
        "T_optional_elements_19", HFILL }},
12047
16
    { &hf_tetra_type2_parameters_11,
12048
16
      { "type2-parameters", "tetra.type2_parameters_element",
12049
16
        FT_NONE, BASE_NONE, NULL, 0,
12050
16
        "T_type2_parameters_11", HFILL }},
12051
16
    { &hf_tetra_prop_07,
12052
16
      { "prop", "tetra.prop",
12053
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_prop_06_vals), 0,
12054
16
        "T_prop_06", HFILL }},
12055
16
    { &hf_tetra_hook_method_selection_integer,
12056
16
      { "hook-method-selection", "tetra.hook_method_selection_integer",
12057
16
        FT_UINT32, BASE_DEC, NULL, 0,
12058
16
        "INTEGER_0_1", HFILL }},
12059
16
    { &hf_tetra_simplex_duplex_selection_02,
12060
16
      { "simplex-duplex-selection", "tetra.simplex_duplex_selection",
12061
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_simplex_duplex_selection_02_vals), 0,
12062
16
        "T_simplex_duplex_selection_02", HFILL }},
12063
16
    { &hf_tetra_transmission_grant,
12064
16
      { "transmission-grant", "tetra.transmission_grant",
12065
16
        FT_UINT32, BASE_DEC, NULL, 0,
12066
16
        "INTEGER_0_3", HFILL }},
12067
16
    { &hf_tetra_optional_elements_20,
12068
16
      { "optional-elements", "tetra.optional_elements",
12069
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_20_vals), 0,
12070
16
        "T_optional_elements_20", HFILL }},
12071
16
    { &hf_tetra_type2_element_06,
12072
16
      { "type2-element", "tetra.type2_element_element",
12073
16
        FT_NONE, BASE_NONE, NULL, 0,
12074
16
        "T_type2_element_06", HFILL }},
12075
16
    { &hf_tetra_notification_indicator_04,
12076
16
      { "notification-indicator", "tetra.notification_indicator",
12077
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_notification_indicator_04_vals), 0,
12078
16
        "T_notification_indicator_04", HFILL }},
12079
16
    { &hf_tetra_temporary_address_02,
12080
16
      { "temporary-address", "tetra.temporary_address",
12081
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_temporary_address_01_vals), 0,
12082
16
        "T_temporary_address_01", HFILL }},
12083
16
    { &hf_tetra_temporary_address_element,
12084
16
      { "temporary-address-element", "tetra.temporary_address_element",
12085
16
        FT_UINT32, BASE_DEC, NULL, 0,
12086
16
        "INTEGER_0_16777215", HFILL }},
12087
16
    { &hf_tetra_calling_party_type_identifier_01,
12088
16
      { "calling-party-type-identifier", "tetra.calling_party_type_identifier",
12089
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_calling_party_type_identifier_vals), 0,
12090
16
        NULL, HFILL }},
12091
16
    { &hf_tetra_calling_party_type_identifier_element,
12092
16
      { "calling-party-type-identifier-element", "tetra.calling_party_type_identifier_element",
12093
16
        FT_UINT32, BASE_DEC, VALS(tetra_Calling_party_address_type_vals), 0,
12094
16
        "Calling_party_address_type", HFILL }},
12095
16
    { &hf_tetra_external_subscriber_number_02,
12096
16
      { "external-subscriber-number", "tetra.external_subscriber_number",
12097
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_external_subscriber_number_01_vals), 0,
12098
16
        "T_external_subscriber_number_01", HFILL }},
12099
16
    { &hf_tetra_external_subscriber_number_03,
12100
16
      { "external-subscriber-number", "tetra.external_subscriber_number",
12101
16
        FT_UINT32, BASE_DEC, NULL, 0,
12102
16
        "INTEGER_0_15", HFILL }},
12103
16
    { &hf_tetra_prop_08,
12104
16
      { "prop", "tetra.prop",
12105
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_prop_07_vals), 0,
12106
16
        "T_prop_07", HFILL }},
12107
16
    { &hf_tetra_call_time_out_setup_phase,
12108
16
      { "call-time-out-setup-phase", "tetra.call_time_out_setup_phase",
12109
16
        FT_UINT32, BASE_DEC, NULL, 0,
12110
16
        "INTEGER_0_7", HFILL }},
12111
16
    { &hf_tetra_simplex_duplex_selection_03,
12112
16
      { "simplex-duplex-selection", "tetra.simplex_duplex_selection",
12113
16
        FT_UINT32, BASE_DEC, NULL, 0,
12114
16
        "INTEGER_0_1", HFILL }},
12115
16
    { &hf_tetra_optional_elements_21,
12116
16
      { "optional-elements", "tetra.optional_elements",
12117
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_21_vals), 0,
12118
16
        "T_optional_elements_21", HFILL }},
12119
16
    { &hf_tetra_type2_parameters_12,
12120
16
      { "type2-parameters", "tetra.type2_parameters_element",
12121
16
        FT_NONE, BASE_NONE, NULL, 0,
12122
16
        "T_type2_parameters_12", HFILL }},
12123
16
    { &hf_tetra_basic_service_information_03,
12124
16
      { "basic-service-information", "tetra.basic_service_information",
12125
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_basic_service_information_02_vals), 0,
12126
16
        "T_basic_service_information_02", HFILL }},
12127
16
    { &hf_tetra_call_status_02,
12128
16
      { "call-status", "tetra.call_status",
12129
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_call_status_01_vals), 0,
12130
16
        "T_call_status_01", HFILL }},
12131
16
    { &hf_tetra_notification_indicator_05,
12132
16
      { "notification-indicator", "tetra.notification_indicator",
12133
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_notification_indicator_05_vals), 0,
12134
16
        "T_notification_indicator_05", HFILL }},
12135
16
    { &hf_tetra_notification_indicator_06,
12136
16
      { "notification-indicator", "tetra.notification_indicator",
12137
16
        FT_UINT32, BASE_DEC, NULL, 0,
12138
16
        "INTEGER_0_63", HFILL }},
12139
16
    { &hf_tetra_prop_09,
12140
16
      { "prop", "tetra.prop",
12141
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_prop_08_vals), 0,
12142
16
        "T_prop_08", HFILL }},
12143
16
    { &hf_tetra_simplex_duplex_selection_04,
12144
16
      { "simplex-duplex-selection", "tetra.simplex_duplex_selection",
12145
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_simplex_duplex_selection_03_vals), 0,
12146
16
        "T_simplex_duplex_selection_03", HFILL }},
12147
16
    { &hf_tetra_call_queued,
12148
16
      { "call-queued", "tetra.call_queued",
12149
16
        FT_BOOLEAN, BASE_NONE, NULL, 0,
12150
16
        "BOOLEAN", HFILL }},
12151
16
    { &hf_tetra_optional_elements_22,
12152
16
      { "optional-elements", "tetra.optional_elements",
12153
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_22_vals), 0,
12154
16
        "T_optional_elements_22", HFILL }},
12155
16
    { &hf_tetra_type2_parameters_13,
12156
16
      { "type2-parameters", "tetra.type2_parameters_element",
12157
16
        FT_NONE, BASE_NONE, NULL, 0,
12158
16
        "T_type2_parameters_13", HFILL }},
12159
16
    { &hf_tetra_basic_service_infomation,
12160
16
      { "basic-service-infomation", "tetra.basic_service_infomation",
12161
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_basic_service_infomation_vals), 0,
12162
16
        NULL, HFILL }},
12163
16
    { &hf_tetra_basic_service_infomation_01,
12164
16
      { "basic-service-infomation", "tetra.basic_service_infomation_element",
12165
16
        FT_NONE, BASE_NONE, NULL, 0,
12166
16
        "Basic_service_information", HFILL }},
12167
16
    { &hf_tetra_notification_indicator_07,
12168
16
      { "notification-indicator", "tetra.notification_indicator",
12169
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_notification_indicator_06_vals), 0,
12170
16
        "T_notification_indicator_06", HFILL }},
12171
16
    { &hf_tetra_prop_10,
12172
16
      { "prop", "tetra.prop",
12173
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_prop_09_vals), 0,
12174
16
        "T_prop_09", HFILL }},
12175
16
    { &hf_tetra_simplex_duplex_selection_05,
12176
16
      { "simplex-duplex-selection", "tetra.simplex_duplex_selection",
12177
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_simplex_duplex_selection_04_vals), 0,
12178
16
        "T_simplex_duplex_selection_04", HFILL }},
12179
16
    { &hf_tetra_optional_elements_23,
12180
16
      { "optional-elements", "tetra.optional_elements",
12181
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_23_vals), 0,
12182
16
        "T_optional_elements_23", HFILL }},
12183
16
    { &hf_tetra_type2_parameters_14,
12184
16
      { "type2-parameters", "tetra.type2_parameters_element",
12185
16
        FT_NONE, BASE_NONE, NULL, 0,
12186
16
        "T_type2_parameters_14", HFILL }},
12187
16
    { &hf_tetra_call_priority_01,
12188
16
      { "call-priority", "tetra.call_priority",
12189
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_call_priority_vals), 0,
12190
16
        NULL, HFILL }},
12191
16
    { &hf_tetra_basic_service_information_04,
12192
16
      { "basic-service-information", "tetra.basic_service_information",
12193
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_basic_service_information_03_vals), 0,
12194
16
        "T_basic_service_information_03", HFILL }},
12195
16
    { &hf_tetra_temporary_address_03,
12196
16
      { "temporary-address", "tetra.temporary_address",
12197
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_temporary_address_02_vals), 0,
12198
16
        "T_temporary_address_02", HFILL }},
12199
16
    { &hf_tetra_notification_indicator_08,
12200
16
      { "notification-indicator", "tetra.notification_indicator",
12201
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_notification_indicator_07_vals), 0,
12202
16
        "T_notification_indicator_07", HFILL }},
12203
16
    { &hf_tetra_prop_11,
12204
16
      { "prop", "tetra.prop",
12205
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_prop_10_vals), 0,
12206
16
        "T_prop_10", HFILL }},
12207
16
    { &hf_tetra_optional_elements_24,
12208
16
      { "optional-elements", "tetra.optional_elements",
12209
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_24_vals), 0,
12210
16
        "T_optional_elements_24", HFILL }},
12211
16
    { &hf_tetra_type2_parameters_15,
12212
16
      { "type2-parameters", "tetra.type2_parameters_element",
12213
16
        FT_NONE, BASE_NONE, NULL, 0,
12214
16
        "T_type2_parameters_15", HFILL }},
12215
16
    { &hf_tetra_notification_indicator_09,
12216
16
      { "notification-indicator", "tetra.notification_indicator",
12217
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_notification_indicator_08_vals), 0,
12218
16
        "T_notification_indicator_08", HFILL }},
12219
16
    { &hf_tetra_prop_12,
12220
16
      { "prop", "tetra.prop",
12221
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_prop_11_vals), 0,
12222
16
        "T_prop_11", HFILL }},
12223
16
    { &hf_tetra_optional_elements_25,
12224
16
      { "optional-elements", "tetra.optional_elements",
12225
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_25_vals), 0,
12226
16
        "T_optional_elements_25", HFILL }},
12227
16
    { &hf_tetra_type2_parameters_16,
12228
16
      { "type2-parameters", "tetra.type2_parameters_element",
12229
16
        FT_NONE, BASE_NONE, NULL, 0,
12230
16
        "T_type2_parameters_16", HFILL }},
12231
16
    { &hf_tetra_notification_indicator_10,
12232
16
      { "notification-indicator", "tetra.notification_indicator",
12233
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_notification_indicator_09_vals), 0,
12234
16
        "T_notification_indicator_09", HFILL }},
12235
16
    { &hf_tetra_prop_13,
12236
16
      { "prop", "tetra.prop",
12237
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_prop_12_vals), 0,
12238
16
        "T_prop_12", HFILL }},
12239
16
    { &hf_tetra_reset_call_time_out,
12240
16
      { "reset-call-time-out", "tetra.reset_call_time_out",
12241
16
        FT_UINT32, BASE_DEC, NULL, 0,
12242
16
        "INTEGER_0_1", HFILL }},
12243
16
    { &hf_tetra_optional_elements_26,
12244
16
      { "optional-elements", "tetra.optional_elements",
12245
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_26_vals), 0,
12246
16
        "T_optional_elements_26", HFILL }},
12247
16
    { &hf_tetra_type2_parameters_17,
12248
16
      { "type2-parameters", "tetra.type2_parameters_element",
12249
16
        FT_NONE, BASE_NONE, NULL, 0,
12250
16
        "T_type2_parameters_17", HFILL }},
12251
16
    { &hf_tetra_new_call_identifier_01,
12252
16
      { "new-call-identifier", "tetra.new_call_identifier",
12253
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_new_call_identifier_01_vals), 0,
12254
16
        "T_new_call_identifier_01", HFILL }},
12255
16
    { &hf_tetra_new_call_identifier_02,
12256
16
      { "new-call-identifier", "tetra.new_call_identifier",
12257
16
        FT_UINT32, BASE_DEC, NULL, 0,
12258
16
        "INTEGER_0_16383", HFILL }},
12259
16
    { &hf_tetra_call_time_out_02,
12260
16
      { "call-time-out", "tetra.call_time_out",
12261
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_call_time_out_01_vals), 0,
12262
16
        "T_call_time_out_01", HFILL }},
12263
16
    { &hf_tetra_call_status_03,
12264
16
      { "call-status", "tetra.call_status",
12265
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_call_status_02_vals), 0,
12266
16
        "T_call_status_02", HFILL }},
12267
16
    { &hf_tetra_modify_02,
12268
16
      { "modify", "tetra.modify",
12269
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_modify_01_vals), 0,
12270
16
        "T_modify_01", HFILL }},
12271
16
    { &hf_tetra_notification_indicator_11,
12272
16
      { "notification-indicator", "tetra.notification_indicator",
12273
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_notification_indicator_10_vals), 0,
12274
16
        "T_notification_indicator_10", HFILL }},
12275
16
    { &hf_tetra_prop_14,
12276
16
      { "prop", "tetra.prop",
12277
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_prop_13_vals), 0,
12278
16
        "T_prop_13", HFILL }},
12279
16
    { &hf_tetra_optional_elements_27,
12280
16
      { "optional-elements", "tetra.optional_elements",
12281
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_27_vals), 0,
12282
16
        "T_optional_elements_27", HFILL }},
12283
16
    { &hf_tetra_type2_parameters_18,
12284
16
      { "type2-parameters", "tetra.type2_parameters_element",
12285
16
        FT_NONE, BASE_NONE, NULL, 0,
12286
16
        "T_type2_parameters_18", HFILL }},
12287
16
    { &hf_tetra_notification_indicator_12,
12288
16
      { "notification-indicator", "tetra.notification_indicator",
12289
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_notification_indicator_11_vals), 0,
12290
16
        "T_notification_indicator_11", HFILL }},
12291
16
    { &hf_tetra_prop_15,
12292
16
      { "prop", "tetra.prop",
12293
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_prop_14_vals), 0,
12294
16
        "T_prop_14", HFILL }},
12295
16
    { &hf_tetra_optional_elements_28,
12296
16
      { "optional-elements", "tetra.optional_elements",
12297
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_28_vals), 0,
12298
16
        "T_optional_elements_28", HFILL }},
12299
16
    { &hf_tetra_type2_element_07,
12300
16
      { "type2-element", "tetra.type2_element_element",
12301
16
        FT_NONE, BASE_NONE, NULL, 0,
12302
16
        "T_type2_element_07", HFILL }},
12303
16
    { &hf_tetra_notification_indicator_13,
12304
16
      { "notification-indicator", "tetra.notification_indicator",
12305
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_notification_indicator_12_vals), 0,
12306
16
        "T_notification_indicator_12", HFILL }},
12307
16
    { &hf_tetra_transmitting_party_type_identifier,
12308
16
      { "transmitting-party-type-identifier", "tetra.transmitting_party_type_identifier",
12309
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_transmitting_party_type_identifier_vals), 0,
12310
16
        NULL, HFILL }},
12311
16
    { &hf_tetra_tpti_element,
12312
16
      { "tpti-element", "tetra.tpti_element",
12313
16
        FT_UINT32, BASE_DEC, VALS(tetra_Calling_party_address_type_vals), 0,
12314
16
        "Transmitting_party_address_type", HFILL }},
12315
16
    { &hf_tetra_optional_elements_29,
12316
16
      { "optional-elements", "tetra.optional_elements",
12317
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_29_vals), 0,
12318
16
        "T_optional_elements_29", HFILL }},
12319
16
    { &hf_tetra_type2_element_08,
12320
16
      { "type2-element", "tetra.type2_element_element",
12321
16
        FT_NONE, BASE_NONE, NULL, 0,
12322
16
        "T_type2_element_08", HFILL }},
12323
16
    { &hf_tetra_notification_indicator_14,
12324
16
      { "notification-indicator", "tetra.notification_indicator",
12325
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_notification_indicator_13_vals), 0,
12326
16
        "T_notification_indicator_13", HFILL }},
12327
16
    { &hf_tetra_transmitting_party_type_identifier_01,
12328
16
      { "transmitting-party-type-identifier", "tetra.transmitting_party_type_identifier",
12329
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_transmitting_party_type_identifier_01_vals), 0,
12330
16
        "T_transmitting_party_type_identifier_01", HFILL }},
12331
16
    { &hf_tetra_group_identity_ack_request,
12332
16
      { "group-identity-ack-request", "tetra.group_identity_ack_request",
12333
16
        FT_BOOLEAN, BASE_NONE, NULL, 0,
12334
16
        "BOOLEAN", HFILL }},
12335
16
    { &hf_tetra_optional_elements_30,
12336
16
      { "optional-elements", "tetra.optional_elements",
12337
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_30_vals), 0,
12338
16
        "T_optional_elements_30", HFILL }},
12339
16
    { &hf_tetra_type2_element_09,
12340
16
      { "type2-element", "tetra.type2_element_element",
12341
16
        FT_NONE, BASE_NONE, NULL, 0,
12342
16
        "T_type2_element_09", HFILL }},
12343
16
    { &hf_tetra_type3_04,
12344
16
      { "type3", "tetra.type3",
12345
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_type3_04_vals), 0,
12346
16
        "T_type3_04", HFILL }},
12347
16
    { &hf_tetra_type3_elements_04,
12348
16
      { "type3-elements", "tetra.type3_elements_element",
12349
16
        FT_NONE, BASE_NONE, NULL, 0,
12350
16
        "T_type3_elements_04", HFILL }},
12351
16
    { &hf_tetra_group_identity_downlink_02,
12352
16
      { "group-identity-downlink", "tetra.group_identity_downlink_element",
12353
16
        FT_NONE, BASE_NONE, NULL, 0,
12354
16
        NULL, HFILL }},
12355
16
    { &hf_tetra_group_identity_attach_detach_accept,
12356
16
      { "group-identity-attach-detach-accept", "tetra.group_identity_attach_detach_accept",
12357
16
        FT_BOOLEAN, BASE_NONE, NULL, 0,
12358
16
        "BOOLEAN", HFILL }},
12359
16
    { &hf_tetra_optional_elements_31,
12360
16
      { "optional-elements", "tetra.optional_elements",
12361
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_31_vals), 0,
12362
16
        "T_optional_elements_31", HFILL }},
12363
16
    { &hf_tetra_type2_element_10,
12364
16
      { "type2-element", "tetra.type2_element_element",
12365
16
        FT_NONE, BASE_NONE, NULL, 0,
12366
16
        "T_type2_element_10", HFILL }},
12367
16
    { &hf_tetra_type3_05,
12368
16
      { "type3", "tetra.type3",
12369
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_type3_05_vals), 0,
12370
16
        "T_type3_05", HFILL }},
12371
16
    { &hf_tetra_type3_elements_05,
12372
16
      { "type3-elements", "tetra.type3_elements_element",
12373
16
        FT_NONE, BASE_NONE, NULL, 0,
12374
16
        "T_type3_elements_05", HFILL }},
12375
16
    { &hf_tetra_called_party_sna,
12376
16
      { "called-party-sna", "tetra.called_party_sna",
12377
16
        FT_UINT32, BASE_DEC, NULL, 0,
12378
16
        "INTEGER_0_255", HFILL }},
12379
16
    { &hf_tetra_called_party_ssi,
12380
16
      { "called-party-ssi", "tetra.called_party_ssi",
12381
16
        FT_UINT32, BASE_DEC, NULL, 0,
12382
16
        "INTEGER_0_16777215", HFILL }},
12383
16
    { &hf_tetra_called_party_ssi_extension,
12384
16
      { "called-party-ssi-extension", "tetra.called_party_ssi_extension_element",
12385
16
        FT_NONE, BASE_NONE, NULL, 0,
12386
16
        NULL, HFILL }},
12387
16
    { &hf_tetra_called_party_extention,
12388
16
      { "called-party-extention", "tetra.called_party_extention",
12389
16
        FT_UINT32, BASE_DEC, NULL, 0,
12390
16
        "INTEGER_0_16777215", HFILL }},
12391
16
    { &hf_tetra_data_01,
12392
16
      { "data", "tetra.data",
12393
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_data_01_vals), 0,
12394
16
        "T_data_01", HFILL }},
12395
16
    { &hf_tetra_element1,
12396
16
      { "element1", "tetra.element1_element",
12397
16
        FT_NONE, BASE_NONE, NULL, 0,
12398
16
        "Type1", HFILL }},
12399
16
    { &hf_tetra_element,
12400
16
      { "element", "tetra.element_element",
12401
16
        FT_NONE, BASE_NONE, NULL, 0,
12402
16
        "Type2", HFILL }},
12403
16
    { &hf_tetra_proprietary_element_owner,
12404
16
      { "proprietary-element-owner", "tetra.proprietary_element_owner",
12405
16
        FT_UINT32, BASE_DEC, NULL, 0,
12406
16
        NULL, HFILL }},
12407
16
    { &hf_tetra_proprietary_element_owner_extension,
12408
16
      { "proprietary-element-owner-extension", "tetra.proprietary_element_owner_extension",
12409
16
        FT_BYTES, BASE_NONE, NULL, 0,
12410
16
        "BIT_STRING", HFILL }},
12411
16
    { &hf_tetra_simplex_duplex_selection_06,
12412
16
      { "simplex-duplex-selection", "tetra.simplex_duplex_selection",
12413
16
        FT_UINT32, BASE_DEC, VALS(tetra_T_simplex_duplex_selection_05_vals), 0,
12414
16
        "T_simplex_duplex_selection_05", HFILL }},
12415
16
  };
12416
12417
  /* List of subtrees */
12418
16
  static int *ett[] = {
12419
16
    &ett_tetra,
12420
16
    &ett_tetra_header,
12421
16
    &ett_tetra_length,
12422
16
    &ett_tetra_txreg,
12423
16
    &ett_tetra_text,
12424
16
    &ett_tetra_AACH,
12425
16
    &ett_tetra_BSCH,
12426
16
    &ett_tetra_MLE_Sync,
12427
16
    &ett_tetra_BNCH,
12428
16
    &ett_tetra_T_hyperframe_or_cck,
12429
16
    &ett_tetra_T_optional_params,
12430
16
    &ett_tetra_TS_COMMON_FRAMES,
12431
16
    &ett_tetra_Default_Code_A,
12432
16
    &ett_tetra_Extended_Services_Broadcast,
12433
16
    &ett_tetra_T_section,
12434
16
    &ett_tetra_PRESENT1,
12435
16
    &ett_tetra_MAC_ACCESS,
12436
16
    &ett_tetra_T_data,
12437
16
    &ett_tetra_Address,
12438
16
    &ett_tetra_U_LLC_PDU,
12439
16
    &ett_tetra_U_BL_ACK_FCS,
12440
16
    &ett_tetra_U_MLE_PDU_FCS,
12441
16
    &ett_tetra_U_BL_DATA_FCS,
12442
16
    &ett_tetra_U_BL_ADATA_FCS,
12443
16
    &ett_tetra_U_MLE_PDU,
12444
16
    &ett_tetra_ComplexSDU,
12445
16
    &ett_tetra_T_lengthIndicationOrCapacityRequest,
12446
16
    &ett_tetra_FRAG,
12447
16
    &ett_tetra_MAC_DATA,
12448
16
    &ett_tetra_T_lengthIndicationOrCapacityRequest_01,
12449
16
    &ett_tetra_FRAG6,
12450
16
    &ett_tetra_MAC_FRAG,
12451
16
    &ett_tetra_MAC_FRAG120,
12452
16
    &ett_tetra_MAC_END_UPLINK,
12453
16
    &ett_tetra_MAC_END_UP114,
12454
16
    &ett_tetra_MAC_END_HU,
12455
16
    &ett_tetra_T_lengthInd_ReservationReq,
12456
16
    &ett_tetra_MAC_END_DOWNLINK,
12457
16
    &ett_tetra_T_slot_granting,
12458
16
    &ett_tetra_T_channel_allocation,
12459
16
    &ett_tetra_SlotGranting,
12460
16
    &ett_tetra_ChannelAllocation,
12461
16
    &ett_tetra_T_extend_carrier_flag,
12462
16
    &ett_tetra_T_monitoring_pattern,
12463
16
    &ett_tetra_Extended_carrier_flag,
12464
16
    &ett_tetra_MAC_END_DOWN111,
12465
16
    &ett_tetra_T_slot_granting_01,
12466
16
    &ett_tetra_T_channel_allocation_01,
12467
16
    &ett_tetra_MAC_RESOURCE,
12468
16
    &ett_tetra_OTHER_DATA,
12469
16
    &ett_tetra_T_power_control,
12470
16
    &ett_tetra_T_slot_granting_02,
12471
16
    &ett_tetra_T_channel_allocation_02,
12472
16
    &ett_tetra_AddressMacResource,
12473
16
    &ett_tetra_SSI_NEED,
12474
16
    &ett_tetra_EVENT_NEED,
12475
16
    &ett_tetra_USSI_NEED,
12476
16
    &ett_tetra_SMI_NEED,
12477
16
    &ett_tetra_SSI_EVENT_NEED,
12478
16
    &ett_tetra_SSI_USAGE_NEED,
12479
16
    &ett_tetra_SMI_EVENT_NEED,
12480
16
    &ett_tetra_MAC_ACCESS_DEFINE,
12481
16
    &ett_tetra_T_optional_field,
12482
16
    &ett_tetra_D_LLC_PDU,
12483
16
    &ett_tetra_D_BL_ACK_FCS,
12484
16
    &ett_tetra_D_MLE_PDU_FCS,
12485
16
    &ett_tetra_D_BL_ADATA_FCS,
12486
16
    &ett_tetra_D_BL_DATA_FCS,
12487
16
    &ett_tetra_U_BL_ACK,
12488
16
    &ett_tetra_D_BL_ACK,
12489
16
    &ett_tetra_U_BL_DATA,
12490
16
    &ett_tetra_D_BL_DATA,
12491
16
    &ett_tetra_U_BL_ADATA,
12492
16
    &ett_tetra_D_BL_ADATA,
12493
16
    &ett_tetra_D_MLE_PDU,
12494
16
    &ett_tetra_UMLE_PDU,
12495
16
    &ett_tetra_DMLE_PDU,
12496
16
    &ett_tetra_U_PREPARE,
12497
16
    &ett_tetra_T_optional_elements,
12498
16
    &ett_tetra_T_type2_parameters,
12499
16
    &ett_tetra_T_cell_number,
12500
16
    &ett_tetra_U_RESTORE,
12501
16
    &ett_tetra_T_optional_elements_01,
12502
16
    &ett_tetra_T_type2_parameters_01,
12503
16
    &ett_tetra_T_mcc,
12504
16
    &ett_tetra_T_mnc,
12505
16
    &ett_tetra_T_la,
12506
16
    &ett_tetra_D_NEW_CELL,
12507
16
    &ett_tetra_T_optional_elements_02,
12508
16
    &ett_tetra_D_PREPARE_FAIL,
12509
16
    &ett_tetra_T_optional_elements_03,
12510
16
    &ett_tetra_D_NWRK_BRDADCAST,
12511
16
    &ett_tetra_T_optional_elements_04,
12512
16
    &ett_tetra_T_type2_parameters_02,
12513
16
    &ett_tetra_T_tetra_network_time,
12514
16
    &ett_tetra_T_number_of_neighbour_cells,
12515
16
    &ett_tetra_TETRA_NETWORK_TIME,
12516
16
    &ett_tetra_D_RESTORE_ACK,
12517
16
    &ett_tetra_D_RESTORE_FAIL,
12518
16
    &ett_tetra_U_MM_PDU,
12519
16
    &ett_tetra_D_MM_PDU,
12520
16
    &ett_tetra_GROUP_IDENTITY_DOWNLINK,
12521
16
    &ett_tetra_T_attach_detach_identifier,
12522
16
    &ett_tetra_T_attach,
12523
16
    &ett_tetra_T_detach,
12524
16
    &ett_tetra_T_address_type,
12525
16
    &ett_tetra_T_gssi_extension,
12526
16
    &ett_tetra_GROUP_IDENTITY_UPLINK,
12527
16
    &ett_tetra_T_attach_detach_identifier_01,
12528
16
    &ett_tetra_T_attach_01,
12529
16
    &ett_tetra_T_detach_01,
12530
16
    &ett_tetra_T_address_type_01,
12531
16
    &ett_tetra_T_gssi_extension_01,
12532
16
    &ett_tetra_D_LOCATION_UPDATE_ACCEPT,
12533
16
    &ett_tetra_T_optional_elements_05,
12534
16
    &ett_tetra_T_type2_parameters_03,
12535
16
    &ett_tetra_T_ssi_choice,
12536
16
    &ett_tetra_T_address_extension_choice,
12537
16
    &ett_tetra_T_subscriber_class_choice,
12538
16
    &ett_tetra_T_energy_saving_mode,
12539
16
    &ett_tetra_T_scch_info,
12540
16
    &ett_tetra_T_type3,
12541
16
    &ett_tetra_T_type3_elements,
12542
16
    &ett_tetra_T_new_ra,
12543
16
    &ett_tetra_T_group_identity_location_accept,
12544
16
    &ett_tetra_T_group_predefined_lifetime,
12545
16
    &ett_tetra_T_group_identity_downlink,
12546
16
    &ett_tetra_T_proprietary,
12547
16
    &ett_tetra_D_LOCATION_UPDATE_REJECT,
12548
16
    &ett_tetra_U_MM_STATUS,
12549
16
    &ett_tetra_D_MM_STATUS,
12550
16
    &ett_tetra_U_CMCE_PDU,
12551
16
    &ett_tetra_U_RELEASE,
12552
16
    &ett_tetra_U_SDS_DATA,
12553
16
    &ett_tetra_T_called_party_type_identifier,
12554
16
    &ett_tetra_T_short_data_type_identifier,
12555
16
    &ett_tetra_U_STATUS,
12556
16
    &ett_tetra_T_called_party_type_identifier_01,
12557
16
    &ett_tetra_U_INFO,
12558
16
    &ett_tetra_D_CMCE_PDU,
12559
16
    &ett_tetra_D_SDS_DATA,
12560
16
    &ett_tetra_T_short_data_type_identifier_01,
12561
16
    &ett_tetra_D_STATUS,
12562
16
    &ett_tetra_D_DISCONNECT,
12563
16
    &ett_tetra_T_optional_elements_06,
12564
16
    &ett_tetra_T_type2_element,
12565
16
    &ett_tetra_T_notification_indicator,
12566
16
    &ett_tetra_D_INFO,
12567
16
    &ett_tetra_T_optional_elements_07,
12568
16
    &ett_tetra_T_type2_element_01,
12569
16
    &ett_tetra_T_new_call_identifier,
12570
16
    &ett_tetra_T_call_time_out,
12571
16
    &ett_tetra_T_call_time_out_set_up_phase,
12572
16
    &ett_tetra_T_call_ownership,
12573
16
    &ett_tetra_T_modify,
12574
16
    &ett_tetra_T_call_status,
12575
16
    &ett_tetra_T_temporary_address,
12576
16
    &ett_tetra_T_notification_indicator_01,
12577
16
    &ett_tetra_T_poll_response_percentage,
12578
16
    &ett_tetra_T_poll_response_number,
12579
16
    &ett_tetra_D_TX_WAIT,
12580
16
    &ett_tetra_T_optional_elements_08,
12581
16
    &ett_tetra_T_type2_element_02,
12582
16
    &ett_tetra_T_notification_indicator_02,
12583
16
    &ett_tetra_D_TX_CONTINUE,
12584
16
    &ett_tetra_T_optional_elements_09,
12585
16
    &ett_tetra_T_type2_element_03,
12586
16
    &ett_tetra_T_notification_indicator_03,
12587
16
    &ett_tetra_U_LOCATION_UPDATE_DEMAND,
12588
16
    &ett_tetra_T_cipher_control_choice,
12589
16
    &ett_tetra_T_optional_elements_10,
12590
16
    &ett_tetra_T_type2_parameters_04,
12591
16
    &ett_tetra_T_class_of_MS,
12592
16
    &ett_tetra_T_energy_saving_mode_01,
12593
16
    &ett_tetra_T_la_information,
12594
16
    &ett_tetra_T_ssi_choice_01,
12595
16
    &ett_tetra_T_address_extension_choice_01,
12596
16
    &ett_tetra_T_type3_01,
12597
16
    &ett_tetra_T_type3_elements_01,
12598
16
    &ett_tetra_T_group_identity_location_demand,
12599
16
    &ett_tetra_T_group_report_response_choice,
12600
16
    &ett_tetra_T_group_identity_uplink,
12601
16
    &ett_tetra_T_proprietary_01,
12602
16
    &ett_tetra_U_ATTACH_DETACH_GROUP_IDENTITY,
12603
16
    &ett_tetra_T_optional_elements_11,
12604
16
    &ett_tetra_T_type2_element_04,
12605
16
    &ett_tetra_T_type3_02,
12606
16
    &ett_tetra_T_type3_elements_02,
12607
16
    &ett_tetra_U_ATTACH_DETACH_GROUP_IDENTITY_ACK,
12608
16
    &ett_tetra_T_optional_elements_12,
12609
16
    &ett_tetra_T_type2_element_05,
12610
16
    &ett_tetra_T_type3_03,
12611
16
    &ett_tetra_T_type3_elements_03,
12612
16
    &ett_tetra_U_SETUP,
12613
16
    &ett_tetra_T_optional_elements_13,
12614
16
    &ett_tetra_T_type2_parameters_05,
12615
16
    &ett_tetra_T_external_subscriber_number,
12616
16
    &ett_tetra_T_prop,
12617
16
    &ett_tetra_Basic_service_information,
12618
16
    &ett_tetra_U_ALERT,
12619
16
    &ett_tetra_T_optional_elements_14,
12620
16
    &ett_tetra_T_type2_parameters_06,
12621
16
    &ett_tetra_T_basic_service_information,
12622
16
    &ett_tetra_T_prop_01,
12623
16
    &ett_tetra_U_CONNECT,
12624
16
    &ett_tetra_T_optional_elements_15,
12625
16
    &ett_tetra_T_type2_parameters_07,
12626
16
    &ett_tetra_T_basic_service_information_01,
12627
16
    &ett_tetra_T_prop_02,
12628
16
    &ett_tetra_U_TX_CEASED,
12629
16
    &ett_tetra_T_optional_elements_16,
12630
16
    &ett_tetra_T_type2_parameters_08,
12631
16
    &ett_tetra_T_prop_03,
12632
16
    &ett_tetra_U_TX_DEMAND,
12633
16
    &ett_tetra_T_optional_elements_17,
12634
16
    &ett_tetra_T_type2_parameters_09,
12635
16
    &ett_tetra_T_prop_04,
12636
16
    &ett_tetra_U_DISCONNECT,
12637
16
    &ett_tetra_T_optional_elements_18,
12638
16
    &ett_tetra_T_type2_parameters_10,
12639
16
    &ett_tetra_T_prop_05,
12640
16
    &ett_tetra_U_CALL_RESTORE,
12641
16
    &ett_tetra_T_optional_elements_19,
12642
16
    &ett_tetra_T_type2_parameters_11,
12643
16
    &ett_tetra_T_prop_06,
12644
16
    &ett_tetra_D_SETUP,
12645
16
    &ett_tetra_T_optional_elements_20,
12646
16
    &ett_tetra_T_type2_element_06,
12647
16
    &ett_tetra_T_notification_indicator_04,
12648
16
    &ett_tetra_T_temporary_address_01,
12649
16
    &ett_tetra_T_calling_party_type_identifier,
12650
16
    &ett_tetra_T_external_subscriber_number_01,
12651
16
    &ett_tetra_T_prop_07,
12652
16
    &ett_tetra_D_CALL_PROCEEDING,
12653
16
    &ett_tetra_T_optional_elements_21,
12654
16
    &ett_tetra_T_type2_parameters_12,
12655
16
    &ett_tetra_T_basic_service_information_02,
12656
16
    &ett_tetra_T_call_status_01,
12657
16
    &ett_tetra_T_notification_indicator_05,
12658
16
    &ett_tetra_T_prop_08,
12659
16
    &ett_tetra_D_ALERT,
12660
16
    &ett_tetra_T_optional_elements_22,
12661
16
    &ett_tetra_T_type2_parameters_13,
12662
16
    &ett_tetra_T_basic_service_infomation,
12663
16
    &ett_tetra_T_notification_indicator_06,
12664
16
    &ett_tetra_T_prop_09,
12665
16
    &ett_tetra_D_CONNECT,
12666
16
    &ett_tetra_T_optional_elements_23,
12667
16
    &ett_tetra_T_type2_parameters_14,
12668
16
    &ett_tetra_T_call_priority,
12669
16
    &ett_tetra_T_basic_service_information_03,
12670
16
    &ett_tetra_T_temporary_address_02,
12671
16
    &ett_tetra_T_notification_indicator_07,
12672
16
    &ett_tetra_T_prop_10,
12673
16
    &ett_tetra_D_CONNECT_ACK,
12674
16
    &ett_tetra_T_optional_elements_24,
12675
16
    &ett_tetra_T_type2_parameters_15,
12676
16
    &ett_tetra_T_notification_indicator_08,
12677
16
    &ett_tetra_T_prop_11,
12678
16
    &ett_tetra_D_RELEASE,
12679
16
    &ett_tetra_T_optional_elements_25,
12680
16
    &ett_tetra_T_type2_parameters_16,
12681
16
    &ett_tetra_T_notification_indicator_09,
12682
16
    &ett_tetra_T_prop_12,
12683
16
    &ett_tetra_D_CALL_RESTORE,
12684
16
    &ett_tetra_T_optional_elements_26,
12685
16
    &ett_tetra_T_type2_parameters_17,
12686
16
    &ett_tetra_T_new_call_identifier_01,
12687
16
    &ett_tetra_T_call_time_out_01,
12688
16
    &ett_tetra_T_call_status_02,
12689
16
    &ett_tetra_T_modify_01,
12690
16
    &ett_tetra_T_notification_indicator_10,
12691
16
    &ett_tetra_T_prop_13,
12692
16
    &ett_tetra_D_TX_CEASED,
12693
16
    &ett_tetra_T_optional_elements_27,
12694
16
    &ett_tetra_T_type2_parameters_18,
12695
16
    &ett_tetra_T_notification_indicator_11,
12696
16
    &ett_tetra_T_prop_14,
12697
16
    &ett_tetra_D_TX_GRANTED,
12698
16
    &ett_tetra_T_optional_elements_28,
12699
16
    &ett_tetra_T_type2_element_07,
12700
16
    &ett_tetra_T_notification_indicator_12,
12701
16
    &ett_tetra_T_transmitting_party_type_identifier,
12702
16
    &ett_tetra_D_TX_INTERRUPT,
12703
16
    &ett_tetra_T_optional_elements_29,
12704
16
    &ett_tetra_T_type2_element_08,
12705
16
    &ett_tetra_T_notification_indicator_13,
12706
16
    &ett_tetra_T_transmitting_party_type_identifier_01,
12707
16
    &ett_tetra_D_ATTACH_DETACH_GROUP_IDENTITY,
12708
16
    &ett_tetra_T_optional_elements_30,
12709
16
    &ett_tetra_T_type2_element_09,
12710
16
    &ett_tetra_T_type3_04,
12711
16
    &ett_tetra_T_type3_elements_04,
12712
16
    &ett_tetra_D_ATTACH_DETACH_GROUP_IDENTITY_ACK,
12713
16
    &ett_tetra_T_optional_elements_31,
12714
16
    &ett_tetra_T_type2_element_10,
12715
16
    &ett_tetra_T_type3_05,
12716
16
    &ett_tetra_T_type3_elements_05,
12717
16
    &ett_tetra_Calling_party_address_type,
12718
16
    &ett_tetra_T_called_party_ssi_extension,
12719
16
    &ett_tetra_Proprietary,
12720
16
    &ett_tetra_T_data_01,
12721
16
    &ett_tetra_Type1,
12722
16
    &ett_tetra_Type2,
12723
16
    &ett_tetra_Modify_type,
12724
16
  };
12725
12726
16
  static ei_register_info ei[] = {
12727
16
    { &ei_tetra_channels_incorrect, { "tetra.channels.incorrect", PI_MALFORMED, PI_WARN, "Channel count incorrect, must be <= 3", EXPFILL }},
12728
16
  };
12729
12730
16
  proto_tetra = proto_register_protocol("TETRA Protocol", "TETRA", "tetra");
12731
16
  proto_register_field_array (proto_tetra, hf, array_length (hf));
12732
16
  proto_register_subtree_array (ett, array_length (ett));
12733
16
  tetra_handle = register_dissector("tetra", dissect_tetra, proto_tetra);
12734
16
  expert_tetra = expert_register_protocol(proto_tetra);
12735
16
  expert_register_field_array(expert_tetra, ei, array_length(ei));
12736
12737
  tetra_module = prefs_register_protocol(proto_tetra, NULL);
12738
16
  prefs_register_bool_preference(tetra_module, "include_carrier_number",
12739
16
      "The data include carrier numbers",
12740
16
      "Whether the captured data include carrier number",
12741
16
      &include_carrier_number);
12742
16
}