Coverage Report

Created: 2026-07-12 07:10

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
15
#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
305
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
305
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1010
305
                                                            0U, 3U, NULL, false);
1011
1012
305
  return offset;
1013
305
}
1014
1015
1016
1017
static unsigned
1018
24
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
24
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1020
24
                                                            0U, 63U, NULL, false);
1021
1022
24
  return offset;
1023
24
}
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
4
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
4
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1036
4
                                   ett_tetra_AACH, AACH_sequence);
1037
1038
4
  return offset;
1039
4
}
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
9
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
9
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1066
9
                                     16, NULL, false, 0, NULL);
1067
1068
9
  return offset;
1069
9
}
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
8
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
8
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1146
8
                                     64, NULL, false, 0, NULL);
1147
1148
8
  return offset;
1149
8
}
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
7
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
7
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1164
7
                                     4, NULL, false, 0, NULL);
1165
1166
7
  return offset;
1167
7
}
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
7
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
7
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1210
7
                                     32, NULL, false, 0, NULL);
1211
1212
7
  return offset;
1213
7
}
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
6
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
6
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1290
6
                                     64, NULL, false, 0, NULL);
1291
1292
6
  return offset;
1293
6
}
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
6
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
6
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1308
6
                                     4, NULL, false, 0, NULL);
1309
1310
6
  return offset;
1311
6
}
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
5
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
5
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1330
5
                                     8, NULL, false, 0, NULL);
1331
1332
5
  return offset;
1333
5
}
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
5
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
5
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1346
5
                                     2, NULL, false, 0, NULL);
1347
1348
5
  return offset;
1349
5
}
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
5
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
5
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1362
5
                                     2, NULL, false, 0, NULL);
1363
1364
5
  return offset;
1365
5
}
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
5
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
5
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1378
5
                                     2, NULL, false, 0, NULL);
1379
1380
5
  return offset;
1381
5
}
1382
1383
1384
1385
static unsigned
1386
37
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
37
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1388
37
                                                            0U, 1023U, NULL, false);
1389
1390
37
  return offset;
1391
37
}
1392
1393
1394
1395
static unsigned
1396
55
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
55
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1398
55
                                                            0U, 16383U, NULL, false);
1399
1400
55
  return offset;
1401
55
}
1402
1403
1404
1405
static unsigned
1406
541
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
541
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1408
541
                                                            0U, 1U, NULL, false);
1409
1410
541
  return offset;
1411
541
}
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
5
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
5
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1426
5
                                   ett_tetra_MLE_Sync, MLE_Sync_sequence);
1427
1428
5
  return offset;
1429
5
}
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
9
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
9
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1450
9
                                   ett_tetra_BSCH, BSCH_sequence);
1451
1452
9
  return offset;
1453
9
}
1454
1455
1456
1457
static unsigned
1458
67
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
67
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1460
67
                                                            0U, 4095U, NULL, false);
1461
1462
67
  return offset;
1463
67
}
1464
1465
1466
1467
static unsigned
1468
93
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
93
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1470
93
                                                            0U, 15U, NULL, false);
1471
1472
93
  return offset;
1473
93
}
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
30
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
30
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1488
30
                                     4, NULL, false, 0, NULL);
1489
1490
30
  return offset;
1491
30
}
1492
1493
1494
1495
static unsigned
1496
85
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
85
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1498
85
                                                            0U, 7U, NULL, false);
1499
1500
85
  return offset;
1501
85
}
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
29
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
29
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1514
29
                                     2, NULL, false, 0, NULL);
1515
1516
29
  return offset;
1517
29
}
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
29
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
29
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1532
29
                                     4, NULL, false, 0, NULL);
1533
1534
29
  return offset;
1535
29
}
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
29
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
29
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1554
29
                                     8, NULL, false, 0, NULL);
1555
1556
29
  return offset;
1557
29
}
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
29
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
29
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1584
29
                                     16, NULL, false, 0, NULL);
1585
1586
29
  return offset;
1587
29
}
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
28
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
28
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1614
28
                                     16, NULL, false, 0, NULL);
1615
1616
28
  return offset;
1617
28
}
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
28
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
28
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1644
28
                                     16, NULL, false, 0, NULL);
1645
1646
28
  return offset;
1647
28
}
1648
1649
1650
1651
static unsigned
1652
32
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
32
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1654
32
                                                            0U, 65535U, NULL, false);
1655
1656
32
  return offset;
1657
32
}
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
26
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
26
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
1675
26
                                 ett_tetra_T_hyperframe_or_cck, T_hyperframe_or_cck_choice,
1676
26
                                 NULL);
1677
1678
26
  return offset;
1679
26
}
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
122
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
122
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1692
122
                                     2, NULL, false, 0, NULL);
1693
1694
122
  return offset;
1695
122
}
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
8
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
8
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1723
8
                                   ett_tetra_TS_COMMON_FRAMES, TS_COMMON_FRAMES_sequence);
1724
1725
8
  return offset;
1726
8
}
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
3
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
3
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1753
3
                                     16, NULL, false, 0, NULL);
1754
1755
3
  return offset;
1756
3
}
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
3
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
3
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1783
3
                                     16, NULL, false, 0, NULL);
1784
1785
3
  return offset;
1786
3
}
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
3
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
3
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1813
3
                                     16, NULL, false, 0, NULL);
1814
1815
3
  return offset;
1816
3
}
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
3
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
3
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1829
3
                                     2, NULL, false, 0, NULL);
1830
1831
3
  return offset;
1832
3
}
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
3
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
3
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1859
3
                                     16, NULL, false, 0, NULL);
1860
1861
3
  return offset;
1862
3
}
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
3
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
3
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1881
3
                                     8, NULL, false, 0, NULL);
1882
1883
3
  return offset;
1884
3
}
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
3
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
3
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1900
3
                                   ett_tetra_Default_Code_A, Default_Code_A_sequence);
1901
1902
3
  return offset;
1903
3
}
1904
1905
1906
1907
static unsigned
1908
15
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
15
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1910
15
                                                            0U, 255U, NULL, false);
1911
1912
15
  return offset;
1913
15
}
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
15
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
15
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1928
15
                                     4, NULL, false, 0, NULL);
1929
1930
15
  return offset;
1931
15
}
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
6
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
6
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1944
6
                                     2, NULL, false, 0, NULL);
1945
1946
6
  return offset;
1947
6
}
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
18
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
18
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1960
18
                                     2, NULL, false, 0, NULL);
1961
1962
18
  return offset;
1963
18
}
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
6
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
6
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1978
6
                                   ett_tetra_PRESENT1, PRESENT1_sequence);
1979
1980
6
  return offset;
1981
6
}
1982
1983
1984
1985
static unsigned
1986
9
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
9
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1988
9
                                                            0U, 127U, NULL, false);
1989
1990
9
  return offset;
1991
9
}
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
15
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
15
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2013
15
                                 ett_tetra_T_section, T_section_choice,
2014
15
                                 NULL);
2015
2016
15
  return offset;
2017
15
}
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
15
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
15
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2031
15
                                   ett_tetra_Extended_Services_Broadcast, Extended_Services_Broadcast_sequence);
2032
2033
15
  return offset;
2034
15
}
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
26
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
26
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2056
26
                                 ett_tetra_T_optional_params, T_optional_params_choice,
2057
26
                                 NULL);
2058
2059
26
  return offset;
2060
26
}
2061
2062
2063
2064
static unsigned
2065
24
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
24
  offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
2067
24
                                     16, 16, false, NULL, 0, NULL, NULL);
2068
2069
24
  return offset;
2070
24
}
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
30
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
30
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2108
30
                                   ett_tetra_BNCH, BNCH_sequence);
2109
2110
30
  return offset;
2111
30
}
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
166
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
166
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2124
166
                                     2, NULL, false, 0, NULL);
2125
2126
166
  return offset;
2127
166
}
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
64
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
64
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2140
64
                                     2, NULL, false, 0, NULL);
2141
2142
64
  return offset;
2143
64
}
2144
2145
2146
2147
static unsigned
2148
101
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
101
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
2150
101
                                                            0U, 16777215U, NULL, false);
2151
2152
101
  return offset;
2153
101
}
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
64
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
64
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2175
64
                                 ett_tetra_Address, Address_choice,
2176
64
                                 NULL);
2177
2178
64
  return offset;
2179
64
}
2180
2181
2182
2183
static unsigned
2184
261
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
261
  offset = dissect_per_null(tvb, offset, actx, tree, hf_index);
2186
2187
261
  return offset;
2188
261
}
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
5
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
5
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2207
5
                                     8, NULL, false, 0, NULL);
2208
2209
5
  return offset;
2210
5
}
2211
2212
2213
2214
static unsigned
2215
14
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
14
  offset = dissect_per_boolean(tvb, offset, actx, tree, hf_index, NULL);
2217
2218
14
  return offset;
2219
14
}
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
1
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
1
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2237
1
                                 ett_tetra_T_cipher_control_choice, T_cipher_control_choice_choice,
2238
1
                                 NULL);
2239
2240
1
  return offset;
2241
1
}
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
1
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
1
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2259
1
                                 ett_tetra_T_class_of_MS, T_class_of_MS_choice,
2260
1
                                 NULL);
2261
2262
1
  return offset;
2263
1
}
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
1
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
1
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2281
1
                                 ett_tetra_T_energy_saving_mode_01, T_energy_saving_mode_01_choice,
2282
1
                                 NULL);
2283
2284
1
  return offset;
2285
1
}
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
1
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
1
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2303
1
                                 ett_tetra_T_la_information, T_la_information_choice,
2304
1
                                 NULL);
2305
2306
1
  return offset;
2307
1
}
2308
2309
2310
2311
static unsigned
2312
3
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
3
  offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
2314
3
                                       3, 3, false, NULL);
2315
2316
3
  return offset;
2317
3
}
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
1
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
1
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2335
1
                                 ett_tetra_T_ssi_choice_01, T_ssi_choice_01_choice,
2336
1
                                 NULL);
2337
2338
1
  return offset;
2339
1
}
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
1
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
1
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2357
1
                                 ett_tetra_T_address_extension_choice_01, T_address_extension_choice_01_choice,
2358
1
                                 NULL);
2359
2360
1
  return offset;
2361
1
}
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
1
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
1
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2388
1
                                     16, NULL, false, 0, NULL);
2389
2390
1
  return offset;
2391
1
}
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
1
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
1
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2515
1
                                 ett_tetra_T_type3_01, T_type3_01_choice,
2516
1
                                 NULL);
2517
2518
1
  return offset;
2519
1
}
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
1
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
1
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2535
1
                                   ett_tetra_T_type2_parameters_04, T_type2_parameters_04_sequence);
2536
2537
1
  return offset;
2538
1
}
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
1
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
1
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2556
1
                                 ett_tetra_T_optional_elements_10, T_optional_elements_10_choice,
2557
1
                                 NULL);
2558
2559
1
  return offset;
2560
1
}
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
1
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
1
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2574
1
                                   ett_tetra_U_LOCATION_UPDATE_DEMAND, U_LOCATION_UPDATE_DEMAND_sequence);
2575
2576
1
  col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-LOCATION-UPDATE-DEMAND");
2577
2578
1
  return offset;
2579
1
}
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
2
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
2
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2592
2
                                     2, NULL, false, 0, NULL);
2593
2594
2
  return offset;
2595
2
}
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
2
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
2
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2607
2
                                   ett_tetra_U_MM_STATUS, U_MM_STATUS_sequence);
2608
2609
2
  col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-MM-STATUS");
2610
2611
2
  return offset;
2612
2
}
2613
2614
2615
2616
static unsigned
2617
1
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
1
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
2619
1
                                                            0U, 2047U, NULL, false);
2620
2621
1
  return offset;
2622
1
}
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
4
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
4
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2976
4
                                 ett_tetra_U_MM_PDU, U_MM_PDU_choice,
2977
4
                                 NULL);
2978
2979
4
  return offset;
2980
4
}
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
2
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
2
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2993
2
                                     2, NULL, false, 0, NULL);
2994
2995
2
  return offset;
2996
2
}
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
3
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
3
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
3015
3
                                     8, NULL, false, 0, NULL);
3016
3017
3
  return offset;
3018
3
}
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
3
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
3
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3032
3
                                   ett_tetra_Basic_service_information, Basic_service_information_sequence);
3033
3034
3
  return offset;
3035
3
}
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
1
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
1
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3053
1
                                 ett_tetra_T_basic_service_information, T_basic_service_information_choice,
3054
1
                                 NULL);
3055
3056
1
  return offset;
3057
1
}
3058
3059
3060
3061
static unsigned
3062
3
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
3
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
3064
3
                                                            0U, 255U, NULL, false);
3065
3066
3
  return offset;
3067
3
}
3068
3069
3070
3071
static unsigned
3072
2
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
2
  offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
3074
2
                                     NO_BOUND, NO_BOUND, false, NULL, 0, NULL, NULL);
3075
3076
2
  return offset;
3077
2
}
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
1
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
1
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3089
1
                                   ett_tetra_Type1, Type1_sequence);
3090
3091
1
  return offset;
3092
1
}
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
2
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
2
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3103
2
                                   ett_tetra_Type2, Type2_sequence);
3104
3105
2
  return offset;
3106
2
}
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
3
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
3
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3124
3
                                 ett_tetra_T_data_01, T_data_01_choice,
3125
3
                                 NULL);
3126
3127
3
  return offset;
3128
3
}
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
3
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
3
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3139
3
                                   ett_tetra_Proprietary, Proprietary_sequence);
3140
3141
3
  return offset;
3142
3
}
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
1
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
1
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3160
1
                                 ett_tetra_T_prop_01, T_prop_01_choice,
3161
1
                                 NULL);
3162
3163
1
  return offset;
3164
1
}
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
1
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
1
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3176
1
                                   ett_tetra_T_type2_parameters_06, T_type2_parameters_06_sequence);
3177
3178
1
  return offset;
3179
1
}
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
2
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
2
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3197
2
                                 ett_tetra_T_optional_elements_14, T_optional_elements_14_choice,
3198
2
                                 NULL);
3199
3200
2
  return offset;
3201
2
}
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
2
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
2
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3215
2
                                   ett_tetra_U_ALERT, U_ALERT_sequence);
3216
3217
2
  col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-ALERT");
3218
3219
2
  return offset;
3220
2
}
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
14
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
14
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
3343
14
                                                            0U, 31U, NULL, false);
3344
3345
14
  return offset;
3346
14
}
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
5
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
5
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3449
5
                                   ett_tetra_U_RELEASE, U_RELEASE_sequence);
3450
3451
5
  col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-RELEASE");
3452
5
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3453
5
                                   ett_tetra_U_RELEASE, U_RELEASE_sequence);
3454
3455
5
  col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-RELEASE");
3456
3457
5
  return offset;
3458
5
}
3459
3460
3461
static const value_string tetra_T_simple_duplex_selection_vals[] = {
3462
  {   0, "simplex" },
3463
  {   1, "duplex" },
3464
  { 0, NULL }
3465
};
3466
3467
3468
static unsigned
3469
1
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_) {
3470
1
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
3471
1
                                     2, NULL, false, 0, NULL);
3472
3473
1
  return offset;
3474
1
}
3475
3476
3477
static const per_sequence_t T_called_party_ssi_extension_sequence[] = {
3478
  { &hf_tetra_called_party_ssi, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16777215 },
3479
  { &hf_tetra_called_party_extention, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16777215 },
3480
  { NULL, 0, 0, NULL }
3481
};
3482
3483
static unsigned
3484
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_) {
3485
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3486
0
                                   ett_tetra_T_called_party_ssi_extension, T_called_party_ssi_extension_sequence);
3487
3488
0
  return offset;
3489
0
}
3490
3491
3492
static const value_string tetra_Calling_party_address_type_vals[] = {
3493
  {   0, "called-party-sna" },
3494
  {   1, "called-party-ssi" },
3495
  {   2, "called-party-ssi-extension" },
3496
  {   3, "reserved" },
3497
  { 0, NULL }
3498
};
3499
3500
static const per_choice_t Calling_party_address_type_choice[] = {
3501
  {   0, &hf_tetra_called_party_sna, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_255 },
3502
  {   1, &hf_tetra_called_party_ssi, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_16777215 },
3503
  {   2, &hf_tetra_called_party_ssi_extension, ASN1_NO_EXTENSIONS     , dissect_tetra_T_called_party_ssi_extension },
3504
  {   3, &hf_tetra_reserved_03   , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
3505
  { 0, NULL, 0, NULL }
3506
};
3507
3508
static unsigned
3509
4
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_) {
3510
4
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3511
4
                                 ett_tetra_Calling_party_address_type, Calling_party_address_type_choice,
3512
4
                                 NULL);
3513
3514
4
  return offset;
3515
4
}
3516
3517
3518
3519
static unsigned
3520
1
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_) {
3521
1
  offset = dissect_tetra_Calling_party_address_type(tvb, offset, actx, tree, hf_index);
3522
3523
1
  return offset;
3524
1
}
3525
3526
3527
static const value_string tetra_T_external_subscriber_number_vals[] = {
3528
  {   0, "none" },
3529
  {   1, "external-subscriber-number" },
3530
  { 0, NULL }
3531
};
3532
3533
static const per_choice_t T_external_subscriber_number_choice[] = {
3534
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
3535
  {   1, &hf_tetra_external_subscriber_number_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_31 },
3536
  { 0, NULL, 0, NULL }
3537
};
3538
3539
static unsigned
3540
1
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_) {
3541
1
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3542
1
                                 ett_tetra_T_external_subscriber_number, T_external_subscriber_number_choice,
3543
1
                                 NULL);
3544
3545
1
  return offset;
3546
1
}
3547
3548
3549
static const value_string tetra_T_prop_vals[] = {
3550
  {   0, "none" },
3551
  {   1, "prop" },
3552
  { 0, NULL }
3553
};
3554
3555
static const per_choice_t T_prop_choice[] = {
3556
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
3557
  {   1, &hf_tetra_prop_01       , ASN1_NO_EXTENSIONS     , dissect_tetra_Proprietary },
3558
  { 0, NULL, 0, NULL }
3559
};
3560
3561
static unsigned
3562
1
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_) {
3563
1
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3564
1
                                 ett_tetra_T_prop, T_prop_choice,
3565
1
                                 NULL);
3566
3567
1
  return offset;
3568
1
}
3569
3570
3571
static const per_sequence_t T_type2_parameters_05_sequence[] = {
3572
  { &hf_tetra_external_subscriber_number, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_external_subscriber_number },
3573
  { &hf_tetra_prop          , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop },
3574
  { NULL, 0, 0, NULL }
3575
};
3576
3577
static unsigned
3578
1
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_) {
3579
1
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3580
1
                                   ett_tetra_T_type2_parameters_05, T_type2_parameters_05_sequence);
3581
3582
1
  return offset;
3583
1
}
3584
3585
3586
static const value_string tetra_T_optional_elements_13_vals[] = {
3587
  {   0, "no-type2" },
3588
  {   1, "type2-parameters" },
3589
  { 0, NULL }
3590
};
3591
3592
static const per_choice_t T_optional_elements_13_choice[] = {
3593
  {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
3594
  {   1, &hf_tetra_type2_parameters_05, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_parameters_05 },
3595
  { 0, NULL, 0, NULL }
3596
};
3597
3598
static unsigned
3599
1
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_) {
3600
1
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3601
1
                                 ett_tetra_T_optional_elements_13, T_optional_elements_13_choice,
3602
1
                                 NULL);
3603
3604
1
  return offset;
3605
1
}
3606
3607
3608
static const per_sequence_t U_SETUP_sequence[] = {
3609
  { &hf_tetra_area_selection, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_15 },
3610
  { &hf_tetra_hook_method_selection, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
3611
  { &hf_tetra_simple_duplex_selection, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_simple_duplex_selection },
3612
  { &hf_tetra_basic_service_information, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Basic_service_information },
3613
  { &hf_tetra_request_transmit_send_data, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
3614
  { &hf_tetra_call_priority , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_15 },
3615
  { &hf_tetra_clir_control  , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
3616
  { &hf_tetra_called_party_address, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Called_party_address_type },
3617
  { &hf_tetra_optional_elements_13, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_13 },
3618
  { NULL, 0, 0, NULL }
3619
};
3620
3621
static unsigned
3622
1
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_) {
3623
1
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3624
1
                                   ett_tetra_U_SETUP, U_SETUP_sequence);
3625
3626
1
  col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-SETUP");
3627
3628
1
  return offset;
3629
1
}
3630
3631
3632
3633
static unsigned
3634
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_) {
3635
0
  offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
3636
0
                                     48, 48, false, NULL, 0, NULL, NULL);
3637
3638
0
  return offset;
3639
0
}
3640
3641
3642
static const value_string tetra_T_called_party_type_identifier_01_vals[] = {
3643
  {   0, "short-number-address" },
3644
  {   1, "ssi" },
3645
  {   2, "called-ssi-called-extension" },
3646
  {   3, "none" },
3647
  { 0, NULL }
3648
};
3649
3650
static const per_choice_t T_called_party_type_identifier_01_choice[] = {
3651
  {   0, &hf_tetra_short_number_address, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_255 },
3652
  {   1, &hf_tetra_ssi           , ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_16777215 },
3653
  {   2, &hf_tetra_called_ssi_called_extension, ASN1_NO_EXTENSIONS     , dissect_tetra_BIT_STRING_SIZE_48 },
3654
  {   3, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
3655
  { 0, NULL, 0, NULL }
3656
};
3657
3658
static unsigned
3659
1
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_) {
3660
1
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3661
1
                                 ett_tetra_T_called_party_type_identifier_01, T_called_party_type_identifier_01_choice,
3662
1
                                 NULL);
3663
3664
1
  return offset;
3665
1
}
3666
3667
3668
static const per_sequence_t U_STATUS_sequence[] = {
3669
  { &hf_tetra_area_selection, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_15 },
3670
  { &hf_tetra_called_party_type_identifier_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_called_party_type_identifier_01 },
3671
  { &hf_tetra_pre_coded_status, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_65535 },
3672
  { NULL, 0, 0, NULL }
3673
};
3674
3675
static unsigned
3676
1
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_) {
3677
1
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3678
1
                                   ett_tetra_U_STATUS, U_STATUS_sequence);
3679
3680
1
  col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-STATUS");
3681
3682
1
  return offset;
3683
1
}
3684
3685
3686
static const value_string tetra_T_prop_03_vals[] = {
3687
  {   0, "none" },
3688
  {   1, "prop" },
3689
  { 0, NULL }
3690
};
3691
3692
static const per_choice_t T_prop_03_choice[] = {
3693
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
3694
  {   1, &hf_tetra_prop_01       , ASN1_NO_EXTENSIONS     , dissect_tetra_Proprietary },
3695
  { 0, NULL, 0, NULL }
3696
};
3697
3698
static unsigned
3699
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_) {
3700
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3701
0
                                 ett_tetra_T_prop_03, T_prop_03_choice,
3702
0
                                 NULL);
3703
3704
0
  return offset;
3705
0
}
3706
3707
3708
static const per_sequence_t T_type2_parameters_08_sequence[] = {
3709
  { &hf_tetra_prop_04       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop_03 },
3710
  { NULL, 0, 0, NULL }
3711
};
3712
3713
static unsigned
3714
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_) {
3715
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3716
0
                                   ett_tetra_T_type2_parameters_08, T_type2_parameters_08_sequence);
3717
3718
0
  return offset;
3719
0
}
3720
3721
3722
static const value_string tetra_T_optional_elements_16_vals[] = {
3723
  {   0, "no-type2" },
3724
  {   1, "type2-parameters" },
3725
  { 0, NULL }
3726
};
3727
3728
static const per_choice_t T_optional_elements_16_choice[] = {
3729
  {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
3730
  {   1, &hf_tetra_type2_parameters_08, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_parameters_08 },
3731
  { 0, NULL, 0, NULL }
3732
};
3733
3734
static unsigned
3735
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_) {
3736
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3737
0
                                 ett_tetra_T_optional_elements_16, T_optional_elements_16_choice,
3738
0
                                 NULL);
3739
3740
0
  return offset;
3741
0
}
3742
3743
3744
static const per_sequence_t U_TX_CEASED_sequence[] = {
3745
  { &hf_tetra_call_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
3746
  { &hf_tetra_optional_elements_16, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_16 },
3747
  { NULL, 0, 0, NULL }
3748
};
3749
3750
static unsigned
3751
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_) {
3752
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3753
0
                                   ett_tetra_U_TX_CEASED, U_TX_CEASED_sequence);
3754
3755
0
  col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-TX-CEASED");
3756
3757
0
  return offset;
3758
0
}
3759
3760
3761
static const value_string tetra_T_prop_04_vals[] = {
3762
  {   0, "none" },
3763
  {   1, "prop" },
3764
  { 0, NULL }
3765
};
3766
3767
static const per_choice_t T_prop_04_choice[] = {
3768
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
3769
  {   1, &hf_tetra_prop_01       , ASN1_NO_EXTENSIONS     , dissect_tetra_Proprietary },
3770
  { 0, NULL, 0, NULL }
3771
};
3772
3773
static unsigned
3774
1
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_) {
3775
1
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3776
1
                                 ett_tetra_T_prop_04, T_prop_04_choice,
3777
1
                                 NULL);
3778
3779
1
  return offset;
3780
1
}
3781
3782
3783
static const per_sequence_t T_type2_parameters_09_sequence[] = {
3784
  { &hf_tetra_prop_05       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop_04 },
3785
  { NULL, 0, 0, NULL }
3786
};
3787
3788
static unsigned
3789
1
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_) {
3790
1
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3791
1
                                   ett_tetra_T_type2_parameters_09, T_type2_parameters_09_sequence);
3792
3793
1
  return offset;
3794
1
}
3795
3796
3797
static const value_string tetra_T_optional_elements_17_vals[] = {
3798
  {   0, "no-type2" },
3799
  {   1, "type2-parameters" },
3800
  { 0, NULL }
3801
};
3802
3803
static const per_choice_t T_optional_elements_17_choice[] = {
3804
  {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
3805
  {   1, &hf_tetra_type2_parameters_09, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_parameters_09 },
3806
  { 0, NULL, 0, NULL }
3807
};
3808
3809
static unsigned
3810
1
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_) {
3811
1
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3812
1
                                 ett_tetra_T_optional_elements_17, T_optional_elements_17_choice,
3813
1
                                 NULL);
3814
3815
1
  return offset;
3816
1
}
3817
3818
3819
static const per_sequence_t U_TX_DEMAND_sequence[] = {
3820
  { &hf_tetra_call_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
3821
  { &hf_tetra_tx_demand_priority, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
3822
  { &hf_tetra_encryption_control, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
3823
  { &hf_tetra_reserved_01   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
3824
  { &hf_tetra_optional_elements_17, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_17 },
3825
  { NULL, 0, 0, NULL }
3826
};
3827
3828
static unsigned
3829
1
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_) {
3830
1
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3831
1
                                   ett_tetra_U_TX_DEMAND, U_TX_DEMAND_sequence);
3832
3833
1
  col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-TX-DEMAND");
3834
3835
1
  return offset;
3836
1
}
3837
3838
3839
3840
static unsigned
3841
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_) {
3842
0
  offset = dissect_tetra_Calling_party_address_type(tvb, offset, actx, tree, hf_index);
3843
3844
0
  return offset;
3845
0
}
3846
3847
3848
static const value_string tetra_T_prop_06_vals[] = {
3849
  {   0, "none" },
3850
  {   1, "prop" },
3851
  { 0, NULL }
3852
};
3853
3854
static const per_choice_t T_prop_06_choice[] = {
3855
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
3856
  {   1, &hf_tetra_prop_01       , ASN1_NO_EXTENSIONS     , dissect_tetra_Proprietary },
3857
  { 0, NULL, 0, NULL }
3858
};
3859
3860
static unsigned
3861
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_) {
3862
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3863
0
                                 ett_tetra_T_prop_06, T_prop_06_choice,
3864
0
                                 NULL);
3865
3866
0
  return offset;
3867
0
}
3868
3869
3870
static const per_sequence_t T_type2_parameters_11_sequence[] = {
3871
  { &hf_tetra_prop_07       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop_06 },
3872
  { NULL, 0, 0, NULL }
3873
};
3874
3875
static unsigned
3876
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_) {
3877
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3878
0
                                   ett_tetra_T_type2_parameters_11, T_type2_parameters_11_sequence);
3879
3880
0
  return offset;
3881
0
}
3882
3883
3884
static const value_string tetra_T_optional_elements_19_vals[] = {
3885
  {   0, "no-type2" },
3886
  {   1, "type2-parameters" },
3887
  { 0, NULL }
3888
};
3889
3890
static const per_choice_t T_optional_elements_19_choice[] = {
3891
  {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
3892
  {   1, &hf_tetra_type2_parameters_11, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_parameters_11 },
3893
  { 0, NULL, 0, NULL }
3894
};
3895
3896
static unsigned
3897
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_) {
3898
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3899
0
                                 ett_tetra_T_optional_elements_19, T_optional_elements_19_choice,
3900
0
                                 NULL);
3901
3902
0
  return offset;
3903
0
}
3904
3905
3906
static const per_sequence_t U_CALL_RESTORE_sequence[] = {
3907
  { &hf_tetra_call_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
3908
  { &hf_tetra_request_to_transmit_send_data, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
3909
  { &hf_tetra_other_party_address, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Other_party_address_type },
3910
  { &hf_tetra_basic_service_information, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Basic_service_information },
3911
  { &hf_tetra_optional_elements_19, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_19 },
3912
  { NULL, 0, 0, NULL }
3913
};
3914
3915
static unsigned
3916
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_) {
3917
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
3918
0
                                   ett_tetra_U_CALL_RESTORE, U_CALL_RESTORE_sequence);
3919
3920
0
  col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-CALL-RESTORE");
3921
3922
0
  return offset;
3923
0
}
3924
3925
3926
static const value_string tetra_T_called_party_type_identifier_vals[] = {
3927
  {   0, "sna" },
3928
  {   1, "ssi" },
3929
  {   2, "ssi-extension" },
3930
  {   3, "none" },
3931
  { 0, NULL }
3932
};
3933
3934
static const per_choice_t T_called_party_type_identifier_choice[] = {
3935
  {   0, &hf_tetra_sna           , ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_255 },
3936
  {   1, &hf_tetra_ssi           , ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_16777215 },
3937
  {   2, &hf_tetra_ssi_extension , ASN1_NO_EXTENSIONS     , dissect_tetra_BIT_STRING_SIZE_48 },
3938
  {   3, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
3939
  { 0, NULL, 0, NULL }
3940
};
3941
3942
static unsigned
3943
1
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_) {
3944
1
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
3945
1
                                 ett_tetra_T_called_party_type_identifier, T_called_party_type_identifier_choice,
3946
1
                                 NULL);
3947
3948
1
  return offset;
3949
1
}
3950
3951
3952
3953
static unsigned
3954
46
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_) {
3955
46
  offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
3956
46
                                       4, 4, false, NULL);
3957
3958
46
  return offset;
3959
46
}
3960
3961
3962
3963
static unsigned
3964
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_) {
3965
0
  offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
3966
0
                                     64, 64, false, NULL, 0, NULL, NULL);
3967
3968
0
  return offset;
3969
0
}
3970
3971
3972
3973
static unsigned
3974
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_) {
3975
0
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
3976
0
                                                            0U, 4194304U, NULL, false);
3977
3978
0
  return offset;
3979
0
}
3980
3981
3982
static const value_string tetra_T_short_data_type_identifier_vals[] = {
3983
  {   0, "data-1" },
3984
  {   1, "data-2" },
3985
  {   2, "data-3" },
3986
  {   3, "length-indicator-data-4" },
3987
  { 0, NULL }
3988
};
3989
3990
static const per_choice_t T_short_data_type_identifier_choice[] = {
3991
  {   0, &hf_tetra_data_1        , ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_65535 },
3992
  {   1, &hf_tetra_data_2        , ASN1_NO_EXTENSIONS     , dissect_tetra_OCTET_STRING_SIZE_4 },
3993
  {   2, &hf_tetra_data_3        , ASN1_NO_EXTENSIONS     , dissect_tetra_BIT_STRING_SIZE_64 },
3994
  {   3, &hf_tetra_length_indicator_data_4, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_4194304 },
3995
  { 0, NULL, 0, NULL }
3996
};
3997
3998
static unsigned
3999
1
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_) {
4000
1
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
4001
1
                                 ett_tetra_T_short_data_type_identifier, T_short_data_type_identifier_choice,
4002
1
                                 NULL);
4003
4004
1
  return offset;
4005
1
}
4006
4007
4008
static const per_sequence_t U_SDS_DATA_sequence[] = {
4009
  { &hf_tetra_area_selection, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_15 },
4010
  { &hf_tetra_called_party_type_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_called_party_type_identifier },
4011
  { &hf_tetra_short_data_type_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_short_data_type_identifier },
4012
  { NULL, 0, 0, NULL }
4013
};
4014
4015
static unsigned
4016
1
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_) {
4017
1
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4018
1
                                   ett_tetra_U_SDS_DATA, U_SDS_DATA_sequence);
4019
4020
1
  col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-SDS-DATA");
4021
4022
1
  return offset;
4023
1
}
4024
4025
4026
static const value_string tetra_U_CMCE_PDU_vals[] = {
4027
  {   0, "u-Alert" },
4028
  {   1, "reserved1" },
4029
  {   2, "u-Connect" },
4030
  {   3, "reserved2" },
4031
  {   4, "u-Disconnect" },
4032
  {   5, "u-Info" },
4033
  {   6, "u-Release" },
4034
  {   7, "u-Setup" },
4035
  {   8, "u-Status" },
4036
  {   9, "u-Tx-Ceased" },
4037
  {  10, "u-Tx-Demand" },
4038
  {  11, "reserved3" },
4039
  {  12, "reserved4" },
4040
  {  13, "reserved5" },
4041
  {  14, "u-Call-Restore" },
4042
  {  15, "u-SDS-Data" },
4043
  {  16, "u-Facility" },
4044
  { 0, NULL }
4045
};
4046
4047
static const per_choice_t U_CMCE_PDU_choice[] = {
4048
  {   0, &hf_tetra_u_Alert       , ASN1_NO_EXTENSIONS     , dissect_tetra_U_ALERT },
4049
  {   1, &hf_tetra_reserved1     , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4050
  {   2, &hf_tetra_u_Connect     , ASN1_NO_EXTENSIONS     , dissect_tetra_U_CONNECT },
4051
  {   3, &hf_tetra_reserved2     , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4052
  {   4, &hf_tetra_u_Disconnect  , ASN1_NO_EXTENSIONS     , dissect_tetra_U_DISCONNECT },
4053
  {   5, &hf_tetra_u_Info        , ASN1_NO_EXTENSIONS     , dissect_tetra_U_INFO },
4054
  {   6, &hf_tetra_u_Release     , ASN1_NO_EXTENSIONS     , dissect_tetra_U_RELEASE },
4055
  {   7, &hf_tetra_u_Setup       , ASN1_NO_EXTENSIONS     , dissect_tetra_U_SETUP },
4056
  {   8, &hf_tetra_u_Status      , ASN1_NO_EXTENSIONS     , dissect_tetra_U_STATUS },
4057
  {   9, &hf_tetra_u_Tx_Ceased   , ASN1_NO_EXTENSIONS     , dissect_tetra_U_TX_CEASED },
4058
  {  10, &hf_tetra_u_Tx_Demand   , ASN1_NO_EXTENSIONS     , dissect_tetra_U_TX_DEMAND },
4059
  {  11, &hf_tetra_reserved3     , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4060
  {  12, &hf_tetra_reserved4     , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4061
  {  13, &hf_tetra_reserved5     , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4062
  {  14, &hf_tetra_u_Call_Restore, ASN1_NO_EXTENSIONS     , dissect_tetra_U_CALL_RESTORE },
4063
  {  15, &hf_tetra_u_SDS_Data    , ASN1_NO_EXTENSIONS     , dissect_tetra_U_SDS_DATA },
4064
  {  16, &hf_tetra_u_Facility    , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4065
  { 0, NULL, 0, NULL }
4066
};
4067
4068
static unsigned
4069
13
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_) {
4070
13
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
4071
13
                                 ett_tetra_U_CMCE_PDU, U_CMCE_PDU_choice,
4072
13
                                 NULL);
4073
4074
13
  return offset;
4075
13
}
4076
4077
4078
static const value_string tetra_T_cell_number_vals[] = {
4079
  {   0, "none" },
4080
  {   1, "cell-number" },
4081
  { 0, NULL }
4082
};
4083
4084
static const per_choice_t T_cell_number_choice[] = {
4085
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4086
  {   1, &hf_tetra_cell_number_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_65535 },
4087
  { 0, NULL, 0, NULL }
4088
};
4089
4090
static unsigned
4091
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_) {
4092
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
4093
0
                                 ett_tetra_T_cell_number, T_cell_number_choice,
4094
0
                                 NULL);
4095
4096
0
  return offset;
4097
0
}
4098
4099
4100
static const per_sequence_t T_type2_parameters_sequence[] = {
4101
  { &hf_tetra_cell_number   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_cell_number },
4102
  { &hf_tetra_sdu           , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BIT_STRING },
4103
  { NULL, 0, 0, NULL }
4104
};
4105
4106
static unsigned
4107
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_) {
4108
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4109
0
                                   ett_tetra_T_type2_parameters, T_type2_parameters_sequence);
4110
4111
0
  return offset;
4112
0
}
4113
4114
4115
static const value_string tetra_T_optional_elements_vals[] = {
4116
  {   0, "no-type2" },
4117
  {   1, "type2-parameters" },
4118
  { 0, NULL }
4119
};
4120
4121
static const per_choice_t T_optional_elements_choice[] = {
4122
  {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4123
  {   1, &hf_tetra_type2_parameters, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_parameters },
4124
  { 0, NULL, 0, NULL }
4125
};
4126
4127
static unsigned
4128
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_) {
4129
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
4130
0
                                 ett_tetra_T_optional_elements, T_optional_elements_choice,
4131
0
                                 NULL);
4132
4133
0
  return offset;
4134
0
}
4135
4136
4137
static const per_sequence_t U_PREPARE_sequence[] = {
4138
  { &hf_tetra_pdu_type_02   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
4139
  { &hf_tetra_optional_elements, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements },
4140
  { NULL, 0, 0, NULL }
4141
};
4142
4143
static unsigned
4144
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_) {
4145
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4146
0
                                   ett_tetra_U_PREPARE, U_PREPARE_sequence);
4147
4148
0
  return offset;
4149
0
}
4150
4151
4152
static const value_string tetra_T_mcc_vals[] = {
4153
  {   0, "none" },
4154
  {   1, "mcc" },
4155
  { 0, NULL }
4156
};
4157
4158
static const per_choice_t T_mcc_choice[] = {
4159
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4160
  {   1, &hf_tetra_mcc           , ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_1023 },
4161
  { 0, NULL, 0, NULL }
4162
};
4163
4164
static unsigned
4165
1
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_) {
4166
1
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
4167
1
                                 ett_tetra_T_mcc, T_mcc_choice,
4168
1
                                 NULL);
4169
4170
1
  return offset;
4171
1
}
4172
4173
4174
static const value_string tetra_T_mnc_vals[] = {
4175
  {   0, "none" },
4176
  {   1, "mnc" },
4177
  { 0, NULL }
4178
};
4179
4180
static const per_choice_t T_mnc_choice[] = {
4181
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4182
  {   1, &hf_tetra_mnc           , ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_16383 },
4183
  { 0, NULL, 0, NULL }
4184
};
4185
4186
static unsigned
4187
1
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_) {
4188
1
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
4189
1
                                 ett_tetra_T_mnc, T_mnc_choice,
4190
1
                                 NULL);
4191
4192
1
  return offset;
4193
1
}
4194
4195
4196
static const value_string tetra_T_la_vals[] = {
4197
  {   0, "none" },
4198
  {   1, "la" },
4199
  { 0, NULL }
4200
};
4201
4202
static const per_choice_t T_la_choice[] = {
4203
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4204
  {   1, &hf_tetra_la            , ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_16383 },
4205
  { 0, NULL, 0, NULL }
4206
};
4207
4208
static unsigned
4209
1
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_) {
4210
1
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
4211
1
                                 ett_tetra_T_la, T_la_choice,
4212
1
                                 NULL);
4213
4214
1
  return offset;
4215
1
}
4216
4217
4218
static const per_sequence_t T_type2_parameters_01_sequence[] = {
4219
  { &hf_tetra_mcc_01        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_mcc },
4220
  { &hf_tetra_mnc_01        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_mnc },
4221
  { &hf_tetra_la_01         , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_la },
4222
  { &hf_tetra_sdu           , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BIT_STRING },
4223
  { NULL, 0, 0, NULL }
4224
};
4225
4226
static unsigned
4227
1
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_) {
4228
1
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4229
1
                                   ett_tetra_T_type2_parameters_01, T_type2_parameters_01_sequence);
4230
4231
1
  return offset;
4232
1
}
4233
4234
4235
static const value_string tetra_T_optional_elements_01_vals[] = {
4236
  {   0, "no-type2" },
4237
  {   1, "type2-parameters" },
4238
  { 0, NULL }
4239
};
4240
4241
static const per_choice_t T_optional_elements_01_choice[] = {
4242
  {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4243
  {   1, &hf_tetra_type2_parameters_01, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_parameters_01 },
4244
  { 0, NULL, 0, NULL }
4245
};
4246
4247
static unsigned
4248
1
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_) {
4249
1
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
4250
1
                                 ett_tetra_T_optional_elements_01, T_optional_elements_01_choice,
4251
1
                                 NULL);
4252
4253
1
  return offset;
4254
1
}
4255
4256
4257
static const per_sequence_t U_RESTORE_sequence[] = {
4258
  { &hf_tetra_pdu_type_02   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
4259
  { &hf_tetra_optional_elements_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_01 },
4260
  { NULL, 0, 0, NULL }
4261
};
4262
4263
static unsigned
4264
1
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_) {
4265
1
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4266
1
                                   ett_tetra_U_RESTORE, U_RESTORE_sequence);
4267
4268
1
  return offset;
4269
1
}
4270
4271
4272
static const value_string tetra_UMLE_PDU_vals[] = {
4273
  {   0, "u-prepare" },
4274
  {   1, "umle-reserved1" },
4275
  {   2, "umle-reserved2" },
4276
  {   3, "umle-reserved3" },
4277
  {   4, "u-restore" },
4278
  {   5, "umle-reserved4" },
4279
  {   6, "umle-reserved5" },
4280
  {   7, "umle-reserved6" },
4281
  { 0, NULL }
4282
};
4283
4284
static const per_choice_t UMLE_PDU_choice[] = {
4285
  {   0, &hf_tetra_u_prepare     , ASN1_NO_EXTENSIONS     , dissect_tetra_U_PREPARE },
4286
  {   1, &hf_tetra_umle_reserved1, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4287
  {   2, &hf_tetra_umle_reserved2, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4288
  {   3, &hf_tetra_umle_reserved3, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4289
  {   4, &hf_tetra_u_restore     , ASN1_NO_EXTENSIONS     , dissect_tetra_U_RESTORE },
4290
  {   5, &hf_tetra_umle_reserved4, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4291
  {   6, &hf_tetra_umle_reserved5, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4292
  {   7, &hf_tetra_umle_reserved6, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4293
  { 0, NULL, 0, NULL }
4294
};
4295
4296
static unsigned
4297
2
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_) {
4298
2
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
4299
2
                                 ett_tetra_UMLE_PDU, UMLE_PDU_choice,
4300
2
                                 NULL);
4301
4302
2
  return offset;
4303
2
}
4304
4305
4306
static const value_string tetra_U_MLE_PDU_vals[] = {
4307
  {   0, "u-mle-reserved1" },
4308
  {   1, "mm" },
4309
  {   2, "cmce" },
4310
  {   3, "u-mle-reserved2" },
4311
  {   4, "sndcp" },
4312
  {   5, "mle" },
4313
  {   6, "tetra-management-entity-protocol" },
4314
  {   7, "u-mle-reserved3" },
4315
  { 0, NULL }
4316
};
4317
4318
static const per_choice_t U_MLE_PDU_choice[] = {
4319
  {   0, &hf_tetra_u_mle_reserved1, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4320
  {   1, &hf_tetra_mm            , ASN1_NO_EXTENSIONS     , dissect_tetra_U_MM_PDU },
4321
  {   2, &hf_tetra_cmce          , ASN1_NO_EXTENSIONS     , dissect_tetra_U_CMCE_PDU },
4322
  {   3, &hf_tetra_u_mle_reserved2, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4323
  {   4, &hf_tetra_sndcp         , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4324
  {   5, &hf_tetra_mle           , ASN1_NO_EXTENSIONS     , dissect_tetra_UMLE_PDU },
4325
  {   6, &hf_tetra_tetra_management_entity_protocol, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4326
  {   7, &hf_tetra_u_mle_reserved3, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4327
  { 0, NULL, 0, NULL }
4328
};
4329
4330
static unsigned
4331
48
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_) {
4332
48
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
4333
48
                                 ett_tetra_U_MLE_PDU, U_MLE_PDU_choice,
4334
48
                                 NULL);
4335
4336
48
  return offset;
4337
48
}
4338
4339
4340
static const per_sequence_t U_BL_ADATA_sequence[] = {
4341
  { &hf_tetra_nr            , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4342
  { &hf_tetra_ns            , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4343
  { &hf_tetra_tl_sdu        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_U_MLE_PDU },
4344
  { NULL, 0, 0, NULL }
4345
};
4346
4347
static unsigned
4348
13
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_) {
4349
13
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4350
13
                                   ett_tetra_U_BL_ADATA, U_BL_ADATA_sequence);
4351
4352
13
  return offset;
4353
13
}
4354
4355
4356
static const per_sequence_t U_BL_DATA_sequence[] = {
4357
  { &hf_tetra_ns            , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4358
  { &hf_tetra_tl_sdu        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_U_MLE_PDU },
4359
  { NULL, 0, 0, NULL }
4360
};
4361
4362
static unsigned
4363
3
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_) {
4364
3
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4365
3
                                   ett_tetra_U_BL_DATA, U_BL_DATA_sequence);
4366
4367
3
  return offset;
4368
3
}
4369
4370
4371
static const per_sequence_t U_BL_ACK_sequence[] = {
4372
  { &hf_tetra_nr            , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4373
  { &hf_tetra_tl_sdu        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_U_MLE_PDU },
4374
  { NULL, 0, 0, NULL }
4375
};
4376
4377
static unsigned
4378
1
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_) {
4379
1
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4380
1
                                   ett_tetra_U_BL_ACK, U_BL_ACK_sequence);
4381
4382
1
  return offset;
4383
1
}
4384
4385
4386
static const per_sequence_t U_BL_ADATA_FCS_sequence[] = {
4387
  { &hf_tetra_nr            , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4388
  { &hf_tetra_ns            , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4389
  { &hf_tetra_tl_sdu        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_U_MLE_PDU },
4390
  { &hf_tetra_fcs           , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_OCTET_STRING_SIZE_4 },
4391
  { NULL, 0, 0, NULL }
4392
};
4393
4394
static unsigned
4395
7
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_) {
4396
7
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4397
7
                                   ett_tetra_U_BL_ADATA_FCS, U_BL_ADATA_FCS_sequence);
4398
4399
7
  return offset;
4400
7
}
4401
4402
4403
static const per_sequence_t U_BL_DATA_FCS_sequence[] = {
4404
  { &hf_tetra_ns            , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4405
  { &hf_tetra_tl_sdu        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_U_MLE_PDU },
4406
  { &hf_tetra_fcs           , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_OCTET_STRING_SIZE_4 },
4407
  { NULL, 0, 0, NULL }
4408
};
4409
4410
static unsigned
4411
9
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_) {
4412
9
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4413
9
                                   ett_tetra_U_BL_DATA_FCS, U_BL_DATA_FCS_sequence);
4414
4415
9
  return offset;
4416
9
}
4417
4418
4419
static const per_sequence_t U_MLE_PDU_FCS_sequence[] = {
4420
  { &hf_tetra_u_mle_pdu     , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_U_MLE_PDU },
4421
  { &hf_tetra_fcs           , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_OCTET_STRING_SIZE_4 },
4422
  { NULL, 0, 0, NULL }
4423
};
4424
4425
static unsigned
4426
13
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_) {
4427
13
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4428
13
                                   ett_tetra_U_MLE_PDU_FCS, U_MLE_PDU_FCS_sequence);
4429
4430
13
  return offset;
4431
13
}
4432
4433
4434
static const per_sequence_t U_BL_ACK_FCS_sequence[] = {
4435
  { &hf_tetra_nr            , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4436
  { &hf_tetra_tl_sdu        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_U_MLE_PDU },
4437
  { &hf_tetra_fcs           , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_OCTET_STRING_SIZE_4 },
4438
  { NULL, 0, 0, NULL }
4439
};
4440
4441
static unsigned
4442
2
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_) {
4443
2
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4444
2
                                   ett_tetra_U_BL_ACK_FCS, U_BL_ACK_FCS_sequence);
4445
4446
2
  return offset;
4447
2
}
4448
4449
4450
static const value_string tetra_U_LLC_PDU_vals[] = {
4451
  {   0, "bl-adata" },
4452
  {   1, "bl-data" },
4453
  {   2, "bl-udata" },
4454
  {   3, "bl-ack" },
4455
  {   4, "bl-adata-fcs" },
4456
  {   5, "bl-data-fcs" },
4457
  {   6, "bl-udata-fcs" },
4458
  {   7, "bl-ack-fcs" },
4459
  {   8, "al-setup" },
4460
  {   9, "al-data" },
4461
  {  10, "al-udata" },
4462
  {  11, "al-ack" },
4463
  {  12, "al-reconnect" },
4464
  {  13, "reserve1" },
4465
  {  14, "reserve2" },
4466
  {  15, "al-disc" },
4467
  { 0, NULL }
4468
};
4469
4470
static const per_choice_t U_LLC_PDU_choice[] = {
4471
  {   0, &hf_tetra_bl_adata      , ASN1_NO_EXTENSIONS     , dissect_tetra_U_BL_ADATA },
4472
  {   1, &hf_tetra_bl_data       , ASN1_NO_EXTENSIONS     , dissect_tetra_U_BL_DATA },
4473
  {   2, &hf_tetra_bl_udata      , ASN1_NO_EXTENSIONS     , dissect_tetra_U_MLE_PDU },
4474
  {   3, &hf_tetra_bl_ack        , ASN1_NO_EXTENSIONS     , dissect_tetra_U_BL_ACK },
4475
  {   4, &hf_tetra_bl_adata_fcs  , ASN1_NO_EXTENSIONS     , dissect_tetra_U_BL_ADATA_FCS },
4476
  {   5, &hf_tetra_bl_data_fcs   , ASN1_NO_EXTENSIONS     , dissect_tetra_U_BL_DATA_FCS },
4477
  {   6, &hf_tetra_bl_udata_fcs  , ASN1_NO_EXTENSIONS     , dissect_tetra_U_MLE_PDU_FCS },
4478
  {   7, &hf_tetra_bl_ack_fcs    , ASN1_NO_EXTENSIONS     , dissect_tetra_U_BL_ACK_FCS },
4479
  {   8, &hf_tetra_al_setup      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4480
  {   9, &hf_tetra_al_data       , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4481
  {  10, &hf_tetra_al_udata      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4482
  {  11, &hf_tetra_al_ack        , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4483
  {  12, &hf_tetra_al_reconnect  , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4484
  {  13, &hf_tetra_reserve1      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4485
  {  14, &hf_tetra_reserve2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4486
  {  15, &hf_tetra_al_disc       , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
4487
  { 0, NULL, 0, NULL }
4488
};
4489
4490
static unsigned
4491
60
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_) {
4492
60
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
4493
60
                                 ett_tetra_U_LLC_PDU, U_LLC_PDU_choice,
4494
60
                                 NULL);
4495
4496
60
  return offset;
4497
60
}
4498
4499
4500
static const value_string tetra_LengthIndication_vals[] = {
4501
  {   0, "null" },
4502
  {   1, "reserved-1" },
4503
  {   2, "reserved-2" },
4504
  {   3, "bits-24" },
4505
  {   4, "bits-32" },
4506
  {   5, "bits-40" },
4507
  {   6, "bits-48" },
4508
  {   7, "bits-56" },
4509
  {   8, "bits-64" },
4510
  {   9, "bits-72" },
4511
  {  10, "bits-80" },
4512
  {  11, "bits-88" },
4513
  {  12, "bits-96" },
4514
  {  13, "reserved-13" },
4515
  {  14, "reserved-14" },
4516
  {  15, "reserved-15" },
4517
  {  16, "reserved-16" },
4518
  {  17, "reserved-17" },
4519
  {  18, "reserved-18" },
4520
  {  19, "reserved-19" },
4521
  {  20, "reserved-20" },
4522
  {  21, "reserved-21" },
4523
  {  22, "reserved-22" },
4524
  {  23, "reserved-23" },
4525
  {  24, "reserved-24" },
4526
  {  25, "reserved-25" },
4527
  {  26, "reserved-26" },
4528
  {  27, "reserved-27" },
4529
  {  28, "reserved-28" },
4530
  {  29, "reserved-29" },
4531
  {  30, "reserved-30" },
4532
  {  31, "reserved-31" },
4533
  { 0, NULL }
4534
};
4535
4536
4537
static unsigned
4538
10
dissect_tetra_LengthIndication(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4539
10
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
4540
10
                                     32, NULL, false, 0, NULL);
4541
4542
10
  return offset;
4543
10
}
4544
4545
4546
static const value_string tetra_Frag1_vals[] = {
4547
  {   0, "not-fragmented" },
4548
  {   1, "start-of-fragmentation" },
4549
  { 0, NULL }
4550
};
4551
4552
4553
static unsigned
4554
23
dissect_tetra_Frag1(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4555
23
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
4556
23
                                     2, NULL, false, 0, NULL);
4557
4558
23
  return offset;
4559
23
}
4560
4561
4562
static const value_string tetra_SLOT_APPLY_vals[] = {
4563
  {   0, "subslot" },
4564
  {   1, "slot-1" },
4565
  {   2, "slot-2" },
4566
  {   3, "slot-3" },
4567
  {   4, "slot-4" },
4568
  {   5, "slot-5" },
4569
  {   6, "slot-6" },
4570
  {   7, "slot-8" },
4571
  {   8, "slot-10" },
4572
  {   9, "slot-13" },
4573
  {  10, "slot-17" },
4574
  {  11, "slot-24" },
4575
  {  12, "slot-34" },
4576
  {  13, "slot-51" },
4577
  {  14, "slot-68" },
4578
  {  15, "more-than-68" },
4579
  { 0, NULL }
4580
};
4581
4582
4583
static unsigned
4584
33
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_) {
4585
33
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
4586
33
                                     16, NULL, false, 0, NULL);
4587
4588
33
  return offset;
4589
33
}
4590
4591
4592
static const per_sequence_t FRAG_sequence[] = {
4593
  { &hf_tetra_frag          , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Frag1 },
4594
  { &hf_tetra_reservation_requirement, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_SLOT_APPLY },
4595
  { NULL, 0, 0, NULL }
4596
};
4597
4598
static unsigned
4599
13
dissect_tetra_FRAG(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4600
13
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4601
13
                                   ett_tetra_FRAG, FRAG_sequence);
4602
4603
13
  return offset;
4604
13
}
4605
4606
4607
static const value_string tetra_T_lengthIndicationOrCapacityRequest_vals[] = {
4608
  {   0, "lengthIndication" },
4609
  {   1, "capacityRequest" },
4610
  { 0, NULL }
4611
};
4612
4613
static const per_choice_t T_lengthIndicationOrCapacityRequest_choice[] = {
4614
  {   0, &hf_tetra_lengthIndication, ASN1_NO_EXTENSIONS     , dissect_tetra_LengthIndication },
4615
  {   1, &hf_tetra_capacityRequest, ASN1_NO_EXTENSIONS     , dissect_tetra_FRAG },
4616
  { 0, NULL, 0, NULL }
4617
};
4618
4619
static unsigned
4620
23
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_) {
4621
23
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
4622
23
                                 ett_tetra_T_lengthIndicationOrCapacityRequest, T_lengthIndicationOrCapacityRequest_choice,
4623
23
                                 NULL);
4624
4625
23
  return offset;
4626
23
}
4627
4628
4629
static const per_sequence_t ComplexSDU_sequence[] = {
4630
  { &hf_tetra_lengthIndicationOrCapacityRequest, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_lengthIndicationOrCapacityRequest },
4631
  { &hf_tetra_tm_sdu_01     , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_U_LLC_PDU },
4632
  { NULL, 0, 0, NULL }
4633
};
4634
4635
static unsigned
4636
23
dissect_tetra_ComplexSDU(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4637
23
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4638
23
                                   ett_tetra_ComplexSDU, ComplexSDU_sequence);
4639
4640
23
  return offset;
4641
23
}
4642
4643
4644
static const value_string tetra_T_data_vals[] = {
4645
  {   0, "sdu1" },
4646
  {   1, "sdu2" },
4647
  { 0, NULL }
4648
};
4649
4650
static const per_choice_t T_data_choice[] = {
4651
  {   0, &hf_tetra_sdu1          , ASN1_NO_EXTENSIONS     , dissect_tetra_U_LLC_PDU },
4652
  {   1, &hf_tetra_sdu2          , ASN1_NO_EXTENSIONS     , dissect_tetra_ComplexSDU },
4653
  { 0, NULL, 0, NULL }
4654
};
4655
4656
static unsigned
4657
48
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_) {
4658
48
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
4659
48
                                 ett_tetra_T_data, T_data_choice,
4660
48
                                 NULL);
4661
4662
48
  return offset;
4663
48
}
4664
4665
4666
static const per_sequence_t MAC_ACCESS_sequence[] = {
4667
  { &hf_tetra_pdu_type_01   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4668
  { &hf_tetra_fill_bit_indication, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Fill_Bit_Indication },
4669
  { &hf_tetra_encrypted_flag, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Encrypted_Flag },
4670
  { &hf_tetra_address       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Address },
4671
  { &hf_tetra_data          , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_data },
4672
  { NULL, 0, 0, NULL }
4673
};
4674
4675
static unsigned
4676
51
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_) {
4677
51
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4678
51
                                   ett_tetra_MAC_ACCESS, MAC_ACCESS_sequence);
4679
4680
51
  return offset;
4681
51
}
4682
4683
4684
static const value_string tetra_LengthIndicationMacData_vals[] = {
4685
  {   0, "null" },
4686
  {   1, "reserved-1" },
4687
  {   2, "reserved-2" },
4688
  {   3, "bits-24" },
4689
  {   4, "bits-32" },
4690
  {   5, "bits-40" },
4691
  {   6, "bits-48" },
4692
  {   7, "bits-56" },
4693
  {   8, "bits-64" },
4694
  {   9, "bits-72" },
4695
  {  10, "bits-80" },
4696
  {  11, "bits-88" },
4697
  {  12, "bits-96" },
4698
  {  13, "bits-104" },
4699
  {  14, "bits-112" },
4700
  {  15, "bits-120" },
4701
  {  16, "bits-128" },
4702
  {  17, "bits-136" },
4703
  {  18, "bits-144" },
4704
  {  19, "bits-152" },
4705
  {  20, "bits-160" },
4706
  {  21, "bits-168" },
4707
  {  22, "bits-176" },
4708
  {  23, "bits-184" },
4709
  {  24, "bits-192" },
4710
  {  25, "bits-200" },
4711
  {  26, "bits-208" },
4712
  {  27, "bits-216" },
4713
  {  28, "bits-224" },
4714
  {  29, "bits-232" },
4715
  {  30, "bits-240" },
4716
  {  31, "bits-248" },
4717
  {  32, "bits-256" },
4718
  {  33, "bits-264" },
4719
  {  34, "bits-272" },
4720
  {  35, "reserved-35" },
4721
  {  36, "reserved-36" },
4722
  {  37, "reserved-37" },
4723
  {  38, "reserved-38" },
4724
  {  39, "reserved-39" },
4725
  {  40, "reserved-40" },
4726
  {  41, "reserved-41" },
4727
  {  42, "reserved-42" },
4728
  {  43, "reserved-43" },
4729
  {  44, "reserved-44" },
4730
  {  45, "reserved-45" },
4731
  {  46, "reserved-46" },
4732
  {  47, "reserved-47" },
4733
  {  48, "reserved-48" },
4734
  {  49, "reserved-49" },
4735
  {  50, "reserved-50" },
4736
  {  51, "reserved-51" },
4737
  {  52, "reserved-52" },
4738
  {  53, "reserved-53" },
4739
  {  54, "reserved-54" },
4740
  {  55, "reserved-55" },
4741
  {  56, "reserved-56" },
4742
  {  57, "reserved-57" },
4743
  {  58, "reserved-58" },
4744
  {  59, "reserved-59" },
4745
  {  60, "reserved-60" },
4746
  {  61, "reserved-61" },
4747
  {  62, "second-halfslot-stolen" },
4748
  {  63, "start-frag" },
4749
  { 0, NULL }
4750
};
4751
4752
static value_string_ext tetra_LengthIndicationMacData_vals_ext = VALUE_STRING_EXT_INIT(tetra_LengthIndicationMacData_vals);
4753
4754
4755
static unsigned
4756
2
dissect_tetra_LengthIndicationMacData(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4757
2
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
4758
2
                                     64, NULL, false, 0, NULL);
4759
4760
2
  return offset;
4761
2
}
4762
4763
4764
static const per_sequence_t FRAG6_sequence[] = {
4765
  { &hf_tetra_frag          , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Frag1 },
4766
  { &hf_tetra_reservation_requirement, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_SLOT_APPLY },
4767
  { &hf_tetra_reserved_01   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4768
  { NULL, 0, 0, NULL }
4769
};
4770
4771
static unsigned
4772
10
dissect_tetra_FRAG6(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4773
10
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4774
10
                                   ett_tetra_FRAG6, FRAG6_sequence);
4775
4776
10
  return offset;
4777
10
}
4778
4779
4780
static const value_string tetra_T_lengthIndicationOrCapacityRequest_01_vals[] = {
4781
  {   0, "lengthIndication" },
4782
  {   1, "capacityRequest" },
4783
  { 0, NULL }
4784
};
4785
4786
static const per_choice_t T_lengthIndicationOrCapacityRequest_01_choice[] = {
4787
  {   0, &hf_tetra_lengthIndication_01, ASN1_NO_EXTENSIONS     , dissect_tetra_LengthIndicationMacData },
4788
  {   1, &hf_tetra_capacityRequest_01, ASN1_NO_EXTENSIONS     , dissect_tetra_FRAG6 },
4789
  { 0, NULL, 0, NULL }
4790
};
4791
4792
static unsigned
4793
12
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_) {
4794
12
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
4795
12
                                 ett_tetra_T_lengthIndicationOrCapacityRequest_01, T_lengthIndicationOrCapacityRequest_01_choice,
4796
12
                                 NULL);
4797
4798
12
  return offset;
4799
12
}
4800
4801
4802
static const per_sequence_t MAC_DATA_sequence[] = {
4803
  { &hf_tetra_pdu_type      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
4804
  { &hf_tetra_fill_bit_indication, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Fill_Bit_Indication },
4805
  { &hf_tetra_encrypted_flag, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Encrypted_Flag },
4806
  { &hf_tetra_address       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Address },
4807
  { &hf_tetra_lengthIndicationOrCapacityRequest_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_lengthIndicationOrCapacityRequest_01 },
4808
  { &hf_tetra_tm_sdu_01     , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_U_LLC_PDU },
4809
  { NULL, 0, 0, NULL }
4810
};
4811
4812
static unsigned
4813
13
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_) {
4814
13
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4815
13
                                   ett_tetra_MAC_DATA, MAC_DATA_sequence);
4816
4817
13
  return offset;
4818
13
}
4819
4820
4821
4822
static unsigned
4823
2
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_) {
4824
2
  offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
4825
2
                                     264, 264, false, NULL, 0, NULL, NULL);
4826
4827
2
  return offset;
4828
2
}
4829
4830
4831
static const per_sequence_t MAC_FRAG_sequence[] = {
4832
  { &hf_tetra_pdu_type      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
4833
  { &hf_tetra_sub_type      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4834
  { &hf_tetra_fill_bit_indication, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Fill_Bit_Indication },
4835
  { &hf_tetra_tm_sdu_bit_str, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BIT_STRING_SIZE_264 },
4836
  { NULL, 0, 0, NULL }
4837
};
4838
4839
static unsigned
4840
2
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_) {
4841
2
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4842
2
                                   ett_tetra_MAC_FRAG, MAC_FRAG_sequence);
4843
4844
2
  return offset;
4845
2
}
4846
4847
4848
4849
static unsigned
4850
10
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_) {
4851
10
  offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
4852
10
                                     120, 120, false, NULL, 0, NULL, NULL);
4853
4854
10
  return offset;
4855
10
}
4856
4857
4858
static const per_sequence_t MAC_FRAG120_sequence[] = {
4859
  { &hf_tetra_pdu_type      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
4860
  { &hf_tetra_sub_type      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4861
  { &hf_tetra_fill_bit_indication, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Fill_Bit_Indication },
4862
  { &hf_tetra_tm_sdu_bit_str_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BIT_STRING_SIZE_120 },
4863
  { NULL, 0, 0, NULL }
4864
};
4865
4866
static unsigned
4867
10
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_) {
4868
10
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4869
10
                                   ett_tetra_MAC_FRAG120, MAC_FRAG120_sequence);
4870
4871
10
  return offset;
4872
10
}
4873
4874
4875
static const value_string tetra_LengthIndOrReservationReq_vals[] = {
4876
  {   0, "reserved-0" },
4877
  {   1, "reserved-1" },
4878
  {   2, "bits-16" },
4879
  {   3, "bits-24" },
4880
  {   4, "bits-32" },
4881
  {   5, "bits-40" },
4882
  {   6, "bits-48" },
4883
  {   7, "bits-56" },
4884
  {   8, "bits-64" },
4885
  {   9, "bits-72" },
4886
  {  10, "bits-80" },
4887
  {  11, "bits-88" },
4888
  {  12, "bits-96" },
4889
  {  13, "bits-104" },
4890
  {  14, "bits-112" },
4891
  {  15, "bits-120" },
4892
  {  16, "bits-128" },
4893
  {  17, "bits-136" },
4894
  {  18, "bits-144" },
4895
  {  19, "bits-152" },
4896
  {  20, "bits-160" },
4897
  {  21, "bits-168" },
4898
  {  22, "bits-176" },
4899
  {  23, "bits-184" },
4900
  {  24, "bits-192" },
4901
  {  25, "bits-200" },
4902
  {  26, "bits-208" },
4903
  {  27, "bits-216" },
4904
  {  28, "bits-224" },
4905
  {  29, "bits-232" },
4906
  {  30, "bits-240" },
4907
  {  31, "bits-248" },
4908
  {  32, "bits-256" },
4909
  {  33, "bits-264" },
4910
  {  34, "bits-272" },
4911
  {  35, "reserved-35" },
4912
  {  36, "reserved-36" },
4913
  {  37, "reserved-37" },
4914
  {  38, "reserved-38" },
4915
  {  39, "reserved-39" },
4916
  {  40, "reserved-40" },
4917
  {  41, "reserved-41" },
4918
  {  42, "reserved-42" },
4919
  {  43, "reserved-43" },
4920
  {  44, "reserved-44" },
4921
  {  45, "reserved-45" },
4922
  {  46, "reserved-46" },
4923
  {  47, "reserved-47" },
4924
  {  48, "subslot" },
4925
  {  49, "slot-1" },
4926
  {  50, "slot-2" },
4927
  {  51, "slot-3" },
4928
  {  52, "slot-4" },
4929
  {  53, "slot-5" },
4930
  {  54, "slot-6" },
4931
  {  55, "slot-8" },
4932
  {  56, "slot-10" },
4933
  {  57, "slot-13" },
4934
  {  58, "slot-17" },
4935
  {  59, "slot-24" },
4936
  {  60, "slot-34" },
4937
  {  61, "slot-51" },
4938
  {  62, "slot-68" },
4939
  {  63, "more-than-68" },
4940
  { 0, NULL }
4941
};
4942
4943
static value_string_ext tetra_LengthIndOrReservationReq_vals_ext = VALUE_STRING_EXT_INIT(tetra_LengthIndOrReservationReq_vals);
4944
4945
4946
static unsigned
4947
6
dissect_tetra_LengthIndOrReservationReq(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4948
6
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
4949
6
                                     64, NULL, false, 0, NULL);
4950
4951
6
  return offset;
4952
6
}
4953
4954
4955
4956
static unsigned
4957
3
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_) {
4958
3
  offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
4959
3
                                     258, 258, false, NULL, 0, NULL, NULL);
4960
4961
3
  return offset;
4962
3
}
4963
4964
4965
static const per_sequence_t MAC_END_UPLINK_sequence[] = {
4966
  { &hf_tetra_pdu_type      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
4967
  { &hf_tetra_sub_type      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4968
  { &hf_tetra_fill_bit_indication, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Fill_Bit_Indication },
4969
  { &hf_tetra_lengthInd_ReservationReq, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_LengthIndOrReservationReq },
4970
  { &hf_tetra_tm_sdu_bit_str_02, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BIT_STRING_SIZE_258 },
4971
  { NULL, 0, 0, NULL }
4972
};
4973
4974
static unsigned
4975
3
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_) {
4976
3
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
4977
3
                                   ett_tetra_MAC_END_UPLINK, MAC_END_UPLINK_sequence);
4978
4979
3
  return offset;
4980
3
}
4981
4982
4983
4984
static unsigned
4985
3
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_) {
4986
3
  offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
4987
3
                                     114, 114, false, NULL, 0, NULL, NULL);
4988
4989
3
  return offset;
4990
3
}
4991
4992
4993
static const per_sequence_t MAC_END_UP114_sequence[] = {
4994
  { &hf_tetra_pdu_type      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
4995
  { &hf_tetra_pdu_subtype   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
4996
  { &hf_tetra_fill_bit_indication, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Fill_Bit_Indication },
4997
  { &hf_tetra_lengthInd_ReservationReq, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_LengthIndOrReservationReq },
4998
  { &hf_tetra_tm_sdu_bit_str_03, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BIT_STRING_SIZE_114 },
4999
  { NULL, 0, 0, NULL }
5000
};
5001
5002
static unsigned
5003
3
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_) {
5004
3
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
5005
3
                                   ett_tetra_MAC_END_UP114, MAC_END_UP114_sequence);
5006
5007
3
  return offset;
5008
3
}
5009
5010
5011
static const value_string tetra_LengthIndMacHu_vals[] = {
5012
  {   0, "reserved-0" },
5013
  {   1, "bits-8" },
5014
  {   2, "bits-16" },
5015
  {   3, "bits-24" },
5016
  {   4, "bits-32" },
5017
  {   5, "bits-40" },
5018
  {   6, "bits-48" },
5019
  {   7, "bits-56" },
5020
  {   8, "bits-64" },
5021
  {   9, "bits-72" },
5022
  {  10, "bits-80" },
5023
  {  11, "bits-88" },
5024
  {  12, "bits-96" },
5025
  {  13, "reserved-13" },
5026
  {  14, "reserved-14" },
5027
  {  15, "reserved-15" },
5028
  { 0, NULL }
5029
};
5030
5031
5032
static unsigned
5033
4
dissect_tetra_LengthIndMacHu(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5034
4
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5035
4
                                     16, NULL, false, 0, NULL);
5036
5037
4
  return offset;
5038
4
}
5039
5040
5041
static const value_string tetra_T_lengthInd_ReservationReq_vals[] = {
5042
  {   0, "lengthInd" },
5043
  {   1, "reservation-requirement" },
5044
  { 0, NULL }
5045
};
5046
5047
static const per_choice_t T_lengthInd_ReservationReq_choice[] = {
5048
  {   0, &hf_tetra_lengthInd     , ASN1_NO_EXTENSIONS     , dissect_tetra_LengthIndMacHu },
5049
  {   1, &hf_tetra_reservation_requirement, ASN1_NO_EXTENSIONS     , dissect_tetra_SLOT_APPLY },
5050
  { 0, NULL, 0, NULL }
5051
};
5052
5053
static unsigned
5054
14
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_) {
5055
14
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5056
14
                                 ett_tetra_T_lengthInd_ReservationReq, T_lengthInd_ReservationReq_choice,
5057
14
                                 NULL);
5058
5059
14
  return offset;
5060
14
}
5061
5062
5063
5064
static unsigned
5065
14
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_) {
5066
14
  offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
5067
14
                                     85, 85, false, NULL, 0, NULL, NULL);
5068
5069
14
  return offset;
5070
14
}
5071
5072
5073
static const per_sequence_t MAC_END_HU_sequence[] = {
5074
  { &hf_tetra_pdu_type_01   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
5075
  { &hf_tetra_fill_bit_indication, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Fill_Bit_Indication },
5076
  { &hf_tetra_lengthInd_ReservationReq_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_lengthInd_ReservationReq },
5077
  { &hf_tetra_tm_sdu_bit_str_04, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BIT_STRING_SIZE_85 },
5078
  { NULL, 0, 0, NULL }
5079
};
5080
5081
static unsigned
5082
14
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_) {
5083
14
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
5084
14
                                   ett_tetra_MAC_END_HU, MAC_END_HU_sequence);
5085
5086
14
  return offset;
5087
14
}
5088
5089
5090
static const value_string tetra_Position_Of_Grant_vals[] = {
5091
  {   0, "on-current" },
5092
  {   1, "on-allocated" },
5093
  { 0, NULL }
5094
};
5095
5096
5097
static unsigned
5098
70
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_) {
5099
70
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5100
70
                                     2, NULL, false, 0, NULL);
5101
5102
70
  return offset;
5103
70
}
5104
5105
5106
static const value_string tetra_LengthIndicationMacEndDl_vals[] = {
5107
  {   0, "reserved-0" },
5108
  {   1, "reserved-1" },
5109
  {   2, "bits-16" },
5110
  {   3, "bits-24" },
5111
  {   4, "bits-32" },
5112
  {   5, "bits-40" },
5113
  {   6, "bits-48" },
5114
  {   7, "bits-56" },
5115
  {   8, "bits-64" },
5116
  {   9, "bits-72" },
5117
  {  10, "bits-80" },
5118
  {  11, "bits-88" },
5119
  {  12, "bits-96" },
5120
  {  13, "bits-104" },
5121
  {  14, "bits-112" },
5122
  {  15, "bits-120" },
5123
  {  16, "bits-128" },
5124
  {  17, "bits-136" },
5125
  {  18, "bits-144" },
5126
  {  19, "bits-152" },
5127
  {  20, "bits-160" },
5128
  {  21, "bits-168" },
5129
  {  22, "bits-176" },
5130
  {  23, "bits-184" },
5131
  {  24, "bits-192" },
5132
  {  25, "bits-200" },
5133
  {  26, "bits-208" },
5134
  {  27, "bits-216" },
5135
  {  28, "bits-224" },
5136
  {  29, "bits-232" },
5137
  {  30, "bits-240" },
5138
  {  31, "bits-248" },
5139
  {  32, "bits-256" },
5140
  {  33, "bits-264" },
5141
  {  34, "bits-272" },
5142
  {  35, "reserved-35" },
5143
  {  36, "reserved-36" },
5144
  {  37, "reserved-37" },
5145
  {  38, "reserved-38" },
5146
  {  39, "reserved-39" },
5147
  {  40, "reserved-40" },
5148
  {  41, "reserved-41" },
5149
  {  42, "reserved-42" },
5150
  {  43, "reserved-43" },
5151
  {  44, "reserved-44" },
5152
  {  45, "reserved-45" },
5153
  {  46, "reserved-46" },
5154
  {  47, "reserved-47" },
5155
  {  48, "reserved-48" },
5156
  {  49, "reserved-49" },
5157
  {  50, "reserved-50" },
5158
  {  51, "reserved-51" },
5159
  {  52, "reserved-52" },
5160
  {  53, "reserved-53" },
5161
  {  54, "reserved-54" },
5162
  {  55, "reserved-55" },
5163
  {  56, "reserved-56" },
5164
  {  57, "reserved-57" },
5165
  {  58, "reserved-58" },
5166
  {  59, "reserved-59" },
5167
  {  60, "reserved-60" },
5168
  {  61, "reserved-61" },
5169
  {  62, "reserved-62" },
5170
  {  63, "reserved-63" },
5171
  { 0, NULL }
5172
};
5173
5174
static value_string_ext tetra_LengthIndicationMacEndDl_vals_ext = VALUE_STRING_EXT_INIT(tetra_LengthIndicationMacEndDl_vals);
5175
5176
5177
static unsigned
5178
8
dissect_tetra_LengthIndicationMacEndDl(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5179
8
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5180
8
                                     64, NULL, false, 0, NULL);
5181
5182
8
  return offset;
5183
8
}
5184
5185
5186
static const value_string tetra_Capacity_Allocation_vals[] = {
5187
  {   0, "first-subslot" },
5188
  {   1, "slot-allocated-1" },
5189
  {   2, "slot-allocated-2" },
5190
  {   3, "slot-allocated-3" },
5191
  {   4, "slot-allocated-4" },
5192
  {   5, "slot-allocated-5" },
5193
  {   6, "slot-allocated-6" },
5194
  {   7, "slot-allocated-8" },
5195
  {   8, "slot-allocated-10" },
5196
  {   9, "slot-allocated-13" },
5197
  {  10, "slot-allocated-17" },
5198
  {  11, "slot-allocated-24" },
5199
  {  12, "slot-allocated-34" },
5200
  {  13, "lot-allocated-51" },
5201
  {  14, "slot-allocated-68" },
5202
  {  15, "second-subslot" },
5203
  { 0, NULL }
5204
};
5205
5206
5207
static unsigned
5208
31
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_) {
5209
31
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5210
31
                                     16, NULL, false, 0, NULL);
5211
5212
31
  return offset;
5213
31
}
5214
5215
5216
static const value_string tetra_Granting_delay_vals[] = {
5217
  {   0, "capacity-allocation-at-next-opportunity" },
5218
  {   1, "number-of-opportunities-delay" },
5219
  {   2, "number-of-opportunities-delay" },
5220
  {   3, "number-of-opportunities-delay" },
5221
  {   4, "number-of-opportunities-delay" },
5222
  {   5, "number-of-opportunities-delay" },
5223
  {   6, "number-of-opportunities-delay" },
5224
  {   7, "number-of-opportunities-delay" },
5225
  {   8, "number-of-opportunities-delay" },
5226
  {   9, "number-of-opportunities-delay" },
5227
  {  10, "number-of-opportunities-delay" },
5228
  {  11, "number-of-opportunities-delay" },
5229
  {  12, "number-of-opportunities-delay" },
5230
  {  13, "number-of-opportunities-delay" },
5231
  {  14, "allocation-starts-at-frame-18" },
5232
  {  15, "wait" },
5233
  { 0, NULL }
5234
};
5235
5236
5237
static unsigned
5238
31
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_) {
5239
31
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5240
31
                                     16, NULL, false, 0, NULL);
5241
5242
31
  return offset;
5243
31
}
5244
5245
5246
static const per_sequence_t SlotGranting_sequence[] = {
5247
  { &hf_tetra_capacity_allocation, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Capacity_Allocation },
5248
  { &hf_tetra_granting_delay, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Granting_delay },
5249
  { NULL, 0, 0, NULL }
5250
};
5251
5252
static unsigned
5253
31
dissect_tetra_SlotGranting(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5254
31
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
5255
31
                                   ett_tetra_SlotGranting, SlotGranting_sequence);
5256
5257
31
  return offset;
5258
31
}
5259
5260
5261
static const value_string tetra_T_slot_granting_vals[] = {
5262
  {   0, "none" },
5263
  {   1, "slot-granting-param" },
5264
  { 0, NULL }
5265
};
5266
5267
static const per_choice_t T_slot_granting_choice[] = {
5268
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
5269
  {   1, &hf_tetra_slot_granting_param, ASN1_NO_EXTENSIONS     , dissect_tetra_SlotGranting },
5270
  { 0, NULL, 0, NULL }
5271
};
5272
5273
static unsigned
5274
2
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_) {
5275
2
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5276
2
                                 ett_tetra_T_slot_granting, T_slot_granting_choice,
5277
2
                                 NULL);
5278
5279
2
  return offset;
5280
2
}
5281
5282
5283
static const value_string tetra_T_allocation_type_vals[] = {
5284
  {   0, "replace" },
5285
  {   1, "add" },
5286
  {   2, "quit" },
5287
  {   3, "reserved" },
5288
  { 0, NULL }
5289
};
5290
5291
5292
static unsigned
5293
37
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_) {
5294
37
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5295
37
                                     4, NULL, false, 0, NULL);
5296
5297
37
  return offset;
5298
37
}
5299
5300
5301
static const value_string tetra_Timeslot_Assigned_vals[] = {
5302
  {   0, "go-to-control-channel" },
5303
  {   1, "timeslot-4" },
5304
  {   2, "timeslot-bit-map" },
5305
  {   3, "timeslot-bit-map" },
5306
  {   4, "timeslot-bit-map" },
5307
  {   5, "timeslot-bit-map" },
5308
  {   6, "timeslot-bit-map" },
5309
  {   7, "timeslot-bit-map" },
5310
  {   8, "timeslot-bit-map" },
5311
  {   9, "timeslot-bit-map" },
5312
  {  10, "timeslot-bit-map" },
5313
  {  11, "timeslot-bit-map" },
5314
  {  12, "timeslot-bit-map" },
5315
  {  13, "timeslot-bit-map" },
5316
  {  14, "timeslot-bit-map" },
5317
  {  15, "all-four-timeslots" },
5318
  { 0, NULL }
5319
};
5320
5321
5322
static unsigned
5323
37
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_) {
5324
37
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5325
37
                                     16, NULL, false, 0, NULL);
5326
5327
37
  return offset;
5328
37
}
5329
5330
5331
static const value_string tetra_T_up_down_assigned_vals[] = {
5332
  {   0, "reserve" },
5333
  {   1, "downlink-only" },
5334
  {   2, "uplink-only" },
5335
  {   3, "uplink-downlink" },
5336
  { 0, NULL }
5337
};
5338
5339
5340
static unsigned
5341
37
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_) {
5342
37
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5343
37
                                     4, NULL, false, 0, NULL);
5344
5345
37
  return offset;
5346
37
}
5347
5348
5349
static const value_string tetra_CLCH_permission_vals[] = {
5350
  {   0, "no-permission" },
5351
  {   1, "permission" },
5352
  { 0, NULL }
5353
};
5354
5355
5356
static unsigned
5357
37
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_) {
5358
37
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5359
37
                                     2, NULL, false, 0, NULL);
5360
5361
37
  return offset;
5362
37
}
5363
5364
5365
static const value_string tetra_Cell_change_flag_vals[] = {
5366
  {   0, "no-change" },
5367
  {   1, "change" },
5368
  { 0, NULL }
5369
};
5370
5371
5372
static unsigned
5373
37
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_) {
5374
37
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5375
37
                                     2, NULL, false, 0, NULL);
5376
5377
37
  return offset;
5378
37
}
5379
5380
5381
static const value_string tetra_T_reverse_operation_vals[] = {
5382
  {   0, "normal" },
5383
  {   1, "reverse" },
5384
  { 0, NULL }
5385
};
5386
5387
5388
static unsigned
5389
15
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_) {
5390
15
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5391
15
                                     2, NULL, false, 0, NULL);
5392
5393
15
  return offset;
5394
15
}
5395
5396
5397
static const per_sequence_t Extended_carrier_flag_sequence[] = {
5398
  { &hf_tetra_frequency_band, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_15 },
5399
  { &hf_tetra_offset_01     , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
5400
  { &hf_tetra_duplex_spacing, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
5401
  { &hf_tetra_reverse_operation_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_reverse_operation },
5402
  { NULL, 0, 0, NULL }
5403
};
5404
5405
static unsigned
5406
16
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_) {
5407
16
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
5408
16
                                   ett_tetra_Extended_carrier_flag, Extended_carrier_flag_sequence);
5409
5410
16
  return offset;
5411
16
}
5412
5413
5414
static const value_string tetra_T_extend_carrier_flag_vals[] = {
5415
  {   0, "none" },
5416
  {   1, "extended" },
5417
  { 0, NULL }
5418
};
5419
5420
static const per_choice_t T_extend_carrier_flag_choice[] = {
5421
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
5422
  {   1, &hf_tetra_extended      , ASN1_NO_EXTENSIONS     , dissect_tetra_Extended_carrier_flag },
5423
  { 0, NULL, 0, NULL }
5424
};
5425
5426
static unsigned
5427
37
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_) {
5428
37
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5429
37
                                 ett_tetra_T_extend_carrier_flag, T_extend_carrier_flag_choice,
5430
37
                                 NULL);
5431
5432
37
  return offset;
5433
37
}
5434
5435
5436
static const value_string tetra_Monitoring_pattern_vals[] = {
5437
  {   0, "no" },
5438
  {   1, "one" },
5439
  {   2, "two" },
5440
  {   3, "three" },
5441
  { 0, NULL }
5442
};
5443
5444
5445
static unsigned
5446
12
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_) {
5447
12
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5448
12
                                     4, NULL, false, 0, NULL);
5449
5450
12
  return offset;
5451
12
}
5452
5453
5454
static const value_string tetra_T_monitoring_pattern_vals[] = {
5455
  {   0, "one" },
5456
  {   1, "none1" },
5457
  {   2, "none2" },
5458
  {   3, "none3" },
5459
  { 0, NULL }
5460
};
5461
5462
static const per_choice_t T_monitoring_pattern_choice[] = {
5463
  {   0, &hf_tetra_one           , ASN1_NO_EXTENSIONS     , dissect_tetra_Monitoring_pattern },
5464
  {   1, &hf_tetra_none1         , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
5465
  {   2, &hf_tetra_none2         , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
5466
  {   3, &hf_tetra_none3         , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
5467
  { 0, NULL, 0, NULL }
5468
};
5469
5470
static unsigned
5471
36
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_) {
5472
36
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5473
36
                                 ett_tetra_T_monitoring_pattern, T_monitoring_pattern_choice,
5474
36
                                 NULL);
5475
5476
36
  return offset;
5477
36
}
5478
5479
5480
static const per_sequence_t ChannelAllocation_sequence[] = {
5481
  { &hf_tetra_allocation_type, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_allocation_type },
5482
  { &hf_tetra_timeslot_assigned, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Timeslot_Assigned },
5483
  { &hf_tetra_up_down_assigned, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_up_down_assigned },
5484
  { &hf_tetra_clch_permission, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_CLCH_permission },
5485
  { &hf_tetra_cell_change   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Cell_change_flag },
5486
  { &hf_tetra_carrier_number, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_4095 },
5487
  { &hf_tetra_extend_carrier_flag, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_extend_carrier_flag },
5488
  { &hf_tetra_monitoring_pattern, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_monitoring_pattern },
5489
  { NULL, 0, 0, NULL }
5490
};
5491
5492
static unsigned
5493
37
dissect_tetra_ChannelAllocation(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5494
37
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
5495
37
                                   ett_tetra_ChannelAllocation, ChannelAllocation_sequence);
5496
5497
37
  return offset;
5498
37
}
5499
5500
5501
static const value_string tetra_T_channel_allocation_vals[] = {
5502
  {   0, "none" },
5503
  {   1, "channel-allocation-element" },
5504
  { 0, NULL }
5505
};
5506
5507
static const per_choice_t T_channel_allocation_choice[] = {
5508
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
5509
  {   1, &hf_tetra_channel_allocation_element, ASN1_NO_EXTENSIONS     , dissect_tetra_ChannelAllocation },
5510
  { 0, NULL, 0, NULL }
5511
};
5512
5513
static unsigned
5514
2
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_) {
5515
2
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5516
2
                                 ett_tetra_T_channel_allocation, T_channel_allocation_choice,
5517
2
                                 NULL);
5518
5519
2
  return offset;
5520
2
}
5521
5522
5523
5524
static unsigned
5525
2
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_) {
5526
2
  offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
5527
2
                                     255, 255, false, NULL, 0, NULL, NULL);
5528
5529
2
  return offset;
5530
2
}
5531
5532
5533
static const per_sequence_t MAC_END_DOWNLINK_sequence[] = {
5534
  { &hf_tetra_pdu_type      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
5535
  { &hf_tetra_sub_type      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
5536
  { &hf_tetra_fill_bit_indication, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Fill_Bit_Indication },
5537
  { &hf_tetra_position_of_grant, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Position_Of_Grant },
5538
  { &hf_tetra_lengthIndication_02, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_LengthIndicationMacEndDl },
5539
  { &hf_tetra_slot_granting , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_slot_granting },
5540
  { &hf_tetra_channel_allocation, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_channel_allocation },
5541
  { &hf_tetra_tm_sdu_bit_str_05, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BIT_STRING_SIZE_255 },
5542
  { NULL, 0, 0, NULL }
5543
};
5544
5545
static unsigned
5546
2
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_) {
5547
2
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
5548
2
                                   ett_tetra_MAC_END_DOWNLINK, MAC_END_DOWNLINK_sequence);
5549
5550
2
  return offset;
5551
2
}
5552
5553
5554
static const value_string tetra_T_slot_granting_01_vals[] = {
5555
  {   0, "none" },
5556
  {   1, "slot-granting-param" },
5557
  { 0, NULL }
5558
};
5559
5560
static const per_choice_t T_slot_granting_01_choice[] = {
5561
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
5562
  {   1, &hf_tetra_slot_granting_param, ASN1_NO_EXTENSIONS     , dissect_tetra_SlotGranting },
5563
  { 0, NULL, 0, NULL }
5564
};
5565
5566
static unsigned
5567
5
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_) {
5568
5
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5569
5
                                 ett_tetra_T_slot_granting_01, T_slot_granting_01_choice,
5570
5
                                 NULL);
5571
5572
5
  return offset;
5573
5
}
5574
5575
5576
static const value_string tetra_T_channel_allocation_01_vals[] = {
5577
  {   0, "none" },
5578
  {   1, "channel-allocation-element" },
5579
  { 0, NULL }
5580
};
5581
5582
static const per_choice_t T_channel_allocation_01_choice[] = {
5583
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
5584
  {   1, &hf_tetra_channel_allocation_element, ASN1_NO_EXTENSIONS     , dissect_tetra_ChannelAllocation },
5585
  { 0, NULL, 0, NULL }
5586
};
5587
5588
static unsigned
5589
5
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_) {
5590
5
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5591
5
                                 ett_tetra_T_channel_allocation_01, T_channel_allocation_01_choice,
5592
5
                                 NULL);
5593
5594
5
  return offset;
5595
5
}
5596
5597
5598
5599
static unsigned
5600
5
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_) {
5601
5
  offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
5602
5
                                     111, 111, false, NULL, 0, NULL, NULL);
5603
5604
5
  return offset;
5605
5
}
5606
5607
5608
static const per_sequence_t MAC_END_DOWN111_sequence[] = {
5609
  { &hf_tetra_pdu_type_02   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
5610
  { &hf_tetra_fill_bit_ind  , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
5611
  { &hf_tetra_position_of_grant_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
5612
  { &hf_tetra_lengthIndication_02, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_LengthIndicationMacEndDl },
5613
  { &hf_tetra_slot_granting_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_slot_granting_01 },
5614
  { &hf_tetra_channel_allocation_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_channel_allocation_01 },
5615
  { &hf_tetra_tm_sdu_bit_str_06, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BIT_STRING_SIZE_111 },
5616
  { NULL, 0, 0, NULL }
5617
};
5618
5619
static unsigned
5620
6
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_) {
5621
6
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
5622
6
                                   ett_tetra_MAC_END_DOWN111, MAC_END_DOWN111_sequence);
5623
5624
6
  return offset;
5625
6
}
5626
5627
5628
static const value_string tetra_T_access_ack_vals[] = {
5629
  {   0, "undefined" },
5630
  {   1, "random-access-acknowledged" },
5631
  { 0, NULL }
5632
};
5633
5634
5635
static unsigned
5636
68
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_) {
5637
68
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5638
68
                                     2, NULL, false, 0, NULL);
5639
5640
68
  return offset;
5641
68
}
5642
5643
5644
static const value_string tetra_LengthIndicationMacResource_vals[] = {
5645
  {   0, "reserved-0" },
5646
  {   1, "reserved-1" },
5647
  {   2, "null-pdu" },
5648
  {   3, "reserved" },
5649
  {   4, "bits-32" },
5650
  {   5, "bits-40" },
5651
  {   6, "bits-48" },
5652
  {   7, "bits-56" },
5653
  {   8, "bits-64" },
5654
  {   9, "bits-72" },
5655
  {  10, "bits-80" },
5656
  {  11, "bits-88" },
5657
  {  12, "bits-96" },
5658
  {  13, "bits-104" },
5659
  {  14, "bits-112" },
5660
  {  15, "bits-120" },
5661
  {  16, "bits-128" },
5662
  {  17, "bits-136" },
5663
  {  18, "bits-144" },
5664
  {  19, "bits-152" },
5665
  {  20, "bits-160" },
5666
  {  21, "bits-168" },
5667
  {  22, "bits-176" },
5668
  {  23, "bits-184" },
5669
  {  24, "bits-192" },
5670
  {  25, "bits-200" },
5671
  {  26, "bits-208" },
5672
  {  27, "bits-216" },
5673
  {  28, "bits-224" },
5674
  {  29, "bits-232" },
5675
  {  30, "bits-240" },
5676
  {  31, "bits-248" },
5677
  {  32, "bits-256" },
5678
  {  33, "bits-264" },
5679
  {  34, "bits-272" },
5680
  {  35, "reserved-35" },
5681
  {  36, "reserved-36" },
5682
  {  37, "reserved-37" },
5683
  {  38, "reserved-38" },
5684
  {  39, "reserved-39" },
5685
  {  40, "reserved-40" },
5686
  {  41, "reserved-41" },
5687
  {  42, "reserved-42" },
5688
  {  43, "reserved-43" },
5689
  {  44, "reserved-44" },
5690
  {  45, "reserved-45" },
5691
  {  46, "reserved-46" },
5692
  {  47, "reserved-47" },
5693
  {  48, "reserved-48" },
5694
  {  49, "reserved-49" },
5695
  {  50, "reserved-50" },
5696
  {  51, "reserved-51" },
5697
  {  52, "reserved-52" },
5698
  {  53, "reserved-53" },
5699
  {  54, "reserved-54" },
5700
  {  55, "reserved-55" },
5701
  {  56, "reserved-56" },
5702
  {  57, "reserved-57" },
5703
  {  58, "reserved-58" },
5704
  {  59, "reserved-59" },
5705
  {  60, "reserved-60" },
5706
  {  61, "reserved-61" },
5707
  {  62, "second-halfslot-stolen" },
5708
  {  63, "start-frag" },
5709
  { 0, NULL }
5710
};
5711
5712
static value_string_ext tetra_LengthIndicationMacResource_vals_ext = VALUE_STRING_EXT_INIT(tetra_LengthIndicationMacResource_vals);
5713
5714
5715
static unsigned
5716
68
dissect_tetra_LengthIndicationMacResource(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5717
68
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5718
68
                                     64, NULL, false, 0, NULL);
5719
5720
68
  return offset;
5721
68
}
5722
5723
5724
static const value_string tetra_PowerControl_vals[] = {
5725
  {   0, "no-change" },
5726
  {   1, "increase-1" },
5727
  {   2, "increase-2" },
5728
  {   3, "increase-3" },
5729
  {   4, "increase-4" },
5730
  {   5, "increase-5" },
5731
  {   6, "increase-6" },
5732
  {   7, "maximum-xceeded" },
5733
  {   8, "revert-open-loop-control" },
5734
  {   9, "decrease-1" },
5735
  {  10, "decrease-2" },
5736
  {  11, "decrease-3" },
5737
  {  12, "decrease-4" },
5738
  {  13, "decrease-5" },
5739
  {  14, "decrease-6" },
5740
  {  15, "radio-uplink-failure" },
5741
  { 0, NULL }
5742
};
5743
5744
5745
static unsigned
5746
29
dissect_tetra_PowerControl(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5747
29
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5748
29
                                     16, NULL, false, 0, NULL);
5749
5750
29
  return offset;
5751
29
}
5752
5753
5754
static const value_string tetra_T_power_control_vals[] = {
5755
  {   0, "none" },
5756
  {   1, "powerParameters" },
5757
  { 0, NULL }
5758
};
5759
5760
static const per_choice_t T_power_control_choice[] = {
5761
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
5762
  {   1, &hf_tetra_powerParameters, ASN1_NO_EXTENSIONS     , dissect_tetra_PowerControl },
5763
  { 0, NULL, 0, NULL }
5764
};
5765
5766
static unsigned
5767
61
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_) {
5768
61
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5769
61
                                 ett_tetra_T_power_control, T_power_control_choice,
5770
61
                                 NULL);
5771
5772
61
  return offset;
5773
61
}
5774
5775
5776
static const value_string tetra_T_slot_granting_02_vals[] = {
5777
  {   0, "none" },
5778
  {   1, "slot-granting-param" },
5779
  { 0, NULL }
5780
};
5781
5782
static const per_choice_t T_slot_granting_02_choice[] = {
5783
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
5784
  {   1, &hf_tetra_slot_granting_param, ASN1_NO_EXTENSIONS     , dissect_tetra_SlotGranting },
5785
  { 0, NULL, 0, NULL }
5786
};
5787
5788
static unsigned
5789
61
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_) {
5790
61
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5791
61
                                 ett_tetra_T_slot_granting_02, T_slot_granting_02_choice,
5792
61
                                 NULL);
5793
5794
61
  return offset;
5795
61
}
5796
5797
5798
static const value_string tetra_T_channel_allocation_02_vals[] = {
5799
  {   0, "none" },
5800
  {   1, "channel-allocation-element" },
5801
  { 0, NULL }
5802
};
5803
5804
static const per_choice_t T_channel_allocation_02_choice[] = {
5805
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
5806
  {   1, &hf_tetra_channel_allocation_element, ASN1_NO_EXTENSIONS     , dissect_tetra_ChannelAllocation },
5807
  { 0, NULL, 0, NULL }
5808
};
5809
5810
static unsigned
5811
61
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_) {
5812
61
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5813
61
                                 ett_tetra_T_channel_allocation_02, T_channel_allocation_02_choice,
5814
61
                                 NULL);
5815
5816
61
  return offset;
5817
61
}
5818
5819
5820
static const value_string tetra_T_ssi_choice_vals[] = {
5821
  {   0, "none" },
5822
  {   1, "ssi" },
5823
  { 0, NULL }
5824
};
5825
5826
static const per_choice_t T_ssi_choice_choice[] = {
5827
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
5828
  {   1, &hf_tetra_ssi_oct_str   , ASN1_NO_EXTENSIONS     , dissect_tetra_OCTET_STRING_SIZE_3 },
5829
  { 0, NULL, 0, NULL }
5830
};
5831
5832
static unsigned
5833
1
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_) {
5834
1
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5835
1
                                 ett_tetra_T_ssi_choice, T_ssi_choice_choice,
5836
1
                                 NULL);
5837
5838
1
  return offset;
5839
1
}
5840
5841
5842
static const value_string tetra_T_address_extension_choice_vals[] = {
5843
  {   0, "none" },
5844
  {   1, "address-extension" },
5845
  { 0, NULL }
5846
};
5847
5848
static const per_choice_t T_address_extension_choice_choice[] = {
5849
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
5850
  {   1, &hf_tetra_address_extension, ASN1_NO_EXTENSIONS     , dissect_tetra_OCTET_STRING_SIZE_3 },
5851
  { 0, NULL, 0, NULL }
5852
};
5853
5854
static unsigned
5855
1
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_) {
5856
1
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5857
1
                                 ett_tetra_T_address_extension_choice, T_address_extension_choice_choice,
5858
1
                                 NULL);
5859
5860
1
  return offset;
5861
1
}
5862
5863
5864
static const value_string tetra_T_subscriber_class_choice_vals[] = {
5865
  {   0, "none" },
5866
  {   1, "subscriber-class" },
5867
  { 0, NULL }
5868
};
5869
5870
static const per_choice_t T_subscriber_class_choice_choice[] = {
5871
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
5872
  {   1, &hf_tetra_subscriber_class, ASN1_NO_EXTENSIONS     , dissect_tetra_Subscriber_class },
5873
  { 0, NULL, 0, NULL }
5874
};
5875
5876
static unsigned
5877
1
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_) {
5878
1
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5879
1
                                 ett_tetra_T_subscriber_class_choice, T_subscriber_class_choice_choice,
5880
1
                                 NULL);
5881
5882
1
  return offset;
5883
1
}
5884
5885
5886
static const value_string tetra_T_energy_saving_mode_vals[] = {
5887
  {   0, "none" },
5888
  {   1, "energy-saving-mode" },
5889
  { 0, NULL }
5890
};
5891
5892
static const per_choice_t T_energy_saving_mode_choice[] = {
5893
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
5894
  {   1, &hf_tetra_energy_saving_mode_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_7 },
5895
  { 0, NULL, 0, NULL }
5896
};
5897
5898
static unsigned
5899
1
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_) {
5900
1
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5901
1
                                 ett_tetra_T_energy_saving_mode, T_energy_saving_mode_choice,
5902
1
                                 NULL);
5903
5904
1
  return offset;
5905
1
}
5906
5907
5908
static const value_string tetra_T_scch_info_vals[] = {
5909
  {   0, "none" },
5910
  {   1, "scch-info" },
5911
  { 0, NULL }
5912
};
5913
5914
static const per_choice_t T_scch_info_choice[] = {
5915
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
5916
  {   1, &hf_tetra_scch_info_01  , ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_16383 },
5917
  { 0, NULL, 0, NULL }
5918
};
5919
5920
static unsigned
5921
1
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_) {
5922
1
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5923
1
                                 ett_tetra_T_scch_info, T_scch_info_choice,
5924
1
                                 NULL);
5925
5926
1
  return offset;
5927
1
}
5928
5929
5930
static const value_string tetra_T_new_ra_vals[] = {
5931
  {   0, "none" },
5932
  {   1, "new-ra" },
5933
  { 0, NULL }
5934
};
5935
5936
static const per_choice_t T_new_ra_choice[] = {
5937
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
5938
  {   1, &hf_tetra_new_ra_01     , ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_3 },
5939
  { 0, NULL, 0, NULL }
5940
};
5941
5942
static unsigned
5943
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_) {
5944
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5945
0
                                 ett_tetra_T_new_ra, T_new_ra_choice,
5946
0
                                 NULL);
5947
5948
0
  return offset;
5949
0
}
5950
5951
5952
static const value_string tetra_T_group_identity_location_accept_vals[] = {
5953
  {   0, "none" },
5954
  {   1, "group-identity-location-accept" },
5955
  { 0, NULL }
5956
};
5957
5958
static const per_choice_t T_group_identity_location_accept_choice[] = {
5959
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
5960
  {   1, &hf_tetra_group_identity_location_accept_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_3 },
5961
  { 0, NULL, 0, NULL }
5962
};
5963
5964
static unsigned
5965
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_) {
5966
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5967
0
                                 ett_tetra_T_group_identity_location_accept, T_group_identity_location_accept_choice,
5968
0
                                 NULL);
5969
5970
0
  return offset;
5971
0
}
5972
5973
5974
static const value_string tetra_T_group_predefined_lifetime_vals[] = {
5975
  {   0, "none" },
5976
  {   1, "group-predefined-lifetime" },
5977
  { 0, NULL }
5978
};
5979
5980
static const per_choice_t T_group_predefined_lifetime_choice[] = {
5981
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
5982
  {   1, &hf_tetra_group_predefined_lifetime_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_3 },
5983
  { 0, NULL, 0, NULL }
5984
};
5985
5986
static unsigned
5987
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_) {
5988
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
5989
0
                                 ett_tetra_T_group_predefined_lifetime, T_group_predefined_lifetime_choice,
5990
0
                                 NULL);
5991
5992
0
  return offset;
5993
0
}
5994
5995
5996
static const value_string tetra_T_group_identity_downlink_vals[] = {
5997
  {   0, "none" },
5998
  {   1, "group-identity-downlink" },
5999
  { 0, NULL }
6000
};
6001
6002
static const per_choice_t T_group_identity_downlink_choice[] = {
6003
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6004
  {   1, &hf_tetra_group_identity_downlink_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_15 },
6005
  { 0, NULL, 0, NULL }
6006
};
6007
6008
static unsigned
6009
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_) {
6010
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6011
0
                                 ett_tetra_T_group_identity_downlink, T_group_identity_downlink_choice,
6012
0
                                 NULL);
6013
6014
0
  return offset;
6015
0
}
6016
6017
6018
static const value_string tetra_T_proprietary_vals[] = {
6019
  {   0, "none" },
6020
  {   1, "proprietary" },
6021
  { 0, NULL }
6022
};
6023
6024
static const per_choice_t T_proprietary_choice[] = {
6025
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6026
  {   1, &hf_tetra_proprietary_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_7 },
6027
  { 0, NULL, 0, NULL }
6028
};
6029
6030
static unsigned
6031
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_) {
6032
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6033
0
                                 ett_tetra_T_proprietary, T_proprietary_choice,
6034
0
                                 NULL);
6035
6036
0
  return offset;
6037
0
}
6038
6039
6040
static const per_sequence_t T_type3_elements_sequence[] = {
6041
  { &hf_tetra_type2_existance, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
6042
  { &hf_tetra_type3_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_TYPE3_IDENTIFIER },
6043
  { &hf_tetra_new_ra        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_new_ra },
6044
  { &hf_tetra_group_identity_location_accept, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_group_identity_location_accept },
6045
  { &hf_tetra_group_predefined_lifetime, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_group_predefined_lifetime },
6046
  { &hf_tetra_group_identity_downlink, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_group_identity_downlink },
6047
  { &hf_tetra_proprietary   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_proprietary },
6048
  { NULL, 0, 0, NULL }
6049
};
6050
6051
static unsigned
6052
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_) {
6053
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6054
0
                                   ett_tetra_T_type3_elements, T_type3_elements_sequence);
6055
6056
0
  return offset;
6057
0
}
6058
6059
6060
static const value_string tetra_T_type3_vals[] = {
6061
  {   0, "no-type3" },
6062
  {   1, "type3-elements" },
6063
  { 0, NULL }
6064
};
6065
6066
static const per_choice_t T_type3_choice[] = {
6067
  {   0, &hf_tetra_no_type3      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6068
  {   1, &hf_tetra_type3_elements, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type3_elements },
6069
  { 0, NULL, 0, NULL }
6070
};
6071
6072
static unsigned
6073
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_) {
6074
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6075
0
                                 ett_tetra_T_type3, T_type3_choice,
6076
0
                                 NULL);
6077
6078
0
  return offset;
6079
0
}
6080
6081
6082
static const per_sequence_t T_type2_parameters_03_sequence[] = {
6083
  { &hf_tetra_ssi_choice    , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_ssi_choice },
6084
  { &hf_tetra_address_extension_choice, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_address_extension_choice },
6085
  { &hf_tetra_subscriber_class_choice, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_subscriber_class_choice },
6086
  { &hf_tetra_energy_saving_mode, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_energy_saving_mode },
6087
  { &hf_tetra_scch_info     , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_scch_info },
6088
  { &hf_tetra_type3         , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_type3 },
6089
  { NULL, 0, 0, NULL }
6090
};
6091
6092
static unsigned
6093
1
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_) {
6094
1
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6095
1
                                   ett_tetra_T_type2_parameters_03, T_type2_parameters_03_sequence);
6096
6097
1
  return offset;
6098
1
}
6099
6100
6101
static const value_string tetra_T_optional_elements_05_vals[] = {
6102
  {   0, "no-type2" },
6103
  {   1, "type2-parameters" },
6104
  { 0, NULL }
6105
};
6106
6107
static const per_choice_t T_optional_elements_05_choice[] = {
6108
  {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6109
  {   1, &hf_tetra_type2_parameters_03, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_parameters_03 },
6110
  { 0, NULL, 0, NULL }
6111
};
6112
6113
static unsigned
6114
3
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_) {
6115
3
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6116
3
                                 ett_tetra_T_optional_elements_05, T_optional_elements_05_choice,
6117
3
                                 NULL);
6118
6119
3
  return offset;
6120
3
}
6121
6122
6123
static const per_sequence_t D_LOCATION_UPDATE_ACCEPT_sequence[] = {
6124
  { &hf_tetra_location_update_type, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_UPDATE_TYPE },
6125
  { &hf_tetra_optional_elements_05, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_05 },
6126
  { NULL, 0, 0, NULL }
6127
};
6128
6129
static unsigned
6130
3
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_) {
6131
3
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6132
3
                                   ett_tetra_D_LOCATION_UPDATE_ACCEPT, D_LOCATION_UPDATE_ACCEPT_sequence);
6133
6134
3
  col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-LOCATION-UPDATE-ACCEPT");
6135
6136
3
  return offset;
6137
3
}
6138
6139
6140
static const per_sequence_t D_LOCATION_UPDATE_REJECT_sequence[] = {
6141
  { &hf_tetra_location_update_type, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_UPDATE_TYPE },
6142
  { &hf_tetra_reject_cause  , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_31 },
6143
  { &hf_tetra_cipher_control, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
6144
  { NULL, 0, 0, NULL }
6145
};
6146
6147
static unsigned
6148
1
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_) {
6149
1
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6150
1
                                   ett_tetra_D_LOCATION_UPDATE_REJECT, D_LOCATION_UPDATE_REJECT_sequence);
6151
6152
1
    col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-LOCATION-UPDATE-REJECT");
6153
6154
1
  return offset;
6155
1
}
6156
6157
6158
static const per_sequence_t T_attach_sequence[] = {
6159
  { &hf_tetra_lifetime      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
6160
  { &hf_tetra_class_of_usage, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
6161
  { NULL, 0, 0, NULL }
6162
};
6163
6164
static unsigned
6165
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_) {
6166
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6167
0
                                   ett_tetra_T_attach, T_attach_sequence);
6168
6169
0
  return offset;
6170
0
}
6171
6172
6173
static const value_string tetra_T_detach_downlike_vals[] = {
6174
  {   0, "unknow-gssi" },
6175
  {   1, "temporary-detachment1" },
6176
  {   2, "temporary-detachment2" },
6177
  {   3, "permanent-detachment" },
6178
  { 0, NULL }
6179
};
6180
6181
6182
static unsigned
6183
1
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_) {
6184
1
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
6185
1
                                     4, NULL, false, 0, NULL);
6186
6187
1
  return offset;
6188
1
}
6189
6190
6191
static const per_sequence_t T_detach_sequence[] = {
6192
  { &hf_tetra_detach_downlike, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_detach_downlike },
6193
  { NULL, 0, 0, NULL }
6194
};
6195
6196
static unsigned
6197
1
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_) {
6198
1
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6199
1
                                   ett_tetra_T_detach, T_detach_sequence);
6200
6201
1
  return offset;
6202
1
}
6203
6204
6205
static const value_string tetra_T_attach_detach_identifier_vals[] = {
6206
  {   0, "attach" },
6207
  {   1, "detach" },
6208
  { 0, NULL }
6209
};
6210
6211
static const per_choice_t T_attach_detach_identifier_choice[] = {
6212
  {   0, &hf_tetra_attach        , ASN1_NO_EXTENSIONS     , dissect_tetra_T_attach },
6213
  {   1, &hf_tetra_detach        , ASN1_NO_EXTENSIONS     , dissect_tetra_T_detach },
6214
  { 0, NULL, 0, NULL }
6215
};
6216
6217
static unsigned
6218
1
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_) {
6219
1
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6220
1
                                 ett_tetra_T_attach_detach_identifier, T_attach_detach_identifier_choice,
6221
1
                                 NULL);
6222
6223
1
  return offset;
6224
1
}
6225
6226
6227
static const per_sequence_t T_gssi_extension_sequence[] = {
6228
  { &hf_tetra_gssi_oct_str  , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_OCTET_STRING_SIZE_3 },
6229
  { &hf_tetra_extension     , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_OCTET_STRING_SIZE_3 },
6230
  { NULL, 0, 0, NULL }
6231
};
6232
6233
static unsigned
6234
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_) {
6235
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6236
0
                                   ett_tetra_T_gssi_extension, T_gssi_extension_sequence);
6237
6238
0
  return offset;
6239
0
}
6240
6241
6242
static const value_string tetra_T_address_type_vals[] = {
6243
  {   0, "gssi" },
6244
  {   1, "gssi-extension" },
6245
  {   2, "vgssi" },
6246
  { 0, NULL }
6247
};
6248
6249
static const per_choice_t T_address_type_choice[] = {
6250
  {   0, &hf_tetra_gssi_oct_str  , ASN1_NO_EXTENSIONS     , dissect_tetra_OCTET_STRING_SIZE_3 },
6251
  {   1, &hf_tetra_gssi_extension, ASN1_NO_EXTENSIONS     , dissect_tetra_T_gssi_extension },
6252
  {   2, &hf_tetra_vgssi         , ASN1_NO_EXTENSIONS     , dissect_tetra_OCTET_STRING_SIZE_3 },
6253
  { 0, NULL, 0, NULL }
6254
};
6255
6256
static unsigned
6257
1
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_) {
6258
1
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6259
1
                                 ett_tetra_T_address_type, T_address_type_choice,
6260
1
                                 NULL);
6261
6262
1
  return offset;
6263
1
}
6264
6265
6266
static const per_sequence_t GROUP_IDENTITY_DOWNLINK_sequence[] = {
6267
  { &hf_tetra_attach_detach_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_attach_detach_identifier },
6268
  { &hf_tetra_address_type  , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_address_type },
6269
  { NULL, 0, 0, NULL }
6270
};
6271
6272
static unsigned
6273
1
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_) {
6274
1
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6275
1
                                   ett_tetra_GROUP_IDENTITY_DOWNLINK, GROUP_IDENTITY_DOWNLINK_sequence);
6276
6277
1
  return offset;
6278
1
}
6279
6280
6281
static const per_sequence_t T_type3_elements_04_sequence[] = {
6282
  { &hf_tetra_type3_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_TYPE3_IDENTIFIER },
6283
  { &hf_tetra_length        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_2047 },
6284
  { &hf_tetra_repeat_num    , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_63 },
6285
  { &hf_tetra_group_identity_downlink_02, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_GROUP_IDENTITY_DOWNLINK },
6286
  { NULL, 0, 0, NULL }
6287
};
6288
6289
static unsigned
6290
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_) {
6291
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6292
0
                                   ett_tetra_T_type3_elements_04, T_type3_elements_04_sequence);
6293
6294
0
  return offset;
6295
0
}
6296
6297
6298
static const value_string tetra_T_type3_04_vals[] = {
6299
  {   0, "no-type3" },
6300
  {   1, "type3-elements" },
6301
  { 0, NULL }
6302
};
6303
6304
static const per_choice_t T_type3_04_choice[] = {
6305
  {   0, &hf_tetra_no_type3      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6306
  {   1, &hf_tetra_type3_elements_04, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type3_elements_04 },
6307
  { 0, NULL, 0, NULL }
6308
};
6309
6310
static unsigned
6311
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_) {
6312
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6313
0
                                 ett_tetra_T_type3_04, T_type3_04_choice,
6314
0
                                 NULL);
6315
6316
0
  return offset;
6317
0
}
6318
6319
6320
static const per_sequence_t T_type2_element_09_sequence[] = {
6321
  { &hf_tetra_type3_04      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_type3_04 },
6322
  { NULL, 0, 0, NULL }
6323
};
6324
6325
static unsigned
6326
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_) {
6327
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6328
0
                                   ett_tetra_T_type2_element_09, T_type2_element_09_sequence);
6329
6330
0
  return offset;
6331
0
}
6332
6333
6334
static const value_string tetra_T_optional_elements_30_vals[] = {
6335
  {   0, "no-type2" },
6336
  {   1, "type2-element" },
6337
  { 0, NULL }
6338
};
6339
6340
static const per_choice_t T_optional_elements_30_choice[] = {
6341
  {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6342
  {   1, &hf_tetra_type2_element_09, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_element_09 },
6343
  { 0, NULL, 0, NULL }
6344
};
6345
6346
static unsigned
6347
1
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_) {
6348
1
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6349
1
                                 ett_tetra_T_optional_elements_30, T_optional_elements_30_choice,
6350
1
                                 NULL);
6351
6352
1
  return offset;
6353
1
}
6354
6355
6356
static const per_sequence_t D_ATTACH_DETACH_GROUP_IDENTITY_sequence[] = {
6357
  { &hf_tetra_group_identity_report, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
6358
  { &hf_tetra_group_identity_ack_request, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
6359
  { &hf_tetra_group_identity_attach_detach_mode, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
6360
  { &hf_tetra_optional_elements_30, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_30 },
6361
  { NULL, 0, 0, NULL }
6362
};
6363
6364
static unsigned
6365
1
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_) {
6366
1
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6367
1
                                   ett_tetra_D_ATTACH_DETACH_GROUP_IDENTITY, D_ATTACH_DETACH_GROUP_IDENTITY_sequence);
6368
6369
1
  col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-ATTACH-DETACH-GROUP-IDENTITY");
6370
6371
1
  return offset;
6372
1
}
6373
6374
6375
static const per_sequence_t T_type3_elements_05_sequence[] = {
6376
  { &hf_tetra_type3_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_TYPE3_IDENTIFIER },
6377
  { &hf_tetra_length        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_2047 },
6378
  { &hf_tetra_repeat_num    , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_63 },
6379
  { &hf_tetra_group_identity_downlink_02, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_GROUP_IDENTITY_DOWNLINK },
6380
  { NULL, 0, 0, NULL }
6381
};
6382
6383
static unsigned
6384
1
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_) {
6385
1
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6386
1
                                   ett_tetra_T_type3_elements_05, T_type3_elements_05_sequence);
6387
6388
1
  return offset;
6389
1
}
6390
6391
6392
static const value_string tetra_T_type3_05_vals[] = {
6393
  {   0, "no-type3" },
6394
  {   1, "type3-elements" },
6395
  { 0, NULL }
6396
};
6397
6398
static const per_choice_t T_type3_05_choice[] = {
6399
  {   0, &hf_tetra_no_type3      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6400
  {   1, &hf_tetra_type3_elements_05, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type3_elements_05 },
6401
  { 0, NULL, 0, NULL }
6402
};
6403
6404
static unsigned
6405
1
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_) {
6406
1
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6407
1
                                 ett_tetra_T_type3_05, T_type3_05_choice,
6408
1
                                 NULL);
6409
6410
1
  return offset;
6411
1
}
6412
6413
6414
static const per_sequence_t T_type2_element_10_sequence[] = {
6415
  { &hf_tetra_type3_05      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_type3_05 },
6416
  { NULL, 0, 0, NULL }
6417
};
6418
6419
static unsigned
6420
1
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_) {
6421
1
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6422
1
                                   ett_tetra_T_type2_element_10, T_type2_element_10_sequence);
6423
6424
1
  return offset;
6425
1
}
6426
6427
6428
static const value_string tetra_T_optional_elements_31_vals[] = {
6429
  {   0, "no-type2" },
6430
  {   1, "type2-element" },
6431
  { 0, NULL }
6432
};
6433
6434
static const per_choice_t T_optional_elements_31_choice[] = {
6435
  {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6436
  {   1, &hf_tetra_type2_element_10, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_element_10 },
6437
  { 0, NULL, 0, NULL }
6438
};
6439
6440
static unsigned
6441
1
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_) {
6442
1
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6443
1
                                 ett_tetra_T_optional_elements_31, T_optional_elements_31_choice,
6444
1
                                 NULL);
6445
6446
1
  return offset;
6447
1
}
6448
6449
6450
static const per_sequence_t D_ATTACH_DETACH_GROUP_IDENTITY_ACK_sequence[] = {
6451
  { &hf_tetra_group_identity_attach_detach_accept, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
6452
  { &hf_tetra_reserved_01   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
6453
  { &hf_tetra_optional_elements_31, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_31 },
6454
  { NULL, 0, 0, NULL }
6455
};
6456
6457
static unsigned
6458
1
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_) {
6459
1
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6460
1
                                   ett_tetra_D_ATTACH_DETACH_GROUP_IDENTITY_ACK, D_ATTACH_DETACH_GROUP_IDENTITY_ACK_sequence);
6461
6462
1
  col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-ATTACH-DETACH-GROUP-IDENTITY-ACK");
6463
6464
1
  return offset;
6465
1
}
6466
6467
6468
static const per_sequence_t D_MM_STATUS_sequence[] = {
6469
  { &hf_tetra_status_downlink, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_63 },
6470
  { NULL, 0, 0, NULL }
6471
};
6472
6473
static unsigned
6474
2
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_) {
6475
2
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6476
2
                                   ett_tetra_D_MM_STATUS, D_MM_STATUS_sequence);
6477
6478
2
  col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-MM-STATUS");
6479
6480
2
  return offset;
6481
2
}
6482
6483
6484
static const value_string tetra_D_MM_PDU_vals[] = {
6485
  {   0, "d-Otar" },
6486
  {   1, "d-Authentication" },
6487
  {   2, "d-Authentication-Reject" },
6488
  {   3, "d-Disable" },
6489
  {   4, "d-Enable" },
6490
  {   5, "d-Location-Update-Accept" },
6491
  {   6, "d-Location-Update-Command" },
6492
  {   7, "d-Location-Update-Reject" },
6493
  {   8, "d-MM-reserved2" },
6494
  {   9, "d-Location-Update-Proceeding" },
6495
  {  10, "d-Attach-Detach-Group-Identity" },
6496
  {  11, "d-Attach-Detach-Group-Identity-Ack" },
6497
  {  12, "d-MM-Status" },
6498
  {  13, "d-MM-reserved5" },
6499
  {  14, "d-MM-reserved6" },
6500
  {  15, "d-MM-Function-Not-Support" },
6501
  { 0, NULL }
6502
};
6503
6504
static const per_choice_t D_MM_PDU_choice[] = {
6505
  {   0, &hf_tetra_d_Otar        , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6506
  {   1, &hf_tetra_d_Authentication, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6507
  {   2, &hf_tetra_d_Authentication_Reject, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6508
  {   3, &hf_tetra_d_Disable     , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6509
  {   4, &hf_tetra_d_Enable      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6510
  {   5, &hf_tetra_d_Location_Update_Accept, ASN1_NO_EXTENSIONS     , dissect_tetra_D_LOCATION_UPDATE_ACCEPT },
6511
  {   6, &hf_tetra_d_Location_Update_Command, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6512
  {   7, &hf_tetra_d_Location_Update_Reject, ASN1_NO_EXTENSIONS     , dissect_tetra_D_LOCATION_UPDATE_REJECT },
6513
  {   8, &hf_tetra_d_MM_reserved2, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6514
  {   9, &hf_tetra_d_Location_Update_Proceeding, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6515
  {  10, &hf_tetra_d_Attach_Detach_Group_Identity, ASN1_NO_EXTENSIONS     , dissect_tetra_D_ATTACH_DETACH_GROUP_IDENTITY },
6516
  {  11, &hf_tetra_d_Attach_Detach_Group_Identity_Ack, ASN1_NO_EXTENSIONS     , dissect_tetra_D_ATTACH_DETACH_GROUP_IDENTITY_ACK },
6517
  {  12, &hf_tetra_d_MM_Status   , ASN1_NO_EXTENSIONS     , dissect_tetra_D_MM_STATUS },
6518
  {  13, &hf_tetra_d_MM_reserved5, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6519
  {  14, &hf_tetra_d_MM_reserved6, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6520
  {  15, &hf_tetra_d_MM_Function_Not_Support, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6521
  { 0, NULL, 0, NULL }
6522
};
6523
6524
static unsigned
6525
11
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_) {
6526
11
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6527
11
                                 ett_tetra_D_MM_PDU, D_MM_PDU_choice,
6528
11
                                 NULL);
6529
6530
11
  return offset;
6531
11
}
6532
6533
6534
static const value_string tetra_T_simplex_duplex_selection_03_vals[] = {
6535
  {   0, "simplex" },
6536
  {   1, "duplex" },
6537
  { 0, NULL }
6538
};
6539
6540
6541
static unsigned
6542
1
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_) {
6543
1
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
6544
1
                                     2, NULL, false, 0, NULL);
6545
6546
1
  return offset;
6547
1
}
6548
6549
6550
static const value_string tetra_T_basic_service_infomation_vals[] = {
6551
  {   0, "none" },
6552
  {   1, "basic-service-infomation" },
6553
  { 0, NULL }
6554
};
6555
6556
static const per_choice_t T_basic_service_infomation_choice[] = {
6557
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6558
  {   1, &hf_tetra_basic_service_infomation_01, ASN1_NO_EXTENSIONS     , dissect_tetra_Basic_service_information },
6559
  { 0, NULL, 0, NULL }
6560
};
6561
6562
static unsigned
6563
1
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_) {
6564
1
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6565
1
                                 ett_tetra_T_basic_service_infomation, T_basic_service_infomation_choice,
6566
1
                                 NULL);
6567
6568
1
  return offset;
6569
1
}
6570
6571
6572
static const value_string tetra_T_notification_indicator_06_vals[] = {
6573
  {   0, "none" },
6574
  {   1, "notification-indicator" },
6575
  { 0, NULL }
6576
};
6577
6578
static const per_choice_t T_notification_indicator_06_choice[] = {
6579
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6580
  {   1, &hf_tetra_notification_indicator_06, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_63 },
6581
  { 0, NULL, 0, NULL }
6582
};
6583
6584
static unsigned
6585
1
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_) {
6586
1
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6587
1
                                 ett_tetra_T_notification_indicator_06, T_notification_indicator_06_choice,
6588
1
                                 NULL);
6589
6590
1
  return offset;
6591
1
}
6592
6593
6594
static const value_string tetra_T_prop_09_vals[] = {
6595
  {   0, "none" },
6596
  {   1, "prop" },
6597
  { 0, NULL }
6598
};
6599
6600
static const per_choice_t T_prop_09_choice[] = {
6601
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6602
  {   1, &hf_tetra_prop_01       , ASN1_NO_EXTENSIONS     , dissect_tetra_Proprietary },
6603
  { 0, NULL, 0, NULL }
6604
};
6605
6606
static unsigned
6607
1
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_) {
6608
1
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6609
1
                                 ett_tetra_T_prop_09, T_prop_09_choice,
6610
1
                                 NULL);
6611
6612
1
  return offset;
6613
1
}
6614
6615
6616
static const per_sequence_t T_type2_parameters_13_sequence[] = {
6617
  { &hf_tetra_basic_service_infomation, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_basic_service_infomation },
6618
  { &hf_tetra_notification_indicator_07, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_notification_indicator_06 },
6619
  { &hf_tetra_prop_10       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop_09 },
6620
  { NULL, 0, 0, NULL }
6621
};
6622
6623
static unsigned
6624
1
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_) {
6625
1
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6626
1
                                   ett_tetra_T_type2_parameters_13, T_type2_parameters_13_sequence);
6627
6628
1
  return offset;
6629
1
}
6630
6631
6632
static const value_string tetra_T_optional_elements_22_vals[] = {
6633
  {   0, "no-type2" },
6634
  {   1, "type2-parameters" },
6635
  { 0, NULL }
6636
};
6637
6638
static const per_choice_t T_optional_elements_22_choice[] = {
6639
  {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6640
  {   1, &hf_tetra_type2_parameters_13, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_parameters_13 },
6641
  { 0, NULL, 0, NULL }
6642
};
6643
6644
static unsigned
6645
1
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_) {
6646
1
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6647
1
                                 ett_tetra_T_optional_elements_22, T_optional_elements_22_choice,
6648
1
                                 NULL);
6649
6650
1
  return offset;
6651
1
}
6652
6653
6654
static const per_sequence_t D_ALERT_sequence[] = {
6655
  { &hf_tetra_call_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
6656
  { &hf_tetra_call_time_out_setup_phase, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
6657
  { &hf_tetra_reserved_01   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
6658
  { &hf_tetra_simplex_duplex_selection_04, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_simplex_duplex_selection_03 },
6659
  { &hf_tetra_call_queued   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
6660
  { &hf_tetra_optional_elements_22, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_22 },
6661
  { NULL, 0, 0, NULL }
6662
};
6663
6664
static unsigned
6665
1
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_) {
6666
1
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6667
1
                                   ett_tetra_D_ALERT, D_ALERT_sequence);
6668
6669
1
  col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-ALERT");
6670
6671
1
  return offset;
6672
1
}
6673
6674
6675
static const value_string tetra_T_basic_service_information_02_vals[] = {
6676
  {   0, "none" },
6677
  {   1, "basic-service-information" },
6678
  { 0, NULL }
6679
};
6680
6681
static const per_choice_t T_basic_service_information_02_choice[] = {
6682
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6683
  {   1, &hf_tetra_basic_service_information, ASN1_NO_EXTENSIONS     , dissect_tetra_Basic_service_information },
6684
  { 0, NULL, 0, NULL }
6685
};
6686
6687
static unsigned
6688
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_) {
6689
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6690
0
                                 ett_tetra_T_basic_service_information_02, T_basic_service_information_02_choice,
6691
0
                                 NULL);
6692
6693
0
  return offset;
6694
0
}
6695
6696
6697
static const value_string tetra_T_call_status_01_vals[] = {
6698
  {   0, "none" },
6699
  {   1, "call-status" },
6700
  { 0, NULL }
6701
};
6702
6703
static const per_choice_t T_call_status_01_choice[] = {
6704
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6705
  {   1, &hf_tetra_call_status_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_7 },
6706
  { 0, NULL, 0, NULL }
6707
};
6708
6709
static unsigned
6710
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_) {
6711
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6712
0
                                 ett_tetra_T_call_status_01, T_call_status_01_choice,
6713
0
                                 NULL);
6714
6715
0
  return offset;
6716
0
}
6717
6718
6719
static const value_string tetra_T_notification_indicator_05_vals[] = {
6720
  {   0, "none" },
6721
  {   1, "notification-indicator" },
6722
  { 0, NULL }
6723
};
6724
6725
static const per_choice_t T_notification_indicator_05_choice[] = {
6726
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6727
  {   1, &hf_tetra_notification_indicator_06, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_63 },
6728
  { 0, NULL, 0, NULL }
6729
};
6730
6731
static unsigned
6732
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_) {
6733
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6734
0
                                 ett_tetra_T_notification_indicator_05, T_notification_indicator_05_choice,
6735
0
                                 NULL);
6736
6737
0
  return offset;
6738
0
}
6739
6740
6741
static const value_string tetra_T_prop_08_vals[] = {
6742
  {   0, "none" },
6743
  {   1, "prop" },
6744
  { 0, NULL }
6745
};
6746
6747
static const per_choice_t T_prop_08_choice[] = {
6748
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6749
  {   1, &hf_tetra_prop_01       , ASN1_NO_EXTENSIONS     , dissect_tetra_Proprietary },
6750
  { 0, NULL, 0, NULL }
6751
};
6752
6753
static unsigned
6754
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_) {
6755
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6756
0
                                 ett_tetra_T_prop_08, T_prop_08_choice,
6757
0
                                 NULL);
6758
6759
0
  return offset;
6760
0
}
6761
6762
6763
static const per_sequence_t T_type2_parameters_12_sequence[] = {
6764
  { &hf_tetra_basic_service_information_03, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_basic_service_information_02 },
6765
  { &hf_tetra_call_status_02, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_call_status_01 },
6766
  { &hf_tetra_notification_indicator_05, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_notification_indicator_05 },
6767
  { &hf_tetra_prop_09       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop_08 },
6768
  { NULL, 0, 0, NULL }
6769
};
6770
6771
static unsigned
6772
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_) {
6773
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6774
0
                                   ett_tetra_T_type2_parameters_12, T_type2_parameters_12_sequence);
6775
6776
0
  return offset;
6777
0
}
6778
6779
6780
static const value_string tetra_T_optional_elements_21_vals[] = {
6781
  {   0, "no-type2" },
6782
  {   1, "type2-parameters" },
6783
  { 0, NULL }
6784
};
6785
6786
static const per_choice_t T_optional_elements_21_choice[] = {
6787
  {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6788
  {   1, &hf_tetra_type2_parameters_12, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_parameters_12 },
6789
  { 0, NULL, 0, NULL }
6790
};
6791
6792
static unsigned
6793
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_) {
6794
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6795
0
                                 ett_tetra_T_optional_elements_21, T_optional_elements_21_choice,
6796
0
                                 NULL);
6797
6798
0
  return offset;
6799
0
}
6800
6801
6802
static const per_sequence_t D_CALL_PROCEEDING_sequence[] = {
6803
  { &hf_tetra_call_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
6804
  { &hf_tetra_call_time_out_setup_phase, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
6805
  { &hf_tetra_hook_method_selection, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
6806
  { &hf_tetra_simplex_duplex_selection_03, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
6807
  { &hf_tetra_optional_elements_21, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_21 },
6808
  { NULL, 0, 0, NULL }
6809
};
6810
6811
static unsigned
6812
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_) {
6813
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6814
0
                                   ett_tetra_D_CALL_PROCEEDING, D_CALL_PROCEEDING_sequence);
6815
6816
0
  col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-CALL-PROCEEDING");
6817
6818
0
  return offset;
6819
0
}
6820
6821
6822
static const value_string tetra_T_simplex_duplex_selection_04_vals[] = {
6823
  {   0, "simplex" },
6824
  {   1, "duplex" },
6825
  { 0, NULL }
6826
};
6827
6828
6829
static unsigned
6830
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_) {
6831
0
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
6832
0
                                     2, NULL, false, 0, NULL);
6833
6834
0
  return offset;
6835
0
}
6836
6837
6838
static const value_string tetra_T_call_priority_vals[] = {
6839
  {   0, "none" },
6840
  {   1, "call-priority" },
6841
  { 0, NULL }
6842
};
6843
6844
static const per_choice_t T_call_priority_choice[] = {
6845
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6846
  {   1, &hf_tetra_call_priority , ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_15 },
6847
  { 0, NULL, 0, NULL }
6848
};
6849
6850
static unsigned
6851
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_) {
6852
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6853
0
                                 ett_tetra_T_call_priority, T_call_priority_choice,
6854
0
                                 NULL);
6855
6856
0
  return offset;
6857
0
}
6858
6859
6860
static const value_string tetra_T_basic_service_information_03_vals[] = {
6861
  {   0, "none" },
6862
  {   1, "basic-service-information" },
6863
  { 0, NULL }
6864
};
6865
6866
static const per_choice_t T_basic_service_information_03_choice[] = {
6867
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6868
  {   1, &hf_tetra_basic_service_information, ASN1_NO_EXTENSIONS     , dissect_tetra_Basic_service_information },
6869
  { 0, NULL, 0, NULL }
6870
};
6871
6872
static unsigned
6873
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_) {
6874
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6875
0
                                 ett_tetra_T_basic_service_information_03, T_basic_service_information_03_choice,
6876
0
                                 NULL);
6877
6878
0
  return offset;
6879
0
}
6880
6881
6882
static const value_string tetra_T_temporary_address_02_vals[] = {
6883
  {   0, "none" },
6884
  {   1, "temporary-address" },
6885
  { 0, NULL }
6886
};
6887
6888
static const per_choice_t T_temporary_address_02_choice[] = {
6889
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6890
  {   1, &hf_tetra_temporary_address_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_16777215 },
6891
  { 0, NULL, 0, NULL }
6892
};
6893
6894
static unsigned
6895
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_) {
6896
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6897
0
                                 ett_tetra_T_temporary_address_02, T_temporary_address_02_choice,
6898
0
                                 NULL);
6899
6900
0
  return offset;
6901
0
}
6902
6903
6904
static const value_string tetra_T_notification_indicator_07_vals[] = {
6905
  {   0, "none" },
6906
  {   1, "notification-indicator" },
6907
  { 0, NULL }
6908
};
6909
6910
static const per_choice_t T_notification_indicator_07_choice[] = {
6911
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6912
  {   1, &hf_tetra_notification_indicator_06, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_63 },
6913
  { 0, NULL, 0, NULL }
6914
};
6915
6916
static unsigned
6917
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_) {
6918
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6919
0
                                 ett_tetra_T_notification_indicator_07, T_notification_indicator_07_choice,
6920
0
                                 NULL);
6921
6922
0
  return offset;
6923
0
}
6924
6925
6926
static const value_string tetra_T_prop_10_vals[] = {
6927
  {   0, "none" },
6928
  {   1, "prop" },
6929
  { 0, NULL }
6930
};
6931
6932
static const per_choice_t T_prop_10_choice[] = {
6933
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6934
  {   1, &hf_tetra_prop_01       , ASN1_NO_EXTENSIONS     , dissect_tetra_Proprietary },
6935
  { 0, NULL, 0, NULL }
6936
};
6937
6938
static unsigned
6939
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_) {
6940
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6941
0
                                 ett_tetra_T_prop_10, T_prop_10_choice,
6942
0
                                 NULL);
6943
6944
0
  return offset;
6945
0
}
6946
6947
6948
static const per_sequence_t T_type2_parameters_14_sequence[] = {
6949
  { &hf_tetra_call_priority_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_call_priority },
6950
  { &hf_tetra_basic_service_information_04, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_basic_service_information_03 },
6951
  { &hf_tetra_temporary_address_03, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_temporary_address_02 },
6952
  { &hf_tetra_notification_indicator_08, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_notification_indicator_07 },
6953
  { &hf_tetra_prop_11       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop_10 },
6954
  { NULL, 0, 0, NULL }
6955
};
6956
6957
static unsigned
6958
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_) {
6959
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
6960
0
                                   ett_tetra_T_type2_parameters_14, T_type2_parameters_14_sequence);
6961
6962
0
  return offset;
6963
0
}
6964
6965
6966
static const value_string tetra_T_optional_elements_23_vals[] = {
6967
  {   0, "no-type2" },
6968
  {   1, "type2-parameters" },
6969
  { 0, NULL }
6970
};
6971
6972
static const per_choice_t T_optional_elements_23_choice[] = {
6973
  {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
6974
  {   1, &hf_tetra_type2_parameters_14, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_parameters_14 },
6975
  { 0, NULL, 0, NULL }
6976
};
6977
6978
static unsigned
6979
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_) {
6980
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
6981
0
                                 ett_tetra_T_optional_elements_23, T_optional_elements_23_choice,
6982
0
                                 NULL);
6983
6984
0
  return offset;
6985
0
}
6986
6987
6988
static const per_sequence_t D_CONNECT_sequence[] = {
6989
  { &hf_tetra_call_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
6990
  { &hf_tetra_call_time_out_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_15 },
6991
  { &hf_tetra_hook_method_selection, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BOOLEAN },
6992
  { &hf_tetra_simplex_duplex_selection_05, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_simplex_duplex_selection_04 },
6993
  { &hf_tetra_transmission_grant, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
6994
  { &hf_tetra_transmission_request_permission, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
6995
  { &hf_tetra_call_ownership_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
6996
  { &hf_tetra_optional_elements_23, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_23 },
6997
  { NULL, 0, 0, NULL }
6998
};
6999
7000
static unsigned
7001
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_) {
7002
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7003
0
                                   ett_tetra_D_CONNECT, D_CONNECT_sequence);
7004
7005
0
  col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-CONNECT");
7006
7007
0
  return offset;
7008
0
}
7009
7010
7011
static const value_string tetra_T_notification_indicator_08_vals[] = {
7012
  {   0, "none" },
7013
  {   1, "notification-indicator" },
7014
  { 0, NULL }
7015
};
7016
7017
static const per_choice_t T_notification_indicator_08_choice[] = {
7018
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7019
  {   1, &hf_tetra_notification_indicator_06, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_63 },
7020
  { 0, NULL, 0, NULL }
7021
};
7022
7023
static unsigned
7024
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_) {
7025
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7026
0
                                 ett_tetra_T_notification_indicator_08, T_notification_indicator_08_choice,
7027
0
                                 NULL);
7028
7029
0
  return offset;
7030
0
}
7031
7032
7033
static const value_string tetra_T_prop_11_vals[] = {
7034
  {   0, "none" },
7035
  {   1, "prop" },
7036
  { 0, NULL }
7037
};
7038
7039
static const per_choice_t T_prop_11_choice[] = {
7040
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7041
  {   1, &hf_tetra_prop_01       , ASN1_NO_EXTENSIONS     , dissect_tetra_Proprietary },
7042
  { 0, NULL, 0, NULL }
7043
};
7044
7045
static unsigned
7046
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_) {
7047
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7048
0
                                 ett_tetra_T_prop_11, T_prop_11_choice,
7049
0
                                 NULL);
7050
7051
0
  return offset;
7052
0
}
7053
7054
7055
static const per_sequence_t T_type2_parameters_15_sequence[] = {
7056
  { &hf_tetra_notification_indicator_09, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_notification_indicator_08 },
7057
  { &hf_tetra_prop_12       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop_11 },
7058
  { NULL, 0, 0, NULL }
7059
};
7060
7061
static unsigned
7062
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_) {
7063
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7064
0
                                   ett_tetra_T_type2_parameters_15, T_type2_parameters_15_sequence);
7065
7066
0
  return offset;
7067
0
}
7068
7069
7070
static const value_string tetra_T_optional_elements_24_vals[] = {
7071
  {   0, "no-type2" },
7072
  {   1, "type2-parameters" },
7073
  { 0, NULL }
7074
};
7075
7076
static const per_choice_t T_optional_elements_24_choice[] = {
7077
  {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7078
  {   1, &hf_tetra_type2_parameters_15, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_parameters_15 },
7079
  { 0, NULL, 0, NULL }
7080
};
7081
7082
static unsigned
7083
1
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_) {
7084
1
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7085
1
                                 ett_tetra_T_optional_elements_24, T_optional_elements_24_choice,
7086
1
                                 NULL);
7087
7088
1
  return offset;
7089
1
}
7090
7091
7092
static const per_sequence_t D_CONNECT_ACK_sequence[] = {
7093
  { &hf_tetra_call_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
7094
  { &hf_tetra_call_time_out_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_15 },
7095
  { &hf_tetra_transmission_grant, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
7096
  { &hf_tetra_transmission_request_permission, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
7097
  { &hf_tetra_optional_elements_24, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_24 },
7098
  { NULL, 0, 0, NULL }
7099
};
7100
7101
static unsigned
7102
1
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_) {
7103
1
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7104
1
                                   ett_tetra_D_CONNECT_ACK, D_CONNECT_ACK_sequence);
7105
7106
1
  col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-CONNECT-ACK");
7107
7108
1
  return offset;
7109
1
}
7110
7111
7112
static const value_string tetra_T_notification_indicator_vals[] = {
7113
  {   0, "none" },
7114
  {   1, "notification-indicator-element" },
7115
  { 0, NULL }
7116
};
7117
7118
static const per_choice_t T_notification_indicator_choice[] = {
7119
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7120
  {   1, &hf_tetra_notification_indicator_element, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_63 },
7121
  { 0, NULL, 0, NULL }
7122
};
7123
7124
static unsigned
7125
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_) {
7126
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7127
0
                                 ett_tetra_T_notification_indicator, T_notification_indicator_choice,
7128
0
                                 NULL);
7129
7130
0
  return offset;
7131
0
}
7132
7133
7134
static const per_sequence_t T_type2_element_sequence[] = {
7135
  { &hf_tetra_notification_indicator, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_notification_indicator },
7136
  { NULL, 0, 0, NULL }
7137
};
7138
7139
static unsigned
7140
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_) {
7141
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7142
0
                                   ett_tetra_T_type2_element, T_type2_element_sequence);
7143
7144
0
  return offset;
7145
0
}
7146
7147
7148
static const value_string tetra_T_optional_elements_06_vals[] = {
7149
  {   0, "no-type2" },
7150
  {   1, "type2-element" },
7151
  { 0, NULL }
7152
};
7153
7154
static const per_choice_t T_optional_elements_06_choice[] = {
7155
  {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7156
  {   1, &hf_tetra_type2_element , ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_element },
7157
  { 0, NULL, 0, NULL }
7158
};
7159
7160
static unsigned
7161
1
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_) {
7162
1
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7163
1
                                 ett_tetra_T_optional_elements_06, T_optional_elements_06_choice,
7164
1
                                 NULL);
7165
7166
1
  return offset;
7167
1
}
7168
7169
7170
static const per_sequence_t D_DISCONNECT_sequence[] = {
7171
  { &hf_tetra_call_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
7172
  { &hf_tetra_disconnect_cause, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_31 },
7173
  { &hf_tetra_optional_elements_06, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_06 },
7174
  { NULL, 0, 0, NULL }
7175
};
7176
7177
static unsigned
7178
1
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_) {
7179
1
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7180
1
                                   ett_tetra_D_DISCONNECT, D_DISCONNECT_sequence);
7181
7182
1
  col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-DISCONNECT");
7183
7184
1
  return offset;
7185
1
}
7186
7187
7188
static const value_string tetra_T_new_call_identifier_vals[] = {
7189
  {   0, "none" },
7190
  {   1, "new-call-identifier-element" },
7191
  { 0, NULL }
7192
};
7193
7194
static const per_choice_t T_new_call_identifier_choice[] = {
7195
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7196
  {   1, &hf_tetra_new_call_identifier_element, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_16383 },
7197
  { 0, NULL, 0, NULL }
7198
};
7199
7200
static unsigned
7201
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_) {
7202
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7203
0
                                 ett_tetra_T_new_call_identifier, T_new_call_identifier_choice,
7204
0
                                 NULL);
7205
7206
0
  return offset;
7207
0
}
7208
7209
7210
static const value_string tetra_T_call_time_out_vals[] = {
7211
  {   0, "none" },
7212
  {   1, "call-time-out" },
7213
  { 0, NULL }
7214
};
7215
7216
static const per_choice_t T_call_time_out_choice[] = {
7217
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7218
  {   1, &hf_tetra_call_time_out_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_15 },
7219
  { 0, NULL, 0, NULL }
7220
};
7221
7222
static unsigned
7223
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_) {
7224
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7225
0
                                 ett_tetra_T_call_time_out, T_call_time_out_choice,
7226
0
                                 NULL);
7227
7228
0
  return offset;
7229
0
}
7230
7231
7232
static const value_string tetra_T_call_time_out_set_up_phase_vals[] = {
7233
  {   0, "none" },
7234
  {   1, "call-time-out-set-up-phase" },
7235
  { 0, NULL }
7236
};
7237
7238
static const per_choice_t T_call_time_out_set_up_phase_choice[] = {
7239
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7240
  {   1, &hf_tetra_call_time_out_set_up_phase_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_7 },
7241
  { 0, NULL, 0, NULL }
7242
};
7243
7244
static unsigned
7245
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_) {
7246
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7247
0
                                 ett_tetra_T_call_time_out_set_up_phase, T_call_time_out_set_up_phase_choice,
7248
0
                                 NULL);
7249
7250
0
  return offset;
7251
0
}
7252
7253
7254
static const value_string tetra_T_call_ownership_vals[] = {
7255
  {   0, "none" },
7256
  {   1, "call-ownership" },
7257
  { 0, NULL }
7258
};
7259
7260
static const per_choice_t T_call_ownership_choice[] = {
7261
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7262
  {   1, &hf_tetra_call_ownership_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_1 },
7263
  { 0, NULL, 0, NULL }
7264
};
7265
7266
static unsigned
7267
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_) {
7268
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7269
0
                                 ett_tetra_T_call_ownership, T_call_ownership_choice,
7270
0
                                 NULL);
7271
7272
0
  return offset;
7273
0
}
7274
7275
7276
static const value_string tetra_T_simplex_duplex_selection_05_vals[] = {
7277
  {   0, "simplex" },
7278
  {   1, "duplex" },
7279
  { 0, NULL }
7280
};
7281
7282
7283
static unsigned
7284
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_) {
7285
0
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
7286
0
                                     2, NULL, false, 0, NULL);
7287
7288
0
  return offset;
7289
0
}
7290
7291
7292
static const per_sequence_t Modify_type_sequence[] = {
7293
  { &hf_tetra_simplex_duplex_selection_06, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_simplex_duplex_selection_05 },
7294
  { &hf_tetra_basic_service_information, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Basic_service_information },
7295
  { NULL, 0, 0, NULL }
7296
};
7297
7298
static unsigned
7299
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_) {
7300
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7301
0
                                   ett_tetra_Modify_type, Modify_type_sequence);
7302
7303
0
  return offset;
7304
0
}
7305
7306
7307
static const value_string tetra_T_modify_vals[] = {
7308
  {   0, "none" },
7309
  {   1, "modify" },
7310
  { 0, NULL }
7311
};
7312
7313
static const per_choice_t T_modify_choice[] = {
7314
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7315
  {   1, &hf_tetra_modify_01     , ASN1_NO_EXTENSIONS     , dissect_tetra_Modify_type },
7316
  { 0, NULL, 0, NULL }
7317
};
7318
7319
static unsigned
7320
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_) {
7321
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7322
0
                                 ett_tetra_T_modify, T_modify_choice,
7323
0
                                 NULL);
7324
7325
0
  return offset;
7326
0
}
7327
7328
7329
static const value_string tetra_T_call_status_vals[] = {
7330
  {   0, "none" },
7331
  {   1, "call-status" },
7332
  { 0, NULL }
7333
};
7334
7335
static const per_choice_t T_call_status_choice[] = {
7336
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7337
  {   1, &hf_tetra_call_status_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_7 },
7338
  { 0, NULL, 0, NULL }
7339
};
7340
7341
static unsigned
7342
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_) {
7343
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7344
0
                                 ett_tetra_T_call_status, T_call_status_choice,
7345
0
                                 NULL);
7346
7347
0
  return offset;
7348
0
}
7349
7350
7351
static const value_string tetra_T_temporary_address_vals[] = {
7352
  {   0, "none" },
7353
  {   1, "temporary-address" },
7354
  { 0, NULL }
7355
};
7356
7357
static const per_choice_t T_temporary_address_choice[] = {
7358
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7359
  {   1, &hf_tetra_temporary_address_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_16777215 },
7360
  { 0, NULL, 0, NULL }
7361
};
7362
7363
static unsigned
7364
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_) {
7365
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7366
0
                                 ett_tetra_T_temporary_address, T_temporary_address_choice,
7367
0
                                 NULL);
7368
7369
0
  return offset;
7370
0
}
7371
7372
7373
static const value_string tetra_T_notification_indicator_01_vals[] = {
7374
  {   0, "none" },
7375
  {   1, "notification-indicator-element" },
7376
  { 0, NULL }
7377
};
7378
7379
static const per_choice_t T_notification_indicator_01_choice[] = {
7380
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7381
  {   1, &hf_tetra_notification_indicator_element, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_63 },
7382
  { 0, NULL, 0, NULL }
7383
};
7384
7385
static unsigned
7386
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_) {
7387
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7388
0
                                 ett_tetra_T_notification_indicator_01, T_notification_indicator_01_choice,
7389
0
                                 NULL);
7390
7391
0
  return offset;
7392
0
}
7393
7394
7395
static const value_string tetra_T_poll_response_percentage_vals[] = {
7396
  {   0, "none" },
7397
  {   1, "poll-response-percentage" },
7398
  { 0, NULL }
7399
};
7400
7401
static const per_choice_t T_poll_response_percentage_choice[] = {
7402
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7403
  {   1, &hf_tetra_poll_response_percentage_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_63 },
7404
  { 0, NULL, 0, NULL }
7405
};
7406
7407
static unsigned
7408
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_) {
7409
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7410
0
                                 ett_tetra_T_poll_response_percentage, T_poll_response_percentage_choice,
7411
0
                                 NULL);
7412
7413
0
  return offset;
7414
0
}
7415
7416
7417
static const value_string tetra_T_poll_response_number_vals[] = {
7418
  {   0, "none" },
7419
  {   1, "poll-response-number" },
7420
  { 0, NULL }
7421
};
7422
7423
static const per_choice_t T_poll_response_number_choice[] = {
7424
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7425
  {   1, &hf_tetra_poll_response_number_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_63 },
7426
  { 0, NULL, 0, NULL }
7427
};
7428
7429
static unsigned
7430
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_) {
7431
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7432
0
                                 ett_tetra_T_poll_response_number, T_poll_response_number_choice,
7433
0
                                 NULL);
7434
7435
0
  return offset;
7436
0
}
7437
7438
7439
static const per_sequence_t T_type2_element_01_sequence[] = {
7440
  { &hf_tetra_new_call_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_new_call_identifier },
7441
  { &hf_tetra_call_time_out , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_call_time_out },
7442
  { &hf_tetra_call_time_out_set_up_phase, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_call_time_out_set_up_phase },
7443
  { &hf_tetra_call_ownership, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_call_ownership },
7444
  { &hf_tetra_modify        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_modify },
7445
  { &hf_tetra_call_status   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_call_status },
7446
  { &hf_tetra_temporary_address, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_temporary_address },
7447
  { &hf_tetra_notification_indicator_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_notification_indicator_01 },
7448
  { &hf_tetra_poll_response_percentage, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_poll_response_percentage },
7449
  { &hf_tetra_poll_response_number, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_poll_response_number },
7450
  { NULL, 0, 0, NULL }
7451
};
7452
7453
static unsigned
7454
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_) {
7455
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7456
0
                                   ett_tetra_T_type2_element_01, T_type2_element_01_sequence);
7457
7458
0
  return offset;
7459
0
}
7460
7461
7462
static const value_string tetra_T_optional_elements_07_vals[] = {
7463
  {   0, "no-type2" },
7464
  {   1, "type2-element" },
7465
  { 0, NULL }
7466
};
7467
7468
static const per_choice_t T_optional_elements_07_choice[] = {
7469
  {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7470
  {   1, &hf_tetra_type2_element_01, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_element_01 },
7471
  { 0, NULL, 0, NULL }
7472
};
7473
7474
static unsigned
7475
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_) {
7476
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7477
0
                                 ett_tetra_T_optional_elements_07, T_optional_elements_07_choice,
7478
0
                                 NULL);
7479
7480
0
  return offset;
7481
0
}
7482
7483
7484
static const per_sequence_t D_INFO_sequence[] = {
7485
  { &hf_tetra_call_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
7486
  { &hf_tetra_reset_call_time_out_timer, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
7487
  { &hf_tetra_poll_request  , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
7488
  { &hf_tetra_optional_elements_07, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_07 },
7489
  { NULL, 0, 0, NULL }
7490
};
7491
7492
static unsigned
7493
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_) {
7494
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7495
0
                                   ett_tetra_D_INFO, D_INFO_sequence);
7496
7497
0
  col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-INFO");
7498
7499
0
  return offset;
7500
0
}
7501
7502
7503
static const value_string tetra_T_notification_indicator_09_vals[] = {
7504
  {   0, "none" },
7505
  {   1, "notification-indicator" },
7506
  { 0, NULL }
7507
};
7508
7509
static const per_choice_t T_notification_indicator_09_choice[] = {
7510
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7511
  {   1, &hf_tetra_notification_indicator_06, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_63 },
7512
  { 0, NULL, 0, NULL }
7513
};
7514
7515
static unsigned
7516
1
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_) {
7517
1
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7518
1
                                 ett_tetra_T_notification_indicator_09, T_notification_indicator_09_choice,
7519
1
                                 NULL);
7520
7521
1
  return offset;
7522
1
}
7523
7524
7525
static const value_string tetra_T_prop_12_vals[] = {
7526
  {   0, "none" },
7527
  {   1, "prop" },
7528
  { 0, NULL }
7529
};
7530
7531
static const per_choice_t T_prop_12_choice[] = {
7532
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7533
  {   1, &hf_tetra_prop_01       , ASN1_NO_EXTENSIONS     , dissect_tetra_Proprietary },
7534
  { 0, NULL, 0, NULL }
7535
};
7536
7537
static unsigned
7538
1
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_) {
7539
1
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7540
1
                                 ett_tetra_T_prop_12, T_prop_12_choice,
7541
1
                                 NULL);
7542
7543
1
  return offset;
7544
1
}
7545
7546
7547
static const per_sequence_t T_type2_parameters_16_sequence[] = {
7548
  { &hf_tetra_notification_indicator_10, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_notification_indicator_09 },
7549
  { &hf_tetra_prop_13       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop_12 },
7550
  { NULL, 0, 0, NULL }
7551
};
7552
7553
static unsigned
7554
1
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_) {
7555
1
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7556
1
                                   ett_tetra_T_type2_parameters_16, T_type2_parameters_16_sequence);
7557
7558
1
  return offset;
7559
1
}
7560
7561
7562
static const value_string tetra_T_optional_elements_25_vals[] = {
7563
  {   0, "no-type2" },
7564
  {   1, "type2-parameters" },
7565
  { 0, NULL }
7566
};
7567
7568
static const per_choice_t T_optional_elements_25_choice[] = {
7569
  {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7570
  {   1, &hf_tetra_type2_parameters_16, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_parameters_16 },
7571
  { 0, NULL, 0, NULL }
7572
};
7573
7574
static unsigned
7575
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_) {
7576
2
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7577
2
                                 ett_tetra_T_optional_elements_25, T_optional_elements_25_choice,
7578
2
                                 NULL);
7579
7580
2
  return offset;
7581
2
}
7582
7583
7584
static const per_sequence_t D_RELEASE_sequence[] = {
7585
  { &hf_tetra_call_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
7586
  { &hf_tetra_disconnect_cause, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_31 },
7587
  { &hf_tetra_optional_elements_25, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_25 },
7588
  { NULL, 0, 0, NULL }
7589
};
7590
7591
static unsigned
7592
3
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_) {
7593
3
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7594
3
                                   ett_tetra_D_RELEASE, D_RELEASE_sequence);
7595
7596
3
  col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-RELEASE");
7597
7598
3
  return offset;
7599
3
}
7600
7601
7602
static const value_string tetra_T_simplex_duplex_selection_02_vals[] = {
7603
  {   0, "simplex" },
7604
  {   1, "duplex" },
7605
  { 0, NULL }
7606
};
7607
7608
7609
static unsigned
7610
1
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_) {
7611
1
  offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
7612
1
                                     2, NULL, false, 0, NULL);
7613
7614
1
  return offset;
7615
1
}
7616
7617
7618
static const value_string tetra_T_notification_indicator_04_vals[] = {
7619
  {   0, "none" },
7620
  {   1, "notification-indicator-element" },
7621
  { 0, NULL }
7622
};
7623
7624
static const per_choice_t T_notification_indicator_04_choice[] = {
7625
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7626
  {   1, &hf_tetra_notification_indicator_element, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_63 },
7627
  { 0, NULL, 0, NULL }
7628
};
7629
7630
static unsigned
7631
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_) {
7632
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7633
0
                                 ett_tetra_T_notification_indicator_04, T_notification_indicator_04_choice,
7634
0
                                 NULL);
7635
7636
0
  return offset;
7637
0
}
7638
7639
7640
static const value_string tetra_T_temporary_address_01_vals[] = {
7641
  {   0, "none" },
7642
  {   1, "temporary-address-element" },
7643
  { 0, NULL }
7644
};
7645
7646
static const per_choice_t T_temporary_address_01_choice[] = {
7647
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7648
  {   1, &hf_tetra_temporary_address_element, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_16777215 },
7649
  { 0, NULL, 0, NULL }
7650
};
7651
7652
static unsigned
7653
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_) {
7654
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7655
0
                                 ett_tetra_T_temporary_address_01, T_temporary_address_01_choice,
7656
0
                                 NULL);
7657
7658
0
  return offset;
7659
0
}
7660
7661
7662
static const value_string tetra_T_calling_party_type_identifier_vals[] = {
7663
  {   0, "none" },
7664
  {   1, "calling-party-type-identifier-element" },
7665
  { 0, NULL }
7666
};
7667
7668
static const per_choice_t T_calling_party_type_identifier_choice[] = {
7669
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7670
  {   1, &hf_tetra_calling_party_type_identifier_element, ASN1_NO_EXTENSIONS     , dissect_tetra_Calling_party_address_type },
7671
  { 0, NULL, 0, NULL }
7672
};
7673
7674
static unsigned
7675
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_) {
7676
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7677
0
                                 ett_tetra_T_calling_party_type_identifier, T_calling_party_type_identifier_choice,
7678
0
                                 NULL);
7679
7680
0
  return offset;
7681
0
}
7682
7683
7684
static const value_string tetra_T_external_subscriber_number_01_vals[] = {
7685
  {   0, "none" },
7686
  {   1, "external-subscriber-number" },
7687
  { 0, NULL }
7688
};
7689
7690
static const per_choice_t T_external_subscriber_number_01_choice[] = {
7691
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7692
  {   1, &hf_tetra_external_subscriber_number_03, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_15 },
7693
  { 0, NULL, 0, NULL }
7694
};
7695
7696
static unsigned
7697
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_) {
7698
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7699
0
                                 ett_tetra_T_external_subscriber_number_01, T_external_subscriber_number_01_choice,
7700
0
                                 NULL);
7701
7702
0
  return offset;
7703
0
}
7704
7705
7706
static const value_string tetra_T_prop_07_vals[] = {
7707
  {   0, "none" },
7708
  {   1, "prop" },
7709
  { 0, NULL }
7710
};
7711
7712
static const per_choice_t T_prop_07_choice[] = {
7713
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7714
  {   1, &hf_tetra_prop_01       , ASN1_NO_EXTENSIONS     , dissect_tetra_Proprietary },
7715
  { 0, NULL, 0, NULL }
7716
};
7717
7718
static unsigned
7719
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_) {
7720
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7721
0
                                 ett_tetra_T_prop_07, T_prop_07_choice,
7722
0
                                 NULL);
7723
7724
0
  return offset;
7725
0
}
7726
7727
7728
static const per_sequence_t T_type2_element_06_sequence[] = {
7729
  { &hf_tetra_notification_indicator_04, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_notification_indicator_04 },
7730
  { &hf_tetra_temporary_address_02, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_temporary_address_01 },
7731
  { &hf_tetra_calling_party_type_identifier_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_calling_party_type_identifier },
7732
  { &hf_tetra_external_subscriber_number_02, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_external_subscriber_number_01 },
7733
  { &hf_tetra_prop_08       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop_07 },
7734
  { NULL, 0, 0, NULL }
7735
};
7736
7737
static unsigned
7738
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_) {
7739
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7740
0
                                   ett_tetra_T_type2_element_06, T_type2_element_06_sequence);
7741
7742
0
  return offset;
7743
0
}
7744
7745
7746
static const value_string tetra_T_optional_elements_20_vals[] = {
7747
  {   0, "no-type2" },
7748
  {   1, "type2-element" },
7749
  { 0, NULL }
7750
};
7751
7752
static const per_choice_t T_optional_elements_20_choice[] = {
7753
  {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7754
  {   1, &hf_tetra_type2_element_06, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_element_06 },
7755
  { 0, NULL, 0, NULL }
7756
};
7757
7758
static unsigned
7759
1
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_) {
7760
1
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7761
1
                                 ett_tetra_T_optional_elements_20, T_optional_elements_20_choice,
7762
1
                                 NULL);
7763
7764
1
  return offset;
7765
1
}
7766
7767
7768
static const per_sequence_t D_SETUP_sequence[] = {
7769
  { &hf_tetra_call_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
7770
  { &hf_tetra_call_time_out_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_15 },
7771
  { &hf_tetra_hook_method_selection_integer, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
7772
  { &hf_tetra_simplex_duplex_selection_02, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_simplex_duplex_selection_02 },
7773
  { &hf_tetra_basic_service_information, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Basic_service_information },
7774
  { &hf_tetra_transmission_grant, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
7775
  { &hf_tetra_transmission_request_permission, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
7776
  { &hf_tetra_call_priority , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_15 },
7777
  { &hf_tetra_optional_elements_20, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_20 },
7778
  { NULL, 0, 0, NULL }
7779
};
7780
7781
static unsigned
7782
1
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_) {
7783
1
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7784
1
                                   ett_tetra_D_SETUP, D_SETUP_sequence);
7785
7786
1
  col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-SETUP");
7787
7788
1
  return offset;
7789
1
}
7790
7791
7792
static const per_sequence_t D_STATUS_sequence[] = {
7793
  { &hf_tetra_calling_party_type_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Calling_party_address_type },
7794
  { &hf_tetra_pre_coded_status, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_65535 },
7795
  { NULL, 0, 0, NULL }
7796
};
7797
7798
static unsigned
7799
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_) {
7800
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7801
0
                                   ett_tetra_D_STATUS, D_STATUS_sequence);
7802
7803
0
  col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-STATUS");
7804
7805
0
  return offset;
7806
0
}
7807
7808
7809
static const value_string tetra_T_notification_indicator_11_vals[] = {
7810
  {   0, "none" },
7811
  {   1, "notification-indicator" },
7812
  { 0, NULL }
7813
};
7814
7815
static const per_choice_t T_notification_indicator_11_choice[] = {
7816
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7817
  {   1, &hf_tetra_notification_indicator_06, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_63 },
7818
  { 0, NULL, 0, NULL }
7819
};
7820
7821
static unsigned
7822
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_) {
7823
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7824
0
                                 ett_tetra_T_notification_indicator_11, T_notification_indicator_11_choice,
7825
0
                                 NULL);
7826
7827
0
  return offset;
7828
0
}
7829
7830
7831
static const value_string tetra_T_prop_14_vals[] = {
7832
  {   0, "none" },
7833
  {   1, "prop" },
7834
  { 0, NULL }
7835
};
7836
7837
static const per_choice_t T_prop_14_choice[] = {
7838
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7839
  {   1, &hf_tetra_prop_01       , ASN1_NO_EXTENSIONS     , dissect_tetra_Proprietary },
7840
  { 0, NULL, 0, NULL }
7841
};
7842
7843
static unsigned
7844
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_) {
7845
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7846
0
                                 ett_tetra_T_prop_14, T_prop_14_choice,
7847
0
                                 NULL);
7848
7849
0
  return offset;
7850
0
}
7851
7852
7853
static const per_sequence_t T_type2_parameters_18_sequence[] = {
7854
  { &hf_tetra_notification_indicator_12, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_notification_indicator_11 },
7855
  { &hf_tetra_prop_15       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop_14 },
7856
  { NULL, 0, 0, NULL }
7857
};
7858
7859
static unsigned
7860
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_) {
7861
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7862
0
                                   ett_tetra_T_type2_parameters_18, T_type2_parameters_18_sequence);
7863
7864
0
  return offset;
7865
0
}
7866
7867
7868
static const value_string tetra_T_optional_elements_27_vals[] = {
7869
  {   0, "no-type2" },
7870
  {   1, "type2-parameters" },
7871
  { 0, NULL }
7872
};
7873
7874
static const per_choice_t T_optional_elements_27_choice[] = {
7875
  {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7876
  {   1, &hf_tetra_type2_parameters_18, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_parameters_18 },
7877
  { 0, NULL, 0, NULL }
7878
};
7879
7880
static unsigned
7881
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_) {
7882
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7883
0
                                 ett_tetra_T_optional_elements_27, T_optional_elements_27_choice,
7884
0
                                 NULL);
7885
7886
0
  return offset;
7887
0
}
7888
7889
7890
static const per_sequence_t D_TX_CEASED_sequence[] = {
7891
  { &hf_tetra_call_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
7892
  { &hf_tetra_transmission_request_permission, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
7893
  { &hf_tetra_optional_elements_27, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_27 },
7894
  { NULL, 0, 0, NULL }
7895
};
7896
7897
static unsigned
7898
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_) {
7899
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7900
0
                                   ett_tetra_D_TX_CEASED, D_TX_CEASED_sequence);
7901
7902
0
  col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-TX-CEASED");
7903
7904
0
  return offset;
7905
0
}
7906
7907
7908
static const value_string tetra_T_notification_indicator_03_vals[] = {
7909
  {   0, "none" },
7910
  {   1, "notification-indicator-element" },
7911
  { 0, NULL }
7912
};
7913
7914
static const per_choice_t T_notification_indicator_03_choice[] = {
7915
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7916
  {   1, &hf_tetra_notification_indicator_element, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_63 },
7917
  { 0, NULL, 0, NULL }
7918
};
7919
7920
static unsigned
7921
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_) {
7922
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7923
0
                                 ett_tetra_T_notification_indicator_03, T_notification_indicator_03_choice,
7924
0
                                 NULL);
7925
7926
0
  return offset;
7927
0
}
7928
7929
7930
static const per_sequence_t T_type2_element_03_sequence[] = {
7931
  { &hf_tetra_notification_indicator_03, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_notification_indicator_03 },
7932
  { NULL, 0, 0, NULL }
7933
};
7934
7935
static unsigned
7936
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_) {
7937
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7938
0
                                   ett_tetra_T_type2_element_03, T_type2_element_03_sequence);
7939
7940
0
  return offset;
7941
0
}
7942
7943
7944
static const value_string tetra_T_optional_elements_09_vals[] = {
7945
  {   0, "no-type2" },
7946
  {   1, "type2-element" },
7947
  { 0, NULL }
7948
};
7949
7950
static const per_choice_t T_optional_elements_09_choice[] = {
7951
  {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7952
  {   1, &hf_tetra_type2_element_03, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_element_03 },
7953
  { 0, NULL, 0, NULL }
7954
};
7955
7956
static unsigned
7957
1
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_) {
7958
1
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
7959
1
                                 ett_tetra_T_optional_elements_09, T_optional_elements_09_choice,
7960
1
                                 NULL);
7961
7962
1
  return offset;
7963
1
}
7964
7965
7966
static const per_sequence_t D_TX_CONTINUE_sequence[] = {
7967
  { &hf_tetra_call_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
7968
  { &hf_tetra_continue      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
7969
  { &hf_tetra_transmission_request_permission, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
7970
  { &hf_tetra_optional_elements_09, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_09 },
7971
  { NULL, 0, 0, NULL }
7972
};
7973
7974
static unsigned
7975
1
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_) {
7976
1
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
7977
1
                                   ett_tetra_D_TX_CONTINUE, D_TX_CONTINUE_sequence);
7978
7979
1
  col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-TX-CONTINUE");
7980
7981
1
  return offset;
7982
1
}
7983
7984
7985
static const value_string tetra_T_notification_indicator_12_vals[] = {
7986
  {   0, "none" },
7987
  {   1, "notification-indicator-element" },
7988
  { 0, NULL }
7989
};
7990
7991
static const per_choice_t T_notification_indicator_12_choice[] = {
7992
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
7993
  {   1, &hf_tetra_notification_indicator_element, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_63 },
7994
  { 0, NULL, 0, NULL }
7995
};
7996
7997
static unsigned
7998
1
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_) {
7999
1
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8000
1
                                 ett_tetra_T_notification_indicator_12, T_notification_indicator_12_choice,
8001
1
                                 NULL);
8002
8003
1
  return offset;
8004
1
}
8005
8006
8007
8008
static unsigned
8009
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_) {
8010
0
  offset = dissect_tetra_Calling_party_address_type(tvb, offset, actx, tree, hf_index);
8011
8012
0
  return offset;
8013
0
}
8014
8015
8016
static const value_string tetra_T_transmitting_party_type_identifier_vals[] = {
8017
  {   0, "none" },
8018
  {   1, "tpti-element" },
8019
  { 0, NULL }
8020
};
8021
8022
static const per_choice_t T_transmitting_party_type_identifier_choice[] = {
8023
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8024
  {   1, &hf_tetra_tpti_element  , ASN1_NO_EXTENSIONS     , dissect_tetra_Transmitting_party_address_type },
8025
  { 0, NULL, 0, NULL }
8026
};
8027
8028
static unsigned
8029
1
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_) {
8030
1
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8031
1
                                 ett_tetra_T_transmitting_party_type_identifier, T_transmitting_party_type_identifier_choice,
8032
1
                                 NULL);
8033
8034
1
  return offset;
8035
1
}
8036
8037
8038
static const per_sequence_t T_type2_element_07_sequence[] = {
8039
  { &hf_tetra_notification_indicator_13, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_notification_indicator_12 },
8040
  { &hf_tetra_transmitting_party_type_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_transmitting_party_type_identifier },
8041
  { NULL, 0, 0, NULL }
8042
};
8043
8044
static unsigned
8045
1
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_) {
8046
1
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8047
1
                                   ett_tetra_T_type2_element_07, T_type2_element_07_sequence);
8048
8049
1
  return offset;
8050
1
}
8051
8052
8053
static const value_string tetra_T_optional_elements_28_vals[] = {
8054
  {   0, "no-type2" },
8055
  {   1, "type2-element" },
8056
  { 0, NULL }
8057
};
8058
8059
static const per_choice_t T_optional_elements_28_choice[] = {
8060
  {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8061
  {   1, &hf_tetra_type2_element_07, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_element_07 },
8062
  { 0, NULL, 0, NULL }
8063
};
8064
8065
static unsigned
8066
1
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_) {
8067
1
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8068
1
                                 ett_tetra_T_optional_elements_28, T_optional_elements_28_choice,
8069
1
                                 NULL);
8070
8071
1
  return offset;
8072
1
}
8073
8074
8075
static const per_sequence_t D_TX_GRANTED_sequence[] = {
8076
  { &hf_tetra_call_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
8077
  { &hf_tetra_transmission_grant, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
8078
  { &hf_tetra_transmission_request_permission, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
8079
  { &hf_tetra_encryption_control, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
8080
  { &hf_tetra_reserved_01   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
8081
  { &hf_tetra_optional_elements_28, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_28 },
8082
  { NULL, 0, 0, NULL }
8083
};
8084
8085
static unsigned
8086
1
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_) {
8087
1
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8088
1
                                   ett_tetra_D_TX_GRANTED, D_TX_GRANTED_sequence);
8089
8090
1
  col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-TX-GRANTED");
8091
8092
8093
1
  return offset;
8094
1
}
8095
8096
8097
static const value_string tetra_T_notification_indicator_02_vals[] = {
8098
  {   0, "none" },
8099
  {   1, "notification-indicator-element" },
8100
  { 0, NULL }
8101
};
8102
8103
static const per_choice_t T_notification_indicator_02_choice[] = {
8104
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8105
  {   1, &hf_tetra_notification_indicator_element, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_63 },
8106
  { 0, NULL, 0, NULL }
8107
};
8108
8109
static unsigned
8110
1
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_) {
8111
1
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8112
1
                                 ett_tetra_T_notification_indicator_02, T_notification_indicator_02_choice,
8113
1
                                 NULL);
8114
8115
1
  return offset;
8116
1
}
8117
8118
8119
static const per_sequence_t T_type2_element_02_sequence[] = {
8120
  { &hf_tetra_notification_indicator_02, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_notification_indicator_02 },
8121
  { NULL, 0, 0, NULL }
8122
};
8123
8124
static unsigned
8125
1
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_) {
8126
1
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8127
1
                                   ett_tetra_T_type2_element_02, T_type2_element_02_sequence);
8128
8129
1
  return offset;
8130
1
}
8131
8132
8133
static const value_string tetra_T_optional_elements_08_vals[] = {
8134
  {   0, "no-type2" },
8135
  {   1, "type2-element" },
8136
  { 0, NULL }
8137
};
8138
8139
static const per_choice_t T_optional_elements_08_choice[] = {
8140
  {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8141
  {   1, &hf_tetra_type2_element_02, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_element_02 },
8142
  { 0, NULL, 0, NULL }
8143
};
8144
8145
static unsigned
8146
2
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_) {
8147
2
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8148
2
                                 ett_tetra_T_optional_elements_08, T_optional_elements_08_choice,
8149
2
                                 NULL);
8150
8151
2
  return offset;
8152
2
}
8153
8154
8155
static const per_sequence_t D_TX_WAIT_sequence[] = {
8156
  { &hf_tetra_call_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
8157
  { &hf_tetra_transmission_request_permission, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
8158
  { &hf_tetra_optional_elements_08, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_08 },
8159
  { NULL, 0, 0, NULL }
8160
};
8161
8162
static unsigned
8163
1
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_) {
8164
1
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8165
1
                                   ett_tetra_D_TX_WAIT, D_TX_WAIT_sequence);
8166
8167
1
  col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-TX-WAIT");
8168
1
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8169
1
                                   ett_tetra_D_TX_WAIT, D_TX_WAIT_sequence);
8170
8171
1
  col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-TX-WAIT");
8172
8173
1
  return offset;
8174
1
}
8175
8176
8177
static const value_string tetra_T_notification_indicator_13_vals[] = {
8178
  {   0, "none" },
8179
  {   1, "notification-indicator-element" },
8180
  { 0, NULL }
8181
};
8182
8183
static const per_choice_t T_notification_indicator_13_choice[] = {
8184
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8185
  {   1, &hf_tetra_notification_indicator_element, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_63 },
8186
  { 0, NULL, 0, NULL }
8187
};
8188
8189
static unsigned
8190
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_) {
8191
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8192
0
                                 ett_tetra_T_notification_indicator_13, T_notification_indicator_13_choice,
8193
0
                                 NULL);
8194
8195
0
  return offset;
8196
0
}
8197
8198
8199
static const value_string tetra_T_transmitting_party_type_identifier_01_vals[] = {
8200
  {   0, "none" },
8201
  {   1, "tpti-element" },
8202
  { 0, NULL }
8203
};
8204
8205
static const per_choice_t T_transmitting_party_type_identifier_01_choice[] = {
8206
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8207
  {   1, &hf_tetra_tpti_element  , ASN1_NO_EXTENSIONS     , dissect_tetra_Transmitting_party_address_type },
8208
  { 0, NULL, 0, NULL }
8209
};
8210
8211
static unsigned
8212
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_) {
8213
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8214
0
                                 ett_tetra_T_transmitting_party_type_identifier_01, T_transmitting_party_type_identifier_01_choice,
8215
0
                                 NULL);
8216
8217
0
  return offset;
8218
0
}
8219
8220
8221
static const per_sequence_t T_type2_element_08_sequence[] = {
8222
  { &hf_tetra_notification_indicator_14, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_notification_indicator_13 },
8223
  { &hf_tetra_transmitting_party_type_identifier_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_transmitting_party_type_identifier_01 },
8224
  { NULL, 0, 0, NULL }
8225
};
8226
8227
static unsigned
8228
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_) {
8229
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8230
0
                                   ett_tetra_T_type2_element_08, T_type2_element_08_sequence);
8231
8232
0
  return offset;
8233
0
}
8234
8235
8236
static const value_string tetra_T_optional_elements_29_vals[] = {
8237
  {   0, "no-type2" },
8238
  {   1, "type2-element" },
8239
  { 0, NULL }
8240
};
8241
8242
static const per_choice_t T_optional_elements_29_choice[] = {
8243
  {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8244
  {   1, &hf_tetra_type2_element_08, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_element_08 },
8245
  { 0, NULL, 0, NULL }
8246
};
8247
8248
static unsigned
8249
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_) {
8250
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8251
0
                                 ett_tetra_T_optional_elements_29, T_optional_elements_29_choice,
8252
0
                                 NULL);
8253
8254
0
  return offset;
8255
0
}
8256
8257
8258
static const per_sequence_t D_TX_INTERRUPT_sequence[] = {
8259
  { &hf_tetra_call_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
8260
  { &hf_tetra_transmission_grant, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
8261
  { &hf_tetra_transmission_request_permission, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
8262
  { &hf_tetra_encryption_control, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
8263
  { &hf_tetra_reserved_01   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
8264
  { &hf_tetra_optional_elements_29, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_29 },
8265
  { NULL, 0, 0, NULL }
8266
};
8267
8268
static unsigned
8269
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_) {
8270
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8271
0
                                   ett_tetra_D_TX_INTERRUPT, D_TX_INTERRUPT_sequence);
8272
8273
0
  col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-TX-INTERRUPT");
8274
8275
0
  return offset;
8276
0
}
8277
8278
8279
static const value_string tetra_T_new_call_identifier_01_vals[] = {
8280
  {   0, "none" },
8281
  {   1, "new-call-identifier" },
8282
  { 0, NULL }
8283
};
8284
8285
static const per_choice_t T_new_call_identifier_01_choice[] = {
8286
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8287
  {   1, &hf_tetra_new_call_identifier_02, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_16383 },
8288
  { 0, NULL, 0, NULL }
8289
};
8290
8291
static unsigned
8292
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_) {
8293
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8294
0
                                 ett_tetra_T_new_call_identifier_01, T_new_call_identifier_01_choice,
8295
0
                                 NULL);
8296
8297
0
  return offset;
8298
0
}
8299
8300
8301
static const value_string tetra_T_call_time_out_01_vals[] = {
8302
  {   0, "none" },
8303
  {   1, "call-time-out" },
8304
  { 0, NULL }
8305
};
8306
8307
static const per_choice_t T_call_time_out_01_choice[] = {
8308
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8309
  {   1, &hf_tetra_call_time_out_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_15 },
8310
  { 0, NULL, 0, NULL }
8311
};
8312
8313
static unsigned
8314
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_) {
8315
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8316
0
                                 ett_tetra_T_call_time_out_01, T_call_time_out_01_choice,
8317
0
                                 NULL);
8318
8319
0
  return offset;
8320
0
}
8321
8322
8323
static const value_string tetra_T_call_status_02_vals[] = {
8324
  {   0, "none" },
8325
  {   1, "call-status" },
8326
  { 0, NULL }
8327
};
8328
8329
static const per_choice_t T_call_status_02_choice[] = {
8330
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8331
  {   1, &hf_tetra_call_status_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_7 },
8332
  { 0, NULL, 0, NULL }
8333
};
8334
8335
static unsigned
8336
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_) {
8337
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8338
0
                                 ett_tetra_T_call_status_02, T_call_status_02_choice,
8339
0
                                 NULL);
8340
8341
0
  return offset;
8342
0
}
8343
8344
8345
static const value_string tetra_T_modify_01_vals[] = {
8346
  {   0, "none" },
8347
  {   1, "modify" },
8348
  { 0, NULL }
8349
};
8350
8351
static const per_choice_t T_modify_01_choice[] = {
8352
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8353
  {   1, &hf_tetra_modify_01     , ASN1_NO_EXTENSIONS     , dissect_tetra_Modify_type },
8354
  { 0, NULL, 0, NULL }
8355
};
8356
8357
static unsigned
8358
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_) {
8359
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8360
0
                                 ett_tetra_T_modify_01, T_modify_01_choice,
8361
0
                                 NULL);
8362
8363
0
  return offset;
8364
0
}
8365
8366
8367
static const value_string tetra_T_notification_indicator_10_vals[] = {
8368
  {   0, "none" },
8369
  {   1, "notification-indicator" },
8370
  { 0, NULL }
8371
};
8372
8373
static const per_choice_t T_notification_indicator_10_choice[] = {
8374
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8375
  {   1, &hf_tetra_notification_indicator_06, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_63 },
8376
  { 0, NULL, 0, NULL }
8377
};
8378
8379
static unsigned
8380
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_) {
8381
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8382
0
                                 ett_tetra_T_notification_indicator_10, T_notification_indicator_10_choice,
8383
0
                                 NULL);
8384
8385
0
  return offset;
8386
0
}
8387
8388
8389
static const value_string tetra_T_prop_13_vals[] = {
8390
  {   0, "none" },
8391
  {   1, "prop" },
8392
  { 0, NULL }
8393
};
8394
8395
static const per_choice_t T_prop_13_choice[] = {
8396
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8397
  {   1, &hf_tetra_prop_01       , ASN1_NO_EXTENSIONS     , dissect_tetra_Proprietary },
8398
  { 0, NULL, 0, NULL }
8399
};
8400
8401
static unsigned
8402
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_) {
8403
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8404
0
                                 ett_tetra_T_prop_13, T_prop_13_choice,
8405
0
                                 NULL);
8406
8407
0
  return offset;
8408
0
}
8409
8410
8411
static const per_sequence_t T_type2_parameters_17_sequence[] = {
8412
  { &hf_tetra_new_call_identifier_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_new_call_identifier_01 },
8413
  { &hf_tetra_call_time_out_02, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_call_time_out_01 },
8414
  { &hf_tetra_call_status_03, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_call_status_02 },
8415
  { &hf_tetra_modify_02     , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_modify_01 },
8416
  { &hf_tetra_notification_indicator_11, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_notification_indicator_10 },
8417
  { &hf_tetra_prop_14       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_prop_13 },
8418
  { NULL, 0, 0, NULL }
8419
};
8420
8421
static unsigned
8422
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_) {
8423
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8424
0
                                   ett_tetra_T_type2_parameters_17, T_type2_parameters_17_sequence);
8425
8426
0
  return offset;
8427
0
}
8428
8429
8430
static const value_string tetra_T_optional_elements_26_vals[] = {
8431
  {   0, "no-type2" },
8432
  {   1, "type2-parameters" },
8433
  { 0, NULL }
8434
};
8435
8436
static const per_choice_t T_optional_elements_26_choice[] = {
8437
  {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8438
  {   1, &hf_tetra_type2_parameters_17, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_parameters_17 },
8439
  { 0, NULL, 0, NULL }
8440
};
8441
8442
static unsigned
8443
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_) {
8444
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8445
0
                                 ett_tetra_T_optional_elements_26, T_optional_elements_26_choice,
8446
0
                                 NULL);
8447
8448
0
  return offset;
8449
0
}
8450
8451
8452
static const per_sequence_t D_CALL_RESTORE_sequence[] = {
8453
  { &hf_tetra_call_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16383 },
8454
  { &hf_tetra_transmission_grant, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
8455
  { &hf_tetra_transmission_request_permission, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
8456
  { &hf_tetra_reset_call_time_out, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
8457
  { &hf_tetra_optional_elements_26, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_26 },
8458
  { NULL, 0, 0, NULL }
8459
};
8460
8461
static unsigned
8462
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_) {
8463
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8464
0
                                   ett_tetra_D_CALL_RESTORE, D_CALL_RESTORE_sequence);
8465
8466
0
  col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-CALL-RESTORE");
8467
8468
0
  return offset;
8469
0
}
8470
8471
8472
8473
static unsigned
8474
1
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_) {
8475
1
  offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
8476
1
                                       8, 8, false, NULL);
8477
8478
1
  return offset;
8479
1
}
8480
8481
8482
static const value_string tetra_T_short_data_type_identifier_01_vals[] = {
8483
  {   0, "data-1" },
8484
  {   1, "data-2" },
8485
  {   2, "data-3" },
8486
  {   3, "length-indicator-data-4" },
8487
  { 0, NULL }
8488
};
8489
8490
static const per_choice_t T_short_data_type_identifier_01_choice[] = {
8491
  {   0, &hf_tetra_data_1        , ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_65535 },
8492
  {   1, &hf_tetra_data_2        , ASN1_NO_EXTENSIONS     , dissect_tetra_OCTET_STRING_SIZE_4 },
8493
  {   2, &hf_tetra_data_3_01     , ASN1_NO_EXTENSIONS     , dissect_tetra_OCTET_STRING_SIZE_8 },
8494
  {   3, &hf_tetra_length_indicator_data_4, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_4194304 },
8495
  { 0, NULL, 0, NULL }
8496
};
8497
8498
static unsigned
8499
3
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_) {
8500
3
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8501
3
                                 ett_tetra_T_short_data_type_identifier_01, T_short_data_type_identifier_01_choice,
8502
3
                                 NULL);
8503
8504
3
  return offset;
8505
3
}
8506
8507
8508
static const per_sequence_t D_SDS_DATA_sequence[] = {
8509
  { &hf_tetra_calling_party_type_identifier, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Calling_party_address_type },
8510
  { &hf_tetra_short_data_type_identifier_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_short_data_type_identifier_01 },
8511
  { NULL, 0, 0, NULL }
8512
};
8513
8514
static unsigned
8515
3
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_) {
8516
3
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8517
3
                                   ett_tetra_D_SDS_DATA, D_SDS_DATA_sequence);
8518
8519
3
  col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-SDS-DATA");
8520
8521
3
  return offset;
8522
3
}
8523
8524
8525
static const value_string tetra_D_CMCE_PDU_vals[] = {
8526
  {   0, "d-Alert" },
8527
  {   1, "d-Call-Proceeding" },
8528
  {   2, "d-Connect" },
8529
  {   3, "d-Connect-Ack" },
8530
  {   4, "d-Disconnect" },
8531
  {   5, "d-Info" },
8532
  {   6, "d-Release" },
8533
  {   7, "d-Setup" },
8534
  {   8, "d-Status" },
8535
  {   9, "d-Tx-Ceased" },
8536
  {  10, "d-Tx-Continue" },
8537
  {  11, "d-Tx-Granted" },
8538
  {  12, "d-Tx-Wait" },
8539
  {  13, "d-Tx-Interrupt" },
8540
  {  14, "d-Call-Restore" },
8541
  {  15, "d-SDS-Data" },
8542
  {  16, "d-Facility" },
8543
  { 0, NULL }
8544
};
8545
8546
static const per_choice_t D_CMCE_PDU_choice[] = {
8547
  {   0, &hf_tetra_d_Alert       , ASN1_NO_EXTENSIONS     , dissect_tetra_D_ALERT },
8548
  {   1, &hf_tetra_d_Call_Proceeding, ASN1_NO_EXTENSIONS     , dissect_tetra_D_CALL_PROCEEDING },
8549
  {   2, &hf_tetra_d_Connect     , ASN1_NO_EXTENSIONS     , dissect_tetra_D_CONNECT },
8550
  {   3, &hf_tetra_d_Connect_Ack , ASN1_NO_EXTENSIONS     , dissect_tetra_D_CONNECT_ACK },
8551
  {   4, &hf_tetra_d_Disconnect  , ASN1_NO_EXTENSIONS     , dissect_tetra_D_DISCONNECT },
8552
  {   5, &hf_tetra_d_Info        , ASN1_NO_EXTENSIONS     , dissect_tetra_D_INFO },
8553
  {   6, &hf_tetra_d_Release     , ASN1_NO_EXTENSIONS     , dissect_tetra_D_RELEASE },
8554
  {   7, &hf_tetra_d_Setup       , ASN1_NO_EXTENSIONS     , dissect_tetra_D_SETUP },
8555
  {   8, &hf_tetra_d_Status      , ASN1_NO_EXTENSIONS     , dissect_tetra_D_STATUS },
8556
  {   9, &hf_tetra_d_Tx_Ceased   , ASN1_NO_EXTENSIONS     , dissect_tetra_D_TX_CEASED },
8557
  {  10, &hf_tetra_d_Tx_Continue , ASN1_NO_EXTENSIONS     , dissect_tetra_D_TX_CONTINUE },
8558
  {  11, &hf_tetra_d_Tx_Granted  , ASN1_NO_EXTENSIONS     , dissect_tetra_D_TX_GRANTED },
8559
  {  12, &hf_tetra_d_Tx_Wait     , ASN1_NO_EXTENSIONS     , dissect_tetra_D_TX_WAIT },
8560
  {  13, &hf_tetra_d_Tx_Interrupt, ASN1_NO_EXTENSIONS     , dissect_tetra_D_TX_INTERRUPT },
8561
  {  14, &hf_tetra_d_Call_Restore, ASN1_NO_EXTENSIONS     , dissect_tetra_D_CALL_RESTORE },
8562
  {  15, &hf_tetra_d_SDS_Data    , ASN1_NO_EXTENSIONS     , dissect_tetra_D_SDS_DATA },
8563
  {  16, &hf_tetra_d_Facility    , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8564
  { 0, NULL, 0, NULL }
8565
};
8566
8567
static unsigned
8568
13
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_) {
8569
13
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8570
13
                                 ett_tetra_D_CMCE_PDU, D_CMCE_PDU_choice,
8571
13
                                 NULL);
8572
8573
13
  return offset;
8574
13
}
8575
8576
8577
static const value_string tetra_T_optional_elements_02_vals[] = {
8578
  {   0, "no-type2" },
8579
  {   1, "sdu" },
8580
  { 0, NULL }
8581
};
8582
8583
static const per_choice_t T_optional_elements_02_choice[] = {
8584
  {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8585
  {   1, &hf_tetra_sdu           , ASN1_NO_EXTENSIONS     , dissect_tetra_BIT_STRING },
8586
  { 0, NULL, 0, NULL }
8587
};
8588
8589
static unsigned
8590
1
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_) {
8591
1
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8592
1
                                 ett_tetra_T_optional_elements_02, T_optional_elements_02_choice,
8593
1
                                 NULL);
8594
8595
1
  return offset;
8596
1
}
8597
8598
8599
static const per_sequence_t D_NEW_CELL_sequence[] = {
8600
  { &hf_tetra_pdu_type_02   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
8601
  { &hf_tetra_channel_command_valid, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
8602
  { &hf_tetra_optional_elements_02, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_02 },
8603
  { NULL, 0, 0, NULL }
8604
};
8605
8606
static unsigned
8607
1
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_) {
8608
1
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8609
1
                                   ett_tetra_D_NEW_CELL, D_NEW_CELL_sequence);
8610
8611
1
  return offset;
8612
1
}
8613
8614
8615
static const value_string tetra_T_optional_elements_03_vals[] = {
8616
  {   0, "no-type2" },
8617
  {   1, "sdu" },
8618
  { 0, NULL }
8619
};
8620
8621
static const per_choice_t T_optional_elements_03_choice[] = {
8622
  {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8623
  {   1, &hf_tetra_sdu           , ASN1_NO_EXTENSIONS     , dissect_tetra_BIT_STRING },
8624
  { 0, NULL, 0, NULL }
8625
};
8626
8627
static unsigned
8628
3
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_) {
8629
3
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8630
3
                                 ett_tetra_T_optional_elements_03, T_optional_elements_03_choice,
8631
3
                                 NULL);
8632
8633
3
  return offset;
8634
3
}
8635
8636
8637
static const per_sequence_t D_PREPARE_FAIL_sequence[] = {
8638
  { &hf_tetra_pdu_type_02   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
8639
  { &hf_tetra_fail_cause    , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
8640
  { &hf_tetra_optional_elements_03, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_03 },
8641
  { NULL, 0, 0, NULL }
8642
};
8643
8644
static unsigned
8645
3
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_) {
8646
3
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8647
3
                                   ett_tetra_D_PREPARE_FAIL, D_PREPARE_FAIL_sequence);
8648
8649
3
  return offset;
8650
3
}
8651
8652
8653
8654
static unsigned
8655
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_) {
8656
0
  offset = dissect_per_integer(tvb, offset, actx, tree, hf_index, NULL);
8657
8658
0
  return offset;
8659
0
}
8660
8661
8662
8663
static unsigned
8664
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_) {
8665
0
  offset = dissect_per_integer(tvb, offset, actx, tree, hf_index, NULL);
8666
8667
0
  return offset;
8668
0
}
8669
8670
8671
static const per_sequence_t TETRA_NETWORK_TIME_sequence[] = {
8672
  { &hf_tetra_network_time  , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_network_time },
8673
  { &hf_tetra_local_time_offset_sign, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
8674
  { &hf_tetra_local_time_offset, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_63 },
8675
  { &hf_tetra_year          , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_63 },
8676
  { &hf_tetra_reserved_04   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_reserved },
8677
  { NULL, 0, 0, NULL }
8678
};
8679
8680
static unsigned
8681
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_) {
8682
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8683
0
                                   ett_tetra_TETRA_NETWORK_TIME, TETRA_NETWORK_TIME_sequence);
8684
8685
0
  return offset;
8686
0
}
8687
8688
8689
static const value_string tetra_T_tetra_network_time_vals[] = {
8690
  {   0, "none" },
8691
  {   1, "tetra-network-time" },
8692
  { 0, NULL }
8693
};
8694
8695
static const per_choice_t T_tetra_network_time_choice[] = {
8696
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8697
  {   1, &hf_tetra_tetra_network_time_01, ASN1_NO_EXTENSIONS     , dissect_tetra_TETRA_NETWORK_TIME },
8698
  { 0, NULL, 0, NULL }
8699
};
8700
8701
static unsigned
8702
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_) {
8703
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8704
0
                                 ett_tetra_T_tetra_network_time, T_tetra_network_time_choice,
8705
0
                                 NULL);
8706
8707
0
  return offset;
8708
0
}
8709
8710
8711
static const value_string tetra_T_number_of_neighbour_cells_vals[] = {
8712
  {   0, "none" },
8713
  {   1, "number-of-neighbour-cells" },
8714
  { 0, NULL }
8715
};
8716
8717
static const per_choice_t T_number_of_neighbour_cells_choice[] = {
8718
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8719
  {   1, &hf_tetra_number_of_neighbour_cells_01, ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_7 },
8720
  { 0, NULL, 0, NULL }
8721
};
8722
8723
static unsigned
8724
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_) {
8725
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8726
0
                                 ett_tetra_T_number_of_neighbour_cells, T_number_of_neighbour_cells_choice,
8727
0
                                 NULL);
8728
8729
0
  return offset;
8730
0
}
8731
8732
8733
static const per_sequence_t T_type2_parameters_02_sequence[] = {
8734
  { &hf_tetra_tetra_network_time, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_tetra_network_time },
8735
  { &hf_tetra_number_of_neighbour_cells, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_number_of_neighbour_cells },
8736
  { NULL, 0, 0, NULL }
8737
};
8738
8739
static unsigned
8740
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_) {
8741
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8742
0
                                   ett_tetra_T_type2_parameters_02, T_type2_parameters_02_sequence);
8743
8744
0
  return offset;
8745
0
}
8746
8747
8748
static const value_string tetra_T_optional_elements_04_vals[] = {
8749
  {   0, "no-type2" },
8750
  {   1, "type2-parameters" },
8751
  { 0, NULL }
8752
};
8753
8754
static const per_choice_t T_optional_elements_04_choice[] = {
8755
  {   0, &hf_tetra_no_type2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8756
  {   1, &hf_tetra_type2_parameters_02, ASN1_NO_EXTENSIONS     , dissect_tetra_T_type2_parameters_02 },
8757
  { 0, NULL, 0, NULL }
8758
};
8759
8760
static unsigned
8761
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_) {
8762
0
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8763
0
                                 ett_tetra_T_optional_elements_04, T_optional_elements_04_choice,
8764
0
                                 NULL);
8765
8766
0
  return offset;
8767
0
}
8768
8769
8770
static const per_sequence_t D_NWRK_BRDADCAST_sequence[] = {
8771
  { &hf_tetra_pdu_type_02   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
8772
  { &hf_tetra_cell_re_select_parameters, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_65535 },
8773
  { &hf_tetra_cell_service_level, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
8774
  { &hf_tetra_optional_elements_04, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_elements_04 },
8775
  { NULL, 0, 0, NULL }
8776
};
8777
8778
static unsigned
8779
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_) {
8780
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8781
0
                                   ett_tetra_D_NWRK_BRDADCAST, D_NWRK_BRDADCAST_sequence);
8782
8783
0
  return offset;
8784
0
}
8785
8786
8787
static const per_sequence_t D_RESTORE_ACK_sequence[] = {
8788
  { &hf_tetra_pdu_type_02   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
8789
  { &hf_tetra_sdu           , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BIT_STRING },
8790
  { NULL, 0, 0, NULL }
8791
};
8792
8793
static unsigned
8794
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_) {
8795
0
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8796
0
                                   ett_tetra_D_RESTORE_ACK, D_RESTORE_ACK_sequence);
8797
8798
0
  return offset;
8799
0
}
8800
8801
8802
static const per_sequence_t D_RESTORE_FAIL_sequence[] = {
8803
  { &hf_tetra_pdu_type_02   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
8804
  { &hf_tetra_fail_cause    , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
8805
  { NULL, 0, 0, NULL }
8806
};
8807
8808
static unsigned
8809
1
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_) {
8810
1
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8811
1
                                   ett_tetra_D_RESTORE_FAIL, D_RESTORE_FAIL_sequence);
8812
8813
1
  return offset;
8814
1
}
8815
8816
8817
static const value_string tetra_DMLE_PDU_vals[] = {
8818
  {   0, "d-new-cell" },
8819
  {   1, "d-prepare-fail" },
8820
  {   2, "d-nwrk-broadcast" },
8821
  {   3, "dmle-reserved1" },
8822
  {   4, "d-restore-ack" },
8823
  {   5, "d-restore-fail" },
8824
  {   6, "dmle-reserved2" },
8825
  {   7, "dmle-reserved3" },
8826
  { 0, NULL }
8827
};
8828
8829
static const per_choice_t DMLE_PDU_choice[] = {
8830
  {   0, &hf_tetra_d_new_cell    , ASN1_NO_EXTENSIONS     , dissect_tetra_D_NEW_CELL },
8831
  {   1, &hf_tetra_d_prepare_fail, ASN1_NO_EXTENSIONS     , dissect_tetra_D_PREPARE_FAIL },
8832
  {   2, &hf_tetra_d_nwrk_broadcast, ASN1_NO_EXTENSIONS     , dissect_tetra_D_NWRK_BRDADCAST },
8833
  {   3, &hf_tetra_dmle_reserved1, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8834
  {   4, &hf_tetra_d_restore_ack , ASN1_NO_EXTENSIONS     , dissect_tetra_D_RESTORE_ACK },
8835
  {   5, &hf_tetra_d_restore_fail, ASN1_NO_EXTENSIONS     , dissect_tetra_D_RESTORE_FAIL },
8836
  {   6, &hf_tetra_dmle_reserved2, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8837
  {   7, &hf_tetra_dmle_reserved3, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8838
  { 0, NULL, 0, NULL }
8839
};
8840
8841
static unsigned
8842
5
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_) {
8843
5
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8844
5
                                 ett_tetra_DMLE_PDU, DMLE_PDU_choice,
8845
5
                                 NULL);
8846
8847
5
  return offset;
8848
5
}
8849
8850
8851
static const value_string tetra_D_MLE_PDU_vals[] = {
8852
  {   0, "u-mle-reserved1" },
8853
  {   1, "mm" },
8854
  {   2, "cmce" },
8855
  {   3, "u-mle-reserved2" },
8856
  {   4, "sndcp" },
8857
  {   5, "mle" },
8858
  {   6, "tetra-management-entity-protocol" },
8859
  {   7, "u-mle-reserved3" },
8860
  { 0, NULL }
8861
};
8862
8863
static const per_choice_t D_MLE_PDU_choice[] = {
8864
  {   0, &hf_tetra_u_mle_reserved1, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8865
  {   1, &hf_tetra_mm_01         , ASN1_NO_EXTENSIONS     , dissect_tetra_D_MM_PDU },
8866
  {   2, &hf_tetra_cmce_01       , ASN1_NO_EXTENSIONS     , dissect_tetra_D_CMCE_PDU },
8867
  {   3, &hf_tetra_u_mle_reserved2, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8868
  {   4, &hf_tetra_sndcp         , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8869
  {   5, &hf_tetra_mle_01        , ASN1_NO_EXTENSIONS     , dissect_tetra_DMLE_PDU },
8870
  {   6, &hf_tetra_tetra_management_entity_protocol, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8871
  {   7, &hf_tetra_u_mle_reserved3, ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
8872
  { 0, NULL, 0, NULL }
8873
};
8874
8875
static unsigned
8876
44
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_) {
8877
44
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
8878
44
                                 ett_tetra_D_MLE_PDU, D_MLE_PDU_choice,
8879
44
                                 NULL);
8880
8881
44
  return offset;
8882
44
}
8883
8884
8885
static const per_sequence_t D_BL_ADATA_sequence[] = {
8886
  { &hf_tetra_nr            , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
8887
  { &hf_tetra_ns            , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
8888
  { &hf_tetra_tl_sdu_01     , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_D_MLE_PDU },
8889
  { NULL, 0, 0, NULL }
8890
};
8891
8892
static unsigned
8893
9
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_) {
8894
9
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8895
9
                                   ett_tetra_D_BL_ADATA, D_BL_ADATA_sequence);
8896
8897
9
  return offset;
8898
9
}
8899
8900
8901
static const per_sequence_t D_BL_DATA_sequence[] = {
8902
  { &hf_tetra_ns            , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
8903
  { &hf_tetra_tl_sdu_01     , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_D_MLE_PDU },
8904
  { NULL, 0, 0, NULL }
8905
};
8906
8907
static unsigned
8908
5
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_) {
8909
5
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8910
5
                                   ett_tetra_D_BL_DATA, D_BL_DATA_sequence);
8911
8912
5
  return offset;
8913
5
}
8914
8915
8916
static const per_sequence_t D_BL_ACK_sequence[] = {
8917
  { &hf_tetra_nr            , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
8918
  { &hf_tetra_tl_sdu_01     , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_D_MLE_PDU },
8919
  { NULL, 0, 0, NULL }
8920
};
8921
8922
static unsigned
8923
8
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_) {
8924
8
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8925
8
                                   ett_tetra_D_BL_ACK, D_BL_ACK_sequence);
8926
8927
8
  return offset;
8928
8
}
8929
8930
8931
static const per_sequence_t D_BL_ADATA_FCS_sequence[] = {
8932
  { &hf_tetra_nr            , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
8933
  { &hf_tetra_ns            , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
8934
  { &hf_tetra_tl_sdu_01     , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_D_MLE_PDU },
8935
  { &hf_tetra_fcs           , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_OCTET_STRING_SIZE_4 },
8936
  { NULL, 0, 0, NULL }
8937
};
8938
8939
static unsigned
8940
1
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_) {
8941
1
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8942
1
                                   ett_tetra_D_BL_ADATA_FCS, D_BL_ADATA_FCS_sequence);
8943
8944
1
  return offset;
8945
1
}
8946
8947
8948
static const per_sequence_t D_BL_DATA_FCS_sequence[] = {
8949
  { &hf_tetra_ns            , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
8950
  { &hf_tetra_tl_sdu_01     , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_D_MLE_PDU },
8951
  { &hf_tetra_fcs           , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_OCTET_STRING_SIZE_4 },
8952
  { NULL, 0, 0, NULL }
8953
};
8954
8955
static unsigned
8956
3
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_) {
8957
3
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8958
3
                                   ett_tetra_D_BL_DATA_FCS, D_BL_DATA_FCS_sequence);
8959
8960
3
  return offset;
8961
3
}
8962
8963
8964
static const per_sequence_t D_MLE_PDU_FCS_sequence[] = {
8965
  { &hf_tetra_d_mle_pdu     , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_D_MLE_PDU },
8966
  { &hf_tetra_fcs           , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_OCTET_STRING_SIZE_4 },
8967
  { NULL, 0, 0, NULL }
8968
};
8969
8970
static unsigned
8971
7
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_) {
8972
7
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8973
7
                                   ett_tetra_D_MLE_PDU_FCS, D_MLE_PDU_FCS_sequence);
8974
8975
7
  return offset;
8976
7
}
8977
8978
8979
static const per_sequence_t D_BL_ACK_FCS_sequence[] = {
8980
  { &hf_tetra_nr            , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
8981
  { &hf_tetra_tl_sdu_01     , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_D_MLE_PDU },
8982
  { &hf_tetra_fcs           , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_OCTET_STRING_SIZE_4 },
8983
  { NULL, 0, 0, NULL }
8984
};
8985
8986
static unsigned
8987
10
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_) {
8988
10
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
8989
10
                                   ett_tetra_D_BL_ACK_FCS, D_BL_ACK_FCS_sequence);
8990
8991
10
  return offset;
8992
10
}
8993
8994
8995
static const value_string tetra_D_LLC_PDU_vals[] = {
8996
  {   0, "bl-adata" },
8997
  {   1, "bl-data" },
8998
  {   2, "bl-udata" },
8999
  {   3, "bl-ack" },
9000
  {   4, "bl-adata-fcs" },
9001
  {   5, "bl-data-fcs" },
9002
  {   6, "bl-udata-fcs" },
9003
  {   7, "bl-ack-fcs" },
9004
  {   8, "al-setup" },
9005
  {   9, "al-data" },
9006
  {  10, "al-udata" },
9007
  {  11, "al-ack" },
9008
  {  12, "al-reconnect" },
9009
  {  13, "reserve1" },
9010
  {  14, "reserve2" },
9011
  {  15, "al-disc" },
9012
  { 0, NULL }
9013
};
9014
9015
static const per_choice_t D_LLC_PDU_choice[] = {
9016
  {   0, &hf_tetra_bl_adata_01   , ASN1_NO_EXTENSIONS     , dissect_tetra_D_BL_ADATA },
9017
  {   1, &hf_tetra_bl_data_01    , ASN1_NO_EXTENSIONS     , dissect_tetra_D_BL_DATA },
9018
  {   2, &hf_tetra_bl_udata_01   , ASN1_NO_EXTENSIONS     , dissect_tetra_D_MLE_PDU },
9019
  {   3, &hf_tetra_bl_ack_01     , ASN1_NO_EXTENSIONS     , dissect_tetra_D_BL_ACK },
9020
  {   4, &hf_tetra_bl_adata_fcs_01, ASN1_NO_EXTENSIONS     , dissect_tetra_D_BL_ADATA_FCS },
9021
  {   5, &hf_tetra_bl_data_fcs_01, ASN1_NO_EXTENSIONS     , dissect_tetra_D_BL_DATA_FCS },
9022
  {   6, &hf_tetra_bl_udata_fcs_01, ASN1_NO_EXTENSIONS     , dissect_tetra_D_MLE_PDU_FCS },
9023
  {   7, &hf_tetra_bl_ack_fcs_01 , ASN1_NO_EXTENSIONS     , dissect_tetra_D_BL_ACK_FCS },
9024
  {   8, &hf_tetra_al_setup      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
9025
  {   9, &hf_tetra_al_data       , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
9026
  {  10, &hf_tetra_al_udata      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
9027
  {  11, &hf_tetra_al_ack        , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
9028
  {  12, &hf_tetra_al_reconnect  , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
9029
  {  13, &hf_tetra_reserve1      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
9030
  {  14, &hf_tetra_reserve2      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
9031
  {  15, &hf_tetra_al_disc       , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
9032
  { 0, NULL, 0, NULL }
9033
};
9034
9035
static unsigned
9036
60
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_) {
9037
60
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
9038
60
                                 ett_tetra_D_LLC_PDU, D_LLC_PDU_choice,
9039
60
                                 NULL);
9040
9041
60
  return offset;
9042
60
}
9043
9044
9045
static const per_sequence_t OTHER_DATA_sequence[] = {
9046
  { &hf_tetra_power_control , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_power_control },
9047
  { &hf_tetra_slot_granting_02, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_slot_granting_02 },
9048
  { &hf_tetra_channel_allocation_02, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_channel_allocation_02 },
9049
  { &hf_tetra_tm_sdu_02     , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_D_LLC_PDU },
9050
  { NULL, 0, 0, NULL }
9051
};
9052
9053
static unsigned
9054
61
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_) {
9055
61
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
9056
61
                                   ett_tetra_OTHER_DATA, OTHER_DATA_sequence);
9057
9058
61
  return offset;
9059
61
}
9060
9061
9062
static const per_sequence_t SSI_NEED_sequence[] = {
9063
  { &hf_tetra_ssi           , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16777215 },
9064
  { &hf_tetra_other         , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_OTHER_DATA },
9065
  { NULL, 0, 0, NULL }
9066
};
9067
9068
static unsigned
9069
2
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_) {
9070
2
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
9071
2
                                   ett_tetra_SSI_NEED, SSI_NEED_sequence);
9072
9073
2
  return offset;
9074
2
}
9075
9076
9077
static const per_sequence_t EVENT_NEED_sequence[] = {
9078
  { &hf_tetra_eventlabel    , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1023 },
9079
  { &hf_tetra_other         , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_OTHER_DATA },
9080
  { NULL, 0, 0, NULL }
9081
};
9082
9083
static unsigned
9084
11
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_) {
9085
11
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
9086
11
                                   ett_tetra_EVENT_NEED, EVENT_NEED_sequence);
9087
9088
11
  return offset;
9089
11
}
9090
9091
9092
static const per_sequence_t USSI_NEED_sequence[] = {
9093
  { &hf_tetra_ussi          , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16777215 },
9094
  { &hf_tetra_other         , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_OTHER_DATA },
9095
  { NULL, 0, 0, NULL }
9096
};
9097
9098
static unsigned
9099
23
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_) {
9100
23
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
9101
23
                                   ett_tetra_USSI_NEED, USSI_NEED_sequence);
9102
9103
23
  return offset;
9104
23
}
9105
9106
9107
static const per_sequence_t SMI_NEED_sequence[] = {
9108
  { &hf_tetra_smi           , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16777215 },
9109
  { &hf_tetra_other         , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_OTHER_DATA },
9110
  { NULL, 0, 0, NULL }
9111
};
9112
9113
static unsigned
9114
4
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_) {
9115
4
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
9116
4
                                   ett_tetra_SMI_NEED, SMI_NEED_sequence);
9117
9118
4
  return offset;
9119
4
}
9120
9121
9122
static const per_sequence_t SSI_EVENT_NEED_sequence[] = {
9123
  { &hf_tetra_ssi           , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16777215 },
9124
  { &hf_tetra_ventlabel     , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1023 },
9125
  { &hf_tetra_other         , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_OTHER_DATA },
9126
  { NULL, 0, 0, NULL }
9127
};
9128
9129
static unsigned
9130
7
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_) {
9131
7
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
9132
7
                                   ett_tetra_SSI_EVENT_NEED, SSI_EVENT_NEED_sequence);
9133
9134
7
  return offset;
9135
7
}
9136
9137
9138
static const per_sequence_t SSI_USAGE_NEED_sequence[] = {
9139
  { &hf_tetra_ssi           , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_16777215 },
9140
  { &hf_tetra_usage_maker   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_63 },
9141
  { &hf_tetra_other         , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_OTHER_DATA },
9142
  { NULL, 0, 0, NULL }
9143
};
9144
9145
static unsigned
9146
10
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_) {
9147
10
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
9148
10
                                   ett_tetra_SSI_USAGE_NEED, SSI_USAGE_NEED_sequence);
9149
9150
10
  return offset;
9151
10
}
9152
9153
9154
9155
static unsigned
9156
7
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_) {
9157
7
  offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
9158
7
                                     34, 34, false, NULL, 0, NULL, NULL);
9159
9160
7
  return offset;
9161
7
}
9162
9163
9164
static const per_sequence_t SMI_EVENT_NEED_sequence[] = {
9165
  { &hf_tetra_smi_eventlabel, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_BIT_STRING_SIZE_34 },
9166
  { &hf_tetra_other         , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_OTHER_DATA },
9167
  { NULL, 0, 0, NULL }
9168
};
9169
9170
static unsigned
9171
7
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_) {
9172
7
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
9173
7
                                   ett_tetra_SMI_EVENT_NEED, SMI_EVENT_NEED_sequence);
9174
9175
7
  return offset;
9176
7
}
9177
9178
9179
static const value_string tetra_AddressMacResource_vals[] = {
9180
  {   0, "null-pdu" },
9181
  {   1, "ssi" },
9182
  {   2, "eventLabel" },
9183
  {   3, "ussi" },
9184
  {   4, "smi" },
9185
  {   5, "ssi-eventLabel" },
9186
  {   6, "ssi-usage-maker" },
9187
  {   7, "smi-eventLabel" },
9188
  { 0, NULL }
9189
};
9190
9191
static const per_choice_t AddressMacResource_choice[] = {
9192
  {   0, &hf_tetra_null_pdu      , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
9193
  {   1, &hf_tetra_ssi_need      , ASN1_NO_EXTENSIONS     , dissect_tetra_SSI_NEED },
9194
  {   2, &hf_tetra_eventLabel_01 , ASN1_NO_EXTENSIONS     , dissect_tetra_EVENT_NEED },
9195
  {   3, &hf_tetra_ussi_01       , ASN1_NO_EXTENSIONS     , dissect_tetra_USSI_NEED },
9196
  {   4, &hf_tetra_smi_01        , ASN1_NO_EXTENSIONS     , dissect_tetra_SMI_NEED },
9197
  {   5, &hf_tetra_ssi_eventLabel, ASN1_NO_EXTENSIONS     , dissect_tetra_SSI_EVENT_NEED },
9198
  {   6, &hf_tetra_ssi_usage_maker, ASN1_NO_EXTENSIONS     , dissect_tetra_SSI_USAGE_NEED },
9199
  {   7, &hf_tetra_smi_eventLabel, ASN1_NO_EXTENSIONS     , dissect_tetra_SMI_EVENT_NEED },
9200
  { 0, NULL, 0, NULL }
9201
};
9202
9203
static unsigned
9204
68
dissect_tetra_AddressMacResource(tvbuff_t *tvb _U_, uint32_t offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
9205
68
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
9206
68
                                 ett_tetra_AddressMacResource, AddressMacResource_choice,
9207
68
                                 NULL);
9208
9209
68
  return offset;
9210
68
}
9211
9212
9213
static const per_sequence_t MAC_RESOURCE_sequence[] = {
9214
  { &hf_tetra_pdu_type      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
9215
  { &hf_tetra_fill_bit_indication, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Fill_Bit_Indication },
9216
  { &hf_tetra_position_of_grant, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_Position_Of_Grant },
9217
  { &hf_tetra_encryption_mode, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
9218
  { &hf_tetra_access_ack    , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_access_ack },
9219
  { &hf_tetra_lengthIndication_03, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_LengthIndicationMacResource },
9220
  { &hf_tetra_address_01    , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_AddressMacResource },
9221
  { NULL, 0, 0, NULL }
9222
};
9223
9224
static unsigned
9225
68
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_) {
9226
68
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
9227
68
                                   ett_tetra_MAC_RESOURCE, MAC_RESOURCE_sequence);
9228
9229
68
  return offset;
9230
68
}
9231
9232
9233
9234
static unsigned
9235
2
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_) {
9236
2
  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
9237
2
                                                            0U, 33554431U, NULL, false);
9238
9239
2
  return offset;
9240
2
}
9241
9242
9243
static const value_string tetra_T_optional_field_vals[] = {
9244
  {   0, "none" },
9245
  {   1, "class-bitmap" },
9246
  {   2, "gssi" },
9247
  {   3, "reserved" },
9248
  { 0, NULL }
9249
};
9250
9251
static const per_choice_t T_optional_field_choice[] = {
9252
  {   0, &hf_tetra_none          , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
9253
  {   1, &hf_tetra_class_bitmap  , ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_65535 },
9254
  {   2, &hf_tetra_gssi          , ASN1_NO_EXTENSIONS     , dissect_tetra_INTEGER_0_33554431 },
9255
  {   3, &hf_tetra_reserved_03   , ASN1_NO_EXTENSIONS     , dissect_tetra_NULL },
9256
  { 0, NULL, 0, NULL }
9257
};
9258
9259
static unsigned
9260
10
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_) {
9261
10
  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
9262
10
                                 ett_tetra_T_optional_field, T_optional_field_choice,
9263
10
                                 NULL);
9264
9265
10
  return offset;
9266
10
}
9267
9268
9269
static const per_sequence_t MAC_ACCESS_DEFINE_sequence[] = {
9270
  { &hf_tetra_pdu_type      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
9271
  { &hf_tetra_broadcast_type, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
9272
  { &hf_tetra_broadcast_channel, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
9273
  { &hf_tetra_access_code   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_3 },
9274
  { &hf_tetra_imm_01        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_15 },
9275
  { &hf_tetra_wt_01         , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_15 },
9276
  { &hf_tetra_nu_01         , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_15 },
9277
  { &hf_tetra_frame_len_factor_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_1 },
9278
  { &hf_tetra_timeslot_pointer_01, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_15 },
9279
  { &hf_tetra_min_priority  , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
9280
  { &hf_tetra_optional_field, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_T_optional_field },
9281
  { &hf_tetra_filler_bits   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tetra_INTEGER_0_7 },
9282
  { NULL, 0, 0, NULL }
9283
};
9284
9285
static unsigned
9286
10
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_) {
9287
10
  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
9288
10
                                   ett_tetra_MAC_ACCESS_DEFINE, MAC_ACCESS_DEFINE_sequence);
9289
9290
10
  return offset;
9291
10
}
9292
9293
/*--- PDUs ---*/
9294
9295
4
static int dissect_AACH_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
9296
4
  unsigned offset = 0;
9297
4
  asn1_ctx_t asn1_ctx;
9298
4
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, false, pinfo);
9299
4
  offset = dissect_tetra_AACH(tvb, offset, &asn1_ctx, tree, hf_tetra_AACH_PDU);
9300
4
  offset += 7; offset >>= 3;
9301
4
  return offset;
9302
4
}
9303
9
static int dissect_BSCH_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
9304
9
  unsigned offset = 0;
9305
9
  asn1_ctx_t asn1_ctx;
9306
9
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, false, pinfo);
9307
9
  offset = dissect_tetra_BSCH(tvb, offset, &asn1_ctx, tree, hf_tetra_BSCH_PDU);
9308
9
  offset += 7; offset >>= 3;
9309
9
  return offset;
9310
9
}
9311
30
static int dissect_BNCH_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
9312
30
  unsigned offset = 0;
9313
30
  asn1_ctx_t asn1_ctx;
9314
30
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, false, pinfo);
9315
30
  offset = dissect_tetra_BNCH(tvb, offset, &asn1_ctx, tree, hf_tetra_BNCH_PDU);
9316
30
  offset += 7; offset >>= 3;
9317
30
  return offset;
9318
30
}
9319
51
static int dissect_MAC_ACCESS_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
9320
51
  unsigned offset = 0;
9321
51
  asn1_ctx_t asn1_ctx;
9322
51
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, false, pinfo);
9323
51
  offset = dissect_tetra_MAC_ACCESS(tvb, offset, &asn1_ctx, tree, hf_tetra_MAC_ACCESS_PDU);
9324
51
  offset += 7; offset >>= 3;
9325
51
  return offset;
9326
51
}
9327
13
static int dissect_MAC_DATA_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
9328
13
  unsigned offset = 0;
9329
13
  asn1_ctx_t asn1_ctx;
9330
13
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, false, pinfo);
9331
13
  offset = dissect_tetra_MAC_DATA(tvb, offset, &asn1_ctx, tree, hf_tetra_MAC_DATA_PDU);
9332
13
  offset += 7; offset >>= 3;
9333
13
  return offset;
9334
13
}
9335
2
static int dissect_MAC_FRAG_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
9336
2
  unsigned offset = 0;
9337
2
  asn1_ctx_t asn1_ctx;
9338
2
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, false, pinfo);
9339
2
  offset = dissect_tetra_MAC_FRAG(tvb, offset, &asn1_ctx, tree, hf_tetra_MAC_FRAG_PDU);
9340
2
  offset += 7; offset >>= 3;
9341
2
  return offset;
9342
2
}
9343
10
static int dissect_MAC_FRAG120_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
9344
10
  unsigned offset = 0;
9345
10
  asn1_ctx_t asn1_ctx;
9346
10
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, false, pinfo);
9347
10
  offset = dissect_tetra_MAC_FRAG120(tvb, offset, &asn1_ctx, tree, hf_tetra_MAC_FRAG120_PDU);
9348
10
  offset += 7; offset >>= 3;
9349
10
  return offset;
9350
10
}
9351
3
static int dissect_MAC_END_UPLINK_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
9352
3
  unsigned offset = 0;
9353
3
  asn1_ctx_t asn1_ctx;
9354
3
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, false, pinfo);
9355
3
  offset = dissect_tetra_MAC_END_UPLINK(tvb, offset, &asn1_ctx, tree, hf_tetra_MAC_END_UPLINK_PDU);
9356
3
  offset += 7; offset >>= 3;
9357
3
  return offset;
9358
3
}
9359
3
static int dissect_MAC_END_UP114_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
9360
3
  unsigned offset = 0;
9361
3
  asn1_ctx_t asn1_ctx;
9362
3
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, false, pinfo);
9363
3
  offset = dissect_tetra_MAC_END_UP114(tvb, offset, &asn1_ctx, tree, hf_tetra_MAC_END_UP114_PDU);
9364
3
  offset += 7; offset >>= 3;
9365
3
  return offset;
9366
3
}
9367
14
static int dissect_MAC_END_HU_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
9368
14
  unsigned offset = 0;
9369
14
  asn1_ctx_t asn1_ctx;
9370
14
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, false, pinfo);
9371
14
  offset = dissect_tetra_MAC_END_HU(tvb, offset, &asn1_ctx, tree, hf_tetra_MAC_END_HU_PDU);
9372
14
  offset += 7; offset >>= 3;
9373
14
  return offset;
9374
14
}
9375
2
static int dissect_MAC_END_DOWNLINK_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
9376
2
  unsigned offset = 0;
9377
2
  asn1_ctx_t asn1_ctx;
9378
2
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, false, pinfo);
9379
2
  offset = dissect_tetra_MAC_END_DOWNLINK(tvb, offset, &asn1_ctx, tree, hf_tetra_MAC_END_DOWNLINK_PDU);
9380
2
  offset += 7; offset >>= 3;
9381
2
  return offset;
9382
2
}
9383
6
static int dissect_MAC_END_DOWN111_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
9384
6
  unsigned offset = 0;
9385
6
  asn1_ctx_t asn1_ctx;
9386
6
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, false, pinfo);
9387
6
  offset = dissect_tetra_MAC_END_DOWN111(tvb, offset, &asn1_ctx, tree, hf_tetra_MAC_END_DOWN111_PDU);
9388
6
  offset += 7; offset >>= 3;
9389
6
  return offset;
9390
6
}
9391
68
static int dissect_MAC_RESOURCE_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
9392
68
  unsigned offset = 0;
9393
68
  asn1_ctx_t asn1_ctx;
9394
68
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, false, pinfo);
9395
68
  offset = dissect_tetra_MAC_RESOURCE(tvb, offset, &asn1_ctx, tree, hf_tetra_MAC_RESOURCE_PDU);
9396
68
  offset += 7; offset >>= 3;
9397
68
  return offset;
9398
68
}
9399
10
static int dissect_MAC_ACCESS_DEFINE_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
9400
10
  unsigned offset = 0;
9401
10
  asn1_ctx_t asn1_ctx;
9402
10
  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, false, pinfo);
9403
10
  offset = dissect_tetra_MAC_ACCESS_DEFINE(tvb, offset, &asn1_ctx, tree, hf_tetra_MAC_ACCESS_DEFINE_PDU);
9404
10
  offset += 7; offset >>= 3;
9405
10
  return offset;
9406
10
}
9407
9408
9409
static const value_string channeltypenames[] = {
9410
  { 0, "Reserved" },
9411
  { 1, "AACH" },
9412
  { 2, "SCH/F" },
9413
  { 3, "SCH/HD" },
9414
  { 4, "Unknown" },
9415
  { 5, "BSCH" },
9416
  { 6, "BNCH" },
9417
  { 7, "TCH/F" },
9418
  { 8, "TCH/H" },
9419
  { 9, "TCH4.8"},
9420
  { 10, "TCH7.2"},
9421
  { 11, "STCH"},
9422
  { 0, NULL }
9423
};
9424
9425
static const value_string recvchanneltypenames[] = {
9426
  { 0, "Reserved" },
9427
  { 1, "AACH" },
9428
  { 2, "SCH/F" },
9429
  { 3, "SCH/HD" },
9430
  { 4, "Unknown" },
9431
  { 5, "BSCH" },
9432
  { 6, "BNCH" },
9433
  { 7, "TCH/F" },
9434
  { 8, "TCH/H" },
9435
  { 9, "TCH4.8"},
9436
  { 10, "TCH7.2"},
9437
  { 11, "STCH"},
9438
  { 15, "SCH/HU"},
9439
  { 0, NULL }
9440
};
9441
9442
/* Get the length of received pdu */
9443
static int get_rx_pdu_length(uint32_t channel_type)
9444
233
{
9445
233
  int len = 0;
9446
9447
233
  switch(channel_type) {
9448
3
  case TETRA_CHAN_AACH:
9449
3
    len = 14;
9450
3
    break;
9451
19
  case TETRA_CHAN_SCH_F:
9452
19
    len = 268;
9453
19
    break;
9454
54
  case TETRA_CHAN_SCH_D:
9455
54
    len = 124; ;
9456
54
    break;
9457
8
  case TETRA_CHAN_BSCH:
9458
8
    len = 60;
9459
8
    break;
9460
30
  case TETRA_CHAN_BNCH:
9461
30
    len = 124;
9462
30
    break;
9463
11
  case TETRA_CHAN_TCH_F:
9464
11
    len = 274;
9465
11
    break;
9466
3
  case TETRA_CHAN_TCH_H:
9467
3
    len = 137;
9468
3
    break;
9469
4
  case TETRA_CHAN_TCH_2_4:
9470
4
    len = 144;
9471
4
    break;
9472
2
  case TETRA_CHAN_TCH_4_8:
9473
2
    len = 288;
9474
2
    break;
9475
10
  case TETRA_CHAN_STCH:
9476
10
    len = 124;
9477
10
    break;
9478
68
  case TETRA_CHAN_SCH_HU:
9479
68
    len = 92;
9480
68
    break;
9481
21
  default:
9482
21
    len = 0;
9483
21
    break;
9484
233
  }
9485
9486
233
  return len;
9487
233
}
9488
9489
/* Get the length of transmitted pdu */
9490
static int get_tx_pdu_length(uint32_t channel_type)
9491
57
{
9492
57
  int len = 0;
9493
9494
57
  switch(channel_type) {
9495
1
  case TETRA_CHAN_AACH:
9496
1
    len = 14;
9497
1
    break;
9498
15
  case TETRA_CHAN_SCH_F:
9499
15
    len = 268;
9500
15
    break;
9501
7
  case TETRA_CHAN_SCH_D:
9502
7
    len = 124;
9503
7
    break;
9504
1
  case TETRA_CHAN_BSCH:
9505
1
    len = 60;
9506
1
    break;
9507
0
  case TETRA_CHAN_BNCH:
9508
0
    len = 124;
9509
0
    break;
9510
0
  case TETRA_CHAN_TCH_F:
9511
0
    len = 274;
9512
0
    break;
9513
0
  case TETRA_CHAN_TCH_H:
9514
0
    len = 137;
9515
0
    break;
9516
3
  case TETRA_CHAN_TCH_2_4:
9517
3
    len = 144;
9518
3
    break;
9519
3
  case TETRA_CHAN_TCH_4_8:
9520
3
    len = 288;
9521
3
    break;
9522
15
  case TETRA_CHAN_STCH:
9523
15
    len = 124;
9524
15
    break;
9525
57
  }
9526
9527
57
  return len;
9528
57
}
9529
9530
void tetra_dissect_pdu(int channel_type, int dir, tvbuff_t *pdu, proto_tree *tree, packet_info *pinfo)
9531
291
{
9532
291
  proto_item *tetra_sub_item;
9533
291
  proto_tree *tetra_sub_tree;
9534
291
  uint8_t p;
9535
9536
291
  tetra_sub_item = proto_tree_add_item(tree, hf_tetra_pdu,
9537
291
               pdu, 0, tvb_captured_length(pdu), ENC_NA);
9538
9539
291
  tetra_sub_tree = proto_item_add_subtree(tetra_sub_item, ett_tetra);
9540
9541
291
  switch(channel_type) {
9542
4
  case TETRA_CHAN_AACH:
9543
4
    dissect_AACH_PDU(pdu, pinfo, tetra_sub_tree, NULL);
9544
4
    break;
9545
41
  case TETRA_CHAN_SCH_F:
9546
41
    p = tvb_get_uint8(pdu, 0);
9547
41
    switch(p >> 6) {
9548
26
    case 0:
9549
26
      if (dir == TETRA_DOWNLINK)
9550
13
        dissect_MAC_RESOURCE_PDU(pdu, pinfo, tetra_sub_tree, NULL);
9551
13
      else
9552
13
        dissect_MAC_DATA_PDU(pdu, pinfo, tetra_sub_tree, NULL);
9553
26
      break;
9554
7
    case 1: /* MAC-FRAG or MAC-END */
9555
7
      if((p >> 5) == 3) {
9556
5
        if (dir == TETRA_DOWNLINK)
9557
2
          dissect_MAC_END_DOWNLINK_PDU(pdu, pinfo, tetra_sub_tree, NULL);
9558
3
        else
9559
3
          dissect_MAC_END_UPLINK_PDU(pdu, pinfo, tetra_sub_tree, NULL);
9560
9561
5
      } else
9562
2
        dissect_MAC_FRAG_PDU(pdu, pinfo, tetra_sub_tree, NULL);
9563
7
      break;
9564
3
    case 2:
9565
3
      dissect_MAC_ACCESS_DEFINE_PDU(pdu, pinfo, tetra_sub_tree, NULL);
9566
3
      break;
9567
41
    }
9568
34
    break;
9569
61
  case TETRA_CHAN_SCH_D:
9570
61
    p = tvb_get_uint8(pdu, 0);
9571
61
    switch(p >> 6) {
9572
42
    case 0:
9573
42
      dissect_MAC_RESOURCE_PDU(pdu, pinfo, tetra_sub_tree, NULL);
9574
42
      break;
9575
10
    case 1: /* MAC-FRAG or MAC-END */
9576
10
      if((p >> 5) == 3)
9577
4
        dissect_MAC_END_DOWN111_PDU(pdu, pinfo, tetra_sub_tree, NULL);
9578
6
      else
9579
6
        dissect_MAC_FRAG120_PDU(pdu, pinfo, tetra_sub_tree, NULL);
9580
10
    break;
9581
4
    case 2:
9582
4
      dissect_MAC_ACCESS_DEFINE_PDU(pdu, pinfo, tetra_sub_tree, NULL);
9583
4
      break;
9584
61
    }
9585
52
    break;
9586
66
  case TETRA_CHAN_SCH_HU:
9587
66
    p = tvb_get_uint8(pdu, 0);
9588
66
    switch(p >> 7) {
9589
51
    case 0: /* MAC-ACCESS */
9590
51
      dissect_MAC_ACCESS_PDU(pdu, pinfo, tetra_sub_tree, NULL);
9591
51
      break;
9592
14
    case 1: /* MAC-END-HU */
9593
14
      dissect_MAC_END_HU_PDU(pdu, pinfo, tetra_sub_tree, NULL);
9594
14
      break;
9595
66
    }
9596
56
    break;
9597
56
  case TETRA_CHAN_BSCH:
9598
9
    col_append_sep_str(pinfo->cinfo, COL_INFO, NULL, "BSCH");
9599
9
    dissect_BSCH_PDU(pdu, pinfo, tetra_sub_tree, NULL);
9600
9
    break;
9601
30
  case TETRA_CHAN_BNCH:
9602
30
    col_append_sep_str(pinfo->cinfo, COL_INFO, NULL, "BNCH");
9603
30
    dissect_BNCH_PDU(pdu, pinfo, tetra_sub_tree, NULL);
9604
30
    break;
9605
28
  case TETRA_CHAN_STCH:
9606
28
    p = tvb_get_uint8(pdu, 0);
9607
28
    switch(p >> 6) {
9608
13
    case 0:
9609
13
      dissect_MAC_RESOURCE_PDU(pdu, pinfo, tetra_sub_tree, NULL);
9610
13
      break;
9611
9
    case 1: /* MAC-FRAG or MAC-END */
9612
9
      if((p >> 5) == 3) {
9613
5
        if (dir == TETRA_DOWNLINK)
9614
2
          dissect_MAC_END_DOWN111_PDU(pdu, pinfo, tetra_sub_tree, NULL);
9615
3
        else
9616
3
          dissect_MAC_END_UP114_PDU(pdu, pinfo, tetra_sub_tree, NULL);
9617
5
      } else
9618
4
        dissect_MAC_FRAG120_PDU(pdu, pinfo, tetra_sub_tree, NULL);
9619
9
      break;
9620
3
    case 2:
9621
3
      dissect_MAC_ACCESS_DEFINE_PDU(pdu, pinfo, tetra_sub_tree, NULL);
9622
3
      break;
9623
28
    }
9624
21
    break;
9625
21
  case TETRA_CHAN_TCH_F:
9626
9
    col_append_sep_str(pinfo->cinfo, COL_INFO, NULL, "Voice");
9627
9
    break;
9628
291
  }
9629
291
}
9630
9631
static void dissect_tetra_UNITDATA_IND(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tetra_tree, int offset)
9632
94
{
9633
94
  uint32_t rxreg = 0;
9634
94
  uint32_t channels = 0, i;
9635
94
  uint32_t channel_type;
9636
94
  int pdu_offset = 0;
9637
94
  proto_item *tetra_sub_item;
9638
94
  proto_tree *tetra_header_tree = NULL;
9639
94
  tvbuff_t *payload_tvb;
9640
9641
  /* Length */
9642
94
  rxreg = tvb_get_letohl(tvb, offset);
9643
94
  proto_tree_add_uint(tetra_tree, hf_tetra_len0, tvb, offset, 4, rxreg);
9644
9645
  /* RvSteR */
9646
94
  offset += 4;
9647
94
  rxreg = tvb_get_letohl(tvb, offset);
9648
94
  proto_tree_add_uint(tetra_tree, hf_tetra_rvstr, tvb, offset, 4, rxreg);
9649
9650
  /* Logical channels */
9651
94
  channels = rxreg & 0x3;
9652
94
  tetra_sub_item = proto_tree_add_uint( tetra_tree, hf_tetra_channels, tvb, offset, 4, channels );
9653
94
  tetra_header_tree = proto_item_add_subtree(tetra_sub_item, ett_tetra);
9654
94
  if (channels > 3) {
9655
0
    expert_add_info(pinfo, tetra_sub_item, &ei_tetra_channels_incorrect);
9656
0
    channels = 3;
9657
0
  }
9658
9659
94
  pdu_offset = offset + 4;
9660
327
  for(i = 0; i < channels; i++) {
9661
233
    int byte_len, bits_len, remaining_bits;
9662
233
    int hf_channel[3];
9663
9664
233
    hf_channel[0] = hf_tetra_rxchannel1;
9665
233
    hf_channel[1] = hf_tetra_rxchannel2;
9666
233
    hf_channel[2] = hf_tetra_rxchannel3;
9667
9668
    /* Channel type */
9669
233
    channel_type = (rxreg >> ((i + 1) * 4) ) & 0xf;
9670
233
    proto_tree_add_uint( tetra_header_tree, hf_channel[i], tvb, offset, 4, channel_type);
9671
9672
    /* CRC */
9673
233
    proto_tree_add_boolean( tetra_header_tree, hf_tetra_crc, tvb, offset, 4, !(rxreg >> (i + 2) & 0x01));
9674
9675
    /* PDU */
9676
233
    bits_len = get_rx_pdu_length(channel_type);
9677
233
    byte_len = bits_len >> 3;
9678
233
    remaining_bits = bits_len % 8;
9679
233
    if ((remaining_bits)!=0)
9680
206
      byte_len++;
9681
9682
233
    payload_tvb = tvb_new_subset_length(tvb, pdu_offset, byte_len);
9683
233
    tetra_dissect_pdu(channel_type, TETRA_UPLINK, payload_tvb, tetra_header_tree, pinfo);
9684
9685
233
    if ((remaining_bits)!=0)
9686
169
      byte_len--;
9687
233
    pdu_offset += byte_len;
9688
233
  }
9689
94
}
9690
9691
static void dissect_tetra_UNITDATA_REQ(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tetra_tree, int offset)
9692
24
{
9693
24
  uint32_t txreg = 0;
9694
24
  uint32_t channels = 0, i;
9695
24
  uint32_t channel_type;
9696
24
  int pdu_offset = 0;
9697
24
  proto_item *tetra_sub_item = NULL;
9698
24
  proto_tree *tetra_header_tree = NULL;
9699
24
  tvbuff_t *payload_tvb;
9700
9701
  /* TxR */
9702
24
  txreg = tvb_get_letohl(tvb, offset);
9703
24
  proto_tree_add_uint(tetra_tree, hf_tetra_txreg, tvb, offset, 4, txreg);
9704
9705
  /* Logical channels */
9706
24
  channels = (txreg & 0x3) + 1;
9707
24
  tetra_sub_item = proto_tree_add_uint( tetra_tree, hf_tetra_channels, tvb, offset, 4, channels );
9708
24
  tetra_header_tree = proto_item_add_subtree(tetra_sub_item, ett_tetra);
9709
24
  txreg >>= 2;
9710
  /* Skip 0000B */
9711
24
  if(channels == 2)
9712
4
    txreg >>= 4;
9713
9714
24
  if (channels > 3) {
9715
9
    expert_add_info(pinfo, tetra_sub_item, &ei_tetra_channels_incorrect);
9716
9
    channels = 3;
9717
9
  }
9718
9719
24
  pdu_offset = offset + 4;
9720
81
  for(i = 0; i < channels; i++) {
9721
57
    int byte_len, bits_len, remaining_bits;
9722
57
    int hf_channel[3];
9723
9724
57
    hf_channel[0] = hf_tetra_channel1;
9725
57
    hf_channel[1] = hf_tetra_channel2;
9726
57
    hf_channel[2] = hf_tetra_channel3;
9727
9728
57
    channel_type = txreg & 0xf;
9729
57
    proto_tree_add_uint( tetra_header_tree, hf_channel[i], tvb, offset, 4, channel_type);
9730
57
    txreg >>= 4;
9731
    /* PDU */
9732
57
    bits_len = get_tx_pdu_length(channel_type);
9733
57
    byte_len = bits_len >> 3;
9734
57
    remaining_bits = bits_len % 8;
9735
57
    if ((remaining_bits)!=0)
9736
39
        byte_len++;
9737
9738
57
    payload_tvb = tvb_new_subset_length(tvb, pdu_offset, byte_len);
9739
57
    tetra_dissect_pdu(channel_type, TETRA_DOWNLINK, payload_tvb, tetra_header_tree, pinfo);
9740
57
    pdu_offset += byte_len;
9741
57
  }
9742
24
}
9743
9744
static int
9745
dissect_tetra(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
9746
120
{
9747
120
  proto_item *tetra_item = NULL;
9748
120
  proto_item *tetra_sub_item = NULL;
9749
120
  proto_tree *tetra_tree = NULL;
9750
120
  proto_tree *tetra_header_tree = NULL;
9751
120
  uint16_t type = 0;
9752
120
  uint8_t carriernumber = -1;
9753
9754
120
  col_set_str(pinfo->cinfo, COL_PROTOCOL, "TETRA");
9755
  /* Clear out stuff in the info column */
9756
120
  col_clear(pinfo->cinfo,COL_INFO);
9757
9758
  /*
9759
   * This is not a good way of dissecting packets.  The tvb length should
9760
   * be sanity checked so we aren't going past the actual size of the buffer.
9761
   */
9762
120
  type = tvb_get_uint8(tvb, 0);
9763
9764
120
  if(include_carrier_number) {
9765
120
    carriernumber = tvb_get_uint8(tvb, 1);
9766
120
  }
9767
9768
9769
120
  switch(type) {
9770
23
  case 1:
9771
23
    if(include_carrier_number)
9772
23
      col_add_fstr(pinfo->cinfo, COL_INFO, "Tetra-UNITDATA-REQ, Carrier: %d",
9773
23
          carriernumber);
9774
0
    else
9775
0
      col_set_str(pinfo->cinfo, COL_INFO, "Tetra-UNITDATA-REQ");
9776
23
    break;
9777
91
  case 2:
9778
91
    if(include_carrier_number)
9779
91
      col_add_fstr(pinfo->cinfo, COL_INFO, "Tetra-UNITDATA-IND, Carrier: %d",
9780
91
          carriernumber);
9781
0
    else
9782
0
      col_set_str(pinfo->cinfo, COL_INFO, "Tetra-UNITDATA-IND");
9783
91
    break;
9784
1
  case 3:
9785
1
    if(include_carrier_number)
9786
1
      col_add_fstr(pinfo->cinfo, COL_INFO, "MAC-Timer, Carrier: %d",
9787
1
          carriernumber);
9788
0
    else
9789
0
      col_set_str(pinfo->cinfo, COL_INFO, "MAC-Timer");
9790
1
    break;
9791
3
  case 127:
9792
3
    if(include_carrier_number)
9793
3
      col_add_fstr(pinfo->cinfo, COL_INFO, "Tetra-UNITDATA-IND Done, Carrier: %d",
9794
3
          carriernumber);
9795
0
    else
9796
0
      col_set_str(pinfo->cinfo, COL_INFO, "Tetra-UNITDATA-IND Done");
9797
3
    break;
9798
1
  case 128:
9799
1
    if(include_carrier_number)
9800
1
      col_add_fstr(pinfo->cinfo, COL_INFO, "Tetra-UNITDATA-REQ Done, Carrier: %d",
9801
1
          carriernumber);
9802
0
    else
9803
0
      col_set_str(pinfo->cinfo, COL_INFO, "Tetra-UNITDATA-REQ Done");
9804
1
    break;
9805
1
  default:
9806
1
    col_add_fstr(pinfo->cinfo, COL_INFO, "Unknown command: %d", type);
9807
1
    break;
9808
120
  }
9809
9810
120
  /* if (tree) */ { /* we are being asked for details */
9811
120
    uint32_t offset = 0;
9812
120
    uint32_t txtimer = 0;
9813
120
    uint32_t tslot = 0;
9814
9815
120
    tetra_item = proto_tree_add_item(tree, proto_tetra, tvb, 0, -1, ENC_NA);
9816
120
    tetra_tree = proto_item_add_subtree(tetra_item, ett_tetra);
9817
9818
120
    offset ++;
9819
9820
    /* Carrier number */
9821
120
    if(include_carrier_number) {
9822
120
      proto_tree_add_uint(tetra_tree, hf_tetra_carriernumber, tvb, offset, 1, carriernumber);
9823
120
      offset ++;
9824
120
    }
9825
9826
    /* Registers */
9827
120
    tetra_sub_item = proto_tree_add_item( tetra_tree, hf_tetra_header, tvb, offset, -1, ENC_NA );
9828
120
    tetra_header_tree = proto_item_add_subtree(tetra_sub_item, ett_tetra);
9829
9830
    /* Timer */
9831
120
    txtimer = tvb_get_letohl(tvb, offset);
9832
120
    tetra_sub_item = proto_tree_add_item(tetra_header_tree, hf_tetra_timer, tvb, offset, 4, ENC_LITTLE_ENDIAN);
9833
120
    tslot = ((txtimer & 0x7800) >> 11);
9834
120
    if(tslot==4)
9835
10
      tslot = 3;
9836
120
    if(tslot==8)
9837
3
      tslot = 4;
9838
120
    proto_item_append_text(tetra_sub_item, " (Multiple frame: %d, Frame: %d, Slot: %d)",
9839
120
                          txtimer & 0x3F, (txtimer & 0x7c0) >> 6,
9840
120
                          tslot);
9841
9842
120
    offset += 4;
9843
9844
120
    switch(type) {
9845
23
    case 1: /* tetra-UNITDATA-REQ */
9846
24
    case 128: /* tetra-UNITDATA-REQ Done */
9847
24
      dissect_tetra_UNITDATA_REQ(tvb, pinfo, tetra_header_tree, offset);
9848
24
      break;
9849
91
    case 2: /* tetra-UNITDATA-IND */
9850
94
    case 127: /* tetra-UNITDATA-IND Done */
9851
94
      dissect_tetra_UNITDATA_IND(tvb, pinfo, tetra_header_tree, offset);
9852
94
      break;
9853
1
    case 3: /* MAC-Timer */
9854
1
      break;
9855
1
    default:
9856
1
      break;
9857
120
    }
9858
120
  }
9859
66
  return tvb_captured_length(tvb);
9860
120
}
9861
9862
void proto_reg_handoff_tetra(void)
9863
15
{
9864
15
  dissector_add_uint_with_preference("udp.port", TETRA_UDP_PORT, tetra_handle);
9865
15
}
9866
9867
9868
void proto_register_tetra (void)
9869
15
{
9870
15
  module_t *tetra_module;
9871
15
  expert_module_t* expert_tetra;
9872
9873
  /*
9874
   * A header field is something you can search/filter on.
9875
   *
9876
   * We create a structure to register our fields. It consists of an
9877
   * array of hf_register_info structures, each of which are of the format
9878
   * {&(field id), {name, abbrev, type, display, strings, bitmask, blurb, HFILL}}.
9879
   */
9880
15
  static hf_register_info hf[] = {
9881
15
    { &hf_tetra_header,
9882
15
    { "Registers", "tetra.header", FT_NONE, BASE_NONE, NULL, 0x0,
9883
15
     "TETRA Registers", HFILL }},
9884
15
    { &hf_tetra_channels,
9885
15
    { "Logical Channels", "tetra.channels", FT_UINT8, BASE_DEC, NULL, 0x0,
9886
15
    "The amount of logical channels", HFILL }},
9887
15
    { &hf_tetra_channel1,
9888
15
    { "Channel 1", "tetra.txchannel1", FT_UINT8, BASE_DEC, VALS(channeltypenames), 0x0,
9889
15
    "Logical channels type", HFILL }},
9890
15
    { &hf_tetra_channel2,
9891
15
    { "Channel 2", "tetra.txchannel2", FT_UINT8, BASE_DEC, VALS(channeltypenames), 0x0,
9892
15
    "Logical channels type", HFILL }},
9893
15
    { &hf_tetra_channel3,
9894
15
    { "Channel 3", "tetra.txchannel3", FT_UINT8, BASE_DEC, VALS(channeltypenames), 0x0,
9895
15
    "Logical channels type", HFILL }},
9896
15
    { &hf_tetra_txreg,
9897
15
    { "TxR", "tetra.txreg", FT_UINT32, BASE_HEX, NULL, 0x0,
9898
15
     "TX Register", HFILL }},
9899
15
    { &hf_tetra_rvstr,
9900
15
    { "RvSteR", "tetra.rvster", FT_UINT32, BASE_HEX, NULL, 0x0,
9901
15
     "Receive Status Register", HFILL }},
9902
15
    { &hf_tetra_carriernumber,
9903
15
    { "Carrier Number", "tetra.carrier", FT_UINT8, BASE_DEC, NULL, 0x0,
9904
15
     NULL, HFILL }},
9905
15
    { &hf_tetra_rxchannel1,
9906
15
    { "Channel 1", "tetra.rxchannel1", FT_UINT8, BASE_DEC, VALS(recvchanneltypenames), 0x0,
9907
15
    "Logical channels type", HFILL }},
9908
15
    { &hf_tetra_rxchannel2,
9909
15
    { "Channel 2", "tetra.rxchannel2", FT_UINT8, BASE_DEC, VALS(recvchanneltypenames), 0x0,
9910
15
    "Logical channels type", HFILL }},
9911
15
    { &hf_tetra_rxchannel3,
9912
15
    { "Channel 3", "tetra.rxchannel3", FT_UINT8, BASE_DEC, VALS(recvchanneltypenames), 0x0,
9913
15
    "Logical channels type", HFILL }},
9914
15
    { &hf_tetra_timer,
9915
15
    { "Timer", "tetra.timer", FT_UINT32, BASE_HEX, NULL, 0x0,
9916
15
     "Timer Register", HFILL }},
9917
15
    { &hf_tetra_crc,
9918
15
    { "CRC", "tetra.crc", FT_BOOLEAN, BASE_NONE, NULL, 0x0,
9919
15
     "CRC result", HFILL }},
9920
15
    { &hf_tetra_len0,
9921
15
    { "Length", "tetra.len0", FT_UINT32, BASE_DEC, NULL, 0x0,
9922
15
     "Length of the PDU", HFILL }},
9923
15
    { &hf_tetra_pdu,
9924
15
    { "PDU", "tetra.pdu", FT_BYTES, BASE_NONE, NULL, 0x0,
9925
15
     NULL, HFILL }} ,
9926
9927
15
    { &hf_tetra_AACH_PDU,
9928
15
      { "AACH", "tetra.AACH_element",
9929
15
        FT_NONE, BASE_NONE, NULL, 0,
9930
15
        NULL, HFILL }},
9931
15
    { &hf_tetra_BSCH_PDU,
9932
15
      { "BSCH", "tetra.BSCH_element",
9933
15
        FT_NONE, BASE_NONE, NULL, 0,
9934
15
        NULL, HFILL }},
9935
15
    { &hf_tetra_BNCH_PDU,
9936
15
      { "BNCH", "tetra.BNCH_element",
9937
15
        FT_NONE, BASE_NONE, NULL, 0,
9938
15
        NULL, HFILL }},
9939
15
    { &hf_tetra_MAC_ACCESS_PDU,
9940
15
      { "MAC-ACCESS", "tetra.MAC_ACCESS_element",
9941
15
        FT_NONE, BASE_NONE, NULL, 0,
9942
15
        NULL, HFILL }},
9943
15
    { &hf_tetra_MAC_DATA_PDU,
9944
15
      { "MAC-DATA", "tetra.MAC_DATA_element",
9945
15
        FT_NONE, BASE_NONE, NULL, 0,
9946
15
        NULL, HFILL }},
9947
15
    { &hf_tetra_MAC_FRAG_PDU,
9948
15
      { "MAC-FRAG", "tetra.MAC_FRAG_element",
9949
15
        FT_NONE, BASE_NONE, NULL, 0,
9950
15
        NULL, HFILL }},
9951
15
    { &hf_tetra_MAC_FRAG120_PDU,
9952
15
      { "MAC-FRAG120", "tetra.MAC_FRAG120_element",
9953
15
        FT_NONE, BASE_NONE, NULL, 0,
9954
15
        NULL, HFILL }},
9955
15
    { &hf_tetra_MAC_END_UPLINK_PDU,
9956
15
      { "MAC-END-UPLINK", "tetra.MAC_END_UPLINK_element",
9957
15
        FT_NONE, BASE_NONE, NULL, 0,
9958
15
        NULL, HFILL }},
9959
15
    { &hf_tetra_MAC_END_UP114_PDU,
9960
15
      { "MAC-END-UP114", "tetra.MAC_END_UP114_element",
9961
15
        FT_NONE, BASE_NONE, NULL, 0,
9962
15
        NULL, HFILL }},
9963
15
    { &hf_tetra_MAC_END_HU_PDU,
9964
15
      { "MAC-END-HU", "tetra.MAC_END_HU_element",
9965
15
        FT_NONE, BASE_NONE, NULL, 0,
9966
15
        NULL, HFILL }},
9967
15
    { &hf_tetra_MAC_END_DOWNLINK_PDU,
9968
15
      { "MAC-END-DOWNLINK", "tetra.MAC_END_DOWNLINK_element",
9969
15
        FT_NONE, BASE_NONE, NULL, 0,
9970
15
        NULL, HFILL }},
9971
15
    { &hf_tetra_MAC_END_DOWN111_PDU,
9972
15
      { "MAC-END-DOWN111", "tetra.MAC_END_DOWN111_element",
9973
15
        FT_NONE, BASE_NONE, NULL, 0,
9974
15
        NULL, HFILL }},
9975
15
    { &hf_tetra_MAC_RESOURCE_PDU,
9976
15
      { "MAC-RESOURCE", "tetra.MAC_RESOURCE_element",
9977
15
        FT_NONE, BASE_NONE, NULL, 0,
9978
15
        NULL, HFILL }},
9979
15
    { &hf_tetra_MAC_ACCESS_DEFINE_PDU,
9980
15
      { "MAC-ACCESS-DEFINE", "tetra.MAC_ACCESS_DEFINE_element",
9981
15
        FT_NONE, BASE_NONE, NULL, 0,
9982
15
        NULL, HFILL }},
9983
15
    { &hf_tetra_function,
9984
15
      { "function", "tetra.function",
9985
15
        FT_UINT32, BASE_DEC, NULL, 0,
9986
15
        "INTEGER_0_3", HFILL }},
9987
15
    { &hf_tetra_field1,
9988
15
      { "field1", "tetra.field1",
9989
15
        FT_UINT32, BASE_DEC, NULL, 0,
9990
15
        "INTEGER_0_63", HFILL }},
9991
15
    { &hf_tetra_field2,
9992
15
      { "field2", "tetra.field2",
9993
15
        FT_UINT32, BASE_DEC, NULL, 0,
9994
15
        "INTEGER_0_63", HFILL }},
9995
15
    { &hf_tetra_system_code,
9996
15
      { "system-code", "tetra.system_code",
9997
15
        FT_UINT32, BASE_DEC, VALS(tetra_System_Code_vals), 0,
9998
15
        NULL, HFILL }},
9999
15
    { &hf_tetra_colour_code,
10000
15
      { "colour-code", "tetra.colour_code",
10001
15
        FT_UINT32, BASE_DEC|BASE_EXT_STRING, &tetra_Colour_Code_vals_ext, 0,
10002
15
        NULL, HFILL }},
10003
15
    { &hf_tetra_timeslot_number,
10004
15
      { "timeslot-number", "tetra.timeslot_number",
10005
15
        FT_UINT32, BASE_DEC, VALS(tetra_Timeslot_Number_vals), 0,
10006
15
        NULL, HFILL }},
10007
15
    { &hf_tetra_frame_number,
10008
15
      { "frame-number", "tetra.frame_number",
10009
15
        FT_UINT32, BASE_DEC, VALS(tetra_Frame_Number_vals), 0,
10010
15
        NULL, HFILL }},
10011
15
    { &hf_tetra_multiple_frame_number,
10012
15
      { "multiple-frame-number", "tetra.multiple_frame_number",
10013
15
        FT_UINT32, BASE_DEC|BASE_EXT_STRING, &tetra_Multiple_Frame_Number_vals_ext, 0,
10014
15
        NULL, HFILL }},
10015
15
    { &hf_tetra_sharing_mod,
10016
15
      { "sharing-mod", "tetra.sharing_mod",
10017
15
        FT_UINT32, BASE_DEC, VALS(tetra_Sharing_Mod_vals), 0,
10018
15
        NULL, HFILL }},
10019
15
    { &hf_tetra_ts_reserved_frames,
10020
15
      { "ts-reserved-frames", "tetra.ts_reserved_frames",
10021
15
        FT_UINT32, BASE_DEC, VALS(tetra_TS_Reserved_Frames_vals), 0,
10022
15
        NULL, HFILL }},
10023
15
    { &hf_tetra_u_plane_dtx,
10024
15
      { "u-plane-dtx", "tetra.u_plane_dtx",
10025
15
        FT_UINT32, BASE_DEC, VALS(tetra_U_Plane_DTX_vals), 0,
10026
15
        NULL, HFILL }},
10027
15
    { &hf_tetra_frame_18_extension,
10028
15
      { "frame-18-extension", "tetra.frame_18_extension",
10029
15
        FT_UINT32, BASE_DEC, VALS(tetra_Frame_18_Extension_vals), 0,
10030
15
        NULL, HFILL }},
10031
15
    { &hf_tetra_reserved,
10032
15
      { "reserved", "tetra.reserved",
10033
15
        FT_UINT32, BASE_DEC, VALS(tetra_Reserved_vals), 0,
10034
15
        NULL, HFILL }},
10035
15
    { &hf_tetra_tm_sdu,
10036
15
      { "tm-sdu", "tetra.tm_sdu_element",
10037
15
        FT_NONE, BASE_NONE, NULL, 0,
10038
15
        "MLE_Sync", HFILL }},
10039
15
    { &hf_tetra_mcc,
10040
15
      { "mcc", "tetra.mcc",
10041
15
        FT_UINT32, BASE_DEC, NULL, 0,
10042
15
        "INTEGER_0_1023", HFILL }},
10043
15
    { &hf_tetra_mnc,
10044
15
      { "mnc", "tetra.mnc",
10045
15
        FT_UINT32, BASE_DEC, NULL, 0,
10046
15
        "INTEGER_0_16383", HFILL }},
10047
15
    { &hf_tetra_neighbour_cell_broadcast,
10048
15
      { "neighbour-cell-broadcast", "tetra.neighbour_cell_broadcast",
10049
15
        FT_UINT32, BASE_DEC, NULL, 0,
10050
15
        "INTEGER_0_3", HFILL }},
10051
15
    { &hf_tetra_cell_service_level,
10052
15
      { "cell-service-level", "tetra.cell_service_level",
10053
15
        FT_UINT32, BASE_DEC, NULL, 0,
10054
15
        "INTEGER_0_3", HFILL }},
10055
15
    { &hf_tetra_late_entry_information,
10056
15
      { "late-entry-information", "tetra.late_entry_information",
10057
15
        FT_UINT32, BASE_DEC, NULL, 0,
10058
15
        "INTEGER_0_1", HFILL }},
10059
15
    { &hf_tetra_pdu_type,
10060
15
      { "pdu-type", "tetra.pdu_type",
10061
15
        FT_UINT32, BASE_DEC, NULL, 0,
10062
15
        "INTEGER_0_3", HFILL }},
10063
15
    { &hf_tetra_broadcast_type,
10064
15
      { "broadcast-type", "tetra.broadcast_type",
10065
15
        FT_UINT32, BASE_DEC, NULL, 0,
10066
15
        "INTEGER_0_3", HFILL }},
10067
15
    { &hf_tetra_main_carrier,
10068
15
      { "main-carrier", "tetra.main_carrier",
10069
15
        FT_UINT32, BASE_DEC, NULL, 0,
10070
15
        "INTEGER_0_4095", HFILL }},
10071
15
    { &hf_tetra_frequency_band,
10072
15
      { "frequency-band", "tetra.frequency_band",
10073
15
        FT_UINT32, BASE_DEC, NULL, 0,
10074
15
        "INTEGER_0_15", HFILL }},
10075
15
    { &hf_tetra_offset,
10076
15
      { "offset", "tetra.offset",
10077
15
        FT_UINT32, BASE_DEC, VALS(tetra_Offset_vals), 0,
10078
15
        NULL, HFILL }},
10079
15
    { &hf_tetra_duplex_spacing,
10080
15
      { "duplex-spacing", "tetra.duplex_spacing",
10081
15
        FT_UINT32, BASE_DEC, NULL, 0,
10082
15
        "INTEGER_0_7", HFILL }},
10083
15
    { &hf_tetra_reverse_operation,
10084
15
      { "reverse-operation", "tetra.reverse_operation",
10085
15
        FT_UINT32, BASE_DEC, VALS(tetra_Reverse_Operation_vals), 0,
10086
15
        NULL, HFILL }},
10087
15
    { &hf_tetra_sencond_ctl_carrier,
10088
15
      { "sencond-ctl-carrier", "tetra.sencond_ctl_carrier",
10089
15
        FT_UINT32, BASE_DEC, VALS(tetra_Sencond_Ctl_Carrier_vals), 0,
10090
15
        NULL, HFILL }},
10091
15
    { &hf_tetra_ms_txpwr_max_cell,
10092
15
      { "ms-txpwr-max-cell", "tetra.ms_txpwr_max_cell",
10093
15
        FT_UINT32, BASE_DEC, VALS(tetra_MS_TXPWR_MAX_CELL_vals), 0,
10094
15
        NULL, HFILL }},
10095
15
    { &hf_tetra_rxlev_access_min,
10096
15
      { "rxlev-access-min", "tetra.rxlev_access_min",
10097
15
        FT_UINT32, BASE_DEC, VALS(tetra_RXLEV_ACCESS_MIN_vals), 0,
10098
15
        NULL, HFILL }},
10099
15
    { &hf_tetra_access_parameter,
10100
15
      { "access-parameter", "tetra.access_parameter",
10101
15
        FT_UINT32, BASE_DEC, VALS(tetra_ACCESS_PARAMETER_vals), 0,
10102
15
        NULL, HFILL }},
10103
15
    { &hf_tetra_radio_downlink_timeout,
10104
15
      { "radio-downlink-timeout", "tetra.radio_downlink_timeout",
10105
15
        FT_UINT32, BASE_DEC, VALS(tetra_RADIO_DOWNLINK_TIMEOUT_vals), 0,
10106
15
        NULL, HFILL }},
10107
15
    { &hf_tetra_hyperframe_or_cck,
10108
15
      { "hyperframe-or-cck", "tetra.hyperframe_or_cck",
10109
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_hyperframe_or_cck_vals), 0,
10110
15
        NULL, HFILL }},
10111
15
    { &hf_tetra_hyperframe,
10112
15
      { "hyperframe", "tetra.hyperframe",
10113
15
        FT_UINT32, BASE_DEC, NULL, 0,
10114
15
        "INTEGER_0_65535", HFILL }},
10115
15
    { &hf_tetra_cckid,
10116
15
      { "cckid", "tetra.cckid",
10117
15
        FT_UINT32, BASE_DEC, NULL, 0,
10118
15
        "INTEGER_0_65535", HFILL }},
10119
15
    { &hf_tetra_optional_params,
10120
15
      { "optional-params", "tetra.optional_params",
10121
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_optional_params_vals), 0,
10122
15
        NULL, HFILL }},
10123
15
    { &hf_tetra_even_multiframe,
10124
15
      { "even-multiframe", "tetra.even_multiframe_element",
10125
15
        FT_NONE, BASE_NONE, NULL, 0,
10126
15
        "TS_COMMON_FRAMES", HFILL }},
10127
15
    { &hf_tetra_odd_multiframe,
10128
15
      { "odd-multiframe", "tetra.odd_multiframe_element",
10129
15
        FT_NONE, BASE_NONE, NULL, 0,
10130
15
        "TS_COMMON_FRAMES", HFILL }},
10131
15
    { &hf_tetra_access_a_code,
10132
15
      { "access-a-code", "tetra.access_a_code_element",
10133
15
        FT_NONE, BASE_NONE, NULL, 0,
10134
15
        "Default_Code_A", HFILL }},
10135
15
    { &hf_tetra_extend_service,
10136
15
      { "extend-service", "tetra.extend_service_element",
10137
15
        FT_NONE, BASE_NONE, NULL, 0,
10138
15
        "Extended_Services_Broadcast", HFILL }},
10139
15
    { &hf_tetra_la,
10140
15
      { "la", "tetra.la",
10141
15
        FT_UINT32, BASE_DEC, NULL, 0,
10142
15
        "INTEGER_0_16383", HFILL }},
10143
15
    { &hf_tetra_subscriber_class,
10144
15
      { "subscriber-class", "tetra.subscriber_class",
10145
15
        FT_BYTES, BASE_NONE, NULL, 0,
10146
15
        NULL, HFILL }},
10147
15
    { &hf_tetra_registriation,
10148
15
      { "registriation", "tetra.registriation",
10149
15
        FT_UINT32, BASE_DEC, NULL, 0,
10150
15
        "INTEGER_0_1", HFILL }},
10151
15
    { &hf_tetra_de_registration,
10152
15
      { "de-registration", "tetra.de_registration",
10153
15
        FT_UINT32, BASE_DEC, NULL, 0,
10154
15
        "INTEGER_0_1", HFILL }},
10155
15
    { &hf_tetra_priority_cell,
10156
15
      { "priority-cell", "tetra.priority_cell",
10157
15
        FT_UINT32, BASE_DEC, NULL, 0,
10158
15
        "INTEGER_0_1", HFILL }},
10159
15
    { &hf_tetra_minimum_mode_service,
10160
15
      { "minimum-mode-service", "tetra.minimum_mode_service",
10161
15
        FT_UINT32, BASE_DEC, NULL, 0,
10162
15
        "INTEGER_0_1", HFILL }},
10163
15
    { &hf_tetra_migration,
10164
15
      { "migration", "tetra.migration",
10165
15
        FT_UINT32, BASE_DEC, NULL, 0,
10166
15
        "INTEGER_0_1", HFILL }},
10167
15
    { &hf_tetra_system_wide_service,
10168
15
      { "system-wide-service", "tetra.system_wide_service",
10169
15
        FT_UINT32, BASE_DEC, NULL, 0,
10170
15
        "INTEGER_0_1", HFILL }},
10171
15
    { &hf_tetra_tetra_voice_service,
10172
15
      { "tetra-voice-service", "tetra.tetra_voice_service",
10173
15
        FT_UINT32, BASE_DEC, NULL, 0,
10174
15
        "INTEGER_0_1", HFILL }},
10175
15
    { &hf_tetra_circuit_mode_data_service,
10176
15
      { "circuit-mode-data-service", "tetra.circuit_mode_data_service",
10177
15
        FT_UINT32, BASE_DEC, NULL, 0,
10178
15
        "INTEGER_0_1", HFILL }},
10179
15
    { &hf_tetra_reserved_01,
10180
15
      { "reserved", "tetra.reserved",
10181
15
        FT_UINT32, BASE_DEC, NULL, 0,
10182
15
        "INTEGER_0_1", HFILL }},
10183
15
    { &hf_tetra_sndcp_service,
10184
15
      { "sndcp-service", "tetra.sndcp_service",
10185
15
        FT_UINT32, BASE_DEC, NULL, 0,
10186
15
        "INTEGER_0_1", HFILL }},
10187
15
    { &hf_tetra_air_interface_encryption,
10188
15
      { "air-interface-encryption", "tetra.air_interface_encryption",
10189
15
        FT_UINT32, BASE_DEC, NULL, 0,
10190
15
        "INTEGER_0_1", HFILL }},
10191
15
    { &hf_tetra_advanced_link_support,
10192
15
      { "advanced-link-support", "tetra.advanced_link_support",
10193
15
        FT_UINT32, BASE_DEC, NULL, 0,
10194
15
        "INTEGER_0_1", HFILL }},
10195
15
    { &hf_tetra_frame1,
10196
15
      { "frame1", "tetra.frame1",
10197
15
        FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
10198
15
        "FRAME", HFILL }},
10199
15
    { &hf_tetra_frame2,
10200
15
      { "frame2", "tetra.frame2",
10201
15
        FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
10202
15
        "FRAME", HFILL }},
10203
15
    { &hf_tetra_frame3,
10204
15
      { "frame3", "tetra.frame3",
10205
15
        FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
10206
15
        "FRAME", HFILL }},
10207
15
    { &hf_tetra_frame4,
10208
15
      { "frame4", "tetra.frame4",
10209
15
        FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
10210
15
        "FRAME", HFILL }},
10211
15
    { &hf_tetra_frame5,
10212
15
      { "frame5", "tetra.frame5",
10213
15
        FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
10214
15
        "FRAME", HFILL }},
10215
15
    { &hf_tetra_frame6,
10216
15
      { "frame6", "tetra.frame6",
10217
15
        FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
10218
15
        "FRAME", HFILL }},
10219
15
    { &hf_tetra_frame7,
10220
15
      { "frame7", "tetra.frame7",
10221
15
        FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
10222
15
        "FRAME", HFILL }},
10223
15
    { &hf_tetra_frame8,
10224
15
      { "frame8", "tetra.frame8",
10225
15
        FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
10226
15
        "FRAME", HFILL }},
10227
15
    { &hf_tetra_frame9,
10228
15
      { "frame9", "tetra.frame9",
10229
15
        FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
10230
15
        "FRAME", HFILL }},
10231
15
    { &hf_tetra_frame10,
10232
15
      { "frame10", "tetra.frame10",
10233
15
        FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
10234
15
        "FRAME", HFILL }},
10235
15
    { &hf_tetra_frame11,
10236
15
      { "frame11", "tetra.frame11",
10237
15
        FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
10238
15
        "FRAME", HFILL }},
10239
15
    { &hf_tetra_frame12,
10240
15
      { "frame12", "tetra.frame12",
10241
15
        FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
10242
15
        "FRAME", HFILL }},
10243
15
    { &hf_tetra_frame13,
10244
15
      { "frame13", "tetra.frame13",
10245
15
        FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
10246
15
        "FRAME", HFILL }},
10247
15
    { &hf_tetra_frame14,
10248
15
      { "frame14", "tetra.frame14",
10249
15
        FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
10250
15
        "FRAME", HFILL }},
10251
15
    { &hf_tetra_frame15,
10252
15
      { "frame15", "tetra.frame15",
10253
15
        FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
10254
15
        "FRAME", HFILL }},
10255
15
    { &hf_tetra_frame16,
10256
15
      { "frame16", "tetra.frame16",
10257
15
        FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
10258
15
        "FRAME", HFILL }},
10259
15
    { &hf_tetra_frame17,
10260
15
      { "frame17", "tetra.frame17",
10261
15
        FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
10262
15
        "FRAME", HFILL }},
10263
15
    { &hf_tetra_frame18,
10264
15
      { "frame18", "tetra.frame18",
10265
15
        FT_UINT32, BASE_DEC, VALS(tetra_FRAME_vals), 0,
10266
15
        "FRAME", HFILL }},
10267
15
    { &hf_tetra_imm,
10268
15
      { "imm", "tetra.imm",
10269
15
        FT_UINT32, BASE_DEC, VALS(tetra_IMM_vals), 0,
10270
15
        NULL, HFILL }},
10271
15
    { &hf_tetra_wt,
10272
15
      { "wt", "tetra.wt",
10273
15
        FT_UINT32, BASE_DEC, VALS(tetra_WT_vals), 0,
10274
15
        NULL, HFILL }},
10275
15
    { &hf_tetra_nu,
10276
15
      { "nu", "tetra.nu",
10277
15
        FT_UINT32, BASE_DEC, VALS(tetra_NU_vals), 0,
10278
15
        NULL, HFILL }},
10279
15
    { &hf_tetra_frame_len_factor,
10280
15
      { "frame-len-factor", "tetra.frame_len_factor",
10281
15
        FT_UINT32, BASE_DEC, VALS(tetra_Frame_Len_Factor_vals), 0,
10282
15
        NULL, HFILL }},
10283
15
    { &hf_tetra_timeslot_pointer,
10284
15
      { "timeslot-pointer", "tetra.timeslot_pointer",
10285
15
        FT_UINT32, BASE_DEC, VALS(tetra_Timeslot_Pointer_vals), 0,
10286
15
        NULL, HFILL }},
10287
15
    { &hf_tetra_min_pdu_priority,
10288
15
      { "min-pdu-priority", "tetra.min_pdu_priority",
10289
15
        FT_UINT32, BASE_DEC, VALS(tetra_Min_Pdu_Priority_vals), 0,
10290
15
        NULL, HFILL }},
10291
15
    { &hf_tetra_security_information,
10292
15
      { "security-information", "tetra.security_information",
10293
15
        FT_UINT32, BASE_DEC, NULL, 0,
10294
15
        "INTEGER_0_255", HFILL }},
10295
15
    { &hf_tetra_sds_tl_addressing_method,
10296
15
      { "sds-tl-addressing-method", "tetra.sds_tl_addressing_method",
10297
15
        FT_UINT32, BASE_DEC, VALS(tetra_SDS_TL_Addressing_Method_vals), 0,
10298
15
        NULL, HFILL }},
10299
15
    { &hf_tetra_gck_supported,
10300
15
      { "gck-supported", "tetra.gck_supported",
10301
15
        FT_UINT32, BASE_DEC, NULL, 0,
10302
15
        "INTEGER_0_1", HFILL }},
10303
15
    { &hf_tetra_section,
10304
15
      { "section", "tetra.section",
10305
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_section_vals), 0,
10306
15
        NULL, HFILL }},
10307
15
    { &hf_tetra_present_1,
10308
15
      { "present-1", "tetra.present_1_element",
10309
15
        FT_NONE, BASE_NONE, NULL, 0,
10310
15
        "PRESENT1", HFILL }},
10311
15
    { &hf_tetra_present_2,
10312
15
      { "present-2", "tetra.present_2",
10313
15
        FT_UINT32, BASE_DEC, NULL, 0,
10314
15
        "INTEGER_0_127", HFILL }},
10315
15
    { &hf_tetra_present_3,
10316
15
      { "present-3", "tetra.present_3",
10317
15
        FT_UINT32, BASE_DEC, NULL, 0,
10318
15
        "INTEGER_0_127", HFILL }},
10319
15
    { &hf_tetra_present_4,
10320
15
      { "present-4", "tetra.present_4",
10321
15
        FT_UINT32, BASE_DEC, NULL, 0,
10322
15
        "INTEGER_0_127", HFILL }},
10323
15
    { &hf_tetra_data_priority_supported,
10324
15
      { "data-priority-supported", "tetra.data_priority_supported",
10325
15
        FT_UINT32, BASE_DEC, VALS(tetra_Data_Priority_Supported_vals), 0,
10326
15
        NULL, HFILL }},
10327
15
    { &hf_tetra_reserved_02,
10328
15
      { "reserved", "tetra.reserved",
10329
15
        FT_UINT32, BASE_DEC, NULL, 0,
10330
15
        "INTEGER_0_7", HFILL }},
10331
15
    { &hf_tetra_section_2_information,
10332
15
      { "section-2-information", "tetra.section_2_information",
10333
15
        FT_UINT32, BASE_DEC, VALS(tetra_Section_Information_vals), 0,
10334
15
        "Section_Information", HFILL }},
10335
15
    { &hf_tetra_section_3_information,
10336
15
      { "section-3-information", "tetra.section_3_information",
10337
15
        FT_UINT32, BASE_DEC, VALS(tetra_Section_Information_vals), 0,
10338
15
        "Section_Information", HFILL }},
10339
15
    { &hf_tetra_section_4_information,
10340
15
      { "section-4-information", "tetra.section_4_information",
10341
15
        FT_UINT32, BASE_DEC, VALS(tetra_Section_Information_vals), 0,
10342
15
        "Section_Information", HFILL }},
10343
15
    { &hf_tetra_pdu_type_01,
10344
15
      { "pdu-type", "tetra.pdu_type",
10345
15
        FT_UINT32, BASE_DEC, NULL, 0,
10346
15
        "INTEGER_0_1", HFILL }},
10347
15
    { &hf_tetra_fill_bit_indication,
10348
15
      { "fill-bit-indication", "tetra.fill_bit_indication",
10349
15
        FT_UINT32, BASE_DEC, VALS(tetra_Fill_Bit_Indication_vals), 0,
10350
15
        NULL, HFILL }},
10351
15
    { &hf_tetra_encrypted_flag,
10352
15
      { "encrypted-flag", "tetra.encrypted_flag",
10353
15
        FT_UINT32, BASE_DEC, VALS(tetra_Encrypted_Flag_vals), 0,
10354
15
        NULL, HFILL }},
10355
15
    { &hf_tetra_address,
10356
15
      { "address", "tetra.address",
10357
15
        FT_UINT32, BASE_DEC, VALS(tetra_Address_vals), 0,
10358
15
        NULL, HFILL }},
10359
15
    { &hf_tetra_data,
10360
15
      { "data", "tetra.data",
10361
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_data_vals), 0,
10362
15
        NULL, HFILL }},
10363
15
    { &hf_tetra_sdu1,
10364
15
      { "sdu1", "tetra.sdu1",
10365
15
        FT_UINT32, BASE_DEC, VALS(tetra_U_LLC_PDU_vals), 0,
10366
15
        "U_LLC_PDU", HFILL }},
10367
15
    { &hf_tetra_sdu2,
10368
15
      { "sdu2", "tetra.sdu2_element",
10369
15
        FT_NONE, BASE_NONE, NULL, 0,
10370
15
        "ComplexSDU", HFILL }},
10371
15
    { &hf_tetra_ssi,
10372
15
      { "ssi", "tetra.ssi",
10373
15
        FT_UINT32, BASE_DEC, NULL, 0,
10374
15
        "INTEGER_0_16777215", HFILL }},
10375
15
    { &hf_tetra_eventLabel,
10376
15
      { "eventLabel", "tetra.eventLabel",
10377
15
        FT_UINT32, BASE_DEC, NULL, 0,
10378
15
        "INTEGER_0_1023", HFILL }},
10379
15
    { &hf_tetra_ussi,
10380
15
      { "ussi", "tetra.ussi",
10381
15
        FT_UINT32, BASE_DEC, NULL, 0,
10382
15
        "INTEGER_0_16777215", HFILL }},
10383
15
    { &hf_tetra_smi,
10384
15
      { "smi", "tetra.smi",
10385
15
        FT_UINT32, BASE_DEC, NULL, 0,
10386
15
        "INTEGER_0_16777215", HFILL }},
10387
15
    { &hf_tetra_bl_adata,
10388
15
      { "bl-adata", "tetra.bl_adata_element",
10389
15
        FT_NONE, BASE_NONE, NULL, 0,
10390
15
        "U_BL_ADATA", HFILL }},
10391
15
    { &hf_tetra_bl_data,
10392
15
      { "bl-data", "tetra.bl_data_element",
10393
15
        FT_NONE, BASE_NONE, NULL, 0,
10394
15
        "U_BL_DATA", HFILL }},
10395
15
    { &hf_tetra_bl_udata,
10396
15
      { "bl-udata", "tetra.bl_udata",
10397
15
        FT_UINT32, BASE_DEC, VALS(tetra_U_MLE_PDU_vals), 0,
10398
15
        "U_MLE_PDU", HFILL }},
10399
15
    { &hf_tetra_bl_ack,
10400
15
      { "bl-ack", "tetra.bl_ack_element",
10401
15
        FT_NONE, BASE_NONE, NULL, 0,
10402
15
        "U_BL_ACK", HFILL }},
10403
15
    { &hf_tetra_bl_adata_fcs,
10404
15
      { "bl-adata-fcs", "tetra.bl_adata_fcs_element",
10405
15
        FT_NONE, BASE_NONE, NULL, 0,
10406
15
        "U_BL_ADATA_FCS", HFILL }},
10407
15
    { &hf_tetra_bl_data_fcs,
10408
15
      { "bl-data-fcs", "tetra.bl_data_fcs_element",
10409
15
        FT_NONE, BASE_NONE, NULL, 0,
10410
15
        "U_BL_DATA_FCS", HFILL }},
10411
15
    { &hf_tetra_bl_udata_fcs,
10412
15
      { "bl-udata-fcs", "tetra.bl_udata_fcs_element",
10413
15
        FT_NONE, BASE_NONE, NULL, 0,
10414
15
        "U_MLE_PDU_FCS", HFILL }},
10415
15
    { &hf_tetra_bl_ack_fcs,
10416
15
      { "bl-ack-fcs", "tetra.bl_ack_fcs_element",
10417
15
        FT_NONE, BASE_NONE, NULL, 0,
10418
15
        "U_BL_ACK_FCS", HFILL }},
10419
15
    { &hf_tetra_al_setup,
10420
15
      { "al-setup", "tetra.al_setup_element",
10421
15
        FT_NONE, BASE_NONE, NULL, 0,
10422
15
        NULL, HFILL }},
10423
15
    { &hf_tetra_al_data,
10424
15
      { "al-data", "tetra.al_data_element",
10425
15
        FT_NONE, BASE_NONE, NULL, 0,
10426
15
        NULL, HFILL }},
10427
15
    { &hf_tetra_al_udata,
10428
15
      { "al-udata", "tetra.al_udata_element",
10429
15
        FT_NONE, BASE_NONE, NULL, 0,
10430
15
        NULL, HFILL }},
10431
15
    { &hf_tetra_al_ack,
10432
15
      { "al-ack", "tetra.al_ack_element",
10433
15
        FT_NONE, BASE_NONE, NULL, 0,
10434
15
        NULL, HFILL }},
10435
15
    { &hf_tetra_al_reconnect,
10436
15
      { "al-reconnect", "tetra.al_reconnect_element",
10437
15
        FT_NONE, BASE_NONE, NULL, 0,
10438
15
        NULL, HFILL }},
10439
15
    { &hf_tetra_reserve1,
10440
15
      { "reserve1", "tetra.reserve1_element",
10441
15
        FT_NONE, BASE_NONE, NULL, 0,
10442
15
        NULL, HFILL }},
10443
15
    { &hf_tetra_reserve2,
10444
15
      { "reserve2", "tetra.reserve2_element",
10445
15
        FT_NONE, BASE_NONE, NULL, 0,
10446
15
        NULL, HFILL }},
10447
15
    { &hf_tetra_al_disc,
10448
15
      { "al-disc", "tetra.al_disc_element",
10449
15
        FT_NONE, BASE_NONE, NULL, 0,
10450
15
        NULL, HFILL }},
10451
15
    { &hf_tetra_nr,
10452
15
      { "nr", "tetra.nr",
10453
15
        FT_UINT32, BASE_DEC, NULL, 0,
10454
15
        "INTEGER_0_1", HFILL }},
10455
15
    { &hf_tetra_tl_sdu,
10456
15
      { "tl-sdu", "tetra.tl_sdu",
10457
15
        FT_UINT32, BASE_DEC, VALS(tetra_U_MLE_PDU_vals), 0,
10458
15
        "U_MLE_PDU", HFILL }},
10459
15
    { &hf_tetra_fcs,
10460
15
      { "fcs", "tetra.fcs",
10461
15
        FT_BYTES, BASE_NONE, NULL, 0,
10462
15
        "OCTET_STRING_SIZE_4", HFILL }},
10463
15
    { &hf_tetra_u_mle_pdu,
10464
15
      { "u-mle-pdu", "tetra.u_mle_pdu",
10465
15
        FT_UINT32, BASE_DEC, VALS(tetra_U_MLE_PDU_vals), 0,
10466
15
        NULL, HFILL }},
10467
15
    { &hf_tetra_ns,
10468
15
      { "ns", "tetra.ns",
10469
15
        FT_UINT32, BASE_DEC, NULL, 0,
10470
15
        "INTEGER_0_1", HFILL }},
10471
15
    { &hf_tetra_u_mle_reserved1,
10472
15
      { "u-mle-reserved1", "tetra.u_mle_reserved1_element",
10473
15
        FT_NONE, BASE_NONE, NULL, 0,
10474
15
        NULL, HFILL }},
10475
15
    { &hf_tetra_mm,
10476
15
      { "mm", "tetra.mm",
10477
15
        FT_UINT32, BASE_DEC, VALS(tetra_U_MM_PDU_vals), 0,
10478
15
        "U_MM_PDU", HFILL }},
10479
15
    { &hf_tetra_cmce,
10480
15
      { "cmce", "tetra.cmce",
10481
15
        FT_UINT32, BASE_DEC, VALS(tetra_U_CMCE_PDU_vals), 0,
10482
15
        "U_CMCE_PDU", HFILL }},
10483
15
    { &hf_tetra_u_mle_reserved2,
10484
15
      { "u-mle-reserved2", "tetra.u_mle_reserved2_element",
10485
15
        FT_NONE, BASE_NONE, NULL, 0,
10486
15
        NULL, HFILL }},
10487
15
    { &hf_tetra_sndcp,
10488
15
      { "sndcp", "tetra.sndcp_element",
10489
15
        FT_NONE, BASE_NONE, NULL, 0,
10490
15
        NULL, HFILL }},
10491
15
    { &hf_tetra_mle,
10492
15
      { "mle", "tetra.mle",
10493
15
        FT_UINT32, BASE_DEC, VALS(tetra_UMLE_PDU_vals), 0,
10494
15
        "UMLE_PDU", HFILL }},
10495
15
    { &hf_tetra_tetra_management_entity_protocol,
10496
15
      { "tetra-management-entity-protocol", "tetra.tetra_management_entity_protocol_element",
10497
15
        FT_NONE, BASE_NONE, NULL, 0,
10498
15
        NULL, HFILL }},
10499
15
    { &hf_tetra_u_mle_reserved3,
10500
15
      { "u-mle-reserved3", "tetra.u_mle_reserved3_element",
10501
15
        FT_NONE, BASE_NONE, NULL, 0,
10502
15
        NULL, HFILL }},
10503
15
    { &hf_tetra_lengthIndicationOrCapacityRequest,
10504
15
      { "lengthIndicationOrCapacityRequest", "tetra.lengthIndicationOrCapacityRequest",
10505
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_lengthIndicationOrCapacityRequest_vals), 0,
10506
15
        NULL, HFILL }},
10507
15
    { &hf_tetra_lengthIndication,
10508
15
      { "lengthIndication", "tetra.lengthIndication",
10509
15
        FT_UINT32, BASE_DEC, VALS(tetra_LengthIndication_vals), 0,
10510
15
        NULL, HFILL }},
10511
15
    { &hf_tetra_capacityRequest,
10512
15
      { "capacityRequest", "tetra.capacityRequest_element",
10513
15
        FT_NONE, BASE_NONE, NULL, 0,
10514
15
        "FRAG", HFILL }},
10515
15
    { &hf_tetra_tm_sdu_01,
10516
15
      { "tm-sdu", "tetra.tm_sdu",
10517
15
        FT_UINT32, BASE_DEC, VALS(tetra_U_LLC_PDU_vals), 0,
10518
15
        "U_LLC_PDU", HFILL }},
10519
15
    { &hf_tetra_frag,
10520
15
      { "frag", "tetra.frag",
10521
15
        FT_UINT32, BASE_DEC, VALS(tetra_Frag1_vals), 0,
10522
15
        "Frag1", HFILL }},
10523
15
    { &hf_tetra_reservation_requirement,
10524
15
      { "reservation-requirement", "tetra.reservation_requirement",
10525
15
        FT_UINT32, BASE_DEC, VALS(tetra_SLOT_APPLY_vals), 0,
10526
15
        "SLOT_APPLY", HFILL }},
10527
15
    { &hf_tetra_lengthIndicationOrCapacityRequest_01,
10528
15
      { "lengthIndicationOrCapacityRequest", "tetra.lengthIndicationOrCapacityRequest",
10529
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_lengthIndicationOrCapacityRequest_01_vals), 0,
10530
15
        "T_lengthIndicationOrCapacityRequest_01", HFILL }},
10531
15
    { &hf_tetra_lengthIndication_01,
10532
15
      { "lengthIndication", "tetra.lengthIndication",
10533
15
        FT_UINT32, BASE_DEC|BASE_EXT_STRING, &tetra_LengthIndicationMacData_vals_ext, 0,
10534
15
        "LengthIndicationMacData", HFILL }},
10535
15
    { &hf_tetra_capacityRequest_01,
10536
15
      { "capacityRequest", "tetra.capacityRequest_element",
10537
15
        FT_NONE, BASE_NONE, NULL, 0,
10538
15
        "FRAG6", HFILL }},
10539
15
    { &hf_tetra_sub_type,
10540
15
      { "sub-type", "tetra.sub_type",
10541
15
        FT_UINT32, BASE_DEC, NULL, 0,
10542
15
        "INTEGER_0_1", HFILL }},
10543
15
    { &hf_tetra_tm_sdu_bit_str,
10544
15
      { "tm-sdu", "tetra.tm_sdu_bit_str",
10545
15
        FT_BYTES, BASE_NONE, NULL, 0,
10546
15
        "BIT_STRING_SIZE_264", HFILL }},
10547
15
    { &hf_tetra_tm_sdu_bit_str_01,
10548
15
      { "tm-sdu", "tetra.tm_sdu_bit_str",
10549
15
        FT_BYTES, BASE_NONE, NULL, 0,
10550
15
        "BIT_STRING_SIZE_120", HFILL }},
10551
15
    { &hf_tetra_lengthInd_ReservationReq,
10552
15
      { "lengthInd-ReservationReq", "tetra.lengthInd_ReservationReq",
10553
15
        FT_UINT32, BASE_DEC|BASE_EXT_STRING, &tetra_LengthIndOrReservationReq_vals_ext, 0,
10554
15
        "LengthIndOrReservationReq", HFILL }},
10555
15
    { &hf_tetra_tm_sdu_bit_str_02,
10556
15
      { "tm-sdu", "tetra.tm_sdu_bit_str",
10557
15
        FT_BYTES, BASE_NONE, NULL, 0,
10558
15
        "BIT_STRING_SIZE_258", HFILL }},
10559
15
    { &hf_tetra_pdu_subtype,
10560
15
      { "pdu-subtype", "tetra.pdu_subtype",
10561
15
        FT_UINT32, BASE_DEC, NULL, 0,
10562
15
        "INTEGER_0_1", HFILL }},
10563
15
    { &hf_tetra_tm_sdu_bit_str_03,
10564
15
      { "tm-sdu", "tetra.tm_sdu_bit_str",
10565
15
        FT_BYTES, BASE_NONE, NULL, 0,
10566
15
        "BIT_STRING_SIZE_114", HFILL }},
10567
15
    { &hf_tetra_lengthInd_ReservationReq_01,
10568
15
      { "lengthInd-ReservationReq", "tetra.lengthInd_ReservationReq",
10569
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_lengthInd_ReservationReq_vals), 0,
10570
15
        NULL, HFILL }},
10571
15
    { &hf_tetra_lengthInd,
10572
15
      { "lengthInd", "tetra.lengthInd",
10573
15
        FT_UINT32, BASE_DEC, VALS(tetra_LengthIndMacHu_vals), 0,
10574
15
        "LengthIndMacHu", HFILL }},
10575
15
    { &hf_tetra_tm_sdu_bit_str_04,
10576
15
      { "tm-sdu", "tetra.tm_sdu_bit_str",
10577
15
        FT_BYTES, BASE_NONE, NULL, 0,
10578
15
        "BIT_STRING_SIZE_85", HFILL }},
10579
15
    { &hf_tetra_position_of_grant,
10580
15
      { "position-of-grant", "tetra.position_of_grant",
10581
15
        FT_UINT32, BASE_DEC, VALS(tetra_Position_Of_Grant_vals), 0,
10582
15
        NULL, HFILL }},
10583
15
    { &hf_tetra_lengthIndication_02,
10584
15
      { "lengthIndication", "tetra.lengthIndication",
10585
15
        FT_UINT32, BASE_DEC|BASE_EXT_STRING, &tetra_LengthIndicationMacEndDl_vals_ext, 0,
10586
15
        "LengthIndicationMacEndDl", HFILL }},
10587
15
    { &hf_tetra_slot_granting,
10588
15
      { "slot-granting", "tetra.slot_granting",
10589
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_slot_granting_vals), 0,
10590
15
        "T_slot_granting", HFILL }},
10591
15
    { &hf_tetra_none,
10592
15
      { "none", "tetra.none_element",
10593
15
        FT_NONE, BASE_NONE, NULL, 0,
10594
15
        NULL, HFILL }},
10595
15
    { &hf_tetra_slot_granting_param,
10596
15
      { "slot-granting-param", "tetra.slot_granting_param_element",
10597
15
        FT_NONE, BASE_NONE, NULL, 0,
10598
15
        "SlotGranting", HFILL }},
10599
15
    { &hf_tetra_channel_allocation,
10600
15
      { "channel-allocation", "tetra.channel_allocation",
10601
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_channel_allocation_vals), 0,
10602
15
        NULL, HFILL }},
10603
15
    { &hf_tetra_channel_allocation_element,
10604
15
      { "channel-allocation-element", "tetra.channel_allocation_element_element",
10605
15
        FT_NONE, BASE_NONE, NULL, 0,
10606
15
        "ChannelAllocation", HFILL }},
10607
15
    { &hf_tetra_tm_sdu_bit_str_05,
10608
15
      { "tm-sdu", "tetra.tm_sdu_bit_str",
10609
15
        FT_BYTES, BASE_NONE, NULL, 0,
10610
15
        "BIT_STRING_SIZE_255", HFILL }},
10611
15
    { &hf_tetra_capacity_allocation,
10612
15
      { "capacity-allocation", "tetra.capacity_allocation",
10613
15
        FT_UINT32, BASE_DEC, VALS(tetra_Capacity_Allocation_vals), 0,
10614
15
        NULL, HFILL }},
10615
15
    { &hf_tetra_granting_delay,
10616
15
      { "granting-delay", "tetra.granting_delay",
10617
15
        FT_UINT32, BASE_DEC, VALS(tetra_Granting_delay_vals), 0,
10618
15
        NULL, HFILL }},
10619
15
    { &hf_tetra_allocation_type,
10620
15
      { "allocation-type", "tetra.allocation_type",
10621
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_allocation_type_vals), 0,
10622
15
        NULL, HFILL }},
10623
15
    { &hf_tetra_timeslot_assigned,
10624
15
      { "timeslot-assigned", "tetra.timeslot_assigned",
10625
15
        FT_UINT32, BASE_DEC, VALS(tetra_Timeslot_Assigned_vals), 0,
10626
15
        NULL, HFILL }},
10627
15
    { &hf_tetra_up_down_assigned,
10628
15
      { "up-down-assigned", "tetra.up_down_assigned",
10629
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_up_down_assigned_vals), 0,
10630
15
        NULL, HFILL }},
10631
15
    { &hf_tetra_clch_permission,
10632
15
      { "clch-permission", "tetra.clch_permission",
10633
15
        FT_UINT32, BASE_DEC, VALS(tetra_CLCH_permission_vals), 0,
10634
15
        NULL, HFILL }},
10635
15
    { &hf_tetra_cell_change,
10636
15
      { "cell-change", "tetra.cell_change",
10637
15
        FT_UINT32, BASE_DEC, VALS(tetra_Cell_change_flag_vals), 0,
10638
15
        "Cell_change_flag", HFILL }},
10639
15
    { &hf_tetra_carrier_number,
10640
15
      { "carrier-number", "tetra.carrier_number",
10641
15
        FT_UINT32, BASE_DEC, NULL, 0,
10642
15
        "INTEGER_0_4095", HFILL }},
10643
15
    { &hf_tetra_extend_carrier_flag,
10644
15
      { "extend-carrier-flag", "tetra.extend_carrier_flag",
10645
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_extend_carrier_flag_vals), 0,
10646
15
        NULL, HFILL }},
10647
15
    { &hf_tetra_extended,
10648
15
      { "extended", "tetra.extended_element",
10649
15
        FT_NONE, BASE_NONE, NULL, 0,
10650
15
        "Extended_carrier_flag", HFILL }},
10651
15
    { &hf_tetra_monitoring_pattern,
10652
15
      { "monitoring-pattern", "tetra.monitoring_pattern",
10653
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_monitoring_pattern_vals), 0,
10654
15
        NULL, HFILL }},
10655
15
    { &hf_tetra_one,
10656
15
      { "one", "tetra.one",
10657
15
        FT_UINT32, BASE_DEC, VALS(tetra_Monitoring_pattern_vals), 0,
10658
15
        "Monitoring_pattern", HFILL }},
10659
15
    { &hf_tetra_none1,
10660
15
      { "none1", "tetra.none1_element",
10661
15
        FT_NONE, BASE_NONE, NULL, 0,
10662
15
        NULL, HFILL }},
10663
15
    { &hf_tetra_none2,
10664
15
      { "none2", "tetra.none2_element",
10665
15
        FT_NONE, BASE_NONE, NULL, 0,
10666
15
        NULL, HFILL }},
10667
15
    { &hf_tetra_none3,
10668
15
      { "none3", "tetra.none3_element",
10669
15
        FT_NONE, BASE_NONE, NULL, 0,
10670
15
        NULL, HFILL }},
10671
15
    { &hf_tetra_offset_01,
10672
15
      { "offset", "tetra.offset",
10673
15
        FT_UINT32, BASE_DEC, NULL, 0,
10674
15
        "INTEGER_0_3", HFILL }},
10675
15
    { &hf_tetra_reverse_operation_01,
10676
15
      { "reverse-operation", "tetra.reverse_operation",
10677
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_reverse_operation_vals), 0,
10678
15
        NULL, HFILL }},
10679
15
    { &hf_tetra_pdu_type_02,
10680
15
      { "pdu-type", "tetra.pdu_type",
10681
15
        FT_UINT32, BASE_DEC, NULL, 0,
10682
15
        "INTEGER_0_7", HFILL }},
10683
15
    { &hf_tetra_fill_bit_ind,
10684
15
      { "fill-bit-ind", "tetra.fill_bit_ind",
10685
15
        FT_BOOLEAN, BASE_NONE, NULL, 0,
10686
15
        "BOOLEAN", HFILL }},
10687
15
    { &hf_tetra_position_of_grant_01,
10688
15
      { "position-of-grant", "tetra.position_of_grant",
10689
15
        FT_UINT32, BASE_DEC, NULL, 0,
10690
15
        "INTEGER_0_1", HFILL }},
10691
15
    { &hf_tetra_slot_granting_01,
10692
15
      { "slot-granting", "tetra.slot_granting",
10693
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_slot_granting_01_vals), 0,
10694
15
        "T_slot_granting_01", HFILL }},
10695
15
    { &hf_tetra_channel_allocation_01,
10696
15
      { "channel-allocation", "tetra.channel_allocation",
10697
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_channel_allocation_01_vals), 0,
10698
15
        "T_channel_allocation_01", HFILL }},
10699
15
    { &hf_tetra_tm_sdu_bit_str_06,
10700
15
      { "tm-sdu", "tetra.tm_sdu_bit_str",
10701
15
        FT_BYTES, BASE_NONE, NULL, 0,
10702
15
        "BIT_STRING_SIZE_111", HFILL }},
10703
15
    { &hf_tetra_encryption_mode,
10704
15
      { "encryption-mode", "tetra.encryption_mode",
10705
15
        FT_UINT32, BASE_DEC, NULL, 0,
10706
15
        "INTEGER_0_3", HFILL }},
10707
15
    { &hf_tetra_access_ack,
10708
15
      { "access-ack", "tetra.access_ack",
10709
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_access_ack_vals), 0,
10710
15
        NULL, HFILL }},
10711
15
    { &hf_tetra_lengthIndication_03,
10712
15
      { "lengthIndication", "tetra.lengthIndication",
10713
15
        FT_UINT32, BASE_DEC|BASE_EXT_STRING, &tetra_LengthIndicationMacResource_vals_ext, 0,
10714
15
        "LengthIndicationMacResource", HFILL }},
10715
15
    { &hf_tetra_address_01,
10716
15
      { "address", "tetra.address",
10717
15
        FT_UINT32, BASE_DEC, VALS(tetra_AddressMacResource_vals), 0,
10718
15
        "AddressMacResource", HFILL }},
10719
15
    { &hf_tetra_power_control,
10720
15
      { "power-control", "tetra.power_control",
10721
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_power_control_vals), 0,
10722
15
        NULL, HFILL }},
10723
15
    { &hf_tetra_powerParameters,
10724
15
      { "powerParameters", "tetra.powerParameters",
10725
15
        FT_UINT32, BASE_DEC, VALS(tetra_PowerControl_vals), 0,
10726
15
        "PowerControl", HFILL }},
10727
15
    { &hf_tetra_slot_granting_02,
10728
15
      { "slot-granting", "tetra.slot_granting",
10729
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_slot_granting_02_vals), 0,
10730
15
        "T_slot_granting_02", HFILL }},
10731
15
    { &hf_tetra_channel_allocation_02,
10732
15
      { "channel-allocation", "tetra.channel_allocation",
10733
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_channel_allocation_02_vals), 0,
10734
15
        "T_channel_allocation_02", HFILL }},
10735
15
    { &hf_tetra_tm_sdu_02,
10736
15
      { "tm-sdu", "tetra.tm_sdu",
10737
15
        FT_UINT32, BASE_DEC, VALS(tetra_D_LLC_PDU_vals), 0,
10738
15
        "D_LLC_PDU", HFILL }},
10739
15
    { &hf_tetra_null_pdu,
10740
15
      { "null-pdu", "tetra.null_pdu_element",
10741
15
        FT_NONE, BASE_NONE, NULL, 0,
10742
15
        NULL, HFILL }},
10743
15
    { &hf_tetra_ssi_need,
10744
15
      { "ssi", "tetra.ssi_need_element",
10745
15
        FT_NONE, BASE_NONE, NULL, 0,
10746
15
        "SSI_NEED", HFILL }},
10747
15
    { &hf_tetra_eventLabel_01,
10748
15
      { "eventLabel", "tetra.eventLabel_element",
10749
15
        FT_NONE, BASE_NONE, NULL, 0,
10750
15
        "EVENT_NEED", HFILL }},
10751
15
    { &hf_tetra_ussi_01,
10752
15
      { "ussi", "tetra.ussi_element",
10753
15
        FT_NONE, BASE_NONE, NULL, 0,
10754
15
        "USSI_NEED", HFILL }},
10755
15
    { &hf_tetra_smi_01,
10756
15
      { "smi", "tetra.smi_element",
10757
15
        FT_NONE, BASE_NONE, NULL, 0,
10758
15
        "SMI_NEED", HFILL }},
10759
15
    { &hf_tetra_ssi_eventLabel,
10760
15
      { "ssi-eventLabel", "tetra.ssi_eventLabel_element",
10761
15
        FT_NONE, BASE_NONE, NULL, 0,
10762
15
        "SSI_EVENT_NEED", HFILL }},
10763
15
    { &hf_tetra_ssi_usage_maker,
10764
15
      { "ssi-usage-maker", "tetra.ssi_usage_maker_element",
10765
15
        FT_NONE, BASE_NONE, NULL, 0,
10766
15
        "SSI_USAGE_NEED", HFILL }},
10767
15
    { &hf_tetra_smi_eventLabel,
10768
15
      { "smi-eventLabel", "tetra.smi_eventLabel_element",
10769
15
        FT_NONE, BASE_NONE, NULL, 0,
10770
15
        "SMI_EVENT_NEED", HFILL }},
10771
15
    { &hf_tetra_other,
10772
15
      { "other", "tetra.other_element",
10773
15
        FT_NONE, BASE_NONE, NULL, 0,
10774
15
        "OTHER_DATA", HFILL }},
10775
15
    { &hf_tetra_eventlabel,
10776
15
      { "eventlabel", "tetra.eventlabel",
10777
15
        FT_UINT32, BASE_DEC, NULL, 0,
10778
15
        "INTEGER_0_1023", HFILL }},
10779
15
    { &hf_tetra_ventlabel,
10780
15
      { "ventlabel", "tetra.ventlabel",
10781
15
        FT_UINT32, BASE_DEC, NULL, 0,
10782
15
        "INTEGER_0_1023", HFILL }},
10783
15
    { &hf_tetra_usage_maker,
10784
15
      { "usage-maker", "tetra.usage_maker",
10785
15
        FT_UINT32, BASE_DEC, NULL, 0,
10786
15
        "INTEGER_0_63", HFILL }},
10787
15
    { &hf_tetra_smi_eventlabel,
10788
15
      { "smi-eventlabel", "tetra.smi_eventlabel",
10789
15
        FT_BYTES, BASE_NONE, NULL, 0,
10790
15
        "BIT_STRING_SIZE_34", HFILL }},
10791
15
    { &hf_tetra_broadcast_channel,
10792
15
      { "broadcast-channel", "tetra.broadcast_channel",
10793
15
        FT_UINT32, BASE_DEC, NULL, 0,
10794
15
        "INTEGER_0_1", HFILL }},
10795
15
    { &hf_tetra_access_code,
10796
15
      { "access-code", "tetra.access_code",
10797
15
        FT_UINT32, BASE_DEC, NULL, 0,
10798
15
        "INTEGER_0_3", HFILL }},
10799
15
    { &hf_tetra_imm_01,
10800
15
      { "imm", "tetra.imm",
10801
15
        FT_UINT32, BASE_DEC, NULL, 0,
10802
15
        "INTEGER_0_15", HFILL }},
10803
15
    { &hf_tetra_wt_01,
10804
15
      { "wt", "tetra.wt",
10805
15
        FT_UINT32, BASE_DEC, NULL, 0,
10806
15
        "INTEGER_0_15", HFILL }},
10807
15
    { &hf_tetra_nu_01,
10808
15
      { "nu", "tetra.nu",
10809
15
        FT_UINT32, BASE_DEC, NULL, 0,
10810
15
        "INTEGER_0_15", HFILL }},
10811
15
    { &hf_tetra_frame_len_factor_01,
10812
15
      { "frame-len-factor", "tetra.frame_len_factor",
10813
15
        FT_UINT32, BASE_DEC, NULL, 0,
10814
15
        "INTEGER_0_1", HFILL }},
10815
15
    { &hf_tetra_timeslot_pointer_01,
10816
15
      { "timeslot-pointer", "tetra.timeslot_pointer",
10817
15
        FT_UINT32, BASE_DEC, NULL, 0,
10818
15
        "INTEGER_0_15", HFILL }},
10819
15
    { &hf_tetra_min_priority,
10820
15
      { "min-priority", "tetra.min_priority",
10821
15
        FT_UINT32, BASE_DEC, NULL, 0,
10822
15
        "INTEGER_0_7", HFILL }},
10823
15
    { &hf_tetra_optional_field,
10824
15
      { "optional-field", "tetra.optional_field",
10825
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_optional_field_vals), 0,
10826
15
        NULL, HFILL }},
10827
15
    { &hf_tetra_class_bitmap,
10828
15
      { "class-bitmap", "tetra.class_bitmap",
10829
15
        FT_UINT32, BASE_DEC, NULL, 0,
10830
15
        "INTEGER_0_65535", HFILL }},
10831
15
    { &hf_tetra_gssi,
10832
15
      { "gssi", "tetra.gssi",
10833
15
        FT_UINT32, BASE_DEC, NULL, 0,
10834
15
        "INTEGER_0_33554431", HFILL }},
10835
15
    { &hf_tetra_reserved_03,
10836
15
      { "reserved", "tetra.reserved_element",
10837
15
        FT_NONE, BASE_NONE, NULL, 0,
10838
15
        NULL, HFILL }},
10839
15
    { &hf_tetra_filler_bits,
10840
15
      { "filler-bits", "tetra.filler_bits",
10841
15
        FT_UINT32, BASE_DEC, NULL, 0,
10842
15
        "INTEGER_0_7", HFILL }},
10843
15
    { &hf_tetra_bl_adata_01,
10844
15
      { "bl-adata", "tetra.bl_adata_element",
10845
15
        FT_NONE, BASE_NONE, NULL, 0,
10846
15
        "D_BL_ADATA", HFILL }},
10847
15
    { &hf_tetra_bl_data_01,
10848
15
      { "bl-data", "tetra.bl_data_element",
10849
15
        FT_NONE, BASE_NONE, NULL, 0,
10850
15
        "D_BL_DATA", HFILL }},
10851
15
    { &hf_tetra_bl_udata_01,
10852
15
      { "bl-udata", "tetra.bl_udata",
10853
15
        FT_UINT32, BASE_DEC, VALS(tetra_D_MLE_PDU_vals), 0,
10854
15
        "D_MLE_PDU", HFILL }},
10855
15
    { &hf_tetra_bl_ack_01,
10856
15
      { "bl-ack", "tetra.bl_ack_element",
10857
15
        FT_NONE, BASE_NONE, NULL, 0,
10858
15
        "D_BL_ACK", HFILL }},
10859
15
    { &hf_tetra_bl_adata_fcs_01,
10860
15
      { "bl-adata-fcs", "tetra.bl_adata_fcs_element",
10861
15
        FT_NONE, BASE_NONE, NULL, 0,
10862
15
        "D_BL_ADATA_FCS", HFILL }},
10863
15
    { &hf_tetra_bl_data_fcs_01,
10864
15
      { "bl-data-fcs", "tetra.bl_data_fcs_element",
10865
15
        FT_NONE, BASE_NONE, NULL, 0,
10866
15
        "D_BL_DATA_FCS", HFILL }},
10867
15
    { &hf_tetra_bl_udata_fcs_01,
10868
15
      { "bl-udata-fcs", "tetra.bl_udata_fcs_element",
10869
15
        FT_NONE, BASE_NONE, NULL, 0,
10870
15
        "D_MLE_PDU_FCS", HFILL }},
10871
15
    { &hf_tetra_bl_ack_fcs_01,
10872
15
      { "bl-ack-fcs", "tetra.bl_ack_fcs_element",
10873
15
        FT_NONE, BASE_NONE, NULL, 0,
10874
15
        "D_BL_ACK_FCS", HFILL }},
10875
15
    { &hf_tetra_tl_sdu_01,
10876
15
      { "tl-sdu", "tetra.tl_sdu",
10877
15
        FT_UINT32, BASE_DEC, VALS(tetra_D_MLE_PDU_vals), 0,
10878
15
        "D_MLE_PDU", HFILL }},
10879
15
    { &hf_tetra_d_mle_pdu,
10880
15
      { "d-mle-pdu", "tetra.d_mle_pdu",
10881
15
        FT_UINT32, BASE_DEC, VALS(tetra_D_MLE_PDU_vals), 0,
10882
15
        NULL, HFILL }},
10883
15
    { &hf_tetra_mm_01,
10884
15
      { "mm", "tetra.mm",
10885
15
        FT_UINT32, BASE_DEC, VALS(tetra_D_MM_PDU_vals), 0,
10886
15
        "D_MM_PDU", HFILL }},
10887
15
    { &hf_tetra_cmce_01,
10888
15
      { "cmce", "tetra.cmce",
10889
15
        FT_UINT32, BASE_DEC, VALS(tetra_D_CMCE_PDU_vals), 0,
10890
15
        "D_CMCE_PDU", HFILL }},
10891
15
    { &hf_tetra_mle_01,
10892
15
      { "mle", "tetra.mle",
10893
15
        FT_UINT32, BASE_DEC, VALS(tetra_DMLE_PDU_vals), 0,
10894
15
        "DMLE_PDU", HFILL }},
10895
15
    { &hf_tetra_u_prepare,
10896
15
      { "u-prepare", "tetra.u_prepare_element",
10897
15
        FT_NONE, BASE_NONE, NULL, 0,
10898
15
        NULL, HFILL }},
10899
15
    { &hf_tetra_umle_reserved1,
10900
15
      { "umle-reserved1", "tetra.umle_reserved1_element",
10901
15
        FT_NONE, BASE_NONE, NULL, 0,
10902
15
        NULL, HFILL }},
10903
15
    { &hf_tetra_umle_reserved2,
10904
15
      { "umle-reserved2", "tetra.umle_reserved2_element",
10905
15
        FT_NONE, BASE_NONE, NULL, 0,
10906
15
        NULL, HFILL }},
10907
15
    { &hf_tetra_umle_reserved3,
10908
15
      { "umle-reserved3", "tetra.umle_reserved3_element",
10909
15
        FT_NONE, BASE_NONE, NULL, 0,
10910
15
        NULL, HFILL }},
10911
15
    { &hf_tetra_u_restore,
10912
15
      { "u-restore", "tetra.u_restore_element",
10913
15
        FT_NONE, BASE_NONE, NULL, 0,
10914
15
        NULL, HFILL }},
10915
15
    { &hf_tetra_umle_reserved4,
10916
15
      { "umle-reserved4", "tetra.umle_reserved4_element",
10917
15
        FT_NONE, BASE_NONE, NULL, 0,
10918
15
        NULL, HFILL }},
10919
15
    { &hf_tetra_umle_reserved5,
10920
15
      { "umle-reserved5", "tetra.umle_reserved5_element",
10921
15
        FT_NONE, BASE_NONE, NULL, 0,
10922
15
        NULL, HFILL }},
10923
15
    { &hf_tetra_umle_reserved6,
10924
15
      { "umle-reserved6", "tetra.umle_reserved6_element",
10925
15
        FT_NONE, BASE_NONE, NULL, 0,
10926
15
        NULL, HFILL }},
10927
15
    { &hf_tetra_d_new_cell,
10928
15
      { "d-new-cell", "tetra.d_new_cell_element",
10929
15
        FT_NONE, BASE_NONE, NULL, 0,
10930
15
        NULL, HFILL }},
10931
15
    { &hf_tetra_d_prepare_fail,
10932
15
      { "d-prepare-fail", "tetra.d_prepare_fail_element",
10933
15
        FT_NONE, BASE_NONE, NULL, 0,
10934
15
        NULL, HFILL }},
10935
15
    { &hf_tetra_d_nwrk_broadcast,
10936
15
      { "d-nwrk-broadcast", "tetra.d_nwrk_broadcast_element",
10937
15
        FT_NONE, BASE_NONE, NULL, 0,
10938
15
        "D_NWRK_BRDADCAST", HFILL }},
10939
15
    { &hf_tetra_dmle_reserved1,
10940
15
      { "dmle-reserved1", "tetra.dmle_reserved1_element",
10941
15
        FT_NONE, BASE_NONE, NULL, 0,
10942
15
        NULL, HFILL }},
10943
15
    { &hf_tetra_d_restore_ack,
10944
15
      { "d-restore-ack", "tetra.d_restore_ack_element",
10945
15
        FT_NONE, BASE_NONE, NULL, 0,
10946
15
        NULL, HFILL }},
10947
15
    { &hf_tetra_d_restore_fail,
10948
15
      { "d-restore-fail", "tetra.d_restore_fail_element",
10949
15
        FT_NONE, BASE_NONE, NULL, 0,
10950
15
        NULL, HFILL }},
10951
15
    { &hf_tetra_dmle_reserved2,
10952
15
      { "dmle-reserved2", "tetra.dmle_reserved2_element",
10953
15
        FT_NONE, BASE_NONE, NULL, 0,
10954
15
        NULL, HFILL }},
10955
15
    { &hf_tetra_dmle_reserved3,
10956
15
      { "dmle-reserved3", "tetra.dmle_reserved3_element",
10957
15
        FT_NONE, BASE_NONE, NULL, 0,
10958
15
        NULL, HFILL }},
10959
15
    { &hf_tetra_optional_elements,
10960
15
      { "optional-elements", "tetra.optional_elements",
10961
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_vals), 0,
10962
15
        NULL, HFILL }},
10963
15
    { &hf_tetra_no_type2,
10964
15
      { "no-type2", "tetra.no_type2_element",
10965
15
        FT_NONE, BASE_NONE, NULL, 0,
10966
15
        NULL, HFILL }},
10967
15
    { &hf_tetra_type2_parameters,
10968
15
      { "type2-parameters", "tetra.type2_parameters_element",
10969
15
        FT_NONE, BASE_NONE, NULL, 0,
10970
15
        NULL, HFILL }},
10971
15
    { &hf_tetra_cell_number,
10972
15
      { "cell-number", "tetra.cell_number",
10973
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_cell_number_vals), 0,
10974
15
        NULL, HFILL }},
10975
15
    { &hf_tetra_cell_number_01,
10976
15
      { "cell-number", "tetra.cell_number",
10977
15
        FT_UINT32, BASE_DEC, NULL, 0,
10978
15
        "INTEGER_0_65535", HFILL }},
10979
15
    { &hf_tetra_sdu,
10980
15
      { "sdu", "tetra.sdu",
10981
15
        FT_BYTES, BASE_NONE, NULL, 0,
10982
15
        "BIT_STRING", HFILL }},
10983
15
    { &hf_tetra_optional_elements_01,
10984
15
      { "optional-elements", "tetra.optional_elements",
10985
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_01_vals), 0,
10986
15
        "T_optional_elements_01", HFILL }},
10987
15
    { &hf_tetra_type2_parameters_01,
10988
15
      { "type2-parameters", "tetra.type2_parameters_element",
10989
15
        FT_NONE, BASE_NONE, NULL, 0,
10990
15
        "T_type2_parameters_01", HFILL }},
10991
15
    { &hf_tetra_mcc_01,
10992
15
      { "mcc", "tetra.mcc",
10993
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_mcc_vals), 0,
10994
15
        NULL, HFILL }},
10995
15
    { &hf_tetra_mnc_01,
10996
15
      { "mnc", "tetra.mnc",
10997
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_mnc_vals), 0,
10998
15
        NULL, HFILL }},
10999
15
    { &hf_tetra_la_01,
11000
15
      { "la", "tetra.la",
11001
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_la_vals), 0,
11002
15
        NULL, HFILL }},
11003
15
    { &hf_tetra_channel_command_valid,
11004
15
      { "channel-command-valid", "tetra.channel_command_valid",
11005
15
        FT_UINT32, BASE_DEC, NULL, 0,
11006
15
        "INTEGER_0_3", HFILL }},
11007
15
    { &hf_tetra_optional_elements_02,
11008
15
      { "optional-elements", "tetra.optional_elements",
11009
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_02_vals), 0,
11010
15
        "T_optional_elements_02", HFILL }},
11011
15
    { &hf_tetra_fail_cause,
11012
15
      { "fail-cause", "tetra.fail_cause",
11013
15
        FT_UINT32, BASE_DEC, NULL, 0,
11014
15
        "INTEGER_0_3", HFILL }},
11015
15
    { &hf_tetra_optional_elements_03,
11016
15
      { "optional-elements", "tetra.optional_elements",
11017
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_03_vals), 0,
11018
15
        "T_optional_elements_03", HFILL }},
11019
15
    { &hf_tetra_cell_re_select_parameters,
11020
15
      { "cell-re-select-parameters", "tetra.cell_re_select_parameters",
11021
15
        FT_UINT32, BASE_DEC, NULL, 0,
11022
15
        "INTEGER_0_65535", HFILL }},
11023
15
    { &hf_tetra_optional_elements_04,
11024
15
      { "optional-elements", "tetra.optional_elements",
11025
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_04_vals), 0,
11026
15
        "T_optional_elements_04", HFILL }},
11027
15
    { &hf_tetra_type2_parameters_02,
11028
15
      { "type2-parameters", "tetra.type2_parameters_element",
11029
15
        FT_NONE, BASE_NONE, NULL, 0,
11030
15
        "T_type2_parameters_02", HFILL }},
11031
15
    { &hf_tetra_tetra_network_time,
11032
15
      { "tetra-network-time", "tetra.tetra_network_time",
11033
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_tetra_network_time_vals), 0,
11034
15
        NULL, HFILL }},
11035
15
    { &hf_tetra_tetra_network_time_01,
11036
15
      { "tetra-network-time", "tetra.tetra_network_time_element",
11037
15
        FT_NONE, BASE_NONE, NULL, 0,
11038
15
        NULL, HFILL }},
11039
15
    { &hf_tetra_number_of_neighbour_cells,
11040
15
      { "number-of-neighbour-cells", "tetra.number_of_neighbour_cells",
11041
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_number_of_neighbour_cells_vals), 0,
11042
15
        NULL, HFILL }},
11043
15
    { &hf_tetra_number_of_neighbour_cells_01,
11044
15
      { "number-of-neighbour-cells", "tetra.number_of_neighbour_cells",
11045
15
        FT_UINT32, BASE_DEC, NULL, 0,
11046
15
        "INTEGER_0_7", HFILL }},
11047
15
    { &hf_tetra_network_time,
11048
15
      { "network-time", "tetra.network_time",
11049
15
        FT_UINT64, BASE_DEC, NULL, 0,
11050
15
        NULL, HFILL }},
11051
15
    { &hf_tetra_local_time_offset_sign,
11052
15
      { "local-time-offset-sign", "tetra.local_time_offset_sign",
11053
15
        FT_UINT32, BASE_DEC, NULL, 0,
11054
15
        "INTEGER_0_1", HFILL }},
11055
15
    { &hf_tetra_local_time_offset,
11056
15
      { "local-time-offset", "tetra.local_time_offset",
11057
15
        FT_UINT32, BASE_DEC, NULL, 0,
11058
15
        "INTEGER_0_63", HFILL }},
11059
15
    { &hf_tetra_year,
11060
15
      { "year", "tetra.year",
11061
15
        FT_UINT32, BASE_DEC, NULL, 0,
11062
15
        "INTEGER_0_63", HFILL }},
11063
15
    { &hf_tetra_reserved_04,
11064
15
      { "reserved", "tetra.reserved",
11065
15
        FT_UINT64, BASE_DEC, NULL, 0,
11066
15
        NULL, HFILL }},
11067
15
    { &hf_tetra_u_Authentication,
11068
15
      { "u-Authentication", "tetra.u_Authentication_element",
11069
15
        FT_NONE, BASE_NONE, NULL, 0,
11070
15
        NULL, HFILL }},
11071
15
    { &hf_tetra_u_Itsi_Detach,
11072
15
      { "u-Itsi-Detach", "tetra.u_Itsi_Detach_element",
11073
15
        FT_NONE, BASE_NONE, NULL, 0,
11074
15
        NULL, HFILL }},
11075
15
    { &hf_tetra_u_Location_Update_Demand,
11076
15
      { "u-Location-Update-Demand", "tetra.u_Location_Update_Demand_element",
11077
15
        FT_NONE, BASE_NONE, NULL, 0,
11078
15
        NULL, HFILL }},
11079
15
    { &hf_tetra_u_MM_Status,
11080
15
      { "u-MM-Status", "tetra.u_MM_Status_element",
11081
15
        FT_NONE, BASE_NONE, NULL, 0,
11082
15
        NULL, HFILL }},
11083
15
    { &hf_tetra_u_MM_reserved1,
11084
15
      { "u-MM-reserved1", "tetra.u_MM_reserved1_element",
11085
15
        FT_NONE, BASE_NONE, NULL, 0,
11086
15
        NULL, HFILL }},
11087
15
    { &hf_tetra_u_WK,
11088
15
      { "u-WK", "tetra.u_WK_element",
11089
15
        FT_NONE, BASE_NONE, NULL, 0,
11090
15
        NULL, HFILL }},
11091
15
    { &hf_tetra_u_MM_reserved3,
11092
15
      { "u-MM-reserved3", "tetra.u_MM_reserved3_element",
11093
15
        FT_NONE, BASE_NONE, NULL, 0,
11094
15
        NULL, HFILL }},
11095
15
    { &hf_tetra_u_Attach_Detach_Group_Identity,
11096
15
      { "u-Attach-Detach-Group-Identity", "tetra.u_Attach_Detach_Group_Identity_element",
11097
15
        FT_NONE, BASE_NONE, NULL, 0,
11098
15
        NULL, HFILL }},
11099
15
    { &hf_tetra_u_Attach_Detach_Group_Identity_Ack,
11100
15
      { "u-Attach-Detach-Group-Identity-Ack", "tetra.u_Attach_Detach_Group_Identity_Ack_element",
11101
15
        FT_NONE, BASE_NONE, NULL, 0,
11102
15
        NULL, HFILL }},
11103
15
    { &hf_tetra_u_TEI_Provide,
11104
15
      { "u-TEI-Provide", "tetra.u_TEI_Provide_element",
11105
15
        FT_NONE, BASE_NONE, NULL, 0,
11106
15
        NULL, HFILL }},
11107
15
    { &hf_tetra_u_MM_reserved6,
11108
15
      { "u-MM-reserved6", "tetra.u_MM_reserved6_element",
11109
15
        FT_NONE, BASE_NONE, NULL, 0,
11110
15
        NULL, HFILL }},
11111
15
    { &hf_tetra_u_Disabled_Status,
11112
15
      { "u-Disabled-Status", "tetra.u_Disabled_Status_element",
11113
15
        FT_NONE, BASE_NONE, NULL, 0,
11114
15
        NULL, HFILL }},
11115
15
    { &hf_tetra_u_MM_reserved7,
11116
15
      { "u-MM-reserved7", "tetra.u_MM_reserved7_element",
11117
15
        FT_NONE, BASE_NONE, NULL, 0,
11118
15
        NULL, HFILL }},
11119
15
    { &hf_tetra_u_MM_reserved8,
11120
15
      { "u-MM-reserved8", "tetra.u_MM_reserved8_element",
11121
15
        FT_NONE, BASE_NONE, NULL, 0,
11122
15
        NULL, HFILL }},
11123
15
    { &hf_tetra_u_MM_reserved9,
11124
15
      { "u-MM-reserved9", "tetra.u_MM_reserved9_element",
11125
15
        FT_NONE, BASE_NONE, NULL, 0,
11126
15
        NULL, HFILL }},
11127
15
    { &hf_tetra_u_MM_Function_Not_Support,
11128
15
      { "u-MM-Function-Not-Support", "tetra.u_MM_Function_Not_Support_element",
11129
15
        FT_NONE, BASE_NONE, NULL, 0,
11130
15
        NULL, HFILL }},
11131
15
    { &hf_tetra_d_Otar,
11132
15
      { "d-Otar", "tetra.d_Otar_element",
11133
15
        FT_NONE, BASE_NONE, NULL, 0,
11134
15
        NULL, HFILL }},
11135
15
    { &hf_tetra_d_Authentication,
11136
15
      { "d-Authentication", "tetra.d_Authentication_element",
11137
15
        FT_NONE, BASE_NONE, NULL, 0,
11138
15
        NULL, HFILL }},
11139
15
    { &hf_tetra_d_Authentication_Reject,
11140
15
      { "d-Authentication-Reject", "tetra.d_Authentication_Reject_element",
11141
15
        FT_NONE, BASE_NONE, NULL, 0,
11142
15
        NULL, HFILL }},
11143
15
    { &hf_tetra_d_Disable,
11144
15
      { "d-Disable", "tetra.d_Disable_element",
11145
15
        FT_NONE, BASE_NONE, NULL, 0,
11146
15
        NULL, HFILL }},
11147
15
    { &hf_tetra_d_Enable,
11148
15
      { "d-Enable", "tetra.d_Enable_element",
11149
15
        FT_NONE, BASE_NONE, NULL, 0,
11150
15
        NULL, HFILL }},
11151
15
    { &hf_tetra_d_Location_Update_Accept,
11152
15
      { "d-Location-Update-Accept", "tetra.d_Location_Update_Accept_element",
11153
15
        FT_NONE, BASE_NONE, NULL, 0,
11154
15
        NULL, HFILL }},
11155
15
    { &hf_tetra_d_Location_Update_Command,
11156
15
      { "d-Location-Update-Command", "tetra.d_Location_Update_Command_element",
11157
15
        FT_NONE, BASE_NONE, NULL, 0,
11158
15
        NULL, HFILL }},
11159
15
    { &hf_tetra_d_Location_Update_Reject,
11160
15
      { "d-Location-Update-Reject", "tetra.d_Location_Update_Reject_element",
11161
15
        FT_NONE, BASE_NONE, NULL, 0,
11162
15
        NULL, HFILL }},
11163
15
    { &hf_tetra_d_MM_reserved2,
11164
15
      { "d-MM-reserved2", "tetra.d_MM_reserved2_element",
11165
15
        FT_NONE, BASE_NONE, NULL, 0,
11166
15
        NULL, HFILL }},
11167
15
    { &hf_tetra_d_Location_Update_Proceeding,
11168
15
      { "d-Location-Update-Proceeding", "tetra.d_Location_Update_Proceeding_element",
11169
15
        FT_NONE, BASE_NONE, NULL, 0,
11170
15
        NULL, HFILL }},
11171
15
    { &hf_tetra_d_Attach_Detach_Group_Identity,
11172
15
      { "d-Attach-Detach-Group-Identity", "tetra.d_Attach_Detach_Group_Identity_element",
11173
15
        FT_NONE, BASE_NONE, NULL, 0,
11174
15
        NULL, HFILL }},
11175
15
    { &hf_tetra_d_Attach_Detach_Group_Identity_Ack,
11176
15
      { "d-Attach-Detach-Group-Identity-Ack", "tetra.d_Attach_Detach_Group_Identity_Ack_element",
11177
15
        FT_NONE, BASE_NONE, NULL, 0,
11178
15
        NULL, HFILL }},
11179
15
    { &hf_tetra_d_MM_Status,
11180
15
      { "d-MM-Status", "tetra.d_MM_Status_element",
11181
15
        FT_NONE, BASE_NONE, NULL, 0,
11182
15
        NULL, HFILL }},
11183
15
    { &hf_tetra_d_MM_reserved5,
11184
15
      { "d-MM-reserved5", "tetra.d_MM_reserved5_element",
11185
15
        FT_NONE, BASE_NONE, NULL, 0,
11186
15
        NULL, HFILL }},
11187
15
    { &hf_tetra_d_MM_reserved6,
11188
15
      { "d-MM-reserved6", "tetra.d_MM_reserved6_element",
11189
15
        FT_NONE, BASE_NONE, NULL, 0,
11190
15
        NULL, HFILL }},
11191
15
    { &hf_tetra_d_MM_Function_Not_Support,
11192
15
      { "d-MM-Function-Not-Support", "tetra.d_MM_Function_Not_Support_element",
11193
15
        FT_NONE, BASE_NONE, NULL, 0,
11194
15
        NULL, HFILL }},
11195
15
    { &hf_tetra_attach_detach_identifier,
11196
15
      { "attach-detach-identifier", "tetra.attach_detach_identifier",
11197
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_attach_detach_identifier_vals), 0,
11198
15
        NULL, HFILL }},
11199
15
    { &hf_tetra_attach,
11200
15
      { "attach", "tetra.attach_element",
11201
15
        FT_NONE, BASE_NONE, NULL, 0,
11202
15
        NULL, HFILL }},
11203
15
    { &hf_tetra_lifetime,
11204
15
      { "lifetime", "tetra.lifetime",
11205
15
        FT_UINT32, BASE_DEC, NULL, 0,
11206
15
        "INTEGER_0_3", HFILL }},
11207
15
    { &hf_tetra_class_of_usage,
11208
15
      { "class-of-usage", "tetra.class_of_usage",
11209
15
        FT_UINT32, BASE_DEC, NULL, 0,
11210
15
        "INTEGER_0_7", HFILL }},
11211
15
    { &hf_tetra_detach,
11212
15
      { "detach", "tetra.detach_element",
11213
15
        FT_NONE, BASE_NONE, NULL, 0,
11214
15
        NULL, HFILL }},
11215
15
    { &hf_tetra_detach_downlike,
11216
15
      { "detach-downlike", "tetra.detach_downlike",
11217
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_detach_downlike_vals), 0,
11218
15
        NULL, HFILL }},
11219
15
    { &hf_tetra_address_type,
11220
15
      { "address-type", "tetra.address_type",
11221
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_address_type_vals), 0,
11222
15
        NULL, HFILL }},
11223
15
    { &hf_tetra_gssi_oct_str,
11224
15
      { "gssi", "tetra.gssi_oct_str",
11225
15
        FT_BYTES, BASE_NONE, NULL, 0,
11226
15
        "OCTET_STRING_SIZE_3", HFILL }},
11227
15
    { &hf_tetra_gssi_extension,
11228
15
      { "gssi-extension", "tetra.gssi_extension_element",
11229
15
        FT_NONE, BASE_NONE, NULL, 0,
11230
15
        NULL, HFILL }},
11231
15
    { &hf_tetra_extension,
11232
15
      { "extension", "tetra.extension",
11233
15
        FT_BYTES, BASE_NONE, NULL, 0,
11234
15
        "OCTET_STRING_SIZE_3", HFILL }},
11235
15
    { &hf_tetra_vgssi,
11236
15
      { "vgssi", "tetra.vgssi",
11237
15
        FT_BYTES, BASE_NONE, NULL, 0,
11238
15
        "OCTET_STRING_SIZE_3", HFILL }},
11239
15
    { &hf_tetra_attach_detach_identifier_01,
11240
15
      { "attach-detach-identifier", "tetra.attach_detach_identifier",
11241
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_attach_detach_identifier_01_vals), 0,
11242
15
        "T_attach_detach_identifier_01", HFILL }},
11243
15
    { &hf_tetra_attach_01,
11244
15
      { "attach", "tetra.attach_element",
11245
15
        FT_NONE, BASE_NONE, NULL, 0,
11246
15
        "T_attach_01", HFILL }},
11247
15
    { &hf_tetra_detach_01,
11248
15
      { "detach", "tetra.detach_element",
11249
15
        FT_NONE, BASE_NONE, NULL, 0,
11250
15
        "T_detach_01", HFILL }},
11251
15
    { &hf_tetra_detach_uplike,
11252
15
      { "detach-uplike", "tetra.detach_uplike",
11253
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_detach_uplike_vals), 0,
11254
15
        NULL, HFILL }},
11255
15
    { &hf_tetra_address_type_01,
11256
15
      { "address-type", "tetra.address_type",
11257
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_address_type_01_vals), 0,
11258
15
        "T_address_type_01", HFILL }},
11259
15
    { &hf_tetra_gssi_extension_01,
11260
15
      { "gssi-extension", "tetra.gssi_extension_element",
11261
15
        FT_NONE, BASE_NONE, NULL, 0,
11262
15
        "T_gssi_extension_01", HFILL }},
11263
15
    { &hf_tetra_location_update_type,
11264
15
      { "location-update-type", "tetra.location_update_type",
11265
15
        FT_UINT32, BASE_DEC, VALS(tetra_UPDATE_TYPE_vals), 0,
11266
15
        "UPDATE_TYPE", HFILL }},
11267
15
    { &hf_tetra_optional_elements_05,
11268
15
      { "optional-elements", "tetra.optional_elements",
11269
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_05_vals), 0,
11270
15
        "T_optional_elements_05", HFILL }},
11271
15
    { &hf_tetra_type2_parameters_03,
11272
15
      { "type2-parameters", "tetra.type2_parameters_element",
11273
15
        FT_NONE, BASE_NONE, NULL, 0,
11274
15
        "T_type2_parameters_03", HFILL }},
11275
15
    { &hf_tetra_ssi_choice,
11276
15
      { "ssi", "tetra.ssi_choice",
11277
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_ssi_choice_vals), 0,
11278
15
        "T_ssi_choice", HFILL }},
11279
15
    { &hf_tetra_ssi_oct_str,
11280
15
      { "ssi", "tetra.ssi_oct_str",
11281
15
        FT_BYTES, BASE_NONE, NULL, 0,
11282
15
        "OCTET_STRING_SIZE_3", HFILL }},
11283
15
    { &hf_tetra_address_extension_choice,
11284
15
      { "address-extension", "tetra.address_extension_choice",
11285
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_address_extension_choice_vals), 0,
11286
15
        "T_address_extension_choice", HFILL }},
11287
15
    { &hf_tetra_address_extension,
11288
15
      { "address-extension", "tetra.address_extension",
11289
15
        FT_BYTES, BASE_NONE, NULL, 0,
11290
15
        "OCTET_STRING_SIZE_3", HFILL }},
11291
15
    { &hf_tetra_subscriber_class_choice,
11292
15
      { "subscriber-class", "tetra.subscriber_class_choice",
11293
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_subscriber_class_choice_vals), 0,
11294
15
        "T_subscriber_class_choice", HFILL }},
11295
15
    { &hf_tetra_energy_saving_mode,
11296
15
      { "energy-saving-mode", "tetra.energy_saving_mode",
11297
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_energy_saving_mode_vals), 0,
11298
15
        NULL, HFILL }},
11299
15
    { &hf_tetra_energy_saving_mode_01,
11300
15
      { "energy-saving-mode", "tetra.energy_saving_mode",
11301
15
        FT_UINT32, BASE_DEC, NULL, 0,
11302
15
        "INTEGER_0_7", HFILL }},
11303
15
    { &hf_tetra_scch_info,
11304
15
      { "scch-info", "tetra.scch_info",
11305
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_scch_info_vals), 0,
11306
15
        NULL, HFILL }},
11307
15
    { &hf_tetra_scch_info_01,
11308
15
      { "scch-info", "tetra.scch_info",
11309
15
        FT_UINT32, BASE_DEC, NULL, 0,
11310
15
        "INTEGER_0_16383", HFILL }},
11311
15
    { &hf_tetra_type3,
11312
15
      { "type3", "tetra.type3",
11313
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_type3_vals), 0,
11314
15
        NULL, HFILL }},
11315
15
    { &hf_tetra_no_type3,
11316
15
      { "no-type3", "tetra.no_type3_element",
11317
15
        FT_NONE, BASE_NONE, NULL, 0,
11318
15
        NULL, HFILL }},
11319
15
    { &hf_tetra_type3_elements,
11320
15
      { "type3-elements", "tetra.type3_elements_element",
11321
15
        FT_NONE, BASE_NONE, NULL, 0,
11322
15
        NULL, HFILL }},
11323
15
    { &hf_tetra_type2_existance,
11324
15
      { "type2-existance", "tetra.type2_existance",
11325
15
        FT_BOOLEAN, BASE_NONE, NULL, 0,
11326
15
        "BOOLEAN", HFILL }},
11327
15
    { &hf_tetra_type3_identifier,
11328
15
      { "type3-identifier", "tetra.type3_identifier",
11329
15
        FT_UINT32, BASE_DEC, VALS(tetra_TYPE3_IDENTIFIER_vals), 0,
11330
15
        NULL, HFILL }},
11331
15
    { &hf_tetra_new_ra,
11332
15
      { "new-ra", "tetra.new_ra",
11333
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_new_ra_vals), 0,
11334
15
        NULL, HFILL }},
11335
15
    { &hf_tetra_new_ra_01,
11336
15
      { "new-ra", "tetra.new_ra",
11337
15
        FT_UINT32, BASE_DEC, NULL, 0,
11338
15
        "INTEGER_0_3", HFILL }},
11339
15
    { &hf_tetra_group_identity_location_accept,
11340
15
      { "group-identity-location-accept", "tetra.group_identity_location_accept",
11341
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_group_identity_location_accept_vals), 0,
11342
15
        NULL, HFILL }},
11343
15
    { &hf_tetra_group_identity_location_accept_01,
11344
15
      { "group-identity-location-accept", "tetra.group_identity_location_accept",
11345
15
        FT_UINT32, BASE_DEC, NULL, 0,
11346
15
        "INTEGER_0_3", HFILL }},
11347
15
    { &hf_tetra_group_predefined_lifetime,
11348
15
      { "group-predefined-lifetime", "tetra.group_predefined_lifetime",
11349
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_group_predefined_lifetime_vals), 0,
11350
15
        NULL, HFILL }},
11351
15
    { &hf_tetra_group_predefined_lifetime_01,
11352
15
      { "group-predefined-lifetime", "tetra.group_predefined_lifetime",
11353
15
        FT_UINT32, BASE_DEC, NULL, 0,
11354
15
        "INTEGER_0_3", HFILL }},
11355
15
    { &hf_tetra_group_identity_downlink,
11356
15
      { "group-identity-downlink", "tetra.group_identity_downlink",
11357
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_group_identity_downlink_vals), 0,
11358
15
        NULL, HFILL }},
11359
15
    { &hf_tetra_group_identity_downlink_01,
11360
15
      { "group-identity-downlink", "tetra.group_identity_downlink",
11361
15
        FT_UINT32, BASE_DEC, NULL, 0,
11362
15
        "INTEGER_0_15", HFILL }},
11363
15
    { &hf_tetra_proprietary,
11364
15
      { "proprietary", "tetra.proprietary",
11365
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_proprietary_vals), 0,
11366
15
        NULL, HFILL }},
11367
15
    { &hf_tetra_proprietary_01,
11368
15
      { "proprietary", "tetra.proprietary",
11369
15
        FT_UINT32, BASE_DEC, NULL, 0,
11370
15
        "INTEGER_0_7", HFILL }},
11371
15
    { &hf_tetra_reject_cause,
11372
15
      { "reject-cause", "tetra.reject_cause",
11373
15
        FT_UINT32, BASE_DEC, NULL, 0,
11374
15
        "INTEGER_0_31", HFILL }},
11375
15
    { &hf_tetra_cipher_control,
11376
15
      { "cipher-control", "tetra.cipher_control",
11377
15
        FT_BOOLEAN, BASE_NONE, NULL, 0,
11378
15
        "BOOLEAN", HFILL }},
11379
15
    { &hf_tetra_status_uplink,
11380
15
      { "status-uplink", "tetra.status_uplink",
11381
15
        FT_UINT32, BASE_DEC, NULL, 0,
11382
15
        "INTEGER_0_63", HFILL }},
11383
15
    { &hf_tetra_scanning_on_off,
11384
15
      { "scanning-on-off", "tetra.scanning_on_off",
11385
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_scanning_on_off_vals), 0,
11386
15
        NULL, HFILL }},
11387
15
    { &hf_tetra_status_downlink,
11388
15
      { "status-downlink", "tetra.status_downlink",
11389
15
        FT_UINT32, BASE_DEC, NULL, 0,
11390
15
        "INTEGER_0_63", HFILL }},
11391
15
    { &hf_tetra_u_Alert,
11392
15
      { "u-Alert", "tetra.u_Alert_element",
11393
15
        FT_NONE, BASE_NONE, NULL, 0,
11394
15
        NULL, HFILL }},
11395
15
    { &hf_tetra_reserved1,
11396
15
      { "reserved1", "tetra.reserved1_element",
11397
15
        FT_NONE, BASE_NONE, NULL, 0,
11398
15
        NULL, HFILL }},
11399
15
    { &hf_tetra_u_Connect,
11400
15
      { "u-Connect", "tetra.u_Connect_element",
11401
15
        FT_NONE, BASE_NONE, NULL, 0,
11402
15
        NULL, HFILL }},
11403
15
    { &hf_tetra_reserved2,
11404
15
      { "reserved2", "tetra.reserved2_element",
11405
15
        FT_NONE, BASE_NONE, NULL, 0,
11406
15
        NULL, HFILL }},
11407
15
    { &hf_tetra_u_Disconnect,
11408
15
      { "u-Disconnect", "tetra.u_Disconnect_element",
11409
15
        FT_NONE, BASE_NONE, NULL, 0,
11410
15
        NULL, HFILL }},
11411
15
    { &hf_tetra_u_Info,
11412
15
      { "u-Info", "tetra.u_Info_element",
11413
15
        FT_NONE, BASE_NONE, NULL, 0,
11414
15
        NULL, HFILL }},
11415
15
    { &hf_tetra_u_Release,
11416
15
      { "u-Release", "tetra.u_Release_element",
11417
15
        FT_NONE, BASE_NONE, NULL, 0,
11418
15
        NULL, HFILL }},
11419
15
    { &hf_tetra_u_Setup,
11420
15
      { "u-Setup", "tetra.u_Setup_element",
11421
15
        FT_NONE, BASE_NONE, NULL, 0,
11422
15
        NULL, HFILL }},
11423
15
    { &hf_tetra_u_Status,
11424
15
      { "u-Status", "tetra.u_Status_element",
11425
15
        FT_NONE, BASE_NONE, NULL, 0,
11426
15
        NULL, HFILL }},
11427
15
    { &hf_tetra_u_Tx_Ceased,
11428
15
      { "u-Tx-Ceased", "tetra.u_Tx_Ceased_element",
11429
15
        FT_NONE, BASE_NONE, NULL, 0,
11430
15
        NULL, HFILL }},
11431
15
    { &hf_tetra_u_Tx_Demand,
11432
15
      { "u-Tx-Demand", "tetra.u_Tx_Demand_element",
11433
15
        FT_NONE, BASE_NONE, NULL, 0,
11434
15
        NULL, HFILL }},
11435
15
    { &hf_tetra_reserved3,
11436
15
      { "reserved3", "tetra.reserved3_element",
11437
15
        FT_NONE, BASE_NONE, NULL, 0,
11438
15
        NULL, HFILL }},
11439
15
    { &hf_tetra_reserved4,
11440
15
      { "reserved4", "tetra.reserved4_element",
11441
15
        FT_NONE, BASE_NONE, NULL, 0,
11442
15
        NULL, HFILL }},
11443
15
    { &hf_tetra_reserved5,
11444
15
      { "reserved5", "tetra.reserved5_element",
11445
15
        FT_NONE, BASE_NONE, NULL, 0,
11446
15
        NULL, HFILL }},
11447
15
    { &hf_tetra_u_Call_Restore,
11448
15
      { "u-Call-Restore", "tetra.u_Call_Restore_element",
11449
15
        FT_NONE, BASE_NONE, NULL, 0,
11450
15
        NULL, HFILL }},
11451
15
    { &hf_tetra_u_SDS_Data,
11452
15
      { "u-SDS-Data", "tetra.u_SDS_Data_element",
11453
15
        FT_NONE, BASE_NONE, NULL, 0,
11454
15
        NULL, HFILL }},
11455
15
    { &hf_tetra_u_Facility,
11456
15
      { "u-Facility", "tetra.u_Facility_element",
11457
15
        FT_NONE, BASE_NONE, NULL, 0,
11458
15
        NULL, HFILL }},
11459
15
    { &hf_tetra_call_identifier,
11460
15
      { "call-identifier", "tetra.call_identifier",
11461
15
        FT_UINT32, BASE_DEC, NULL, 0,
11462
15
        "INTEGER_0_16383", HFILL }},
11463
15
    { &hf_tetra_disconnect_cause,
11464
15
      { "disconnect-cause", "tetra.disconnect_cause",
11465
15
        FT_UINT32, BASE_DEC, NULL, 0,
11466
15
        "INTEGER_0_31", HFILL }},
11467
15
    { &hf_tetra_area_selection,
11468
15
      { "area-selection", "tetra.area_selection",
11469
15
        FT_UINT32, BASE_DEC, NULL, 0,
11470
15
        "INTEGER_0_15", HFILL }},
11471
15
    { &hf_tetra_called_party_type_identifier,
11472
15
      { "called-party-type-identifier", "tetra.called_party_type_identifier",
11473
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_called_party_type_identifier_vals), 0,
11474
15
        NULL, HFILL }},
11475
15
    { &hf_tetra_sna,
11476
15
      { "sna", "tetra.sna",
11477
15
        FT_UINT32, BASE_DEC, NULL, 0,
11478
15
        "INTEGER_0_255", HFILL }},
11479
15
    { &hf_tetra_ssi_extension,
11480
15
      { "ssi-extension", "tetra.ssi_extension",
11481
15
        FT_BYTES, BASE_NONE, NULL, 0,
11482
15
        "BIT_STRING_SIZE_48", HFILL }},
11483
15
    { &hf_tetra_short_data_type_identifier,
11484
15
      { "short-data-type-identifier", "tetra.short_data_type_identifier",
11485
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_short_data_type_identifier_vals), 0,
11486
15
        "T_short_data_type_identifier", HFILL }},
11487
15
    { &hf_tetra_data_1,
11488
15
      { "data-1", "tetra.data_1",
11489
15
        FT_UINT32, BASE_DEC, NULL, 0,
11490
15
        "INTEGER_0_65535", HFILL }},
11491
15
    { &hf_tetra_data_2,
11492
15
      { "data-2", "tetra.data_2",
11493
15
        FT_BYTES, BASE_NONE, NULL, 0,
11494
15
        "OCTET_STRING_SIZE_4", HFILL }},
11495
15
    { &hf_tetra_data_3,
11496
15
      { "data-3", "tetra.data_3",
11497
15
        FT_BYTES, BASE_NONE, NULL, 0,
11498
15
        "BIT_STRING_SIZE_64", HFILL }},
11499
15
    { &hf_tetra_length_indicator_data_4,
11500
15
      { "length-indicator-data-4", "tetra.length_indicator_data_4",
11501
15
        FT_UINT32, BASE_DEC, NULL, 0,
11502
15
        "INTEGER_0_4194304", HFILL }},
11503
15
    { &hf_tetra_called_party_type_identifier_01,
11504
15
      { "called-party-type-identifier", "tetra.called_party_type_identifier",
11505
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_called_party_type_identifier_01_vals), 0,
11506
15
        "T_called_party_type_identifier_01", HFILL }},
11507
15
    { &hf_tetra_short_number_address,
11508
15
      { "short-number-address", "tetra.short_number_address",
11509
15
        FT_UINT32, BASE_DEC, NULL, 0,
11510
15
        "INTEGER_0_255", HFILL }},
11511
15
    { &hf_tetra_called_ssi_called_extension,
11512
15
      { "called-ssi-called-extension", "tetra.called_ssi_called_extension",
11513
15
        FT_BYTES, BASE_NONE, NULL, 0,
11514
15
        "BIT_STRING_SIZE_48", HFILL }},
11515
15
    { &hf_tetra_pre_coded_status,
11516
15
      { "pre-coded-status", "tetra.pre_coded_status",
11517
15
        FT_UINT32, BASE_DEC, NULL, 0,
11518
15
        "INTEGER_0_65535", HFILL }},
11519
15
    { &hf_tetra_call_id,
11520
15
      { "call-id", "tetra.call_id",
11521
15
        FT_UINT32, BASE_DEC, NULL, 0,
11522
15
        "INTEGER_0_16383", HFILL }},
11523
15
    { &hf_tetra_poll_response,
11524
15
      { "poll-response", "tetra.poll_response",
11525
15
        FT_UINT32, BASE_DEC, NULL, 0,
11526
15
        "INTEGER_0_1", HFILL }},
11527
15
    { &hf_tetra_d_Alert,
11528
15
      { "d-Alert", "tetra.d_Alert_element",
11529
15
        FT_NONE, BASE_NONE, NULL, 0,
11530
15
        NULL, HFILL }},
11531
15
    { &hf_tetra_d_Call_Proceeding,
11532
15
      { "d-Call-Proceeding", "tetra.d_Call_Proceeding_element",
11533
15
        FT_NONE, BASE_NONE, NULL, 0,
11534
15
        NULL, HFILL }},
11535
15
    { &hf_tetra_d_Connect,
11536
15
      { "d-Connect", "tetra.d_Connect_element",
11537
15
        FT_NONE, BASE_NONE, NULL, 0,
11538
15
        NULL, HFILL }},
11539
15
    { &hf_tetra_d_Connect_Ack,
11540
15
      { "d-Connect-Ack", "tetra.d_Connect_Ack_element",
11541
15
        FT_NONE, BASE_NONE, NULL, 0,
11542
15
        NULL, HFILL }},
11543
15
    { &hf_tetra_d_Disconnect,
11544
15
      { "d-Disconnect", "tetra.d_Disconnect_element",
11545
15
        FT_NONE, BASE_NONE, NULL, 0,
11546
15
        NULL, HFILL }},
11547
15
    { &hf_tetra_d_Info,
11548
15
      { "d-Info", "tetra.d_Info_element",
11549
15
        FT_NONE, BASE_NONE, NULL, 0,
11550
15
        NULL, HFILL }},
11551
15
    { &hf_tetra_d_Release,
11552
15
      { "d-Release", "tetra.d_Release_element",
11553
15
        FT_NONE, BASE_NONE, NULL, 0,
11554
15
        NULL, HFILL }},
11555
15
    { &hf_tetra_d_Setup,
11556
15
      { "d-Setup", "tetra.d_Setup_element",
11557
15
        FT_NONE, BASE_NONE, NULL, 0,
11558
15
        NULL, HFILL }},
11559
15
    { &hf_tetra_d_Status,
11560
15
      { "d-Status", "tetra.d_Status_element",
11561
15
        FT_NONE, BASE_NONE, NULL, 0,
11562
15
        NULL, HFILL }},
11563
15
    { &hf_tetra_d_Tx_Ceased,
11564
15
      { "d-Tx-Ceased", "tetra.d_Tx_Ceased_element",
11565
15
        FT_NONE, BASE_NONE, NULL, 0,
11566
15
        NULL, HFILL }},
11567
15
    { &hf_tetra_d_Tx_Continue,
11568
15
      { "d-Tx-Continue", "tetra.d_Tx_Continue_element",
11569
15
        FT_NONE, BASE_NONE, NULL, 0,
11570
15
        NULL, HFILL }},
11571
15
    { &hf_tetra_d_Tx_Granted,
11572
15
      { "d-Tx-Granted", "tetra.d_Tx_Granted_element",
11573
15
        FT_NONE, BASE_NONE, NULL, 0,
11574
15
        NULL, HFILL }},
11575
15
    { &hf_tetra_d_Tx_Wait,
11576
15
      { "d-Tx-Wait", "tetra.d_Tx_Wait_element",
11577
15
        FT_NONE, BASE_NONE, NULL, 0,
11578
15
        NULL, HFILL }},
11579
15
    { &hf_tetra_d_Tx_Interrupt,
11580
15
      { "d-Tx-Interrupt", "tetra.d_Tx_Interrupt_element",
11581
15
        FT_NONE, BASE_NONE, NULL, 0,
11582
15
        NULL, HFILL }},
11583
15
    { &hf_tetra_d_Call_Restore,
11584
15
      { "d-Call-Restore", "tetra.d_Call_Restore_element",
11585
15
        FT_NONE, BASE_NONE, NULL, 0,
11586
15
        NULL, HFILL }},
11587
15
    { &hf_tetra_d_SDS_Data,
11588
15
      { "d-SDS-Data", "tetra.d_SDS_Data_element",
11589
15
        FT_NONE, BASE_NONE, NULL, 0,
11590
15
        NULL, HFILL }},
11591
15
    { &hf_tetra_d_Facility,
11592
15
      { "d-Facility", "tetra.d_Facility_element",
11593
15
        FT_NONE, BASE_NONE, NULL, 0,
11594
15
        NULL, HFILL }},
11595
15
    { &hf_tetra_calling_party_type_identifier,
11596
15
      { "calling-party-type-identifier", "tetra.calling_party_type_identifier",
11597
15
        FT_UINT32, BASE_DEC, VALS(tetra_Calling_party_address_type_vals), 0,
11598
15
        "Calling_party_address_type", HFILL }},
11599
15
    { &hf_tetra_short_data_type_identifier_01,
11600
15
      { "short-data-type-identifier", "tetra.short_data_type_identifier",
11601
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_short_data_type_identifier_01_vals), 0,
11602
15
        "T_short_data_type_identifier_01", HFILL }},
11603
15
    { &hf_tetra_data_3_01,
11604
15
      { "data-3", "tetra.data_3",
11605
15
        FT_BYTES, BASE_NONE, NULL, 0,
11606
15
        "OCTET_STRING_SIZE_8", HFILL }},
11607
15
    { &hf_tetra_optional_elements_06,
11608
15
      { "optional-elements", "tetra.optional_elements",
11609
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_06_vals), 0,
11610
15
        "T_optional_elements_06", HFILL }},
11611
15
    { &hf_tetra_type2_element,
11612
15
      { "type2-element", "tetra.type2_element_element",
11613
15
        FT_NONE, BASE_NONE, NULL, 0,
11614
15
        NULL, HFILL }},
11615
15
    { &hf_tetra_notification_indicator,
11616
15
      { "notification-indicator", "tetra.notification_indicator",
11617
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_notification_indicator_vals), 0,
11618
15
        NULL, HFILL }},
11619
15
    { &hf_tetra_notification_indicator_element,
11620
15
      { "notification-indicator-element", "tetra.notification_indicator_element",
11621
15
        FT_UINT32, BASE_DEC, NULL, 0,
11622
15
        "INTEGER_0_63", HFILL }},
11623
15
    { &hf_tetra_reset_call_time_out_timer,
11624
15
      { "reset-call-time-out-timer", "tetra.reset_call_time_out_timer",
11625
15
        FT_UINT32, BASE_DEC, NULL, 0,
11626
15
        "INTEGER_0_1", HFILL }},
11627
15
    { &hf_tetra_poll_request,
11628
15
      { "poll-request", "tetra.poll_request",
11629
15
        FT_UINT32, BASE_DEC, NULL, 0,
11630
15
        "INTEGER_0_1", HFILL }},
11631
15
    { &hf_tetra_optional_elements_07,
11632
15
      { "optional-elements", "tetra.optional_elements",
11633
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_07_vals), 0,
11634
15
        "T_optional_elements_07", HFILL }},
11635
15
    { &hf_tetra_type2_element_01,
11636
15
      { "type2-element", "tetra.type2_element_element",
11637
15
        FT_NONE, BASE_NONE, NULL, 0,
11638
15
        "T_type2_element_01", HFILL }},
11639
15
    { &hf_tetra_new_call_identifier,
11640
15
      { "new-call-identifier", "tetra.new_call_identifier",
11641
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_new_call_identifier_vals), 0,
11642
15
        NULL, HFILL }},
11643
15
    { &hf_tetra_new_call_identifier_element,
11644
15
      { "new-call-identifier-element", "tetra.new_call_identifier_element",
11645
15
        FT_UINT32, BASE_DEC, NULL, 0,
11646
15
        "INTEGER_0_16383", HFILL }},
11647
15
    { &hf_tetra_call_time_out,
11648
15
      { "call-time-out", "tetra.call_time_out",
11649
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_call_time_out_vals), 0,
11650
15
        NULL, HFILL }},
11651
15
    { &hf_tetra_call_time_out_01,
11652
15
      { "call-time-out", "tetra.call_time_out",
11653
15
        FT_UINT32, BASE_DEC, NULL, 0,
11654
15
        "INTEGER_0_15", HFILL }},
11655
15
    { &hf_tetra_call_time_out_set_up_phase,
11656
15
      { "call-time-out-set-up-phase", "tetra.call_time_out_set_up_phase",
11657
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_call_time_out_set_up_phase_vals), 0,
11658
15
        "T_call_time_out_set_up_phase", HFILL }},
11659
15
    { &hf_tetra_call_time_out_set_up_phase_01,
11660
15
      { "call-time-out-set-up-phase", "tetra.call_time_out_set_up_phase",
11661
15
        FT_UINT32, BASE_DEC, NULL, 0,
11662
15
        "INTEGER_0_7", HFILL }},
11663
15
    { &hf_tetra_call_ownership,
11664
15
      { "call-ownership", "tetra.call_ownership",
11665
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_call_ownership_vals), 0,
11666
15
        NULL, HFILL }},
11667
15
    { &hf_tetra_call_ownership_01,
11668
15
      { "call-ownership", "tetra.call_ownership",
11669
15
        FT_UINT32, BASE_DEC, NULL, 0,
11670
15
        "INTEGER_0_1", HFILL }},
11671
15
    { &hf_tetra_modify,
11672
15
      { "modify", "tetra.modify",
11673
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_modify_vals), 0,
11674
15
        NULL, HFILL }},
11675
15
    { &hf_tetra_modify_01,
11676
15
      { "modify", "tetra.modify_element",
11677
15
        FT_NONE, BASE_NONE, NULL, 0,
11678
15
        "Modify_type", HFILL }},
11679
15
    { &hf_tetra_call_status,
11680
15
      { "call-status", "tetra.call_status",
11681
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_call_status_vals), 0,
11682
15
        NULL, HFILL }},
11683
15
    { &hf_tetra_call_status_01,
11684
15
      { "call-status", "tetra.call_status",
11685
15
        FT_UINT32, BASE_DEC, NULL, 0,
11686
15
        "INTEGER_0_7", HFILL }},
11687
15
    { &hf_tetra_temporary_address,
11688
15
      { "temporary-address", "tetra.temporary_address",
11689
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_temporary_address_vals), 0,
11690
15
        NULL, HFILL }},
11691
15
    { &hf_tetra_temporary_address_01,
11692
15
      { "temporary-address", "tetra.temporary_address",
11693
15
        FT_UINT32, BASE_DEC, NULL, 0,
11694
15
        "INTEGER_0_16777215", HFILL }},
11695
15
    { &hf_tetra_notification_indicator_01,
11696
15
      { "notification-indicator", "tetra.notification_indicator",
11697
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_notification_indicator_01_vals), 0,
11698
15
        "T_notification_indicator_01", HFILL }},
11699
15
    { &hf_tetra_poll_response_percentage,
11700
15
      { "poll-response-percentage", "tetra.poll_response_percentage",
11701
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_poll_response_percentage_vals), 0,
11702
15
        NULL, HFILL }},
11703
15
    { &hf_tetra_poll_response_percentage_01,
11704
15
      { "poll-response-percentage", "tetra.poll_response_percentage",
11705
15
        FT_UINT32, BASE_DEC, NULL, 0,
11706
15
        "INTEGER_0_63", HFILL }},
11707
15
    { &hf_tetra_poll_response_number,
11708
15
      { "poll-response-number", "tetra.poll_response_number",
11709
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_poll_response_number_vals), 0,
11710
15
        NULL, HFILL }},
11711
15
    { &hf_tetra_poll_response_number_01,
11712
15
      { "poll-response-number", "tetra.poll_response_number",
11713
15
        FT_UINT32, BASE_DEC, NULL, 0,
11714
15
        "INTEGER_0_63", HFILL }},
11715
15
    { &hf_tetra_transmission_request_permission,
11716
15
      { "transmission-request-permission", "tetra.transmission_request_permission",
11717
15
        FT_UINT32, BASE_DEC, NULL, 0,
11718
15
        "INTEGER_0_1", HFILL }},
11719
15
    { &hf_tetra_optional_elements_08,
11720
15
      { "optional-elements", "tetra.optional_elements",
11721
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_08_vals), 0,
11722
15
        "T_optional_elements_08", HFILL }},
11723
15
    { &hf_tetra_type2_element_02,
11724
15
      { "type2-element", "tetra.type2_element_element",
11725
15
        FT_NONE, BASE_NONE, NULL, 0,
11726
15
        "T_type2_element_02", HFILL }},
11727
15
    { &hf_tetra_notification_indicator_02,
11728
15
      { "notification-indicator", "tetra.notification_indicator",
11729
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_notification_indicator_02_vals), 0,
11730
15
        "T_notification_indicator_02", HFILL }},
11731
15
    { &hf_tetra_continue,
11732
15
      { "continue", "tetra.continue",
11733
15
        FT_UINT32, BASE_DEC, NULL, 0,
11734
15
        "INTEGER_0_1", HFILL }},
11735
15
    { &hf_tetra_optional_elements_09,
11736
15
      { "optional-elements", "tetra.optional_elements",
11737
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_09_vals), 0,
11738
15
        "T_optional_elements_09", HFILL }},
11739
15
    { &hf_tetra_type2_element_03,
11740
15
      { "type2-element", "tetra.type2_element_element",
11741
15
        FT_NONE, BASE_NONE, NULL, 0,
11742
15
        "T_type2_element_03", HFILL }},
11743
15
    { &hf_tetra_notification_indicator_03,
11744
15
      { "notification-indicator", "tetra.notification_indicator",
11745
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_notification_indicator_03_vals), 0,
11746
15
        "T_notification_indicator_03", HFILL }},
11747
15
    { &hf_tetra_request_to_append_LA,
11748
15
      { "request-to-append-LA", "tetra.request_to_append_LA",
11749
15
        FT_BOOLEAN, BASE_NONE, NULL, 0,
11750
15
        "BOOLEAN", HFILL }},
11751
15
    { &hf_tetra_cipher_control_choice,
11752
15
      { "cipher-control", "tetra.cipher_control_choice",
11753
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_cipher_control_choice_vals), 0,
11754
15
        "T_cipher_control_choice", HFILL }},
11755
15
    { &hf_tetra_no_cipher,
11756
15
      { "no-cipher", "tetra.no_cipher_element",
11757
15
        FT_NONE, BASE_NONE, NULL, 0,
11758
15
        NULL, HFILL }},
11759
15
    { &hf_tetra_ciphering_parameters,
11760
15
      { "ciphering-parameters", "tetra.ciphering_parameters",
11761
15
        FT_UINT32, BASE_DEC, NULL, 0,
11762
15
        "INTEGER_0_1023", HFILL }},
11763
15
    { &hf_tetra_optional_elements_10,
11764
15
      { "optional-elements", "tetra.optional_elements",
11765
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_10_vals), 0,
11766
15
        "T_optional_elements_10", HFILL }},
11767
15
    { &hf_tetra_type2_parameters_04,
11768
15
      { "type2-parameters", "tetra.type2_parameters_element",
11769
15
        FT_NONE, BASE_NONE, NULL, 0,
11770
15
        "T_type2_parameters_04", HFILL }},
11771
15
    { &hf_tetra_class_of_MS,
11772
15
      { "class-of-MS", "tetra.class_of_MS",
11773
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_class_of_MS_vals), 0,
11774
15
        NULL, HFILL }},
11775
15
    { &hf_tetra_class_of_MS_01,
11776
15
      { "class-of-MS", "tetra.class_of_MS",
11777
15
        FT_UINT32, BASE_DEC, NULL, 0,
11778
15
        "INTEGER_0_16777215", HFILL }},
11779
15
    { &hf_tetra_energy_saving_mode_02,
11780
15
      { "energy-saving-mode", "tetra.energy_saving_mode",
11781
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_energy_saving_mode_01_vals), 0,
11782
15
        "T_energy_saving_mode_01", HFILL }},
11783
15
    { &hf_tetra_la_information,
11784
15
      { "la-information", "tetra.la_information",
11785
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_la_information_vals), 0,
11786
15
        NULL, HFILL }},
11787
15
    { &hf_tetra_la_information_01,
11788
15
      { "la-information", "tetra.la_information",
11789
15
        FT_UINT32, BASE_DEC, NULL, 0,
11790
15
        "INTEGER_0_16383", HFILL }},
11791
15
    { &hf_tetra_ssi_choice_01,
11792
15
      { "ssi", "tetra.ssi_choice",
11793
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_ssi_choice_01_vals), 0,
11794
15
        "T_ssi_choice_01", HFILL }},
11795
15
    { &hf_tetra_address_extension_choice_01,
11796
15
      { "address-extension", "tetra.address_extension_choice",
11797
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_address_extension_choice_01_vals), 0,
11798
15
        "T_address_extension_choice_01", HFILL }},
11799
15
    { &hf_tetra_type3_01,
11800
15
      { "type3", "tetra.type3",
11801
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_type3_01_vals), 0,
11802
15
        "T_type3_01", HFILL }},
11803
15
    { &hf_tetra_type3_elements_01,
11804
15
      { "type3-elements", "tetra.type3_elements_element",
11805
15
        FT_NONE, BASE_NONE, NULL, 0,
11806
15
        "T_type3_elements_01", HFILL }},
11807
15
    { &hf_tetra_group_identity_location_demand,
11808
15
      { "group-identity-location-demand", "tetra.group_identity_location_demand",
11809
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_group_identity_location_demand_vals), 0,
11810
15
        NULL, HFILL }},
11811
15
    { &hf_tetra_group_identity_location_demand_01,
11812
15
      { "group-identity-location-demand", "tetra.group_identity_location_demand",
11813
15
        FT_UINT32, BASE_DEC, NULL, 0,
11814
15
        "INTEGER_0_3", HFILL }},
11815
15
    { &hf_tetra_group_report_response_choice,
11816
15
      { "group-report-response", "tetra.group_report_response_choice",
11817
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_group_report_response_choice_vals), 0,
11818
15
        "T_group_report_response_choice", HFILL }},
11819
15
    { &hf_tetra_group_report_response,
11820
15
      { "group-report-response", "tetra.group_report_response",
11821
15
        FT_BOOLEAN, BASE_NONE, NULL, 0,
11822
15
        "BOOLEAN", HFILL }},
11823
15
    { &hf_tetra_group_identity_uplink,
11824
15
      { "group-identity-uplink", "tetra.group_identity_uplink",
11825
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_group_identity_uplink_vals), 0,
11826
15
        NULL, HFILL }},
11827
15
    { &hf_tetra_group_identity_uplink_01,
11828
15
      { "group-identity-uplink", "tetra.group_identity_uplink",
11829
15
        FT_UINT32, BASE_DEC, NULL, 0,
11830
15
        "INTEGER_0_15", HFILL }},
11831
15
    { &hf_tetra_proprietary_02,
11832
15
      { "proprietary", "tetra.proprietary",
11833
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_proprietary_01_vals), 0,
11834
15
        "T_proprietary_01", HFILL }},
11835
15
    { &hf_tetra_group_identity_report,
11836
15
      { "group-identity-report", "tetra.group_identity_report",
11837
15
        FT_BOOLEAN, BASE_NONE, NULL, 0,
11838
15
        "BOOLEAN", HFILL }},
11839
15
    { &hf_tetra_group_identity_attach_detach_mode,
11840
15
      { "group-identity-attach-detach-mode", "tetra.group_identity_attach_detach_mode",
11841
15
        FT_BOOLEAN, BASE_NONE, NULL, 0,
11842
15
        "BOOLEAN", HFILL }},
11843
15
    { &hf_tetra_optional_elements_11,
11844
15
      { "optional-elements", "tetra.optional_elements",
11845
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_11_vals), 0,
11846
15
        "T_optional_elements_11", HFILL }},
11847
15
    { &hf_tetra_type2_element_04,
11848
15
      { "type2-element", "tetra.type2_element_element",
11849
15
        FT_NONE, BASE_NONE, NULL, 0,
11850
15
        "T_type2_element_04", HFILL }},
11851
15
    { &hf_tetra_type3_02,
11852
15
      { "type3", "tetra.type3",
11853
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_type3_02_vals), 0,
11854
15
        "T_type3_02", HFILL }},
11855
15
    { &hf_tetra_type3_elements_02,
11856
15
      { "type3-elements", "tetra.type3_elements_element",
11857
15
        FT_NONE, BASE_NONE, NULL, 0,
11858
15
        "T_type3_elements_02", HFILL }},
11859
15
    { &hf_tetra_length,
11860
15
      { "length", "tetra.length",
11861
15
        FT_UINT32, BASE_DEC, NULL, 0,
11862
15
        "INTEGER_0_2047", HFILL }},
11863
15
    { &hf_tetra_repeat_num,
11864
15
      { "repeat-num", "tetra.repeat_num",
11865
15
        FT_UINT32, BASE_DEC, NULL, 0,
11866
15
        "INTEGER_0_63", HFILL }},
11867
15
    { &hf_tetra_group_identity_uplink_02,
11868
15
      { "group-identity-uplink", "tetra.group_identity_uplink_element",
11869
15
        FT_NONE, BASE_NONE, NULL, 0,
11870
15
        NULL, HFILL }},
11871
15
    { &hf_tetra_group_identity_ack_type,
11872
15
      { "group-identity-ack-type", "tetra.group_identity_ack_type",
11873
15
        FT_BOOLEAN, BASE_NONE, NULL, 0,
11874
15
        "BOOLEAN", HFILL }},
11875
15
    { &hf_tetra_optional_elements_12,
11876
15
      { "optional-elements", "tetra.optional_elements",
11877
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_12_vals), 0,
11878
15
        "T_optional_elements_12", HFILL }},
11879
15
    { &hf_tetra_type2_element_05,
11880
15
      { "type2-element", "tetra.type2_element_element",
11881
15
        FT_NONE, BASE_NONE, NULL, 0,
11882
15
        "T_type2_element_05", HFILL }},
11883
15
    { &hf_tetra_type3_03,
11884
15
      { "type3", "tetra.type3",
11885
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_type3_03_vals), 0,
11886
15
        "T_type3_03", HFILL }},
11887
15
    { &hf_tetra_type3_elements_03,
11888
15
      { "type3-elements", "tetra.type3_elements_element",
11889
15
        FT_NONE, BASE_NONE, NULL, 0,
11890
15
        "T_type3_elements_03", HFILL }},
11891
15
    { &hf_tetra_hook_method_selection,
11892
15
      { "hook-method-selection", "tetra.hook_method_selection",
11893
15
        FT_BOOLEAN, BASE_NONE, NULL, 0,
11894
15
        "BOOLEAN", HFILL }},
11895
15
    { &hf_tetra_simple_duplex_selection,
11896
15
      { "simple-duplex-selection", "tetra.simple_duplex_selection",
11897
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_simple_duplex_selection_vals), 0,
11898
15
        NULL, HFILL }},
11899
15
    { &hf_tetra_basic_service_information,
11900
15
      { "basic-service-information", "tetra.basic_service_information_element",
11901
15
        FT_NONE, BASE_NONE, NULL, 0,
11902
15
        NULL, HFILL }},
11903
15
    { &hf_tetra_request_transmit_send_data,
11904
15
      { "request-transmit-send-data", "tetra.request_transmit_send_data",
11905
15
        FT_UINT32, BASE_DEC, NULL, 0,
11906
15
        "INTEGER_0_1", HFILL }},
11907
15
    { &hf_tetra_call_priority,
11908
15
      { "call-priority", "tetra.call_priority",
11909
15
        FT_UINT32, BASE_DEC, NULL, 0,
11910
15
        "INTEGER_0_15", HFILL }},
11911
15
    { &hf_tetra_clir_control,
11912
15
      { "clir-control", "tetra.clir_control",
11913
15
        FT_UINT32, BASE_DEC, NULL, 0,
11914
15
        "INTEGER_0_3", HFILL }},
11915
15
    { &hf_tetra_called_party_address,
11916
15
      { "called-party-address", "tetra.called_party_address",
11917
15
        FT_UINT32, BASE_DEC, VALS(tetra_Calling_party_address_type_vals), 0,
11918
15
        "Called_party_address_type", HFILL }},
11919
15
    { &hf_tetra_optional_elements_13,
11920
15
      { "optional-elements", "tetra.optional_elements",
11921
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_13_vals), 0,
11922
15
        "T_optional_elements_13", HFILL }},
11923
15
    { &hf_tetra_type2_parameters_05,
11924
15
      { "type2-parameters", "tetra.type2_parameters_element",
11925
15
        FT_NONE, BASE_NONE, NULL, 0,
11926
15
        "T_type2_parameters_05", HFILL }},
11927
15
    { &hf_tetra_external_subscriber_number,
11928
15
      { "external-subscriber-number", "tetra.external_subscriber_number",
11929
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_external_subscriber_number_vals), 0,
11930
15
        NULL, HFILL }},
11931
15
    { &hf_tetra_external_subscriber_number_01,
11932
15
      { "external-subscriber-number", "tetra.external_subscriber_number",
11933
15
        FT_UINT32, BASE_DEC, NULL, 0,
11934
15
        "INTEGER_0_31", HFILL }},
11935
15
    { &hf_tetra_prop,
11936
15
      { "prop", "tetra.prop",
11937
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_prop_vals), 0,
11938
15
        NULL, HFILL }},
11939
15
    { &hf_tetra_prop_01,
11940
15
      { "prop", "tetra.prop_element",
11941
15
        FT_NONE, BASE_NONE, NULL, 0,
11942
15
        "Proprietary", HFILL }},
11943
15
    { &hf_tetra_circuit_mode,
11944
15
      { "circuit-mode", "tetra.circuit_mode",
11945
15
        FT_UINT32, BASE_DEC, VALS(tetra_CIRCUIT_vals), 0,
11946
15
        "CIRCUIT", HFILL }},
11947
15
    { &hf_tetra_encryption,
11948
15
      { "encryption", "tetra.encryption",
11949
15
        FT_UINT32, BASE_DEC, NULL, 0,
11950
15
        "INTEGER_0_1", HFILL }},
11951
15
    { &hf_tetra_communication,
11952
15
      { "communication", "tetra.communication",
11953
15
        FT_UINT32, BASE_DEC, NULL, 0,
11954
15
        "INTEGER_0_3", HFILL }},
11955
15
    { &hf_tetra_slots_or_speech,
11956
15
      { "slots-or-speech", "tetra.slots_or_speech",
11957
15
        FT_UINT32, BASE_DEC, NULL, 0,
11958
15
        "INTEGER_0_3", HFILL }},
11959
15
    { &hf_tetra_simplex_duplex_selection,
11960
15
      { "simplex-duplex-selection", "tetra.simplex_duplex_selection",
11961
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_simplex_duplex_selection_vals), 0,
11962
15
        NULL, HFILL }},
11963
15
    { &hf_tetra_optional_elements_14,
11964
15
      { "optional-elements", "tetra.optional_elements",
11965
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_14_vals), 0,
11966
15
        "T_optional_elements_14", HFILL }},
11967
15
    { &hf_tetra_type2_parameters_06,
11968
15
      { "type2-parameters", "tetra.type2_parameters_element",
11969
15
        FT_NONE, BASE_NONE, NULL, 0,
11970
15
        "T_type2_parameters_06", HFILL }},
11971
15
    { &hf_tetra_basic_service_information_01,
11972
15
      { "basic-service-information", "tetra.basic_service_information",
11973
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_basic_service_information_vals), 0,
11974
15
        NULL, HFILL }},
11975
15
    { &hf_tetra_prop_02,
11976
15
      { "prop", "tetra.prop",
11977
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_prop_01_vals), 0,
11978
15
        "T_prop_01", HFILL }},
11979
15
    { &hf_tetra_simplex_duplex_selection_01,
11980
15
      { "simplex-duplex-selection", "tetra.simplex_duplex_selection",
11981
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_simplex_duplex_selection_01_vals), 0,
11982
15
        "T_simplex_duplex_selection_01", HFILL }},
11983
15
    { &hf_tetra_optional_elements_15,
11984
15
      { "optional-elements", "tetra.optional_elements",
11985
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_15_vals), 0,
11986
15
        "T_optional_elements_15", HFILL }},
11987
15
    { &hf_tetra_type2_parameters_07,
11988
15
      { "type2-parameters", "tetra.type2_parameters_element",
11989
15
        FT_NONE, BASE_NONE, NULL, 0,
11990
15
        "T_type2_parameters_07", HFILL }},
11991
15
    { &hf_tetra_basic_service_information_02,
11992
15
      { "basic-service-information", "tetra.basic_service_information",
11993
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_basic_service_information_01_vals), 0,
11994
15
        "T_basic_service_information_01", HFILL }},
11995
15
    { &hf_tetra_prop_03,
11996
15
      { "prop", "tetra.prop",
11997
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_prop_02_vals), 0,
11998
15
        "T_prop_02", HFILL }},
11999
15
    { &hf_tetra_optional_elements_16,
12000
15
      { "optional-elements", "tetra.optional_elements",
12001
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_16_vals), 0,
12002
15
        "T_optional_elements_16", HFILL }},
12003
15
    { &hf_tetra_type2_parameters_08,
12004
15
      { "type2-parameters", "tetra.type2_parameters_element",
12005
15
        FT_NONE, BASE_NONE, NULL, 0,
12006
15
        "T_type2_parameters_08", HFILL }},
12007
15
    { &hf_tetra_prop_04,
12008
15
      { "prop", "tetra.prop",
12009
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_prop_03_vals), 0,
12010
15
        "T_prop_03", HFILL }},
12011
15
    { &hf_tetra_tx_demand_priority,
12012
15
      { "tx-demand-priority", "tetra.tx_demand_priority",
12013
15
        FT_UINT32, BASE_DEC, NULL, 0,
12014
15
        "INTEGER_0_3", HFILL }},
12015
15
    { &hf_tetra_encryption_control,
12016
15
      { "encryption-control", "tetra.encryption_control",
12017
15
        FT_UINT32, BASE_DEC, NULL, 0,
12018
15
        "INTEGER_0_1", HFILL }},
12019
15
    { &hf_tetra_optional_elements_17,
12020
15
      { "optional-elements", "tetra.optional_elements",
12021
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_17_vals), 0,
12022
15
        "T_optional_elements_17", HFILL }},
12023
15
    { &hf_tetra_type2_parameters_09,
12024
15
      { "type2-parameters", "tetra.type2_parameters_element",
12025
15
        FT_NONE, BASE_NONE, NULL, 0,
12026
15
        "T_type2_parameters_09", HFILL }},
12027
15
    { &hf_tetra_prop_05,
12028
15
      { "prop", "tetra.prop",
12029
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_prop_04_vals), 0,
12030
15
        "T_prop_04", HFILL }},
12031
15
    { &hf_tetra_optional_elements_18,
12032
15
      { "optional-elements", "tetra.optional_elements",
12033
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_18_vals), 0,
12034
15
        "T_optional_elements_18", HFILL }},
12035
15
    { &hf_tetra_type2_parameters_10,
12036
15
      { "type2-parameters", "tetra.type2_parameters_element",
12037
15
        FT_NONE, BASE_NONE, NULL, 0,
12038
15
        "T_type2_parameters_10", HFILL }},
12039
15
    { &hf_tetra_prop_06,
12040
15
      { "prop", "tetra.prop",
12041
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_prop_05_vals), 0,
12042
15
        "T_prop_05", HFILL }},
12043
15
    { &hf_tetra_request_to_transmit_send_data,
12044
15
      { "request-to-transmit-send-data", "tetra.request_to_transmit_send_data",
12045
15
        FT_UINT32, BASE_DEC, NULL, 0,
12046
15
        "INTEGER_0_1", HFILL }},
12047
15
    { &hf_tetra_other_party_address,
12048
15
      { "other-party-address", "tetra.other_party_address",
12049
15
        FT_UINT32, BASE_DEC, VALS(tetra_Calling_party_address_type_vals), 0,
12050
15
        "Other_party_address_type", HFILL }},
12051
15
    { &hf_tetra_optional_elements_19,
12052
15
      { "optional-elements", "tetra.optional_elements",
12053
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_19_vals), 0,
12054
15
        "T_optional_elements_19", HFILL }},
12055
15
    { &hf_tetra_type2_parameters_11,
12056
15
      { "type2-parameters", "tetra.type2_parameters_element",
12057
15
        FT_NONE, BASE_NONE, NULL, 0,
12058
15
        "T_type2_parameters_11", HFILL }},
12059
15
    { &hf_tetra_prop_07,
12060
15
      { "prop", "tetra.prop",
12061
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_prop_06_vals), 0,
12062
15
        "T_prop_06", HFILL }},
12063
15
    { &hf_tetra_hook_method_selection_integer,
12064
15
      { "hook-method-selection", "tetra.hook_method_selection_integer",
12065
15
        FT_UINT32, BASE_DEC, NULL, 0,
12066
15
        "INTEGER_0_1", HFILL }},
12067
15
    { &hf_tetra_simplex_duplex_selection_02,
12068
15
      { "simplex-duplex-selection", "tetra.simplex_duplex_selection",
12069
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_simplex_duplex_selection_02_vals), 0,
12070
15
        "T_simplex_duplex_selection_02", HFILL }},
12071
15
    { &hf_tetra_transmission_grant,
12072
15
      { "transmission-grant", "tetra.transmission_grant",
12073
15
        FT_UINT32, BASE_DEC, NULL, 0,
12074
15
        "INTEGER_0_3", HFILL }},
12075
15
    { &hf_tetra_optional_elements_20,
12076
15
      { "optional-elements", "tetra.optional_elements",
12077
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_20_vals), 0,
12078
15
        "T_optional_elements_20", HFILL }},
12079
15
    { &hf_tetra_type2_element_06,
12080
15
      { "type2-element", "tetra.type2_element_element",
12081
15
        FT_NONE, BASE_NONE, NULL, 0,
12082
15
        "T_type2_element_06", HFILL }},
12083
15
    { &hf_tetra_notification_indicator_04,
12084
15
      { "notification-indicator", "tetra.notification_indicator",
12085
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_notification_indicator_04_vals), 0,
12086
15
        "T_notification_indicator_04", HFILL }},
12087
15
    { &hf_tetra_temporary_address_02,
12088
15
      { "temporary-address", "tetra.temporary_address",
12089
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_temporary_address_01_vals), 0,
12090
15
        "T_temporary_address_01", HFILL }},
12091
15
    { &hf_tetra_temporary_address_element,
12092
15
      { "temporary-address-element", "tetra.temporary_address_element",
12093
15
        FT_UINT32, BASE_DEC, NULL, 0,
12094
15
        "INTEGER_0_16777215", HFILL }},
12095
15
    { &hf_tetra_calling_party_type_identifier_01,
12096
15
      { "calling-party-type-identifier", "tetra.calling_party_type_identifier",
12097
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_calling_party_type_identifier_vals), 0,
12098
15
        NULL, HFILL }},
12099
15
    { &hf_tetra_calling_party_type_identifier_element,
12100
15
      { "calling-party-type-identifier-element", "tetra.calling_party_type_identifier_element",
12101
15
        FT_UINT32, BASE_DEC, VALS(tetra_Calling_party_address_type_vals), 0,
12102
15
        "Calling_party_address_type", HFILL }},
12103
15
    { &hf_tetra_external_subscriber_number_02,
12104
15
      { "external-subscriber-number", "tetra.external_subscriber_number",
12105
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_external_subscriber_number_01_vals), 0,
12106
15
        "T_external_subscriber_number_01", HFILL }},
12107
15
    { &hf_tetra_external_subscriber_number_03,
12108
15
      { "external-subscriber-number", "tetra.external_subscriber_number",
12109
15
        FT_UINT32, BASE_DEC, NULL, 0,
12110
15
        "INTEGER_0_15", HFILL }},
12111
15
    { &hf_tetra_prop_08,
12112
15
      { "prop", "tetra.prop",
12113
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_prop_07_vals), 0,
12114
15
        "T_prop_07", HFILL }},
12115
15
    { &hf_tetra_call_time_out_setup_phase,
12116
15
      { "call-time-out-setup-phase", "tetra.call_time_out_setup_phase",
12117
15
        FT_UINT32, BASE_DEC, NULL, 0,
12118
15
        "INTEGER_0_7", HFILL }},
12119
15
    { &hf_tetra_simplex_duplex_selection_03,
12120
15
      { "simplex-duplex-selection", "tetra.simplex_duplex_selection",
12121
15
        FT_UINT32, BASE_DEC, NULL, 0,
12122
15
        "INTEGER_0_1", HFILL }},
12123
15
    { &hf_tetra_optional_elements_21,
12124
15
      { "optional-elements", "tetra.optional_elements",
12125
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_21_vals), 0,
12126
15
        "T_optional_elements_21", HFILL }},
12127
15
    { &hf_tetra_type2_parameters_12,
12128
15
      { "type2-parameters", "tetra.type2_parameters_element",
12129
15
        FT_NONE, BASE_NONE, NULL, 0,
12130
15
        "T_type2_parameters_12", HFILL }},
12131
15
    { &hf_tetra_basic_service_information_03,
12132
15
      { "basic-service-information", "tetra.basic_service_information",
12133
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_basic_service_information_02_vals), 0,
12134
15
        "T_basic_service_information_02", HFILL }},
12135
15
    { &hf_tetra_call_status_02,
12136
15
      { "call-status", "tetra.call_status",
12137
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_call_status_01_vals), 0,
12138
15
        "T_call_status_01", HFILL }},
12139
15
    { &hf_tetra_notification_indicator_05,
12140
15
      { "notification-indicator", "tetra.notification_indicator",
12141
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_notification_indicator_05_vals), 0,
12142
15
        "T_notification_indicator_05", HFILL }},
12143
15
    { &hf_tetra_notification_indicator_06,
12144
15
      { "notification-indicator", "tetra.notification_indicator",
12145
15
        FT_UINT32, BASE_DEC, NULL, 0,
12146
15
        "INTEGER_0_63", HFILL }},
12147
15
    { &hf_tetra_prop_09,
12148
15
      { "prop", "tetra.prop",
12149
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_prop_08_vals), 0,
12150
15
        "T_prop_08", HFILL }},
12151
15
    { &hf_tetra_simplex_duplex_selection_04,
12152
15
      { "simplex-duplex-selection", "tetra.simplex_duplex_selection",
12153
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_simplex_duplex_selection_03_vals), 0,
12154
15
        "T_simplex_duplex_selection_03", HFILL }},
12155
15
    { &hf_tetra_call_queued,
12156
15
      { "call-queued", "tetra.call_queued",
12157
15
        FT_BOOLEAN, BASE_NONE, NULL, 0,
12158
15
        "BOOLEAN", HFILL }},
12159
15
    { &hf_tetra_optional_elements_22,
12160
15
      { "optional-elements", "tetra.optional_elements",
12161
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_22_vals), 0,
12162
15
        "T_optional_elements_22", HFILL }},
12163
15
    { &hf_tetra_type2_parameters_13,
12164
15
      { "type2-parameters", "tetra.type2_parameters_element",
12165
15
        FT_NONE, BASE_NONE, NULL, 0,
12166
15
        "T_type2_parameters_13", HFILL }},
12167
15
    { &hf_tetra_basic_service_infomation,
12168
15
      { "basic-service-infomation", "tetra.basic_service_infomation",
12169
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_basic_service_infomation_vals), 0,
12170
15
        NULL, HFILL }},
12171
15
    { &hf_tetra_basic_service_infomation_01,
12172
15
      { "basic-service-infomation", "tetra.basic_service_infomation_element",
12173
15
        FT_NONE, BASE_NONE, NULL, 0,
12174
15
        "Basic_service_information", HFILL }},
12175
15
    { &hf_tetra_notification_indicator_07,
12176
15
      { "notification-indicator", "tetra.notification_indicator",
12177
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_notification_indicator_06_vals), 0,
12178
15
        "T_notification_indicator_06", HFILL }},
12179
15
    { &hf_tetra_prop_10,
12180
15
      { "prop", "tetra.prop",
12181
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_prop_09_vals), 0,
12182
15
        "T_prop_09", HFILL }},
12183
15
    { &hf_tetra_simplex_duplex_selection_05,
12184
15
      { "simplex-duplex-selection", "tetra.simplex_duplex_selection",
12185
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_simplex_duplex_selection_04_vals), 0,
12186
15
        "T_simplex_duplex_selection_04", HFILL }},
12187
15
    { &hf_tetra_optional_elements_23,
12188
15
      { "optional-elements", "tetra.optional_elements",
12189
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_23_vals), 0,
12190
15
        "T_optional_elements_23", HFILL }},
12191
15
    { &hf_tetra_type2_parameters_14,
12192
15
      { "type2-parameters", "tetra.type2_parameters_element",
12193
15
        FT_NONE, BASE_NONE, NULL, 0,
12194
15
        "T_type2_parameters_14", HFILL }},
12195
15
    { &hf_tetra_call_priority_01,
12196
15
      { "call-priority", "tetra.call_priority",
12197
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_call_priority_vals), 0,
12198
15
        NULL, HFILL }},
12199
15
    { &hf_tetra_basic_service_information_04,
12200
15
      { "basic-service-information", "tetra.basic_service_information",
12201
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_basic_service_information_03_vals), 0,
12202
15
        "T_basic_service_information_03", HFILL }},
12203
15
    { &hf_tetra_temporary_address_03,
12204
15
      { "temporary-address", "tetra.temporary_address",
12205
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_temporary_address_02_vals), 0,
12206
15
        "T_temporary_address_02", HFILL }},
12207
15
    { &hf_tetra_notification_indicator_08,
12208
15
      { "notification-indicator", "tetra.notification_indicator",
12209
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_notification_indicator_07_vals), 0,
12210
15
        "T_notification_indicator_07", HFILL }},
12211
15
    { &hf_tetra_prop_11,
12212
15
      { "prop", "tetra.prop",
12213
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_prop_10_vals), 0,
12214
15
        "T_prop_10", HFILL }},
12215
15
    { &hf_tetra_optional_elements_24,
12216
15
      { "optional-elements", "tetra.optional_elements",
12217
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_24_vals), 0,
12218
15
        "T_optional_elements_24", HFILL }},
12219
15
    { &hf_tetra_type2_parameters_15,
12220
15
      { "type2-parameters", "tetra.type2_parameters_element",
12221
15
        FT_NONE, BASE_NONE, NULL, 0,
12222
15
        "T_type2_parameters_15", HFILL }},
12223
15
    { &hf_tetra_notification_indicator_09,
12224
15
      { "notification-indicator", "tetra.notification_indicator",
12225
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_notification_indicator_08_vals), 0,
12226
15
        "T_notification_indicator_08", HFILL }},
12227
15
    { &hf_tetra_prop_12,
12228
15
      { "prop", "tetra.prop",
12229
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_prop_11_vals), 0,
12230
15
        "T_prop_11", HFILL }},
12231
15
    { &hf_tetra_optional_elements_25,
12232
15
      { "optional-elements", "tetra.optional_elements",
12233
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_25_vals), 0,
12234
15
        "T_optional_elements_25", HFILL }},
12235
15
    { &hf_tetra_type2_parameters_16,
12236
15
      { "type2-parameters", "tetra.type2_parameters_element",
12237
15
        FT_NONE, BASE_NONE, NULL, 0,
12238
15
        "T_type2_parameters_16", HFILL }},
12239
15
    { &hf_tetra_notification_indicator_10,
12240
15
      { "notification-indicator", "tetra.notification_indicator",
12241
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_notification_indicator_09_vals), 0,
12242
15
        "T_notification_indicator_09", HFILL }},
12243
15
    { &hf_tetra_prop_13,
12244
15
      { "prop", "tetra.prop",
12245
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_prop_12_vals), 0,
12246
15
        "T_prop_12", HFILL }},
12247
15
    { &hf_tetra_reset_call_time_out,
12248
15
      { "reset-call-time-out", "tetra.reset_call_time_out",
12249
15
        FT_UINT32, BASE_DEC, NULL, 0,
12250
15
        "INTEGER_0_1", HFILL }},
12251
15
    { &hf_tetra_optional_elements_26,
12252
15
      { "optional-elements", "tetra.optional_elements",
12253
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_26_vals), 0,
12254
15
        "T_optional_elements_26", HFILL }},
12255
15
    { &hf_tetra_type2_parameters_17,
12256
15
      { "type2-parameters", "tetra.type2_parameters_element",
12257
15
        FT_NONE, BASE_NONE, NULL, 0,
12258
15
        "T_type2_parameters_17", HFILL }},
12259
15
    { &hf_tetra_new_call_identifier_01,
12260
15
      { "new-call-identifier", "tetra.new_call_identifier",
12261
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_new_call_identifier_01_vals), 0,
12262
15
        "T_new_call_identifier_01", HFILL }},
12263
15
    { &hf_tetra_new_call_identifier_02,
12264
15
      { "new-call-identifier", "tetra.new_call_identifier",
12265
15
        FT_UINT32, BASE_DEC, NULL, 0,
12266
15
        "INTEGER_0_16383", HFILL }},
12267
15
    { &hf_tetra_call_time_out_02,
12268
15
      { "call-time-out", "tetra.call_time_out",
12269
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_call_time_out_01_vals), 0,
12270
15
        "T_call_time_out_01", HFILL }},
12271
15
    { &hf_tetra_call_status_03,
12272
15
      { "call-status", "tetra.call_status",
12273
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_call_status_02_vals), 0,
12274
15
        "T_call_status_02", HFILL }},
12275
15
    { &hf_tetra_modify_02,
12276
15
      { "modify", "tetra.modify",
12277
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_modify_01_vals), 0,
12278
15
        "T_modify_01", HFILL }},
12279
15
    { &hf_tetra_notification_indicator_11,
12280
15
      { "notification-indicator", "tetra.notification_indicator",
12281
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_notification_indicator_10_vals), 0,
12282
15
        "T_notification_indicator_10", HFILL }},
12283
15
    { &hf_tetra_prop_14,
12284
15
      { "prop", "tetra.prop",
12285
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_prop_13_vals), 0,
12286
15
        "T_prop_13", HFILL }},
12287
15
    { &hf_tetra_optional_elements_27,
12288
15
      { "optional-elements", "tetra.optional_elements",
12289
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_27_vals), 0,
12290
15
        "T_optional_elements_27", HFILL }},
12291
15
    { &hf_tetra_type2_parameters_18,
12292
15
      { "type2-parameters", "tetra.type2_parameters_element",
12293
15
        FT_NONE, BASE_NONE, NULL, 0,
12294
15
        "T_type2_parameters_18", HFILL }},
12295
15
    { &hf_tetra_notification_indicator_12,
12296
15
      { "notification-indicator", "tetra.notification_indicator",
12297
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_notification_indicator_11_vals), 0,
12298
15
        "T_notification_indicator_11", HFILL }},
12299
15
    { &hf_tetra_prop_15,
12300
15
      { "prop", "tetra.prop",
12301
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_prop_14_vals), 0,
12302
15
        "T_prop_14", HFILL }},
12303
15
    { &hf_tetra_optional_elements_28,
12304
15
      { "optional-elements", "tetra.optional_elements",
12305
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_28_vals), 0,
12306
15
        "T_optional_elements_28", HFILL }},
12307
15
    { &hf_tetra_type2_element_07,
12308
15
      { "type2-element", "tetra.type2_element_element",
12309
15
        FT_NONE, BASE_NONE, NULL, 0,
12310
15
        "T_type2_element_07", HFILL }},
12311
15
    { &hf_tetra_notification_indicator_13,
12312
15
      { "notification-indicator", "tetra.notification_indicator",
12313
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_notification_indicator_12_vals), 0,
12314
15
        "T_notification_indicator_12", HFILL }},
12315
15
    { &hf_tetra_transmitting_party_type_identifier,
12316
15
      { "transmitting-party-type-identifier", "tetra.transmitting_party_type_identifier",
12317
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_transmitting_party_type_identifier_vals), 0,
12318
15
        NULL, HFILL }},
12319
15
    { &hf_tetra_tpti_element,
12320
15
      { "tpti-element", "tetra.tpti_element",
12321
15
        FT_UINT32, BASE_DEC, VALS(tetra_Calling_party_address_type_vals), 0,
12322
15
        "Transmitting_party_address_type", HFILL }},
12323
15
    { &hf_tetra_optional_elements_29,
12324
15
      { "optional-elements", "tetra.optional_elements",
12325
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_29_vals), 0,
12326
15
        "T_optional_elements_29", HFILL }},
12327
15
    { &hf_tetra_type2_element_08,
12328
15
      { "type2-element", "tetra.type2_element_element",
12329
15
        FT_NONE, BASE_NONE, NULL, 0,
12330
15
        "T_type2_element_08", HFILL }},
12331
15
    { &hf_tetra_notification_indicator_14,
12332
15
      { "notification-indicator", "tetra.notification_indicator",
12333
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_notification_indicator_13_vals), 0,
12334
15
        "T_notification_indicator_13", HFILL }},
12335
15
    { &hf_tetra_transmitting_party_type_identifier_01,
12336
15
      { "transmitting-party-type-identifier", "tetra.transmitting_party_type_identifier",
12337
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_transmitting_party_type_identifier_01_vals), 0,
12338
15
        "T_transmitting_party_type_identifier_01", HFILL }},
12339
15
    { &hf_tetra_group_identity_ack_request,
12340
15
      { "group-identity-ack-request", "tetra.group_identity_ack_request",
12341
15
        FT_BOOLEAN, BASE_NONE, NULL, 0,
12342
15
        "BOOLEAN", HFILL }},
12343
15
    { &hf_tetra_optional_elements_30,
12344
15
      { "optional-elements", "tetra.optional_elements",
12345
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_30_vals), 0,
12346
15
        "T_optional_elements_30", HFILL }},
12347
15
    { &hf_tetra_type2_element_09,
12348
15
      { "type2-element", "tetra.type2_element_element",
12349
15
        FT_NONE, BASE_NONE, NULL, 0,
12350
15
        "T_type2_element_09", HFILL }},
12351
15
    { &hf_tetra_type3_04,
12352
15
      { "type3", "tetra.type3",
12353
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_type3_04_vals), 0,
12354
15
        "T_type3_04", HFILL }},
12355
15
    { &hf_tetra_type3_elements_04,
12356
15
      { "type3-elements", "tetra.type3_elements_element",
12357
15
        FT_NONE, BASE_NONE, NULL, 0,
12358
15
        "T_type3_elements_04", HFILL }},
12359
15
    { &hf_tetra_group_identity_downlink_02,
12360
15
      { "group-identity-downlink", "tetra.group_identity_downlink_element",
12361
15
        FT_NONE, BASE_NONE, NULL, 0,
12362
15
        NULL, HFILL }},
12363
15
    { &hf_tetra_group_identity_attach_detach_accept,
12364
15
      { "group-identity-attach-detach-accept", "tetra.group_identity_attach_detach_accept",
12365
15
        FT_BOOLEAN, BASE_NONE, NULL, 0,
12366
15
        "BOOLEAN", HFILL }},
12367
15
    { &hf_tetra_optional_elements_31,
12368
15
      { "optional-elements", "tetra.optional_elements",
12369
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_optional_elements_31_vals), 0,
12370
15
        "T_optional_elements_31", HFILL }},
12371
15
    { &hf_tetra_type2_element_10,
12372
15
      { "type2-element", "tetra.type2_element_element",
12373
15
        FT_NONE, BASE_NONE, NULL, 0,
12374
15
        "T_type2_element_10", HFILL }},
12375
15
    { &hf_tetra_type3_05,
12376
15
      { "type3", "tetra.type3",
12377
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_type3_05_vals), 0,
12378
15
        "T_type3_05", HFILL }},
12379
15
    { &hf_tetra_type3_elements_05,
12380
15
      { "type3-elements", "tetra.type3_elements_element",
12381
15
        FT_NONE, BASE_NONE, NULL, 0,
12382
15
        "T_type3_elements_05", HFILL }},
12383
15
    { &hf_tetra_called_party_sna,
12384
15
      { "called-party-sna", "tetra.called_party_sna",
12385
15
        FT_UINT32, BASE_DEC, NULL, 0,
12386
15
        "INTEGER_0_255", HFILL }},
12387
15
    { &hf_tetra_called_party_ssi,
12388
15
      { "called-party-ssi", "tetra.called_party_ssi",
12389
15
        FT_UINT32, BASE_DEC, NULL, 0,
12390
15
        "INTEGER_0_16777215", HFILL }},
12391
15
    { &hf_tetra_called_party_ssi_extension,
12392
15
      { "called-party-ssi-extension", "tetra.called_party_ssi_extension_element",
12393
15
        FT_NONE, BASE_NONE, NULL, 0,
12394
15
        NULL, HFILL }},
12395
15
    { &hf_tetra_called_party_extention,
12396
15
      { "called-party-extention", "tetra.called_party_extention",
12397
15
        FT_UINT32, BASE_DEC, NULL, 0,
12398
15
        "INTEGER_0_16777215", HFILL }},
12399
15
    { &hf_tetra_data_01,
12400
15
      { "data", "tetra.data",
12401
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_data_01_vals), 0,
12402
15
        "T_data_01", HFILL }},
12403
15
    { &hf_tetra_element1,
12404
15
      { "element1", "tetra.element1_element",
12405
15
        FT_NONE, BASE_NONE, NULL, 0,
12406
15
        "Type1", HFILL }},
12407
15
    { &hf_tetra_element,
12408
15
      { "element", "tetra.element_element",
12409
15
        FT_NONE, BASE_NONE, NULL, 0,
12410
15
        "Type2", HFILL }},
12411
15
    { &hf_tetra_proprietary_element_owner,
12412
15
      { "proprietary-element-owner", "tetra.proprietary_element_owner",
12413
15
        FT_UINT32, BASE_DEC, NULL, 0,
12414
15
        NULL, HFILL }},
12415
15
    { &hf_tetra_proprietary_element_owner_extension,
12416
15
      { "proprietary-element-owner-extension", "tetra.proprietary_element_owner_extension",
12417
15
        FT_BYTES, BASE_NONE, NULL, 0,
12418
15
        "BIT_STRING", HFILL }},
12419
15
    { &hf_tetra_simplex_duplex_selection_06,
12420
15
      { "simplex-duplex-selection", "tetra.simplex_duplex_selection",
12421
15
        FT_UINT32, BASE_DEC, VALS(tetra_T_simplex_duplex_selection_05_vals), 0,
12422
15
        "T_simplex_duplex_selection_05", HFILL }},
12423
15
  };
12424
12425
  /* List of subtrees */
12426
15
  static int *ett[] = {
12427
15
    &ett_tetra,
12428
15
    &ett_tetra_header,
12429
15
    &ett_tetra_length,
12430
15
    &ett_tetra_txreg,
12431
15
    &ett_tetra_text,
12432
15
    &ett_tetra_AACH,
12433
15
    &ett_tetra_BSCH,
12434
15
    &ett_tetra_MLE_Sync,
12435
15
    &ett_tetra_BNCH,
12436
15
    &ett_tetra_T_hyperframe_or_cck,
12437
15
    &ett_tetra_T_optional_params,
12438
15
    &ett_tetra_TS_COMMON_FRAMES,
12439
15
    &ett_tetra_Default_Code_A,
12440
15
    &ett_tetra_Extended_Services_Broadcast,
12441
15
    &ett_tetra_T_section,
12442
15
    &ett_tetra_PRESENT1,
12443
15
    &ett_tetra_MAC_ACCESS,
12444
15
    &ett_tetra_T_data,
12445
15
    &ett_tetra_Address,
12446
15
    &ett_tetra_U_LLC_PDU,
12447
15
    &ett_tetra_U_BL_ACK_FCS,
12448
15
    &ett_tetra_U_MLE_PDU_FCS,
12449
15
    &ett_tetra_U_BL_DATA_FCS,
12450
15
    &ett_tetra_U_BL_ADATA_FCS,
12451
15
    &ett_tetra_U_MLE_PDU,
12452
15
    &ett_tetra_ComplexSDU,
12453
15
    &ett_tetra_T_lengthIndicationOrCapacityRequest,
12454
15
    &ett_tetra_FRAG,
12455
15
    &ett_tetra_MAC_DATA,
12456
15
    &ett_tetra_T_lengthIndicationOrCapacityRequest_01,
12457
15
    &ett_tetra_FRAG6,
12458
15
    &ett_tetra_MAC_FRAG,
12459
15
    &ett_tetra_MAC_FRAG120,
12460
15
    &ett_tetra_MAC_END_UPLINK,
12461
15
    &ett_tetra_MAC_END_UP114,
12462
15
    &ett_tetra_MAC_END_HU,
12463
15
    &ett_tetra_T_lengthInd_ReservationReq,
12464
15
    &ett_tetra_MAC_END_DOWNLINK,
12465
15
    &ett_tetra_T_slot_granting,
12466
15
    &ett_tetra_T_channel_allocation,
12467
15
    &ett_tetra_SlotGranting,
12468
15
    &ett_tetra_ChannelAllocation,
12469
15
    &ett_tetra_T_extend_carrier_flag,
12470
15
    &ett_tetra_T_monitoring_pattern,
12471
15
    &ett_tetra_Extended_carrier_flag,
12472
15
    &ett_tetra_MAC_END_DOWN111,
12473
15
    &ett_tetra_T_slot_granting_01,
12474
15
    &ett_tetra_T_channel_allocation_01,
12475
15
    &ett_tetra_MAC_RESOURCE,
12476
15
    &ett_tetra_OTHER_DATA,
12477
15
    &ett_tetra_T_power_control,
12478
15
    &ett_tetra_T_slot_granting_02,
12479
15
    &ett_tetra_T_channel_allocation_02,
12480
15
    &ett_tetra_AddressMacResource,
12481
15
    &ett_tetra_SSI_NEED,
12482
15
    &ett_tetra_EVENT_NEED,
12483
15
    &ett_tetra_USSI_NEED,
12484
15
    &ett_tetra_SMI_NEED,
12485
15
    &ett_tetra_SSI_EVENT_NEED,
12486
15
    &ett_tetra_SSI_USAGE_NEED,
12487
15
    &ett_tetra_SMI_EVENT_NEED,
12488
15
    &ett_tetra_MAC_ACCESS_DEFINE,
12489
15
    &ett_tetra_T_optional_field,
12490
15
    &ett_tetra_D_LLC_PDU,
12491
15
    &ett_tetra_D_BL_ACK_FCS,
12492
15
    &ett_tetra_D_MLE_PDU_FCS,
12493
15
    &ett_tetra_D_BL_ADATA_FCS,
12494
15
    &ett_tetra_D_BL_DATA_FCS,
12495
15
    &ett_tetra_U_BL_ACK,
12496
15
    &ett_tetra_D_BL_ACK,
12497
15
    &ett_tetra_U_BL_DATA,
12498
15
    &ett_tetra_D_BL_DATA,
12499
15
    &ett_tetra_U_BL_ADATA,
12500
15
    &ett_tetra_D_BL_ADATA,
12501
15
    &ett_tetra_D_MLE_PDU,
12502
15
    &ett_tetra_UMLE_PDU,
12503
15
    &ett_tetra_DMLE_PDU,
12504
15
    &ett_tetra_U_PREPARE,
12505
15
    &ett_tetra_T_optional_elements,
12506
15
    &ett_tetra_T_type2_parameters,
12507
15
    &ett_tetra_T_cell_number,
12508
15
    &ett_tetra_U_RESTORE,
12509
15
    &ett_tetra_T_optional_elements_01,
12510
15
    &ett_tetra_T_type2_parameters_01,
12511
15
    &ett_tetra_T_mcc,
12512
15
    &ett_tetra_T_mnc,
12513
15
    &ett_tetra_T_la,
12514
15
    &ett_tetra_D_NEW_CELL,
12515
15
    &ett_tetra_T_optional_elements_02,
12516
15
    &ett_tetra_D_PREPARE_FAIL,
12517
15
    &ett_tetra_T_optional_elements_03,
12518
15
    &ett_tetra_D_NWRK_BRDADCAST,
12519
15
    &ett_tetra_T_optional_elements_04,
12520
15
    &ett_tetra_T_type2_parameters_02,
12521
15
    &ett_tetra_T_tetra_network_time,
12522
15
    &ett_tetra_T_number_of_neighbour_cells,
12523
15
    &ett_tetra_TETRA_NETWORK_TIME,
12524
15
    &ett_tetra_D_RESTORE_ACK,
12525
15
    &ett_tetra_D_RESTORE_FAIL,
12526
15
    &ett_tetra_U_MM_PDU,
12527
15
    &ett_tetra_D_MM_PDU,
12528
15
    &ett_tetra_GROUP_IDENTITY_DOWNLINK,
12529
15
    &ett_tetra_T_attach_detach_identifier,
12530
15
    &ett_tetra_T_attach,
12531
15
    &ett_tetra_T_detach,
12532
15
    &ett_tetra_T_address_type,
12533
15
    &ett_tetra_T_gssi_extension,
12534
15
    &ett_tetra_GROUP_IDENTITY_UPLINK,
12535
15
    &ett_tetra_T_attach_detach_identifier_01,
12536
15
    &ett_tetra_T_attach_01,
12537
15
    &ett_tetra_T_detach_01,
12538
15
    &ett_tetra_T_address_type_01,
12539
15
    &ett_tetra_T_gssi_extension_01,
12540
15
    &ett_tetra_D_LOCATION_UPDATE_ACCEPT,
12541
15
    &ett_tetra_T_optional_elements_05,
12542
15
    &ett_tetra_T_type2_parameters_03,
12543
15
    &ett_tetra_T_ssi_choice,
12544
15
    &ett_tetra_T_address_extension_choice,
12545
15
    &ett_tetra_T_subscriber_class_choice,
12546
15
    &ett_tetra_T_energy_saving_mode,
12547
15
    &ett_tetra_T_scch_info,
12548
15
    &ett_tetra_T_type3,
12549
15
    &ett_tetra_T_type3_elements,
12550
15
    &ett_tetra_T_new_ra,
12551
15
    &ett_tetra_T_group_identity_location_accept,
12552
15
    &ett_tetra_T_group_predefined_lifetime,
12553
15
    &ett_tetra_T_group_identity_downlink,
12554
15
    &ett_tetra_T_proprietary,
12555
15
    &ett_tetra_D_LOCATION_UPDATE_REJECT,
12556
15
    &ett_tetra_U_MM_STATUS,
12557
15
    &ett_tetra_D_MM_STATUS,
12558
15
    &ett_tetra_U_CMCE_PDU,
12559
15
    &ett_tetra_U_RELEASE,
12560
15
    &ett_tetra_U_SDS_DATA,
12561
15
    &ett_tetra_T_called_party_type_identifier,
12562
15
    &ett_tetra_T_short_data_type_identifier,
12563
15
    &ett_tetra_U_STATUS,
12564
15
    &ett_tetra_T_called_party_type_identifier_01,
12565
15
    &ett_tetra_U_INFO,
12566
15
    &ett_tetra_D_CMCE_PDU,
12567
15
    &ett_tetra_D_SDS_DATA,
12568
15
    &ett_tetra_T_short_data_type_identifier_01,
12569
15
    &ett_tetra_D_STATUS,
12570
15
    &ett_tetra_D_DISCONNECT,
12571
15
    &ett_tetra_T_optional_elements_06,
12572
15
    &ett_tetra_T_type2_element,
12573
15
    &ett_tetra_T_notification_indicator,
12574
15
    &ett_tetra_D_INFO,
12575
15
    &ett_tetra_T_optional_elements_07,
12576
15
    &ett_tetra_T_type2_element_01,
12577
15
    &ett_tetra_T_new_call_identifier,
12578
15
    &ett_tetra_T_call_time_out,
12579
15
    &ett_tetra_T_call_time_out_set_up_phase,
12580
15
    &ett_tetra_T_call_ownership,
12581
15
    &ett_tetra_T_modify,
12582
15
    &ett_tetra_T_call_status,
12583
15
    &ett_tetra_T_temporary_address,
12584
15
    &ett_tetra_T_notification_indicator_01,
12585
15
    &ett_tetra_T_poll_response_percentage,
12586
15
    &ett_tetra_T_poll_response_number,
12587
15
    &ett_tetra_D_TX_WAIT,
12588
15
    &ett_tetra_T_optional_elements_08,
12589
15
    &ett_tetra_T_type2_element_02,
12590
15
    &ett_tetra_T_notification_indicator_02,
12591
15
    &ett_tetra_D_TX_CONTINUE,
12592
15
    &ett_tetra_T_optional_elements_09,
12593
15
    &ett_tetra_T_type2_element_03,
12594
15
    &ett_tetra_T_notification_indicator_03,
12595
15
    &ett_tetra_U_LOCATION_UPDATE_DEMAND,
12596
15
    &ett_tetra_T_cipher_control_choice,
12597
15
    &ett_tetra_T_optional_elements_10,
12598
15
    &ett_tetra_T_type2_parameters_04,
12599
15
    &ett_tetra_T_class_of_MS,
12600
15
    &ett_tetra_T_energy_saving_mode_01,
12601
15
    &ett_tetra_T_la_information,
12602
15
    &ett_tetra_T_ssi_choice_01,
12603
15
    &ett_tetra_T_address_extension_choice_01,
12604
15
    &ett_tetra_T_type3_01,
12605
15
    &ett_tetra_T_type3_elements_01,
12606
15
    &ett_tetra_T_group_identity_location_demand,
12607
15
    &ett_tetra_T_group_report_response_choice,
12608
15
    &ett_tetra_T_group_identity_uplink,
12609
15
    &ett_tetra_T_proprietary_01,
12610
15
    &ett_tetra_U_ATTACH_DETACH_GROUP_IDENTITY,
12611
15
    &ett_tetra_T_optional_elements_11,
12612
15
    &ett_tetra_T_type2_element_04,
12613
15
    &ett_tetra_T_type3_02,
12614
15
    &ett_tetra_T_type3_elements_02,
12615
15
    &ett_tetra_U_ATTACH_DETACH_GROUP_IDENTITY_ACK,
12616
15
    &ett_tetra_T_optional_elements_12,
12617
15
    &ett_tetra_T_type2_element_05,
12618
15
    &ett_tetra_T_type3_03,
12619
15
    &ett_tetra_T_type3_elements_03,
12620
15
    &ett_tetra_U_SETUP,
12621
15
    &ett_tetra_T_optional_elements_13,
12622
15
    &ett_tetra_T_type2_parameters_05,
12623
15
    &ett_tetra_T_external_subscriber_number,
12624
15
    &ett_tetra_T_prop,
12625
15
    &ett_tetra_Basic_service_information,
12626
15
    &ett_tetra_U_ALERT,
12627
15
    &ett_tetra_T_optional_elements_14,
12628
15
    &ett_tetra_T_type2_parameters_06,
12629
15
    &ett_tetra_T_basic_service_information,
12630
15
    &ett_tetra_T_prop_01,
12631
15
    &ett_tetra_U_CONNECT,
12632
15
    &ett_tetra_T_optional_elements_15,
12633
15
    &ett_tetra_T_type2_parameters_07,
12634
15
    &ett_tetra_T_basic_service_information_01,
12635
15
    &ett_tetra_T_prop_02,
12636
15
    &ett_tetra_U_TX_CEASED,
12637
15
    &ett_tetra_T_optional_elements_16,
12638
15
    &ett_tetra_T_type2_parameters_08,
12639
15
    &ett_tetra_T_prop_03,
12640
15
    &ett_tetra_U_TX_DEMAND,
12641
15
    &ett_tetra_T_optional_elements_17,
12642
15
    &ett_tetra_T_type2_parameters_09,
12643
15
    &ett_tetra_T_prop_04,
12644
15
    &ett_tetra_U_DISCONNECT,
12645
15
    &ett_tetra_T_optional_elements_18,
12646
15
    &ett_tetra_T_type2_parameters_10,
12647
15
    &ett_tetra_T_prop_05,
12648
15
    &ett_tetra_U_CALL_RESTORE,
12649
15
    &ett_tetra_T_optional_elements_19,
12650
15
    &ett_tetra_T_type2_parameters_11,
12651
15
    &ett_tetra_T_prop_06,
12652
15
    &ett_tetra_D_SETUP,
12653
15
    &ett_tetra_T_optional_elements_20,
12654
15
    &ett_tetra_T_type2_element_06,
12655
15
    &ett_tetra_T_notification_indicator_04,
12656
15
    &ett_tetra_T_temporary_address_01,
12657
15
    &ett_tetra_T_calling_party_type_identifier,
12658
15
    &ett_tetra_T_external_subscriber_number_01,
12659
15
    &ett_tetra_T_prop_07,
12660
15
    &ett_tetra_D_CALL_PROCEEDING,
12661
15
    &ett_tetra_T_optional_elements_21,
12662
15
    &ett_tetra_T_type2_parameters_12,
12663
15
    &ett_tetra_T_basic_service_information_02,
12664
15
    &ett_tetra_T_call_status_01,
12665
15
    &ett_tetra_T_notification_indicator_05,
12666
15
    &ett_tetra_T_prop_08,
12667
15
    &ett_tetra_D_ALERT,
12668
15
    &ett_tetra_T_optional_elements_22,
12669
15
    &ett_tetra_T_type2_parameters_13,
12670
15
    &ett_tetra_T_basic_service_infomation,
12671
15
    &ett_tetra_T_notification_indicator_06,
12672
15
    &ett_tetra_T_prop_09,
12673
15
    &ett_tetra_D_CONNECT,
12674
15
    &ett_tetra_T_optional_elements_23,
12675
15
    &ett_tetra_T_type2_parameters_14,
12676
15
    &ett_tetra_T_call_priority,
12677
15
    &ett_tetra_T_basic_service_information_03,
12678
15
    &ett_tetra_T_temporary_address_02,
12679
15
    &ett_tetra_T_notification_indicator_07,
12680
15
    &ett_tetra_T_prop_10,
12681
15
    &ett_tetra_D_CONNECT_ACK,
12682
15
    &ett_tetra_T_optional_elements_24,
12683
15
    &ett_tetra_T_type2_parameters_15,
12684
15
    &ett_tetra_T_notification_indicator_08,
12685
15
    &ett_tetra_T_prop_11,
12686
15
    &ett_tetra_D_RELEASE,
12687
15
    &ett_tetra_T_optional_elements_25,
12688
15
    &ett_tetra_T_type2_parameters_16,
12689
15
    &ett_tetra_T_notification_indicator_09,
12690
15
    &ett_tetra_T_prop_12,
12691
15
    &ett_tetra_D_CALL_RESTORE,
12692
15
    &ett_tetra_T_optional_elements_26,
12693
15
    &ett_tetra_T_type2_parameters_17,
12694
15
    &ett_tetra_T_new_call_identifier_01,
12695
15
    &ett_tetra_T_call_time_out_01,
12696
15
    &ett_tetra_T_call_status_02,
12697
15
    &ett_tetra_T_modify_01,
12698
15
    &ett_tetra_T_notification_indicator_10,
12699
15
    &ett_tetra_T_prop_13,
12700
15
    &ett_tetra_D_TX_CEASED,
12701
15
    &ett_tetra_T_optional_elements_27,
12702
15
    &ett_tetra_T_type2_parameters_18,
12703
15
    &ett_tetra_T_notification_indicator_11,
12704
15
    &ett_tetra_T_prop_14,
12705
15
    &ett_tetra_D_TX_GRANTED,
12706
15
    &ett_tetra_T_optional_elements_28,
12707
15
    &ett_tetra_T_type2_element_07,
12708
15
    &ett_tetra_T_notification_indicator_12,
12709
15
    &ett_tetra_T_transmitting_party_type_identifier,
12710
15
    &ett_tetra_D_TX_INTERRUPT,
12711
15
    &ett_tetra_T_optional_elements_29,
12712
15
    &ett_tetra_T_type2_element_08,
12713
15
    &ett_tetra_T_notification_indicator_13,
12714
15
    &ett_tetra_T_transmitting_party_type_identifier_01,
12715
15
    &ett_tetra_D_ATTACH_DETACH_GROUP_IDENTITY,
12716
15
    &ett_tetra_T_optional_elements_30,
12717
15
    &ett_tetra_T_type2_element_09,
12718
15
    &ett_tetra_T_type3_04,
12719
15
    &ett_tetra_T_type3_elements_04,
12720
15
    &ett_tetra_D_ATTACH_DETACH_GROUP_IDENTITY_ACK,
12721
15
    &ett_tetra_T_optional_elements_31,
12722
15
    &ett_tetra_T_type2_element_10,
12723
15
    &ett_tetra_T_type3_05,
12724
15
    &ett_tetra_T_type3_elements_05,
12725
15
    &ett_tetra_Calling_party_address_type,
12726
15
    &ett_tetra_T_called_party_ssi_extension,
12727
15
    &ett_tetra_Proprietary,
12728
15
    &ett_tetra_T_data_01,
12729
15
    &ett_tetra_Type1,
12730
15
    &ett_tetra_Type2,
12731
15
    &ett_tetra_Modify_type,
12732
15
  };
12733
12734
15
  static ei_register_info ei[] = {
12735
15
    { &ei_tetra_channels_incorrect, { "tetra.channels.incorrect", PI_MALFORMED, PI_WARN, "Channel count incorrect, must be <= 3", EXPFILL }},
12736
15
  };
12737
12738
15
  proto_tetra = proto_register_protocol("TETRA Protocol", "TETRA", "tetra");
12739
15
  proto_register_field_array (proto_tetra, hf, array_length (hf));
12740
15
  proto_register_subtree_array (ett, array_length (ett));
12741
15
  tetra_handle = register_dissector("tetra", dissect_tetra, proto_tetra);
12742
15
  expert_tetra = expert_register_protocol(proto_tetra);
12743
15
  expert_register_field_array(expert_tetra, ei, array_length(ei));
12744
12745
  tetra_module = prefs_register_protocol(proto_tetra, NULL);
12746
15
  prefs_register_bool_preference(tetra_module, "include_carrier_number",
12747
15
      "The data include carrier numbers",
12748
15
      "Whether the captured data include carrier number",
12749
15
      &include_carrier_number);
12750
15
}